53 lines
1.8 KiB
Diff
53 lines
1.8 KiB
Diff
|
From 58772283210e15f8d803db4aa67c877d668db867 Mon Sep 17 00:00:00 2001
|
||
|
Patch-Source: https://github.com/u-boot/u-boot/commit/58772283210e15f8d803db4aa67c877d668db867
|
||
|
From: Alistair Delva <adelva@google.com>
|
||
|
Date: Wed, 20 Oct 2021 21:31:33 +0000
|
||
|
Subject: [PATCH] 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>
|
||
|
---
|
||
|
Makefile | 3 +++
|
||
|
1 file changed, 3 insertions(+)
|
||
|
|
||
|
diff --git a/Makefile b/Makefile
|
||
|
index c0ea933cb636..286757986c02 100644
|
||
|
--- a/Makefile
|
||
|
+++ b/Makefile
|
||
|
@@ -776,6 +776,9 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),)
|
||
|
LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
|
||
|
endif
|
||
|
|
||
|
+# ld.lld support
|
||
|
+LDFLAGS_u-boot += -z notext
|
||
|
+
|
||
|
# Normally we fill empty space with 0xff
|
||
|
quiet_cmd_objcopy = OBJCOPY $@
|
||
|
cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
|