On Mon, Jun 19, 2023 at 2:17 PM Yonghong Song yhs@meta.com wrote:
How many people really build the kernel with LLVM=1 LLVM_IAS=0 which uses clang compiler ans gcc 'as'. I think distro most likely won't do this if they intend to build the kernel with clang.
Note that LLVM=1 implies to use both clang compiler and clang assembler.
Yes, we prefer folks to build with LLVM=1. The problem exists for users of stable kernels that predate LLVM_IAS=1 support working well (4.19 is when we had most of the assembler related issues sorted out, actually later but we backported most fixes to 4.19).
Using clang17 and 'LLVM=1 LLVM_IAS=0', with latest bpf-next, I actually hit some build errors like:
/tmp/video-bios-59fa52.s: Assembler messages: /tmp/video-bios-59fa52.s:4: Error: junk at end of line, first unrecognized character is `"'
Probably because: 1. CONFIG_DEBUG_INFO_DWARF5=y was set or CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y and you're using a version of clang which implicitly defaults to DWARFv5. 2. you're using a version of GAS that does not understand DWARFv5. 3. you did not run defconfig/menuconfig to have kconfig check for DWARFv5 support.
The kconfigs should prevent you from selecting DWARFv5 if your toolchain combination doesn't support it; if you run kconfig.
/tmp/video-bios-59fa52.s:4: Error: file number less than one /tmp/video-bios-59fa52.s:5: Error: junk at end of line, first unrecognized character is `"' /tmp/video-bios-59fa52.s:6: Error: junk at end of line, first unrecognized character is `"' /tmp/video-bios-59fa52.s:7: Error: junk at end of line, first unrecognized character is `"' /tmp/video-bios-59fa52.s:8: Error: junk at end of line, first unrecognized character is `"' /tmp/video-bios-59fa52.s:9: Error: junk at end of line, first unrecognized character is `"' /tmp/video-bios-59fa52.s:10: Error: junk at end of line, first unrecognized character is `"' /tmp/video-bios-59fa52.s:68: Error: junk at end of line, first unrecognized character is `"' clang: error: assembler command failed with exit code 1 (use -v to see invocation) make[4]: *** [/home/yhs/work/bpf-next/scripts/Makefile.build:252: arch/x86/realmode/rm/video-bios.o] Error 1 make[4]: *** Waiting for unfinished jobs.... /tmp/wakemain-88777c.s: Assembler messages: /tmp/wakemain-88777c.s:4: Error: junk at end of line, first unrecognized character is `"' /tmp/wakemain-88777c.s:4: Error: file number less than one /tmp/wakemain-88777c.s:5: Error: junk at end of line, first unrecognized character is `"' /tmp/wakemain-88777c.s:6: Error: junk at end of line, first unrecognized character is `"' /tmp/wakemain-88777c.s:7: Error: junk at end of line, first unrecognized character is `"' /tmp/wakemain-88777c.s:8: Error: junk at end of line, first unrecognized character is `"' /tmp/wakemain-88777c.s:81: Error: junk at end of line, first unrecognized character is `"' /tmp/wakemain-88777c.s:312: Error: junk at end of line, first unrecognized character is `"' clang: error: assembler command failed with exit code 1 (use -v to see invocation)
Potentially because of my local gnu assembler 2.30-120.el8 won't work
It's recorded in lib/Kconfig.debug that 2.35.2 is required for DWARFv5 support if you're using GAS. My machine has 2.40.
with some syntax generated by clang. Mixing clang compiler and arbitrary gnu assembler are not a good idea (see the above example). It might
I agree, but for older branches of stable which are still supported, we didn't quite have clang assembler support usable. We still need to support those branches of stable.
work with close-to-latest gnu assembler.
To support function name like '<fname>.isra', some llvm work will be needed, and it may take some time.
So in my opinion, this patch is NOT a bug fix. It won't affect distro. Whether we should backport to the old kernel, I am not sure whether it is absolutely necessary as casual build can always remove LLVM_IAS=0 or hack the kernel source itself.