From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by sourceware.org (Postfix) with ESMTPS id 246CD3858D33 for ; Wed, 3 May 2023 06:04:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 246CD3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-4f00d41df22so1835412e87.1 for ; Tue, 02 May 2023 23:04:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683093886; x=1685685886; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=6uoR0iIi5SEq1+Uvc8iLOMf2NWCDJUEn1LGmpBGneDA=; b=bTuaY5U6ht8ClU5n4UNtZU/mrI56eQApmAqUtW8Dc64vLf7lsfwji6I9Px9LDvAgGY eXMrkDQzgqDOE/ukbHZffy1+RBUtv7LuT3go50MtmpT9K/Oa858NDkinU85SE0NB3DWo q62TzVgStHUKd2QCowH0uT2clMckSzhAXYo4FMKtZbcqn2MgBGdl8RXB2H34y3TpQIlv U8brB8ZuSEOp0EO5zFxXVqgxlf/qhbpjq2qUsIzeDdeBdBmGgRoMOApGTzqdtSNW/VN4 QQzAkEXdEnMux0uEIqkjkDv3NKJYFzd7X8AxQVySWpw/GhYTv+q6GrNwGefp89gzBIJP /WhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683093886; x=1685685886; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6uoR0iIi5SEq1+Uvc8iLOMf2NWCDJUEn1LGmpBGneDA=; b=Hw+PX9HJbsWVFEo+vZZsq3lgBsyrd5T/wO0+D6oRzBdeh4lQX3Yz9BdoJx6+Xbp2yF ouchOrSC4z8nCSR3AjWoMWwPh7zU+td4oZn0KtmCeyFyFgDMv2EcuW/uTW4F0UBTVBOr Rn+gn0HERwFeLdvu9IV4GrHAFPISIL09tVkfUCMDxeeEQ1I9vxGesrimdI5RAhhhdRmr VgoGhOPivsGohKfH2GGNWNDgQgR3aE5zuGzcnvmBZ2A3YSgQoRE1AXLHiiXmSD1fzlzt lRmRLuo/60mBmiqHO1WYaN4EeBUYMGZNWNMMGKNEBBldhsBsX9dXwuXqHSJ4GDJgE0ef 4ijQ== X-Gm-Message-State: AC+VfDynKXB65ueXQQ6KqpOiVGW0x3SNOsGLbY5PRoTieKiu4VS7AXis 4qRUn5G21Z3YlJlic7sRbpJ84+KoEaHu7DY4Erk= X-Google-Smtp-Source: ACHHUZ7A4ux1dYzDN2ixHBS6i9DbLMXoXA/T+m6rXweLJUewKmceamvIUHAmot7qxSI3q6yvg1lmvbggRDSDWE3FmTI= X-Received: by 2002:a05:6512:3189:b0:4d8:86c1:4782 with SMTP id i9-20020a056512318900b004d886c14782mr233741lfe.23.1683093886360; Tue, 02 May 2023 23:04:46 -0700 (PDT) MIME-Version: 1.0 References: <20230502144504.14654-1-amonakov@ispras.ru> In-Reply-To: <20230502144504.14654-1-amonakov@ispras.ru> From: Richard Biener Date: Wed, 3 May 2023 08:04:33 +0200 Message-ID: Subject: Re: [PATCH] do not tailcall __sanitizer_cov_trace_pc [PR90746] To: Alexander Monakov Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Tue, May 2, 2023 at 4:45=E2=80=AFPM Alexander Monakov via Gcc-patches wrote: > > When instrumentation is requested via -fsanitize-coverage=3Dtrace-pc, GCC > emits calls to __sanitizer_cov_trace_pc callback into each basic block. > This callback is supposed to be implemented by the user, and should be > able to identify the containing basic block by inspecting its return > address. Tailcalling the callback prevents that, so disallow it. LGTM > gcc/ChangeLog: > > PR sanitizer/90746 > * calls.cc (can_implement_as_sibling_call_p): Reject calls > to __sanitizer_cov_trace_pc. > > gcc/testsuite/ChangeLog: > > PR sanitizer/90746 > * gcc.dg/sancov/basic0.c: Verify absence of tailcall. > --- > gcc/calls.cc | 10 ++++++++++ > gcc/testsuite/gcc.dg/sancov/basic0.c | 4 +++- > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/gcc/calls.cc b/gcc/calls.cc > index 4d7f6c3d2..c6ed2f189 100644 > --- a/gcc/calls.cc > +++ b/gcc/calls.cc > @@ -2541,6 +2541,16 @@ can_implement_as_sibling_call_p (tree exp, > return false; > } > > + /* __sanitizer_cov_trace_pc is supposed to inspect its return address > + to identify the caller, and therefore should not be tailcalled. */ > + if (fndecl && DECL_BUILT_IN_CLASS (fndecl) =3D=3D BUILT_IN_NORMAL > + && DECL_FUNCTION_CODE (fndecl) =3D=3D BUILT_IN_SANITIZER_COV_TRACE= _PC) > + { > + /* No need for maybe_complain_about_tail_call here: the call > + is synthesized by the compiler. */ > + return false; > + } > + > /* If the called function is nested in the current one, it might acces= s > some of the caller's arguments, but could clobber them beforehand i= f > the argument areas are shared. */ > diff --git a/gcc/testsuite/gcc.dg/sancov/basic0.c b/gcc/testsuite/gcc.dg/= sancov/basic0.c > index af69b2d12..dfdaea848 100644 > --- a/gcc/testsuite/gcc.dg/sancov/basic0.c > +++ b/gcc/testsuite/gcc.dg/sancov/basic0.c > @@ -1,9 +1,11 @@ > /* Basic test on number of inserted callbacks. */ > /* { dg-do compile } */ > -/* { dg-options "-fsanitize-coverage=3Dtrace-pc -fdump-tree-optimized" }= */ > +/* { dg-options "-fsanitize-coverage=3Dtrace-pc -fdump-tree-optimized -f= dump-rtl-expand" } */ > > void foo(void) > { > } > > /* { dg-final { scan-tree-dump-times "__builtin___sanitizer_cov_trace_pc= \\(\\)" 1 "optimized" } } */ > +/* The built-in should not be tail-called: */ > +/* { dg-final { scan-rtl-dump-not "call_insn/j" "expand" } } */ > -- > 2.39.2 >