68 lines
2.4 KiB
Diff
68 lines
2.4 KiB
Diff
|
From 7cc861a93885f088bce2d51229543700b617f299 Mon Sep 17 00:00:00 2001
|
||
|
From: Joel Stanley <joel@jms.id.au>
|
||
|
Date: Fri, 16 Dec 2016 15:23:30 +1030
|
||
|
Subject: [PATCH] Makefile: Fix linking with modern binutils
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Since Binutils 1a9ccd70f9a7[1] u-boot will not link targets that set
|
||
|
CONFIG_SYS_TEXT_BASE=0 with the following error:
|
||
|
|
||
|
LD u-boot
|
||
|
arm-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try
|
||
|
linking with -N
|
||
|
arm-linux-gnueabi-ld.bfd: final link failed: Bad value
|
||
|
|
||
|
The issue can be reproduced with the bad binutils and the rock2_defconfig
|
||
|
target.
|
||
|
|
||
|
This issue was also encountered by the powerpc kernel[2], with the fix
|
||
|
being to pass --no-dynamic-linker for linkers newer than 2.26 when this
|
||
|
flag was introduced. The option tells ld that the PIE or shared lib does
|
||
|
not need loaded program headers.
|
||
|
|
||
|
Ubuntu Zesty's Binutils 2.27.51.20161202 hits this error.
|
||
|
|
||
|
[1] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=1a9ccd70f9a7
|
||
|
[2] https://git.kernel.org/cgit/linux/kernel/git/powerpc/linux.git/commit/?h=next&id=ff45000fcb56b5b0f1a14a865d3541746d838a0a
|
||
|
|
||
|
Signed-off-by: Joel Stanley <joel@jms.id.au>
|
||
|
[AF: Apply to LDFLAGS_$(SPL_BIN) as well, suggested by Tom Rini]
|
||
|
Signed-off-by: Andreas Färber <afaerber@suse.de>
|
||
|
---
|
||
|
Makefile | 4 ++++
|
||
|
scripts/Makefile.spl | 4 ++++
|
||
|
2 files changed, 8 insertions(+)
|
||
|
|
||
|
diff --git a/Makefile b/Makefile
|
||
|
index 323d646..10f1cbb 100644
|
||
|
--- a/Makefile
|
||
|
+++ b/Makefile
|
||
|
@@ -804,6 +804,10 @@ ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
|
||
|
endif
|
||
|
|
||
|
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)
|
||
|
+
|
||
|
ifneq ($(CONFIG_SYS_TEXT_BASE),)
|
||
|
LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
|
||
|
endif
|
||
|
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
|
||
|
index b52f996..dec0025 100644
|
||
|
--- a/scripts/Makefile.spl
|
||
|
+++ b/scripts/Makefile.spl
|
||
|
@@ -276,6 +276,10 @@ $(obj)/u-boot-x86-16bit-spl.bin: $(obj)/u-boot-spl FORCE
|
||
|
$(call if_changed,objcopy)
|
||
|
|
||
|
LDFLAGS_$(SPL_BIN) += -T u-boot-spl.lds $(LDFLAGS_FINAL)
|
||
|
+
|
||
|
+# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
|
||
|
+LDFLAGS_$(SPL_BIN) += $(call ld-option, --no-dynamic-linker)
|
||
|
+
|
||
|
ifneq ($(CONFIG_SPL_TEXT_BASE),)
|
||
|
LDFLAGS_$(SPL_BIN) += -Ttext $(CONFIG_SPL_TEXT_BASE)
|
||
|
endif
|