Index: ld/Makefile.alpha =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/Makefile.alpha,v retrieving revision 1.14 diff -u -r1.14 Makefile.alpha --- ld/Makefile.alpha 2002/02/07 01:37:53 1.14 +++ ld/Makefile.alpha 2002/03/11 23:04:05 @@ -12,8 +12,8 @@ .endif 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 + elf64alpha.xs elf64alpha.xu elf64alpha.xc elf64alpha.xsc \ + alpha.x alpha.xbn alpha.xn alpha.xr alpha.xu SRCS+= eelf64alpha.c ealpha.c CLEANFILES+= eelf64alpha.c ealpha.c Index: ld/Makefile.i386 =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/Makefile.i386,v retrieving revision 1.15 diff -u -r1.15 Makefile.i386 --- ld/Makefile.i386 2002/02/07 01:37:53 1.15 +++ ld/Makefile.i386 2002/03/11 23:04:05 @@ -12,7 +12,7 @@ .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 Index: ld/Makefile.ia64 =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/Makefile.ia64,v retrieving revision 1.2 diff -u -r1.2 Makefile.ia64 --- ld/Makefile.ia64 2002/02/07 01:37:53 1.2 +++ ld/Makefile.ia64 2002/03/11 23:04:05 @@ -13,7 +13,7 @@ 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 Index: ld/Makefile.m68k =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/Makefile.m68k,v retrieving revision 1.6 diff -u -r1.6 Makefile.m68k --- ld/Makefile.m68k 2002/02/07 01:37:53 1.6 +++ ld/Makefile.m68k 2002/03/11 23:04:05 @@ -17,16 +17,22 @@ m68kelf.xr \ m68kelf.xs \ m68kelf.xu \ + m68kelf.xc \ + m68kelf.xsc \ m68klynx.x \ m68klynx.xbn \ m68klynx.xn \ m68klynx.xr \ m68klynx.xu \ + m68klynx.xc \ + m68klynx.xsc \ m68knbsd.x \ m68knbsd.xbn \ m68knbsd.xn \ m68knbsd.xr \ - m68knbsd.xu + m68knbsd.xu \ + m68knbsd.xc \ + m68knbsd.xsc SRCS+= em68kelf.c \ em68klynx.c \ em68knbsd.c Index: ld/Makefile.powerpc =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/Makefile.powerpc,v retrieving revision 1.8 diff -u -r1.8 Makefile.powerpc --- ld/Makefile.powerpc 2002/02/07 01:37:53 1.8 +++ ld/Makefile.powerpc 2002/03/11 23:04:05 @@ -22,31 +22,43 @@ 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 \ Index: ld/Makefile.sparc64 =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/Makefile.sparc64,v retrieving revision 1.8 diff -u -r1.8 Makefile.sparc64 --- ld/Makefile.sparc64 2002/02/07 01:37:53 1.8 +++ ld/Makefile.sparc64 2002/03/11 23:04:05 @@ -13,13 +13,13 @@ 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 Index: ld/genscripts.sh =================================================================== RCS file: /home/ncvs/src/gnu/usr.bin/binutils/ld/genscripts.sh,v retrieving revision 1.3 diff -u -r1.3 genscripts.sh --- ld/genscripts.sh 2001/06/01 05:31:02 1.3 +++ ld/genscripts.sh 2002/03/11 23:04:05 @@ -58,7 +58,18 @@ # 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}} # Determine DATA_ALIGNMENT for the 5 variants, using @@ -73,43 +84,80 @@ 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 test "$i" = "$EMULATION_NAME" && COMPILE_IN=true done + # Generate e${EMULATION_NAME}.c. . ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em