diff --git a/Makefile b/Makefile index 8fb656297..02393b680 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/config.mk b/config.mk index 7bc7315d5..885215799 100644 --- a/config.mk +++ b/config.mk @@ -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 diff --git a/include/u-boot/u-boot.lds.h b/include/u-boot/u-boot.lds.h new file mode 100644 index 000000000..ead37d069 --- /dev/null +++ b/include/u-boot/u-boot.lds.h @@ -0,0 +1,25 @@ +/* + * 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) +# define SORT_BY_ALIGNMENT(x) x +# define SORT_BY_NAME(x) x +#endif + +#endif