[U-Boot] [PATCH v2] Makefile: Fix linking with modern binutils

Jon
2017-03-21T13:59:04Z

Likewise tested on Fedora rawhide with: binutils-2.28-5.fc27

This patch allows our distro u-boot builds to succeed. +1

Tested-by: Jon Disnard <jdisnard@gmail.com>

On Thu, Jan 12, 2017 at 3:19 AM, Sjoerd Simons
<sjoerd.simons@collabora.co.uk> wrote:
> Tested on current Debian unstable:
> GNU ld (GNU Binutils for Debian) 2.27.90.20170109
>
> Tested-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
>
> 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 <joel@jms.id.au>
>> ---
>> 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.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

--

-Jon Disnard