Message ID | Y5H1+kCo+hcQsDHU@redhat.com |
---|---|
State | New |
Headers |
Return-Path: <gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 34C05395BC2B for <patchwork@sourceware.org>; Thu, 8 Dec 2022 14:35:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 34C05395BC2B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1670510110; bh=Ncpgujpav/VZ1bjrU+ce5nl3xXsh+zjmK/BrpIWXE+o=; h=Date:To:Cc:Subject:References:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=rMNGBGtTvRQ1Kp9iZrOHvc7NnmnLeMVO1rzzzZFhQMJYjHpgBZi/yLMu9851GvuI6 wNKBYux6R+VsJ3q0UXUKxgJIx29meuCBfxFyKcd1EkmwvRiPSPdgsKDlfps4zAaqj4 oKNXlPvhAaja2wfRDem+eFADOqoMW2iwWRVf2ePc= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 55A85395B44E for <gcc-patches@gcc.gnu.org>; Thu, 8 Dec 2022 14:34:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 55A85395B44E Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-130-tzNeQuNxOfahhZt0cxGV_A-1; Thu, 08 Dec 2022 09:34:37 -0500 X-MC-Unique: tzNeQuNxOfahhZt0cxGV_A-1 Received: by mail-qv1-f71.google.com with SMTP id a15-20020ad441cf000000b004c79ef7689aso1518222qvq.14 for <gcc-patches@gcc.gnu.org>; Thu, 08 Dec 2022 06:34:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ncpgujpav/VZ1bjrU+ce5nl3xXsh+zjmK/BrpIWXE+o=; b=IRqnYvfBRxhRceoghov99OR7MM1tFeedvb7buJAdRIGWQOIW6mSZLobaeTKtqH7paI 5lJfPOlFP4vjeOJN/71wiAY1+FOF+W0k0J6EpEMPpDI20Wy4NJrjQIZkkSzwZE6Q43PL 4ZU4YgHGKV0egp3OMiQumdraIp8ZTcL7KCVRHenwPQ3QWMH6R6D33EPETRQ0vH8EJP0G q7rA7Uq0ZQm1MmMqy2v6YQtpf8MZl6Dr5GNW2szjgU6O+N9iOWWmWP+PFGE1Cd+oJcN/ venhX78ZqfNC3gX6LuSvkC3BeyWgEtT6O19TdnPlnk2oNr1/BZGuCxW9Rf0Ho78QfraR Lnqg== X-Gm-Message-State: ANoB5pkX2ZYSnv3h4JNuLrOd27T+y+ByHuO3dGPQk7E0R/z4cUAb/KlS C8dEp+fJrMrz15YhPd7k++PUXDMU7YU5zSg8WnaAqOzCFBLVAw7OWsn5U5LmDcY9eKAzjFNcWoJ 28x1ImZtxMwUxnuFB9A== X-Received: by 2002:ac8:6705:0:b0:3a7:b44d:bd56 with SMTP id e5-20020ac86705000000b003a7b44dbd56mr16539010qtp.464.1670510077382; Thu, 08 Dec 2022 06:34:37 -0800 (PST) X-Google-Smtp-Source: AA0mqf6PQbBfqz1nZCS441BQLi0i7YwbHiHKtFAydBujfYOEavbnv6uy+7dsPrdI14XtcduAWe+4gw== X-Received: by 2002:ac8:6705:0:b0:3a7:b44d:bd56 with SMTP id e5-20020ac86705000000b003a7b44dbd56mr16539005qtp.464.1670510077115; Thu, 08 Dec 2022 06:34:37 -0800 (PST) Received: from redhat.com (2603-7000-9500-2e39-0000-0000-0000-1db4.res6.spectrum.com. [2603:7000:9500:2e39::1db4]) by smtp.gmail.com with ESMTPSA id l25-20020ac81499000000b003a50b9f099esm14919080qtj.12.2022.12.08.06.34.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Dec 2022 06:34:36 -0800 (PST) Date: Thu, 8 Dec 2022 09:34:34 -0500 To: Jakub Jelinek <jakub@redhat.com> Cc: Florian Weimer <fweimer@redhat.com>, Marek Polacek via Gcc-patches <gcc-patches@gcc.gnu.org> Subject: [PATCH v2] docs: Suggest options to improve ASAN stack traces Message-ID: <Y5H1+kCo+hcQsDHU@redhat.com> References: <20221207203409.104322-1-polacek@redhat.com> <87fsdqjr15.fsf@oldenburg.str.redhat.com> <Y5HwqtZkeo1xE/f+@redhat.com> <Y5H0fUumuy7FeNZX@tucnak> MIME-Version: 1.0 In-Reply-To: <Y5H0fUumuy7FeNZX@tucnak> User-Agent: Mutt/2.2.7 (2022-08-07) X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> From: Marek Polacek via Gcc-patches <gcc-patches@gcc.gnu.org> Reply-To: Marek Polacek <polacek@redhat.com> Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" <gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org> |
Series |
[v2] docs: Suggest options to improve ASAN stack traces
|
|
Commit Message
Marek Polacek
Dec. 8, 2022, 2:34 p.m. UTC
On Thu, Dec 08, 2022 at 03:28:13PM +0100, Jakub Jelinek wrote: > On Thu, Dec 08, 2022 at 09:11:54AM -0500, Marek Polacek via Gcc-patches wrote: > > On Thu, Dec 08, 2022 at 08:25:26AM +0100, Florian Weimer wrote: > > > * Marek Polacek via Gcc-patches: > > > > > > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > > > > index 726392409b6..2de14466dd3 100644 > > > > --- a/gcc/doc/invoke.texi > > > > +++ b/gcc/doc/invoke.texi > > > > @@ -16510,6 +16510,14 @@ The option cannot be combined with @option{-fsanitize=thread} or > > > > @option{-fsanitize=hwaddress}. Note that the only target > > > > @option{-fsanitize=hwaddress} is currently supported on is AArch64. > > > > > > > > +To get more accurate stack traces, it is possible to use options such as > > > > +@option{-O} (which, for instance, prevents most function inlining), > > > > +@option{-fno-optimize-sibling-calls} (which prevents optimizing sibling > > > > +and tail recursive calls), or @option{-fno-ipa-icf} (which disables Identical > > > > +Code Folding for functions and read-only variables). Since multiple runs > > > > +of the program may yield backtraces with different addresses due to ASLR, > > > > +it may be desirable to turn off ASLR: @samp{setarch `uname -m` -R ./prog}. > > > > > > What about -fasynchronous-unwind-tables? It should help if ASAN ever > > > reports stray segmentation faults. Whether it also helps in general > > > depends on whether ASAN maintains ABI around its instrumentation. > > > > I'm not sure. Someone else will have to decide if we want to mention > > that option as well. > > -fasynchronous-unwind-tables is on by default on many targets, so I wouldn't > mention it: > grep asynchronous_unwind_tables common/*/*/* config/*/* > common/config/aarch64/aarch64-common.cc: { OPT_LEVELS_ALL, OPT_fasynchronous_unwind_tables, NULL, 1 }, > common/config/i386/i386-common.cc: opts->x_flag_asynchronous_unwind_tables = 2; > common/config/loongarch/loongarch-common.cc: { OPT_LEVELS_ALL, OPT_fasynchronous_unwind_tables, NULL, 1 }, > common/config/rs6000/rs6000-common.cc: opts->x_flag_asynchronous_unwind_tables = 1; > common/config/s390/s390-common.cc: opts->x_flag_asynchronous_unwind_tables = 1; > config/i386/i386-options.cc: if (opts->x_flag_asynchronous_unwind_tables == 2) > config/i386/i386-options.cc: opts->x_flag_asynchronous_unwind_tables = !USE_IX86_FRAME_POINTER; > config/mips/mips.cc: && !global_options_set.x_flag_asynchronous_unwind_tables) > config/mips/mips.cc: flag_asynchronous_unwind_tables = 1; > config/rs6000/rs6000.cc: && !OPTION_SET_P (flag_asynchronous_unwind_tables)) > config/rs6000/rs6000.cc: flag_asynchronous_unwind_tables = 1; > > On the other side, the @samp{setarch `uname -m` -R ./prog} suggestion is > very Linux specific, so if we mention it at all, it should mention that > "e.g. on Linux through ..." or something similar. > I also wouldn't mention the "and read-only variables" part, that is > irrelevant for stack traces. Thanks, updated patch here. I've also expanded the ASLR acronym. Ok? -- >8 -- I got a complaint that while Clang docs suggest options that improve the quality of the backtraces ASAN prints (cf. <https://clang.llvm.org/docs/AddressSanitizer.html#usage>), our docs don't say anything to that effect. This patch amends that with a new paragraph. (It deliberately doesn't mention -fno-omit-frame-pointer.) gcc/ChangeLog: * doc/invoke.texi (-fsanitize=address): Suggest options to improve stack traces. --- gcc/doc/invoke.texi | 9 +++++++++ 1 file changed, 9 insertions(+) base-commit: d9f9d5d30feb33c359955d7030cc6be50ef6dc0a
Comments
On Thu, Dec 08, 2022 at 09:34:34AM -0500, Marek Polacek wrote: > I got a complaint that while Clang docs suggest options that improve > the quality of the backtraces ASAN prints (cf. > <https://clang.llvm.org/docs/AddressSanitizer.html#usage>), our docs > don't say anything to that effect. This patch amends that with a new > paragraph. (It deliberately doesn't mention -fno-omit-frame-pointer.) > > gcc/ChangeLog: > > * doc/invoke.texi (-fsanitize=address): Suggest options to improve > stack traces. > --- > gcc/doc/invoke.texi | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 726392409b6..1641efecf18 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -16510,6 +16510,15 @@ The option cannot be combined with @option{-fsanitize=thread} or > @option{-fsanitize=hwaddress}. Note that the only target > @option{-fsanitize=hwaddress} is currently supported on is AArch64. > > +To get more accurate stack traces, it is possible to use options such as > +@option{-O} (which, for instance, prevents most function inlining), Still not sure about this part. For one, I wonder if we shouldn't recommend -O0, -O1 or -Og instead of just one of them, and I'm also not sure how much function inlining is prevented with -O1. always_inline functions are certainly inlined even at -O0 or -Og (at least when called directly), -O1 adds { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_finline_functions_called_once, NULL, 1 }, to that, -O2 adds { OPT_LEVELS_2_PLUS, OPT_findirect_inlining, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_finline_small_functions, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_fpartial_inlining, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_finline_functions, NULL, 1 }, and -O3 further bumps some parameters: { OPT_LEVELS_3_PLUS, OPT__param_max_inline_insns_auto_, NULL, 30 }, { OPT_LEVELS_3_PLUS, OPT__param_early_inlining_insns_, NULL, 14 }, { OPT_LEVELS_3_PLUS, OPT__param_inline_heuristics_hint_percent_, NULL, 600 }, { OPT_LEVELS_3_PLUS, OPT__param_inline_min_speedup_, NULL, 15 }, { OPT_LEVELS_3_PLUS, OPT__param_max_inline_insns_single_, NULL, 200 }, > +@option{-fno-optimize-sibling-calls} (which prevents optimizing sibling -fno-optimize-sibling-calls is the default for -O0/-O1/-Og; dunno if we want to reiterate it. > +and tail recursive calls), or @option{-fno-ipa-icf} (which disables Identical > +Code Folding for functions). Since multiple runs of the program may yield > +backtraces with different addresses due to ASLR (Address Space Layout > +Randomization), it may be desirable to turn ASLR off. On Linux, this can be > +achieved with @samp{setarch `uname -m` -R ./prog}. > + > @item -fsanitize=kernel-address > @opindex fsanitize=kernel-address > Enable AddressSanitizer for Linux kernel. Jakub
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 726392409b6..1641efecf18 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16510,6 +16510,15 @@ The option cannot be combined with @option{-fsanitize=thread} or @option{-fsanitize=hwaddress}. Note that the only target @option{-fsanitize=hwaddress} is currently supported on is AArch64. +To get more accurate stack traces, it is possible to use options such as +@option{-O} (which, for instance, prevents most function inlining), +@option{-fno-optimize-sibling-calls} (which prevents optimizing sibling +and tail recursive calls), or @option{-fno-ipa-icf} (which disables Identical +Code Folding for functions). Since multiple runs of the program may yield +backtraces with different addresses due to ASLR (Address Space Layout +Randomization), it may be desirable to turn ASLR off. On Linux, this can be +achieved with @samp{setarch `uname -m` -R ./prog}. + @item -fsanitize=kernel-address @opindex fsanitize=kernel-address Enable AddressSanitizer for Linux kernel.