[PATCH v2/RESEND] riscv: Pass -mno-relax only on lld < 15.0.0

Palmer Dabbelt palmer at rivosinc.com
Sun Sep 18 02:29:34 PDT 2022


From: Fangrui Song <maskray at google.com>

lld since llvm:6611d58f5bbc ("[ELF] Relax R_RISCV_ALIGN"), which will be
included in the 15.0.0 release, has implemented some RISC-V linker
relaxation.  -mno-relax is no longer needed in
KBUILD_CFLAGS/KBUILD_AFLAGS to suppress R_RISCV_ALIGN which older lld
can not handle:

    ld.lld: error: capability.c:(.fixup+0x0): relocation R_RISCV_ALIGN
    requires unimplemented linker relaxation; recompile with -mno-relax
    but the .o is already compiled with -mno-relax

Signed-off-by: Fangrui Song <maskray at google.com>
Link: https://lore.kernel.org/r/20220710071117.446112-1-maskray@google.com/
Reviewed-by: Nick Desaulniers <ndesaulniers at google.com>
Tested-by: Nick Desaulniers <ndesaulniers at google.com>
Signed-off-by: Palmer Dabbelt <palmer at rivosinc.com>
---
Fanguri poked me about this one on IRC, I'm not sure what happened but
it didn't make it to my inbox (and neither did the replies, which is
kind of scary).  Rather that trying to resurrect that thread from lore,
I figured it would be best to just send the v2 as the commit message
needed a bit of cleanup.

Changes since v1 <20220710071117.446112-1-maskray at google.com>:

* Clean up the commit message a bit.
---
 arch/riscv/Makefile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
index 3fa8ef336822..e7d52a2301e2 100644
--- a/arch/riscv/Makefile
+++ b/arch/riscv/Makefile
@@ -37,6 +37,7 @@ else
 endif
 
 ifeq ($(CONFIG_LD_IS_LLD),y)
+ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 150000; echo $$?),0)
 	KBUILD_CFLAGS += -mno-relax
 	KBUILD_AFLAGS += -mno-relax
 ifndef CONFIG_AS_IS_LLVM
@@ -44,6 +45,7 @@ ifndef CONFIG_AS_IS_LLVM
 	KBUILD_AFLAGS += -Wa,-mno-relax
 endif
 endif
+endif
 
 # ISA string setting
 riscv-march-$(CONFIG_ARCH_RV32I)	:= rv32ima
-- 
2.34.1




More information about the linux-riscv mailing list