From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.0 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18325C433E6 for ; Wed, 3 Feb 2021 23:10:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CE43B64F5C for ; Wed, 3 Feb 2021 23:10:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233521AbhBCXKj (ORCPT ); Wed, 3 Feb 2021 18:10:39 -0500 Received: from conssluserg-05.nifty.com ([210.131.2.90]:30687 "EHLO conssluserg-05.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233617AbhBCXH4 (ORCPT ); Wed, 3 Feb 2021 18:07:56 -0500 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (authenticated) by conssluserg-05.nifty.com with ESMTP id 113N6oj1018527; Thu, 4 Feb 2021 08:06:51 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-05.nifty.com 113N6oj1018527 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1612393611; bh=FgY4uKbesfPo7qHYxvm29moK6w/koYH24crEMKp1lJQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=iMaS7BgH2pqXPUknj5QRo7hBpVIxkE2Gy6MlSP9PGjwrLErcqrLM8FqKhq5zaPQNi FgoB5PNhRRac9ikJur56Llimz5fbOGoNnJQT9rsPEjv/XJg2TJKQDITkh0jVkmGIWv HQ5CMRBYwWKYgnHNJZezP3dXoZ0mXq/8WFs3R16pf55IAHoAFMI6zdqwxz3On22LWC 6skhsMll7NHDZZTFjjqBxnZMJTgBdPSo9bPT1to3Mo1sPc7K9LVBCecFsq0zXTq+sw ZHgakmNQyOXDMKjimOhVB6Dvfc+h62QirRW42Hutpz7R0txjV4kuW7GsbNHw6Dl7MZ OGZsh6pLoIJ3g== X-Nifty-SrcIP: [209.85.214.179] Received: by mail-pl1-f179.google.com with SMTP id s15so688893plr.9; Wed, 03 Feb 2021 15:06:51 -0800 (PST) X-Gm-Message-State: AOAM533tugOgjp46hOVSEMiLi+w8+L33MeQbBqWzTbQcbsKT+A8RHL/w I2J2knM0CZxjeq1PLR1FW/JoadM4iUyQ4rN8lFA= X-Google-Smtp-Source: ABdhPJxkCs1E5TXhyp3ag/jGZNEz+FL5Z9XfXVwKsBelmicemkaDeGucKH9QEKxb0dXK5fMPRQNCECZHjrsSyGK2EWk= X-Received: by 2002:a17:902:bb87:b029:e1:d1f:2736 with SMTP id m7-20020a170902bb87b02900e10d1f2736mr4947981pls.1.1612393610105; Wed, 03 Feb 2021 15:06:50 -0800 (PST) MIME-Version: 1.0 References: <20210130004401.2528717-1-ndesaulniers@google.com> <20210130004401.2528717-3-ndesaulniers@google.com> In-Reply-To: <20210130004401.2528717-3-ndesaulniers@google.com> From: Masahiro Yamada Date: Thu, 4 Feb 2021 08:06:12 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v7 2/2] Kbuild: implement support for DWARF v5 To: Nick Desaulniers Cc: Nathan Chancellor , Andrew Morton , Sedat Dilek , Linux Kernel Mailing List , clang-built-linux , Linux Kbuild mailing list , linux-arch , Jakub Jelinek , Fangrui Song , Caroline Tice , Nick Clifton , Yonghong Song , Jiri Olsa , Andrii Nakryiko , Arnaldo Carvalho de Melo , Arvind Sankar Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Jan 30, 2021 at 9:44 AM 'Nick Desaulniers' via Clang Built Linux wrote: > > DWARF v5 is the latest standard of the DWARF debug info format. > > Feature detection of DWARF5 is onerous, especially given that we've > removed $(AS), so we must query $(CC) for DWARF5 assembler directive > support. > > The DWARF version of a binary can be validated with: > $ llvm-dwarfdump vmlinux | head -n 4 | grep version > or > $ readelf --debug-dump=info vmlinux 2>/dev/null | grep Version > > DWARF5 wins significantly in terms of size when mixed with compression > (CONFIG_DEBUG_INFO_COMPRESSED). > > 363M vmlinux.clang12.dwarf5.compressed > 434M vmlinux.clang12.dwarf4.compressed > 439M vmlinux.clang12.dwarf2.compressed > 457M vmlinux.clang12.dwarf5 > 536M vmlinux.clang12.dwarf4 > 548M vmlinux.clang12.dwarf2 > > 515M vmlinux.gcc10.2.dwarf5.compressed > 599M vmlinux.gcc10.2.dwarf4.compressed > 624M vmlinux.gcc10.2.dwarf2.compressed > 630M vmlinux.gcc10.2.dwarf5 > 765M vmlinux.gcc10.2.dwarf4 > 809M vmlinux.gcc10.2.dwarf2 > > Though the quality of debug info is harder to quantify; size is not a > proxy for quality. > > Jakub notes: > All [GCC] 5.1 - 6.x did was start accepting -gdwarf-5 as experimental > option that enabled some small DWARF subset (initially only a few > DW_LANG_* codes newly added to DWARF5 drafts). Only GCC 7 (released > after DWARF 5 has been finalized) started emitting DWARF5 section > headers and got most of the DWARF5 changes in... > > Version check GCC so that we don't need to worry about the difference in > command line args between GNU readelf and llvm-readelf/llvm-dwarfdump to > validate the DWARF Version in the assembler feature detection script. > > GNU `as` only recently gained support for specifying -gdwarf-5, so when > compiling with Clang but without Clang's integrated assembler > (LLVM_IAS=1 is not set), explicitly add -Wa,-gdwarf-5 to DEBUG_CFLAGS. > > Disabled for now if CONFIG_DEBUG_INFO_BTF is set; pahole doesn't yet > recognize the new additions to the DWARF debug info. Thanks to Sedat for > the report. > > Link: http://www.dwarfstd.org/doc/DWARF5.pdf > Reported-by: Sedat Dilek > Suggested-by: Arvind Sankar > Suggested-by: Caroline Tice > Suggested-by: Fangrui Song > Suggested-by: Jakub Jelinek > Suggested-by: Masahiro Yamada > Suggested-by: Nathan Chancellor > Signed-off-by: Nick Desaulniers > --- > Makefile | 1 + > include/asm-generic/vmlinux.lds.h | 7 ++++++- > lib/Kconfig.debug | 18 ++++++++++++++++++ > scripts/test_dwarf5_support.sh | 8 ++++++++ > 4 files changed, 33 insertions(+), 1 deletion(-) > create mode 100755 scripts/test_dwarf5_support.sh Nick, the patch set is getting simpler and simpler, and almost good enough to be merged. Please let me ask two questions below. There has been a lot of discussion, and I might have missed the context. > diff --git a/Makefile b/Makefile > index d2b4980807e0..5387a6f2f62d 100644 > --- a/Makefile > +++ b/Makefile > @@ -831,6 +831,7 @@ KBUILD_AFLAGS += -Wa,-gdwarf-2 > endif > > dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4 > +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5 > DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y) > > ifdef CONFIG_DEBUG_INFO_REDUCED > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index 34b7e0d2346c..1e7cde4bd3f9 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -842,8 +842,13 @@ > /* DWARF 4 */ \ > .debug_types 0 : { *(.debug_types) } \ > /* DWARF 5 */ \ > + .debug_addr 0 : { *(.debug_addr) } \ > + .debug_line_str 0 : { *(.debug_line_str) } \ > + .debug_loclists 0 : { *(.debug_loclists) } \ > .debug_macro 0 : { *(.debug_macro) } \ > - .debug_addr 0 : { *(.debug_addr) } > + .debug_names 0 : { *(.debug_names) } \ > + .debug_rnglists 0 : { *(.debug_rnglists) } \ > + .debug_str_offsets 0 : { *(.debug_str_offsets) } > > /* Stabs debugging sections. */ > #define STABS_DEBUG \ > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index 94c1a7ed6306..ad6f78989d4f 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -268,6 +268,24 @@ config DEBUG_INFO_DWARF4 > It makes the debug information larger, but it significantly > improves the success of resolving variables in gdb on optimized code. > > +config DEBUG_INFO_DWARF5 > + bool "Generate DWARF Version 5 debuginfo" > + depends on GCC_VERSION >= 50000 || CC_IS_CLANG > + depends on CC_IS_GCC || $(success,$(srctree)/scripts/test_dwarf5_support.sh $(CC) $(CLANG_FLAGS)) Q1. This "CC_IS_GCC ||" was introduced by v4. GCC never outputs '.file 0', which is why this test is only needed for Clang, correct? > + depends on !DEBUG_INFO_BTF > + help > + Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc > + 5.0+ accepts the -gdwarf-5 flag but only had partial support for some > + draft features until 7.0), and gdb 8.0+. > + > + Changes to the structure of debug info in Version 5 allow for around > + 15-18% savings in resulting image and debug info section sizes as > + compared to DWARF Version 4. DWARF Version 5 standardizes previous > + extensions such as accelerators for symbol indexing and the format > + for fission (.dwo/.dwp) files. Users may not want to select this > + config if they rely on tooling that has not yet been updated to > + support DWARF Version 5. > + > endchoice # "DWARF version" > > config DEBUG_INFO_BTF > diff --git a/scripts/test_dwarf5_support.sh b/scripts/test_dwarf5_support.sh > new file mode 100755 > index 000000000000..c46e2456b47a > --- /dev/null > +++ b/scripts/test_dwarf5_support.sh > @@ -0,0 +1,8 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > + > +# Test that the assembler doesn't need -Wa,-gdwarf-5 when presented with DWARF > +# v5 input, such as `.file 0` and `md5 0x00`. Should be fixed in GNU binutils > +# 2.35.2. https://sourceware.org/bugzilla/show_bug.cgi?id=25611 I saw the following links in v6. https://sourceware.org/bugzilla/show_bug.cgi?id=25612 https://sourceware.org/bugzilla/show_bug.cgi?id=25614 They were dropped in v7. Why? I just thought they were good to know... > +echo '.file 0 "filename" md5 0x7a0b65214090b6693bd1dc24dd248245' | \ > + $* -gdwarf-5 -Wno-unused-command-line-argument -c -x assembler -o /dev/null - > -- > 2.30.0.365.g02bc693789-goog > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20210130004401.2528717-3-ndesaulniers%40google.com. -- Best Regards Masahiro Yamada