diff options
Diffstat (limited to 'gnu/usr.bin/binutils/ld/genscripts.sh')
-rwxr-xr-x | gnu/usr.bin/binutils/ld/genscripts.sh | 78 |
1 files changed, 60 insertions, 18 deletions
diff --git a/gnu/usr.bin/binutils/ld/genscripts.sh b/gnu/usr.bin/binutils/ld/genscripts.sh index 125e18e9765b..181a96c37515 100755 --- a/gnu/usr.bin/binutils/ld/genscripts.sh +++ b/gnu/usr.bin/binutils/ld/genscripts.sh @@ -15,20 +15,32 @@ # hoops for all possible combinations of paths, just use the libdir # argument in place of LIB_PATH. # -# The host, target and target_alias arguments are not used in this version. +# The exec_prefix, target_alias, use_sysroot, NATIVE_LIB_DIRS, TOOL_LIB, CUSTOMIZER_SCRIPT +# arguments are not used in this version. # srcdir=$1 libdir=$2 -host=$3 -target=$4 -target_alias=$5 -EMULATION_LIBPATH=$6 -NATIVE_LIB_DIRS=$7 -EMULATION_NAME=$8 +exec_prefix=$3 +host=$4 +target=$5 +target_alias=$6 +EMULATION_LIBPATH=$7 +NATIVE_LIB_DIRS=$8 +use_sysroot=$9 +shift 9 +EMULATION_NAME=$1 +TOOL_LIB=$2 +CUSTOMIZER_SCRIPT=$3 + +# Create the 'CUSTOMIZER_SCRIPT' knob to better sync this script with +# FSF BU ver 2.15 which allows for a more generic emulparams processing. +# To reduce the diff, I also include the ${EMULATION_NAME} parameter in uses +# of 'CUSTOMIZER_SCRIPT'. +CUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh" # Include the emulation-specific parameters: -. ${srcdir}/emulparams/${EMULATION_NAME}.sh +. ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} if test -d ldscripts; then true @@ -36,6 +48,10 @@ else mkdir ldscripts fi +# Set some flags for the emultempl scripts. USE_LIBPATH will +# be set for any libpath-using emulation. + USE_LIBPATH=yes + # Set the library search path, for libraries named by -lfoo. # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used. # Otherwise, the default is set here. @@ -44,7 +60,7 @@ fi # To force a logically empty LIB_PATH, do LIBPATH=":". LIB_SEARCH_DIRS=`echo ${libdir} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g'` -#2.13 LIB_SEARCH_DIRS=`echo ${libdir} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'` +#2.13: LIB_SEARCH_DIRS=`echo ${libdir} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'` # Generate 5 or 6 script files from a master script template in # ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6 @@ -71,7 +87,8 @@ if [ "x$SCRIPT_NAME" = "xelf" ]; then GENERATE_COMBRELOC_SCRIPT=yes fi -SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}} +#2.13: SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}} +SEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}} # Determine DATA_ALIGNMENT for the 5 variants, using # values specified in the emulparams/<emulation>.sh file or default. @@ -86,7 +103,7 @@ LD_FLAG=r DATA_ALIGNMENT=${DATA_ALIGNMENT_r} DEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})" ( echo "/* Script for ld -r: link without relocation */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr @@ -94,7 +111,7 @@ LD_FLAG=u DATA_ALIGNMENT=${DATA_ALIGNMENT_u} CONSTRUCTING=" " ( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu @@ -102,7 +119,7 @@ LD_FLAG= DATA_ALIGNMENT=${DATA_ALIGNMENT_} RELOCATING=" " ( echo "/* Default linker script, for normal executables */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x @@ -110,14 +127,14 @@ LD_FLAG=n DATA_ALIGNMENT=${DATA_ALIGNMENT_n} TEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}} ( echo "/* Script for -n: mix text and data on same page */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn LD_FLAG=N DATA_ALIGNMENT=${DATA_ALIGNMENT_N} ( echo "/* Script for -N: mix text and data on same page; don't align data */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn @@ -126,7 +143,7 @@ if test -n "$GENERATE_COMBRELOC_SCRIPT"; then LD_FLAG=c COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp ( echo "/* Script for -z combreloc: combine and sort reloc sections */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc rm -f ${COMBRELOC} @@ -140,7 +157,7 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; then # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. ( echo "/* Script for ld --shared: link shared library */" - . ${srcdir}/emulparams/${EMULATION_NAME}.sh + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs if test -n "$GENERATE_COMBRELOC_SCRIPT"; then @@ -148,12 +165,37 @@ if test -n "$GENERATE_SHLIB_SCRIPT"; then 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 + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc rm -f ${COMBRELOC} COMBRELOC= fi + unset CREATE_SHLIB +fi + +if test -n "$GENERATE_PIE_SCRIPT"; then + LD_FLAG=pie + DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} + CREATE_PIE=" " + # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. + ( + echo "/* Script for ld -pie: link position independent executable */" + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} + . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc + ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd + if test -n "$GENERATE_COMBRELOC_SCRIPT"; then + LD_FLAG=cpie + DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} + COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp + ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */" + . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} + . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc + ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc + rm -f ${COMBRELOC} + COMBRELOC= + fi + unset CREATE_PIE fi case " $EMULATION_LIBPATH " in |