• Nick Desaulniers's avatar
    Kconfig: allow explicit opt in to DWARF v5 · 98cd6f52
    Nick Desaulniers authored
    DWARF v5 is the latest standard of the DWARF debug info format. GCC 11
    will change the implicit default DWARF version, if left unspecified, to
    DWARF v5.
    
    Allow users of Clang and older versions of GCC that have not changed the
    implicit default DWARF version to DWARF v5 to opt in. This can help
    testing consumers of DWARF debug info in preparation of v5 becoming more
    widespread, as well as result in significant binary size savings of the
    pre-stripped vmlinux image.
    
    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:
      One thing is GCC DWARF-5 support, that is whether the compiler will
      support -gdwarf-5 flag, and that support should be there from GCC 7
      onwards.
    
      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...
    
      Another separate thing is whether the assembler does support
      the -gdwarf-5 option (i.e. if you can compile assembler files
      with -Wa,-gdwarf-5) ... That option is about whether the assembler
      will emit DWARF5 or DWARF2 .debug_line.  It is fine to compile C sources
      with -gdwarf-5 and use DWARF2 .debug_line for assembler files if as
      doesn't support it.
    
    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.
    
    Most issues with clang produced assembler were fixed in binutils 2.35.1,
    but 2.35.2 fixed issues related to requiring the flag -Wa,-gdwarf-5
    explicitly. The added shell script test checks for the latter, and is
    only required when using clang without its integrated assembler, though
    we use for clang regardless as we do not yet have a way to query the
    assembler from Kconfig.
    
    Disabled for now if CONFIG_DEBUG_INFO_BTF is set; pahole doesn't yet
    recognize the new additions to the DWARF debug info.
    
    This only modifies the DWARF version emitted by the compiler, not the
    assembler.
    
    The DWARF version of a binary can be validated with:
    $ llvm-dwarfdump <object file> | head -n 4 | grep version
    or
    $ readelf --debug-dump=info <object file> 2>/dev/null | grep Version
    
    Parts of the tree don't reuse DEBUG_CFLAGS as they should; such cleanup
    is left as a follow up.
    
    Link: http://www.dwarfstd.org/doc/DWARF5.pdf
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=1922707Reported-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
    Suggested-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Suggested-by: default avatarCaroline Tice <cmtice@google.com>
    Suggested-by: default avatarFangrui Song <maskray@google.com>
    Suggested-by: default avatarJakub Jelinek <jakub@redhat.com>
    Suggested-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Suggested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang v12.0.0-rc1 x86-64
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    98cd6f52
test_dwarf5_support.sh 416 Bytes