start a linker script helper file
PATCH 1/1 start a linker script helper file
Start a common header file for common linker script code (such as workarounds for older linkers) rather than doing this in the build system.
As fallout, we no longer execute the linker every time config.mk is included by a build file (which can easily be 70+ times), but rather only execute it once.
This also fixes a bug in the major version checking by creating a macro to easily compare versions and keep people from making the same common mistake (forgetting to check major and minor together).
--- Makefile | 8 ++++++++ config.mk | 10 ---------- include/u-boot/u-boot.lds.h | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 include/u-boot/u-boot.lds.h
Makefile +8 -0
@@ -267,6 +267,14 @@ endif PLATFORM_LIBS += $(PLATFORM_LIBGCC) export PLATFORM_LIBS +# Special flags for CPP when processing the linker script. +# Pass the version down so we can handle backwards compatibility +# on the fly. +LDPPFLAGS += \ + -include $(TOPDIR)/include/u-boot/u-boot.lds.h \ + $(shell $(LD) --version | \ + sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p') + ifeq ($(CONFIG_NAND_U_BOOT),y) NAND_SPL = nand_spl U_BOOT_NAND = $(obj)u-boot-nand.bin
config.mk +0 -10
@@ -171,16 +171,6 @@ ifneq ($(TEXT_BASE),) LDFLAGS += -Ttext $(TEXT_BASE) endif -# Special flags for CPP when processing the linker script -# Linker versions prior to 2.16 don't understand the builting -# functions SORT_BY_ALIGNMENT() and SORT_BY_NAME(), so disable these -ifeq ($(shell $(LD) -v | \ - sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\) .*/[ \1 -lt 2 ] || [ \2 -lt 16 ] \&\& echo old_ld/p' | \ - sh),old_ld) -LDPPFLAGS += -D'SORT_BY_ALIGNMENT(x)=x' -D'SORT_BY_NAME(x)=x' -endif - - # Location of a usable BFD library, where we define "usable" as # "built for ${HOST}, supports ${TARGET}". Sensible values are # - When cross-compiling: the root of the cross-environment
include/u-boot/u-boot.lds.h new file +26 -0
@@ -0,0 +1,26 @@ +/* +* Linker script helper macros +* +* Copyright (c) 2009 Analog Devices Inc. +* +* Licensed under the GPL-2 or later. +*/ + +#ifndef __U_BOOT_LDS__ +#define __U_BOOT_LDS__ + +/* See if the linker version is at least the specified version */ +#define LD_AT_LEAST (major, minor) \ + ((major > LD_MAJOR) || (major == LD_MAJOR && minor <= LD_MINOR)) + +/* +* Linker versions prior to 2.16 don't understand the builtin +* functions SORT_BY_ALIGNMENT() and SORT_BY_NAME(), so disable these +*/ +#if !LD_AT_LEAST (2 ,16 ) +#error as +# define SORT_BY_ALIGNMENT (x) x +# define SORT_BY_NAME (x) x +#endif + +#endif
Signature · 1 line
1.6.4
PATCH 1/1 start a linker script helper file
ignore this one ... seems like using '-e' with git send-email may sometimes swallow the --dry-run
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20090823/85908fc9/attachment.pgp