On Sat, Apr 1, 2023 at 5:27 AM Alyssa Ross <hi@xxxxxxxxx> wrote: > > On Sat, Apr 01, 2023 at 12:42:13AM +0900, Masahiro Yamada wrote: > > On Fri, Mar 31, 2023 at 7:29 AM Nathan Chancellor <nathan@xxxxxxxxxx> 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@xxxxxxxxx> > > > > Cc: stable@xxxxxxxxxxxxxxx > > > > Acked-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > > > > > > This is definitely more future proof. > > > > > > Reviewed-by: Nathan Chancellor <nathan@xxxxxxxxxx> > > > Tested-by: Nathan Chancellor <nathan@xxxxxxxxxx> > > > > > > > > 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. > > You're right. Thank you for your thoughtful testing — I forgot to check > LLVM for v3. I thought maybe adding -Wa,-g0 would be enough, but it > turns out that GAS doesn't support that. If -g has been specified, > there doesn't seem to be any way to disable debug info again later in > the command line. > > So we probably can't do better than v2 while LLVM_IAS=0 is supported. > The only other option I see is (untested): > > asflags-y += -g0 > asflags-remove-y += -Wa,-g -Wa,-gdwarf-4 -Wa,-gdwarf-5 > > But I don't like that option, because it means there are two completely > different ways of doing it depending on the compiler setup, and it makes > it even less likely anybody would remember to update asflags-remove-y > when DWARF 6 comes around or whatever. Agree. This is uglier than v2. If nobody comes up with a better idea, I will pick up v2. -- Best Regards Masahiro Yamada