On Fri, Mar 31, 2023 at 7:29 AM Nathan Chancellor nathan@kernel.org wrote:
On Thu, Mar 30, 2023 at 06:22:24PM +0000, Alyssa Ross wrote:
Since 32ef9e5054ec, -Wa,-gdwarf-2 is no longer used in KBUILD_AFLAGS. Instead, it includes -g, the appropriate -gdwarf-* flag, and also the -Wa versions of both of those if building with Clang and GNU as. As a result, debug info was being generated for the purgatory objects, even though the intention was that it not be.
Fixes: 32ef9e5054ec ("Makefile.debug: re-enable debug info for .S files") Signed-off-by: Alyssa Ross hi@alyssa.is Cc: stable@vger.kernel.org Acked-by: Nick Desaulniers ndesaulniers@google.com
This is definitely more future proof.
Reviewed-by: Nathan Chancellor nathan@kernel.org Tested-by: Nathan Chancellor nathan@kernel.org
I prefer v3 since it is cleaner, but unfortunately it does not work for Clang+GAS.
With v3 applied, I still see the debug info.
$ make LLVM=1 LLVM_IAS=0 arch/x86/purgatory/setup-x86_64.o UPD include/config/kernel.release UPD include/generated/utsrelease.h CALL scripts/checksyscalls.sh DESCEND objtool INSTALL libsubcmd_headers AS arch/x86/purgatory/setup-x86_64.o $ readelf -S arch/x86/purgatory/setup-x86_64.o There are 18 section headers, starting at offset 0x14d8:
Section Headers: [Nr] Name Type Address Offset Size EntSize Flags Link Info Align [ 0] NULL 0000000000000000 00000000 0000000000000000 0000000000000000 0 0 0 [ 1] .text PROGBITS 0000000000000000 00000040 0000000000000027 0000000000000000 AX 0 0 16 [ 2] .rela.text RELA 0000000000000000 000012f8 0000000000000060 0000000000000018 I 15 1 8 [ 3] .data PROGBITS 0000000000000000 00000067 0000000000000000 0000000000000000 WA 0 0 1 [ 4] .bss NOBITS 0000000000000000 00001000 0000000000001000 0000000000000000 WA 0 0 4096 [ 5] .rodata PROGBITS 0000000000000000 00001000 0000000000000020 0000000000000000 A 0 0 16 [ 6] .rela.rodata RELA 0000000000000000 00001358 0000000000000018 0000000000000018 I 15 5 8 [ 7] .debug_line PROGBITS 0000000000000000 00001020 000000000000005f 0000000000000000 0 0 1 [ 8] .rela.debug_line RELA 0000000000000000 00001370 0000000000000018 0000000000000018 I 15 7 8 [ 9] .debug_info PROGBITS 0000000000000000 0000107f 0000000000000027 0000000000000000 0 0 1 [10] .rela.debug_info RELA 0000000000000000 00001388 0000000000000090 0000000000000018 I 15 9 8 [11] .debug_abbrev PROGBITS 0000000000000000 000010a6 0000000000000014 0000000000000000 0 0 1 [12] .debug_aranges PROGBITS 0000000000000000 000010c0 0000000000000030 0000000000000000 0 0 16 [13] .rela.debug_[...] RELA 0000000000000000 00001418 0000000000000030 0000000000000018 I 15 12 8 [14] .debug_str PROGBITS 0000000000000000 000010f0 0000000000000054 0000000000000001 MS 0 0 1 [15] .symtab SYMTAB 0000000000000000 00001148 0000000000000168 0000000000000018 16 12 8 [16] .strtab STRTAB 0000000000000000 000012b0 0000000000000041 0000000000000000 0 0 1 [17] .shstrtab STRTAB 0000000000000000 00001448 000000000000008d 0000000000000000 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), D (mbind), l (large), p (processor specific)
With -g0 given, GCC stops passing -g -gdwarf-4 down to GAS.
Clang does not do anything about -g0 for the external assembler.
I was thinking of dropping LLVM_IAS=0 support. When we decide to give up -fno-integrated-as, we can clean up the code in various places.
Anyway, v3 does not work in the current situation.
V2 works for all usecases.