Support linking with -z combreloc (combine and sort reloc sections) and with
--shared -z combreloc (shared library, combine & sort relocs) Submitted by: peter Bribed by: peter Fixes: IA-64, Kaffe, and QT Doesn't fix ports by: kris Tested on: make(1) release w/docproj Desired for: 5.0-DP#1 Approved by: murray Seconded by: jhb
This commit is contained in:
parent
93a919ffc1
commit
908b6d102f
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user