summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gnu/usr.bin/binutils/ld/Makefile.alpha2
-rw-r--r--gnu/usr.bin/binutils/ld/Makefile.i3862
-rw-r--r--gnu/usr.bin/binutils/ld/Makefile.ia642
-rw-r--r--gnu/usr.bin/binutils/ld/Makefile.powerpc14
-rw-r--r--gnu/usr.bin/binutils/ld/Makefile.sparc644
-rwxr-xr-xgnu/usr.bin/binutils/ld/genscripts.sh71
6 files changed, 77 insertions, 18 deletions
diff --git a/gnu/usr.bin/binutils/ld/Makefile.alpha b/gnu/usr.bin/binutils/ld/Makefile.alpha
index 3a23767..46ef61b 100644
--- a/gnu/usr.bin/binutils/ld/Makefile.alpha
+++ b/gnu/usr.bin/binutils/ld/Makefile.alpha
@@ -13,7 +13,7 @@ _alpha_path= \"/usr/cross/alpha-freebsd/usr/lib\"
EMS+= ld_elf64alpha_emulation
LDSCRIPTS+= elf64alpha.x elf64alpha.xbn elf64alpha.xn elf64alpha.xr \
elf64alpha.xs elf64alpha.xu alpha.x alpha.xbn \
- alpha.xn alpha.xr alpha.xu
+ alpha.xn alpha.xr alpha.xu elf64alpha.xc elf64alpha.xsc
SRCS+= eelf64alpha.c ealpha.c
CLEANFILES+= eelf64alpha.c ealpha.c
diff --git a/gnu/usr.bin/binutils/ld/Makefile.i386 b/gnu/usr.bin/binutils/ld/Makefile.i386
index 3209fd5..b3e16c2 100644
--- a/gnu/usr.bin/binutils/ld/Makefile.i386
+++ b/gnu/usr.bin/binutils/ld/Makefile.i386
@@ -12,7 +12,7 @@ _i386_path= \"/usr/cross/i386-freebsd/usr/lib\"
.endif
EMS+= ld_elf_i386_emulation
LDSCRIPTS+= elf_i386.x elf_i386.xbn elf_i386.xn elf_i386.xr \
- elf_i386.xs elf_i386.xu
+ elf_i386.xs elf_i386.xu elf_i386.xc elf_i386.xsc
SRCS+= eelf_i386.c
CLEANFILES+= eelf_i386.c
diff --git a/gnu/usr.bin/binutils/ld/Makefile.ia64 b/gnu/usr.bin/binutils/ld/Makefile.ia64
index 594412f..5b33455 100644
--- a/gnu/usr.bin/binutils/ld/Makefile.ia64
+++ b/gnu/usr.bin/binutils/ld/Makefile.ia64
@@ -13,7 +13,7 @@ _ia64_path= \"/usr/cross/ia64-freebsd/usr/lib\"
EMS+= ld_elf64_ia64_emulation
LDSCRIPTS+= elf64_ia64.x elf64_ia64.xbn elf64_ia64.xn elf64_ia64.xr \
- elf64_ia64.xs elf64_ia64.xu
+ elf64_ia64.xs elf64_ia64.xu elf64_ia64.xc elf64_ia64.xsc
SRCS+= eelf64_ia64.c
CLEANFILES+= eelf64_ia64.c
diff --git a/gnu/usr.bin/binutils/ld/Makefile.powerpc b/gnu/usr.bin/binutils/ld/Makefile.powerpc
index e728098..6600ad5 100644
--- a/gnu/usr.bin/binutils/ld/Makefile.powerpc
+++ b/gnu/usr.bin/binutils/ld/Makefile.powerpc
@@ -22,31 +22,43 @@ LDSCRIPTS+= elf32ppc.x \
elf32ppc.xr \
elf32ppc.xs \
elf32ppc.xu \
+ elf32ppc.xc \
+ elf32ppc.xsc \
ppcmacos.x \
ppcmacos.xbn \
ppcmacos.xn \
ppcmacos.xr \
ppcmacos.xu \
+ ppcmacos.xc \
+ ppcmacos.xsc \
ppcnw.x \
ppcnw.xbn \
ppcnw.xn \
ppcnw.xr \
ppcnw.xu \
+ ppcnw.xc \
+ ppcnw.xsc \
ppcpe.x \
ppcpe.xbn \
ppcpe.xn \
ppcpe.xr \
ppcpe.xu \
+ ppcpe.xc \
+ ppcpe.xsc \
aixrs6.x \
aixrs6.xbn \
aixrs6.xn \
aixrs6.xr \
aixrs6.xu \
+ aixrs6.xc \
+ aixrs6.xsc \
rs6000lynx.x \
rs6000lynx.xbn \
rs6000lynx.xn \
rs6000lynx.xr \
- rs6000lynx.xu
+ rs6000lynx.xu \
+ rs6000lynx.xc \
+ rs6000lynx.xsc
SRCS+= eelf32ppc.c \
eppcmacos.c \
eppcnw.c \
diff --git a/gnu/usr.bin/binutils/ld/Makefile.sparc64 b/gnu/usr.bin/binutils/ld/Makefile.sparc64
index ccee0cb..e161812 100644
--- a/gnu/usr.bin/binutils/ld/Makefile.sparc64
+++ b/gnu/usr.bin/binutils/ld/Makefile.sparc64
@@ -13,13 +13,13 @@ _sparc_path= \"/usr/cross/sparc-freebsd/usr/lib\"
EMS+= ld_elf64_sparc_emulation
LDSCRIPTS+= elf64_sparc.x elf64_sparc.xbn elf64_sparc.xn elf64_sparc.xr \
- elf64_sparc.xs elf64_sparc.xu
+ elf64_sparc.xs elf64_sparc.xu elf64_sparc.xc elf64_sparc.xsc
SRCS+= eelf64_sparc.c
CLEANFILES+= eelf64_sparc.c
EMS+= ld_elf32_sparc_emulation
LDSCRIPTS+= elf32_sparc.x elf32_sparc.xbn elf32_sparc.xn elf32_sparc.xr \
- elf32_sparc.xs elf32_sparc.xu
+ elf32_sparc.xs elf32_sparc.xu elf32_sparc.xc elf32_sparc.xsc
SRCS+= eelf32_sparc.c
CLEANFILES+= eelf32_sparc.c
diff --git a/gnu/usr.bin/binutils/ld/genscripts.sh b/gnu/usr.bin/binutils/ld/genscripts.sh
index cb97a7f..e73097b 100755
--- a/gnu/usr.bin/binutils/ld/genscripts.sh
+++ b/gnu/usr.bin/binutils/ld/genscripts.sh
@@ -58,6 +58,17 @@ LIB_SEARCH_DIRS=`echo ${libdir} | tr ':' ' ' | sed -e 's/\([^ ][^ ]*\)/SEARCH_DI
# A .xs script is for generating a shared library with the --shared
# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
# emulation parameters.
+# A .xc script is for linking with -z combreloc; it is only generated if
+# $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
+# $SCRIPT_NAME is "elf".
+# A .xsc script is for linking with --shared -z combreloc; it is generated
+# if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
+# $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation
+# parameters too.
+
+if [ "x$SCRIPT_NAME" = "xelf" ]; then
+ GENERATE_COMBRELOC_SCRIPT=yes
+fi
SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}}
@@ -73,39 +84,75 @@ DATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
LD_FLAG=r
DATA_ALIGNMENT=${DATA_ALIGNMENT_r}
DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
-(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' \
- > ldscripts/${EMULATION_NAME}.xr
+( echo "/* Script for ld -r: link without relocation */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr
LD_FLAG=u
DATA_ALIGNMENT=${DATA_ALIGNMENT_u}
CONSTRUCTING=" "
-(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' \
- > ldscripts/${EMULATION_NAME}.xu
+( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu
LD_FLAG=
DATA_ALIGNMENT=${DATA_ALIGNMENT_}
RELOCATING=" "
-(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' \
- > ldscripts/${EMULATION_NAME}.x
+( echo "/* Default linker script, for normal executables */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x
LD_FLAG=n
DATA_ALIGNMENT=${DATA_ALIGNMENT_n}
TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}}
-(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' \
- > ldscripts/${EMULATION_NAME}.xn
+( echo "/* Script for -n: mix text and data on same page */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn
LD_FLAG=N
DATA_ALIGNMENT=${DATA_ALIGNMENT_N}
-(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' \
- > ldscripts/${EMULATION_NAME}.xbn
+( echo "/* Script for -N: mix text and data on same page; don't align data */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn
+
+if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}}
+ LD_FLAG=c
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
+ ( echo "/* Script for -z combreloc: combine and sort reloc sections */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc
+ rm -f ${COMBRELOC}
+ COMBRELOC=
+fi
if test -n "$GENERATE_SHLIB_SCRIPT"; then
LD_FLAG=shared
DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
CREATE_SHLIB=" "
# Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR.
- (. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc) | sed -e '/^ *$/d' \
- > ldscripts/${EMULATION_NAME}.xs
+ (
+ echo "/* Script for ld --shared: link shared library */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs
+ if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
+ LD_FLAG=cshared
+ DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
+ COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
+ ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */"
+ . ${srcdir}/emulparams/${EMULATION_NAME}.sh
+ . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
+ ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc
+ rm -f ${COMBRELOC}
+ COMBRELOC=
+ fi
fi
for i in $EMULATION_LIBPATH ; do
OpenPOWER on IntegriCloud