Message ID | 20231205-riscv-restrict-dwarf5-llvm-v2-2-aedf00a382ac@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | ae84ff9a14a5a8d36a329a30626800155782e617 |
Headers | show |
Series | RISC-V: Disable DWARF5 with known broken LLVM versions | expand |
On Tue, Dec 5, 2023 at 3:54 PM Nathan Chancellor <nathan@kernel.org> wrote: > > LLVM prior to 18.0.0 would generate incorrect debug info for DWARF5 due > to linker relaxation, which was worked around in clang by defaulting > RISC-V to DWARF4 [1]. Unfortunately, this workaround does not work for > the kernel because the DWARF version can be independently changed from > the default in Kconfig. > > Do not allow DWARF5 to be selected for RISC-V when using linker > relaxation (ld.lld >= 15.0.0) and a version of LLVM that does not have > the fixes (the integrated assembler [2] and ld.lld [3] < 18.0.0) > necessary to generate the correct debug info. > > Link: https://github.com/llvm/llvm-project/commit/bbc0f99f3bc96f1db16f649fc21dd18e5b0918f6 [1] > Link: https://github.com/llvm/llvm-project/commit/1df5ea29b43690b6622db2cad7b745607ca4de6a [2] > Link: https://github.com/llvm/llvm-project/commit/7ffabb61a5569444b5ac9322e22e5471cc5e4a77 [3] > Signed-off-by: Nathan Chancellor <nathan@kernel.org> > --- > arch/riscv/Kconfig | 9 +++++++++ > lib/Kconfig.debug | 1 + > 2 files changed, 10 insertions(+) > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index 72be1d8122a3..81b473cb47b0 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -186,6 +186,15 @@ config RISCV_USE_LINKER_RELAXATION > # https://github.com/llvm/llvm-project/commit/6611d58f5bbcbec77262d392e2923e1d680f6985 > depends on !LD_IS_LLD || LLD_VERSION >= 150000 > > +# https://github.com/llvm/llvm-project/commit/bbc0f99f3bc96f1db16f649fc21dd18e5b0918f6 > +config ARCH_HAS_BROKEN_DWARF5 > + def_bool y > + depends on RISCV_USE_LINKER_RELAXATION > + # https://github.com/llvm/llvm-project/commit/1df5ea29b43690b6622db2cad7b745607ca4de6a > + depends on AS_IS_LLVM && AS_VERSION < 180000 > + # https://github.com/llvm/llvm-project/commit/7ffabb61a5569444b5ac9322e22e5471cc5e4a77 > + depends on LD_IS_LLD && LLD_VERSION < 180000 > + LGTM. loongarch folks can add arch/loongarch/Kconfig after they finish their R_LARCH_ADD_ULEB128/R_LARCH_SUB_ULEB128 toolchain work. Reviewed-by: Fangrui Song <maskray@google.com> > config ARCH_MMAP_RND_BITS_MIN > default 18 if 64BIT > default 8 > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug > index cc7d53d9dc01..a0ebce05a368 100644 > --- a/lib/Kconfig.debug > +++ b/lib/Kconfig.debug > @@ -282,6 +282,7 @@ config DEBUG_INFO_DWARF4 > config DEBUG_INFO_DWARF5 > bool "Generate DWARF Version 5 debuginfo" > select DEBUG_INFO > + depends on !ARCH_HAS_BROKEN_DWARF5 > depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502 && AS_HAS_NON_CONST_LEB128) > help > Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc > > -- > 2.43.0 > >
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 72be1d8122a3..81b473cb47b0 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -186,6 +186,15 @@ config RISCV_USE_LINKER_RELAXATION # https://github.com/llvm/llvm-project/commit/6611d58f5bbcbec77262d392e2923e1d680f6985 depends on !LD_IS_LLD || LLD_VERSION >= 150000 +# https://github.com/llvm/llvm-project/commit/bbc0f99f3bc96f1db16f649fc21dd18e5b0918f6 +config ARCH_HAS_BROKEN_DWARF5 + def_bool y + depends on RISCV_USE_LINKER_RELAXATION + # https://github.com/llvm/llvm-project/commit/1df5ea29b43690b6622db2cad7b745607ca4de6a + depends on AS_IS_LLVM && AS_VERSION < 180000 + # https://github.com/llvm/llvm-project/commit/7ffabb61a5569444b5ac9322e22e5471cc5e4a77 + depends on LD_IS_LLD && LLD_VERSION < 180000 + config ARCH_MMAP_RND_BITS_MIN default 18 if 64BIT default 8 diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index cc7d53d9dc01..a0ebce05a368 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -282,6 +282,7 @@ config DEBUG_INFO_DWARF4 config DEBUG_INFO_DWARF5 bool "Generate DWARF Version 5 debuginfo" select DEBUG_INFO + depends on !ARCH_HAS_BROKEN_DWARF5 depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502 && AS_HAS_NON_CONST_LEB128) help Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc
LLVM prior to 18.0.0 would generate incorrect debug info for DWARF5 due to linker relaxation, which was worked around in clang by defaulting RISC-V to DWARF4 [1]. Unfortunately, this workaround does not work for the kernel because the DWARF version can be independently changed from the default in Kconfig. Do not allow DWARF5 to be selected for RISC-V when using linker relaxation (ld.lld >= 15.0.0) and a version of LLVM that does not have the fixes (the integrated assembler [2] and ld.lld [3] < 18.0.0) necessary to generate the correct debug info. Link: https://github.com/llvm/llvm-project/commit/bbc0f99f3bc96f1db16f649fc21dd18e5b0918f6 [1] Link: https://github.com/llvm/llvm-project/commit/1df5ea29b43690b6622db2cad7b745607ca4de6a [2] Link: https://github.com/llvm/llvm-project/commit/7ffabb61a5569444b5ac9322e22e5471cc5e4a77 [3] Signed-off-by: Nathan Chancellor <nathan@kernel.org> --- arch/riscv/Kconfig | 9 +++++++++ lib/Kconfig.debug | 1 + 2 files changed, 10 insertions(+)