On Fri, Jun 23, 2023 at 6:44 AM WANG Xuerui <kernel@xxxxxxxxxx> wrote: > > From: WANG Xuerui <git@xxxxxxxxxx> > > Now the arch code is mostly ready for LLVM/Clang consumption, it is time > to re-organize the CFLAGS a little to actually enable the LLVM build. > > A build with !RELOCATABLE && !MODULE is confirmed working within a QEMU > environment; support for the two features are currently blocked by > LLVM/Clang, and will come later. > > Signed-off-by: WANG Xuerui <git@xxxxxxxxxx> > --- > arch/loongarch/Makefile | 14 +++++++++++--- > arch/loongarch/vdso/Makefile | 6 +++++- > 2 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile > index a27e264bdaa5..efe9b50bd829 100644 > --- a/arch/loongarch/Makefile > +++ b/arch/loongarch/Makefile > @@ -46,12 +46,18 @@ ld-emul = $(64bit-emul) > cflags-y += -mabi=lp64s > endif > > -cflags-y += -G0 -pipe -msoft-float This seems to drop -msoft-float for GCC. Intentional? > -LDFLAGS_vmlinux += -G0 -static -n -nostdlib > +ifndef CONFIG_CC_IS_CLANG > +cflags-y += -G0 > +LDFLAGS_vmlinux += -G0 Thanks for the patch! I can understand not passing -G0 to clang if clang doesn't understand it, but should you be using CONFIG_LD_IS_LLD for LDFLAGS? What does -G0 do? Is there a plan to support it in clang and lld? If so, please file a bug in LLVM's issue tracker https://github.com/llvm/llvm-project/issues then link to it in a comment in this Makefile above the relevant condition. > +endif > +cflags-y += -pipe > +LDFLAGS_vmlinux += -static -n -nostdlib > > # When the assembler supports explicit relocation hint, we must use it. > # GCC may have -mexplicit-relocs off by default if it was built with an old > -# assembler, so we force it via an option. > +# assembler, so we force it via an option. For LLVM/Clang the desired behavior > +# is the default, and the flag is not supported, so don't pass it if Clang is > +# being used. > # > # When the assembler does not supports explicit relocation hint, we can't use > # it. Disable it if the compiler supports it. > @@ -61,8 +67,10 @@ LDFLAGS_vmlinux += -G0 -static -n -nostdlib > # combination of a "new" assembler and "old" compiler is not supported. Either > # upgrade the compiler or downgrade the assembler. > ifdef CONFIG_AS_HAS_EXPLICIT_RELOCS > +ifndef CONFIG_CC_IS_CLANG > cflags-y += -mexplicit-relocs > KBUILD_CFLAGS_KERNEL += -mdirect-extern-access > +endif Why would AS_HAS_EXPLICIT_RELOCS be set if -mexplicit-relocs isn't supported? Is the kconfig for that broken? Does AS_HAS_EXPLICIT_RELOCS also need to test for the support for -mdirect-extern-access or should there be a new config for that? CC_SUPPORTS_DIRECT_EXTERN_ACCESS > else > cflags-y += $(call cc-option,-mno-explicit-relocs) > KBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel > diff --git a/arch/loongarch/vdso/Makefile b/arch/loongarch/vdso/Makefile > index 4c859a0e4754..19f6c75a1106 100644 > --- a/arch/loongarch/vdso/Makefile > +++ b/arch/loongarch/vdso/Makefile > @@ -25,13 +25,17 @@ endif > cflags-vdso := $(ccflags-vdso) \ > -isystem $(shell $(CC) -print-file-name=include) \ > $(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \ > - -O2 -g -fno-strict-aliasing -fno-common -fno-builtin -G0 \ > + -O2 -g -fno-strict-aliasing -fno-common -fno-builtin \ > -fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \ > $(call cc-option, -fno-asynchronous-unwind-tables) \ > $(call cc-option, -fno-stack-protector) > aflags-vdso := $(ccflags-vdso) \ > -D__ASSEMBLY__ -Wa,-gdwarf-2 > > +ifndef CONFIG_CC_IS_CLANG > +cflags-vdso += -G0 > +endif > + > ifneq ($(c-gettimeofday-y),) > CFLAGS_vgettimeofday.o += -include $(c-gettimeofday-y) > endif > -- > 2.40.0 > > -- Thanks, ~Nick Desaulniers