aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlistair Delva <adelva@google.com>2021-10-20 21:31:33 +0000
committerSimon Glass <sjg@chromium.org>2021-10-31 12:26:44 -0600
commit58772283210e15f8d803db4aa67c877d668db867 (patch)
treefc452680e653902fe6df37aee78d9efa04da4155
parent286a1595fbf5e3d984fc400a3995dd32bc7aa54f (diff)
downloadu-boot-58772283210e15f8d803db4aa67c877d668db867.zip
u-boot-58772283210e15f8d803db4aa67c877d668db867.tar.gz
u-boot-58772283210e15f8d803db4aa67c877d668db867.tar.bz2
x86: Fix linking u-boot with ld.lld
When linking the final u-boot binary with LLD, the following link errors are seen: ld.lld: error: can't create dynamic relocation R_386_32 against local symbol in readonly segment; recompile object files with -fPIC or pass '-Wl,-z,notext' to allow text relocations in the output >>> defined in arch/x86/cpu/start.o >>> referenced by arch/x86/cpu/start.o:(.text.start+0x32) [...] >>> defined in arch/x86/cpu/start16.o >>> referenced by arch/x86/cpu/start16.o:(.start16+0x1C) According to Nick Desaulniers: "This is a known difference between GNU and LLVM linkers; the GNU linkers permit relocations in readonly segments (making them not read only), LLVM does not (by default)." Since U-Boot apparently seems to use relocations in readonly segments, change the global linker flags to permit them when linking with LLD by specifying '-z notext'. Signed-off-by: Alistair Delva <adelva@google.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Simon Glass <sjg@chromium.org> Cc: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--Makefile3
1 files changed, 3 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index c0ea933..2867579 100644
--- a/Makefile
+++ b/Makefile
@@ -997,6 +997,9 @@ LDFLAGS_u-boot += $(LDFLAGS_FINAL)
# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
+# ld.lld support
+LDFLAGS_u-boot += -z notext
+
LDFLAGS_u-boot += --build-id=none
ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)