Message ID | 20201204011129.2493105-1-ndesaulniers@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3,1/2] Kbuild: make DWARF version a choice | expand |
sigh...I ran a broken script to send the series which doesn't cc folks properly. + lkml, linux-kbuild (Might just resend, properly) On Thu, Dec 3, 2020 at 5:11 PM Nick Desaulniers <ndesaulniers@google.com> wrote: > > DWARF v5 is the latest standard of the DWARF debug info format. > > DWARF5 wins significantly in terms of size when mixed with compression > (CONFIG_DEBUG_INFO_COMPRESSED). > > Link: http://www.dwarfstd.org/doc/DWARF5.pdf > > Patch 1 is a cleanup that lays the ground work and isn't DWARF > v5 specific. > Patch 2 implements Kconfig and Kbuild support for DWARFv5. > > Changes from v2: > * Drop two of the earlier patches that have been accepted already. > * Add measurements with GCC 10.2 to commit message. > * Update help text as per Arvind with help from Caroline. > * Improve case/wording between DWARF Versions as per Masahiro. > > Changes from the RFC: > * split patch in 3 patch series, include Fangrui's patch, too. > * prefer `DWARF vX` format, as per Fangrui. > * use spaces between assignment in Makefile as per Masahiro. > * simplify setting dwarf-version-y as per Masahiro. > * indent `prompt` in Kconfig change as per Masahiro. > * remove explicit default in Kconfig as per Masahiro. > * add comments to test_dwarf5_support.sh. > * change echo in test_dwarf5_support.sh as per Masahiro. > * remove -u from test_dwarf5_support.sh as per Masahiro. > * add a -gdwarf-5 cc-option check to Kconfig as per Jakub. > > Nick Desaulniers (2): > Kbuild: make DWARF version a choice > Kbuild: implement support for DWARF v5 > > Makefile | 15 +++++++------ > include/asm-generic/vmlinux.lds.h | 6 +++++- > lib/Kconfig.debug | 35 ++++++++++++++++++++++++++----- > scripts/test_dwarf5_support.sh | 9 ++++++++ > 4 files changed, 53 insertions(+), 12 deletions(-) > create mode 100755 scripts/test_dwarf5_support.sh > > -- > 2.29.2.576.ga3fc446d84-goog >
(minus Chengbin due to bounces) On Thu, Dec 3, 2020 at 5:11 PM Nick Desaulniers <ndesaulniers@google.com> wrote: > > Modifies CONFIG_DEBUG_INFO_DWARF4 to be a member of a choice. Adds an > explicit CONFIG_DEBUG_INFO_DWARF2, which is the default. Does so in a > way that's forward compatible with existing configs, and makes adding > future versions more straightforward. > > Suggested-by: Fangrui Song <maskray@google.com> > Suggested-by: Masahiro Yamada <masahiroy@kernel.org> > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> > --- > Makefile | 14 ++++++++------ > lib/Kconfig.debug | 21 ++++++++++++++++----- > 2 files changed, 24 insertions(+), 11 deletions(-) > > diff --git a/Makefile b/Makefile > index a2ded5029084..2430e1ee7c44 100644 > --- a/Makefile > +++ b/Makefile > @@ -826,12 +826,14 @@ else > DEBUG_CFLAGS += -g > endif > > -ifneq ($(LLVM_IAS),1) > -KBUILD_AFLAGS += -Wa,-gdwarf-2 > -endif > - > -ifdef CONFIG_DEBUG_INFO_DWARF4 > -DEBUG_CFLAGS += -gdwarf-4 > +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF2) := 2 > +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4 > +DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y) > +ifneq ($(dwarf-version-y)$(LLVM_IAS),21) > +# Binutils 2.35+ required for -gdwarf-4+ support. > +dwarf-aflag := $(call as-option,-Wa$(comma)-gdwarf-$(dwarf-version-y)) > +DEBUG_CFLAGS += $(dwarf-aflag) > +KBUILD_AFLAGS += $(dwarf-aflag) > endif > > ifdef CONFIG_DEBUG_INFO_REDUCED > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index 0c7380e36370..04719294a7a3 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -256,14 +256,25 @@ config DEBUG_INFO_SPLIT > to know about the .dwo files and include them. > Incompatible with older versions of ccache. > > +choice > + prompt "DWARF version" > + help > + Which version of DWARF debug info to emit. > + > +config DEBUG_INFO_DWARF2 > + bool "Generate DWARF Version 2 debuginfo" > + help > + Generate DWARF v2 debug info. > + > config DEBUG_INFO_DWARF4 > - bool "Generate dwarf4 debuginfo" > + bool "Generate DWARF Version 4 debuginfo" > depends on $(cc-option,-gdwarf-4) > help > - Generate dwarf4 debug info. This requires recent versions > - of gcc and gdb. It makes the debug information larger. > - But it significantly improves the success of resolving > - variables in gdb on optimized code. > + Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+. > + It makes the debug information larger, but it significantly > + improves the success of resolving variables in gdb on optimized code. ^ I kept the previous help text, but while this may have been the case when DWARF v4 support was first introduced in GCC, by my (lone) measure of x86_64 defconfig with gcc 10.2, this doesn't or no longer seems to be the case. See patch 2 for measurements: https://lore.kernel.org/lkml/20201204011129.2493105-2-ndesaulniers@google.com/. (also, missed the cover letter, here it is: https://lore.kernel.org/lkml/CAKwvOdkZEiHK01OD420USb0j=F0LcrnRbauv9Yw26tu-GRbYkg@mail.gmail.com/) > + > +endchoice # "DWARF version" > > config DEBUG_INFO_BTF > bool "Generate BTF typeinfo" > -- > 2.29.2.576.ga3fc446d84-goog >
On Sun, Dec 27, 2020 at 7:47 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Fri, Dec 4, 2020 at 2:13 AM 'Nick Desaulniers' via Clang Built > Linux <clang-built-linux@googlegroups.com> wrote: > > > > sigh...I ran a broken script to send the series which doesn't cc folks properly. > > + lkml, linux-kbuild > > (Might just resend, properly) > > > > On Thu, Dec 3, 2020 at 5:11 PM Nick Desaulniers <ndesaulniers@google.com> wrote: > > > > > > DWARF v5 is the latest standard of the DWARF debug info format. > > > > > > DWARF5 wins significantly in terms of size when mixed with compression > > > (CONFIG_DEBUG_INFO_COMPRESSED). > > > > > > Link: http://www.dwarfstd.org/doc/DWARF5.pdf > > > > > > Patch 1 is a cleanup that lays the ground work and isn't DWARF > > > v5 specific. > > > Patch 2 implements Kconfig and Kbuild support for DWARFv5. > > > > > > Changes from v2: > > > * Drop two of the earlier patches that have been accepted already. > > > * Add measurements with GCC 10.2 to commit message. > > > * Update help text as per Arvind with help from Caroline. > > > * Improve case/wording between DWARF Versions as per Masahiro. > > > > > > Changes from the RFC: > > > * split patch in 3 patch series, include Fangrui's patch, too. > > > * prefer `DWARF vX` format, as per Fangrui. > > > * use spaces between assignment in Makefile as per Masahiro. > > > * simplify setting dwarf-version-y as per Masahiro. > > > * indent `prompt` in Kconfig change as per Masahiro. > > > * remove explicit default in Kconfig as per Masahiro. > > > * add comments to test_dwarf5_support.sh. > > > * change echo in test_dwarf5_support.sh as per Masahiro. > > > * remove -u from test_dwarf5_support.sh as per Masahiro. > > > * add a -gdwarf-5 cc-option check to Kconfig as per Jakub. > > > > > I have tested v3 on top of Linux v5.10.3 on Debian/testing AMD64. > > Numbers talk - bullshit walks. [ Linus Torvalds ] > > [ 5.10.3-1-amd64-gcc10-bfd ] > > GNU-toolchain: GCC v10.2.1 and GNU/ld BFD v2.35.1 > > 503096 vmlinux > 6864 vmlinux.compressed > 580104 vmlinux.o > > 701856 linux-image-5.10.3-1-amd64-gcc10-bfd-dbg_5.10.3-1~bullseye+dileks1_amd64.deb > > [ 5.10.3-1-amd64-clang-ias ] > > LLVM-toolchain: Clang and LLD v11.0.1-rc2 > > 358424 vmlinux > 7032 vmlinux.compressed > 353788 vmlinux.o > > 508336 linux-image-5.10.3-1-amd64-clang-ias-dbg_5.10.3-1~bullseye+dileks1_amd64.deb > > [ 5.10.3-1-amd64-gcc10-bfd ] > > $ llvm-dwarfdump-11 vmlinux.o | head -15 > error: vmlinux.o: file format elf64-x86-64 > > .debug_info contents: > decoding address ranges: invalid range list offset 0x265 > 0x00000000: Compile Unit: length = 0x0000001f, format = DWARF32, > version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0000, > addr_size = 0x08 (next unit at 0x00 > 000023) > > 0x0000000c: DW_TAG_compile_unit > DW_AT_stmt_list (0x00000000) > DW_AT_ranges (0x0000000c > [0x0000000000000000, 0x000000000000021c) > [0x0000000000000000, 0x000000000000019e) > [0x0000000000000000, 0x0000000000002000)) > DW_AT_name ("head_64.S") > DW_AT_comp_dir ("/home/dileks/src/linux-kernel/git") > DW_AT_producer ("GNU AS 2.35.1") > DW_AT_language (DW_LANG_Mips_Assembler) > > [ 5.10.3-1-amd64-clang-ias ] > > $ llvm-dwarfdump-11 vmlinux.o | head -15 > vmlinux.o: file format elf64-x86-64 > > .debug_info contents: > 0x00000000: Compile Unit: length = 0x00000377, format = DWARF32, > version = 0x0005, unit_type = DW_UT_compile, abbr_offset = 0x0000, > addr_size = 0x08 (next unit at 0x00 > 00037b) > > 0x0000000c: DW_TAG_compile_unit > DW_AT_stmt_list (0x00000000) > DW_AT_ranges (0x0000000c > [0x0000000000000000, 0x0000000000002000) > [0x0000000000000000, 0x000000000000021c) > [0x0000000000000000, 0x000000000000019e)) > DW_AT_name ("arch/x86/kernel/head_64.S") > DW_AT_comp_dir ("/home/dileks/src/linux-kernel/git") > DW_AT_producer ("Debian clang version 11.0.1-+rc2-1") > DW_AT_language (DW_LANG_Mips_Assembler) > Some more numbers with Linux v5.11-rc1 and identical GNU and LLVM toolchains. [ 5.11.0-rc1-1-amd64-gcc10-bfd ] 492 vmlinux 7 vmlinux.compressed 567 vmlinux.o 685 linux-image-5.11.0-rc1-1-amd64-gcc10-bfd-dbg_5.11.0~rc1-1~bullseye+dileks1_amd64.deb [ 5.11.0-rc1-2-amd64-clang-ias ] 350 vmlinux 7 vmlinux.compressed 345 vmlinux.o 495 linux-image-5.11.0-rc1-2-amd64-clang-ias-dbg_5.11.0~rc1-2~bullseye+dileks1_amd64.deb - Sedat - > Attached are my kernel config files. > > Feel free to add my: > > Tested-by: Sedat Dilek <sedat.dilek@gmail.com> > > - sed@ - > > > > Nick Desaulniers (2): > > > Kbuild: make DWARF version a choice > > > Kbuild: implement support for DWARF v5 > > > > > > Makefile | 15 +++++++------ > > > include/asm-generic/vmlinux.lds.h | 6 +++++- > > > lib/Kconfig.debug | 35 ++++++++++++++++++++++++++----- > > > scripts/test_dwarf5_support.sh | 9 ++++++++ > > > 4 files changed, 53 insertions(+), 12 deletions(-) > > > create mode 100755 scripts/test_dwarf5_support.sh > > > > > > -- > > > 2.29.2.576.ga3fc446d84-goog > > > > > > > > > -- > > Thanks, > > ~Nick Desaulniers > > > > -- > > 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/CAKwvOdkZEiHK01OD420USb0j%3DF0LcrnRbauv9Yw26tu-GRbYkg%40mail.gmail.com.
On Mon, Dec 28, 2020 at 4:15 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > On Sun, Dec 27, 2020 at 7:47 PM Sedat Dilek <sedat.dilek@gmail.com> wrote: > > > > On Fri, Dec 4, 2020 at 2:13 AM 'Nick Desaulniers' via Clang Built > > Linux <clang-built-linux@googlegroups.com> wrote: > > > > > > sigh...I ran a broken script to send the series which doesn't cc folks properly. > > > + lkml, linux-kbuild > > > (Might just resend, properly) > > > > > > On Thu, Dec 3, 2020 at 5:11 PM Nick Desaulniers <ndesaulniers@google.com> wrote: > > > > > > > > DWARF v5 is the latest standard of the DWARF debug info format. > > > > > > > > DWARF5 wins significantly in terms of size when mixed with compression > > > > (CONFIG_DEBUG_INFO_COMPRESSED). > > > > > > > > Link: http://www.dwarfstd.org/doc/DWARF5.pdf > > > > > > > > Patch 1 is a cleanup that lays the ground work and isn't DWARF > > > > v5 specific. > > > > Patch 2 implements Kconfig and Kbuild support for DWARFv5. > > > > > > > > Changes from v2: > > > > * Drop two of the earlier patches that have been accepted already. > > > > * Add measurements with GCC 10.2 to commit message. > > > > * Update help text as per Arvind with help from Caroline. > > > > * Improve case/wording between DWARF Versions as per Masahiro. > > > > > > > > Changes from the RFC: > > > > * split patch in 3 patch series, include Fangrui's patch, too. > > > > * prefer `DWARF vX` format, as per Fangrui. > > > > * use spaces between assignment in Makefile as per Masahiro. > > > > * simplify setting dwarf-version-y as per Masahiro. > > > > * indent `prompt` in Kconfig change as per Masahiro. > > > > * remove explicit default in Kconfig as per Masahiro. > > > > * add comments to test_dwarf5_support.sh. > > > > * change echo in test_dwarf5_support.sh as per Masahiro. > > > > * remove -u from test_dwarf5_support.sh as per Masahiro. > > > > * add a -gdwarf-5 cc-option check to Kconfig as per Jakub. > > > > > > [ ... ] Some more numbers with Linux v5.10.4. GCC v10.2.1 GNU/ld BFDd v2.35.1 LLD v11.0.1-rc2 LLVM toolchain v11.0.1-rc2 So using GCC with LLD together with DWARF v5 reduces the binary sizes. Looks like Gmail makes the tabella look ugly... | gcc10-bfd | gcc10-lld | gcc10-llvm | clang-ias ---------------------------------------------------------- vmlinux.o | 580212 | 504508 | 504508 | 353864 ---------------------------------------------------------- vmlinux | 503172 | 509944 | 509944 | 358500 ---------------------------------------------------------- dbg deb | 701576 | 606348 | 607656 | 506816 ...so I add the lines below. 580212 5.10.4-1-amd64-gcc10-bfd/vmlinux.o 504508 5.10.4-2-amd64-gcc10-lld/vmlinux.o 504508 5.10.4-3-amd64-gcc10-llvm/vmlinux.o 353864 5.10.4-4-amd64-clang-ias/vmlinux.o 503172 5.10.4-1-amd64-gcc10-bfd/vmlinux 509944 5.10.4-2-amd64-gcc10-lld/vmlinux 509944 5.10.4-3-amd64-gcc10-llvm/vmlinux 358500 5.10.4-4-amd64-clang-ias/vmlinux 701576 5.10.4-1-amd64-gcc10-bfd/linux-image-5.10.4-1-amd64-gcc10-bfd-dbg_5.10.4-1~bullseye+dileks1_amd64.deb 606348 5.10.4-2-amd64-gcc10-lld/linux-image-5.10.4-2-amd64-gcc10-lld-dbg_5.10.4-2~bullseye+dileks1_amd64.deb 607656 5.10.4-3-amd64-gcc10-llvm/linux-image-5.10.4-3-amd64-gcc10-llvm-dbg_5.10.4-3~bullseye+dileks1_amd64.deb 506816 5.10.4-4-amd64-clang-ias/linux-image-5.10.4-4-amd64-clang-ias-dbg_5.10.4-4~bullseye+dileks1_amd64.deb - Sedat - > > > > > > Nick Desaulniers (2): > > > > Kbuild: make DWARF version a choice > > > > Kbuild: implement support for DWARF v5 > > > > > > > > Makefile | 15 +++++++------ > > > > include/asm-generic/vmlinux.lds.h | 6 +++++- > > > > lib/Kconfig.debug | 35 ++++++++++++++++++++++++++----- > > > > scripts/test_dwarf5_support.sh | 9 ++++++++ > > > > 4 files changed, 53 insertions(+), 12 deletions(-) > > > > create mode 100755 scripts/test_dwarf5_support.sh > > > > > > > > -- > > > > 2.29.2.576.ga3fc446d84-goog > > > > > > > > > > > > > -- > > > Thanks, > > > ~Nick Desaulniers > > > > > > -- > > > 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/CAKwvOdkZEiHK01OD420USb0j%3DF0LcrnRbauv9Yw26tu-GRbYkg%40mail.gmail.com.
On Thu, Dec 03, 2020 at 05:11:26PM -0800, 'Nick Desaulniers' via Clang Built Linux wrote: > Modifies CONFIG_DEBUG_INFO_DWARF4 to be a member of a choice. Adds an > explicit CONFIG_DEBUG_INFO_DWARF2, which is the default. Does so in a > way that's forward compatible with existing configs, and makes adding > future versions more straightforward. > > Suggested-by: Fangrui Song <maskray@google.com> > Suggested-by: Masahiro Yamada <masahiroy@kernel.org> > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> Reviewed-by: Nathan Chancellor <natechancellor@gmail.com> > --- > Makefile | 14 ++++++++------ > lib/Kconfig.debug | 21 ++++++++++++++++----- > 2 files changed, 24 insertions(+), 11 deletions(-) > > diff --git a/Makefile b/Makefile > index a2ded5029084..2430e1ee7c44 100644 > --- a/Makefile > +++ b/Makefile > @@ -826,12 +826,14 @@ else > DEBUG_CFLAGS += -g > endif > > -ifneq ($(LLVM_IAS),1) > -KBUILD_AFLAGS += -Wa,-gdwarf-2 > -endif > - > -ifdef CONFIG_DEBUG_INFO_DWARF4 > -DEBUG_CFLAGS += -gdwarf-4 > +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF2) := 2 > +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4 > +DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y) > +ifneq ($(dwarf-version-y)$(LLVM_IAS),21) > +# Binutils 2.35+ required for -gdwarf-4+ support. > +dwarf-aflag := $(call as-option,-Wa$(comma)-gdwarf-$(dwarf-version-y)) > +DEBUG_CFLAGS += $(dwarf-aflag) > +KBUILD_AFLAGS += $(dwarf-aflag) > endif > > ifdef CONFIG_DEBUG_INFO_REDUCED > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index 0c7380e36370..04719294a7a3 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -256,14 +256,25 @@ config DEBUG_INFO_SPLIT > to know about the .dwo files and include them. > Incompatible with older versions of ccache. > > +choice > + prompt "DWARF version" > + help > + Which version of DWARF debug info to emit. > + > +config DEBUG_INFO_DWARF2 > + bool "Generate DWARF Version 2 debuginfo" > + help > + Generate DWARF v2 debug info. > + > config DEBUG_INFO_DWARF4 > - bool "Generate dwarf4 debuginfo" > + bool "Generate DWARF Version 4 debuginfo" > depends on $(cc-option,-gdwarf-4) > help > - Generate dwarf4 debug info. This requires recent versions > - of gcc and gdb. It makes the debug information larger. > - But it significantly improves the success of resolving > - variables in gdb on optimized code. > + Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+. > + It makes the debug information larger, but it significantly > + improves the success of resolving variables in gdb on optimized code. > + > +endchoice # "DWARF version" > > config DEBUG_INFO_BTF > bool "Generate BTF typeinfo" > -- > 2.29.2.576.ga3fc446d84-goog >
diff --git a/Makefile b/Makefile index a2ded5029084..2430e1ee7c44 100644 --- a/Makefile +++ b/Makefile @@ -826,12 +826,14 @@ else DEBUG_CFLAGS += -g endif -ifneq ($(LLVM_IAS),1) -KBUILD_AFLAGS += -Wa,-gdwarf-2 -endif - -ifdef CONFIG_DEBUG_INFO_DWARF4 -DEBUG_CFLAGS += -gdwarf-4 +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF2) := 2 +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4 +DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y) +ifneq ($(dwarf-version-y)$(LLVM_IAS),21) +# Binutils 2.35+ required for -gdwarf-4+ support. +dwarf-aflag := $(call as-option,-Wa$(comma)-gdwarf-$(dwarf-version-y)) +DEBUG_CFLAGS += $(dwarf-aflag) +KBUILD_AFLAGS += $(dwarf-aflag) endif ifdef CONFIG_DEBUG_INFO_REDUCED diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 0c7380e36370..04719294a7a3 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -256,14 +256,25 @@ config DEBUG_INFO_SPLIT to know about the .dwo files and include them. Incompatible with older versions of ccache. +choice + prompt "DWARF version" + help + Which version of DWARF debug info to emit. + +config DEBUG_INFO_DWARF2 + bool "Generate DWARF Version 2 debuginfo" + help + Generate DWARF v2 debug info. + config DEBUG_INFO_DWARF4 - bool "Generate dwarf4 debuginfo" + bool "Generate DWARF Version 4 debuginfo" depends on $(cc-option,-gdwarf-4) help - Generate dwarf4 debug info. This requires recent versions - of gcc and gdb. It makes the debug information larger. - But it significantly improves the success of resolving - variables in gdb on optimized code. + Generate DWARF v4 debug info. This requires gcc 4.5+ and gdb 7.0+. + It makes the debug information larger, but it significantly + improves the success of resolving variables in gdb on optimized code. + +endchoice # "DWARF version" config DEBUG_INFO_BTF bool "Generate BTF typeinfo"
Modifies CONFIG_DEBUG_INFO_DWARF4 to be a member of a choice. Adds an explicit CONFIG_DEBUG_INFO_DWARF2, which is the default. Does so in a way that's forward compatible with existing configs, and makes adding future versions more straightforward. Suggested-by: Fangrui Song <maskray@google.com> Suggested-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> --- Makefile | 14 ++++++++------ lib/Kconfig.debug | 21 ++++++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-)