From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sjoerd Simons Date: Thu, 12 Jan 2017 10:19:04 +0100 Subject: [U-Boot] [PATCH v2] Makefile: Fix linking with modern binutils In-Reply-To: <20161216045330.31257-1-joel@jms.id.au> References: <20161216045330.31257-1-joel@jms.id.au> Message-ID: <1484212744.14166.4.camel@collabora.co.uk> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Tested on current Debian unstable: GNU ld (GNU Binutils for Debian) 2.27.90.20170109 Tested-by: Sjoerd Simons On Fri, 2016-12-16 at 15:23 +1030, Joel Stanley wrote: > 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 reproduced 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/co > mmit/?h=next&id=ff45000fcb56b5b0f1a14a865d3541746d838a0a > > Signed-off-by: Joel Stanley > --- > v2: > ?- use ld-option to test for the flag instead of the version, as > suggested by M?ns > ?- update commit message with clarification from Alan > > ?Makefile | 4 ++++ > ?1 file changed, 4 insertions(+) > > diff --git a/Makefile b/Makefile > index dfed58bec661..c98a8361654a 100644 > --- a/Makefile > +++ b/Makefile > @@ -793,6 +793,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 -- Sjoerd Simons Collabora Ltd.