genscripts.sh revision 256281
121826Sjoerg#!/bin/sh 221826Sjoerg# genscripts.sh - generate the ld-emulation-target specific files 321826Sjoerg# 421826Sjoerg# Usage: genscripts.sh srcdir libdir host target target_alias \ 521826Sjoerg# default_emulation native_lib_dirs this_emulation 621826Sjoerg# 721826Sjoerg# Sample usage: 821826Sjoerg# genscripts.sh /djm/ld-devo/devo/ld /usr/local/lib sparc-sun-sunos4.1.3 \ 921826Sjoerg# sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sun4 "" sun3 sparc-sun-sunos4.1.3 1021826Sjoerg# produces sun3.x sun3.xbn sun3.xn sun3.xr sun3.xu em_sun3.c 1197748Sschweikh# 1221826Sjoerg# $FreeBSD: stable/10/gnu/usr.bin/binutils/ld/genscripts.sh 218822 2011-02-18 20:54:12Z dim $ 1321826Sjoerg# 1421826Sjoerg# This is a cut-down version of the GNU script. Instead of jumping through 1521826Sjoerg# hoops for all possible combinations of paths, just use the libdir 1621826Sjoerg# argument in place of LIB_PATH. 1721826Sjoerg# 1821826Sjoerg# The exec_prefix, target_alias, use_sysroot, NATIVE_LIB_DIRS, TOOL_LIB, CUSTOMIZER_SCRIPT 1921826Sjoerg# arguments are not used in this version. 2021826Sjoerg# 2121826Sjoerg 2221826Sjoergsrcdir=$1 2321826Sjoerglibdir=$2 2421826Sjoergexec_prefix=$3 2521826Sjoerghost=$4 2621826Sjoergtarget=$5 27119418Sobrientarget_alias=$6 28119418SobrienEMULATION_LIBPATH=$7 29119418SobrienNATIVE_LIB_DIRS=$8 3021826Sjoerguse_sysroot=$9 3121826Sjoergshift 9 3221826SjoergEMULATION_NAME=$1 3321826SjoergTOOL_LIB=$2 3421826SjoergCUSTOMIZER_SCRIPT=$3 3521826Sjoerg 3621826Sjoerg# Create the 'CUSTOMIZER_SCRIPT' knob to better sync this script with 3793383Smdodd# FSF BU ver 2.15 which allows for a more generic emulparams processing. 3821826Sjoerg# To reduce the diff, I also include the ${EMULATION_NAME} parameter in uses 3921826Sjoerg# of 'CUSTOMIZER_SCRIPT'. 4021826Sjoerg 4193383Smdodd# XXX: arm hack : until those file are merged back into the FSF repo, just 4293383Smdodd# use the version in this directory. 4321826Sjoergif !(test -f ${CUSTOMIZER_SCRIPT}"";) then 4470594SpeterCUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh" 4570594Speterfi 4693383Smdodd 4721826Sjoerg# Include the emulation-specific parameters: 4893383Smdodd. ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 4993383Smdodd 5093383Smdoddif test -d ldscripts; then 5121826Sjoerg true 5293383Smdoddelse 5393383Smdodd rm -f ldscripts 5493383Smdodd mkdir ldscripts 5593383Smdoddfi 5693383Smdodd 5793383Smdodd# Set some flags for the emultempl scripts. USE_LIBPATH will 5821826Sjoerg# be set for any libpath-using emulation; NATIVE will be set for a 5921826Sjoerg# emulation to enable 'LD_LIBRARY_PATH=/foo:/bar ld -lfooz' 6021826Sjoerg if [ "x${host}" = "x${target}" ] ; then 6121826Sjoerg NATIVE=yes 6221826Sjoerg fi 6321826Sjoerg USE_LIBPATH=yes 6421826Sjoerg 6521826Sjoerg# Set the library search path, for libraries named by -lfoo. 6621826Sjoerg# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used. 6793383Smdodd# Otherwise, the default is set here. 6893383Smdodd# 6993383Smdodd# The format is the usual list of colon-separated directories. 70194023Savg# To force a logically empty LIB_PATH, do LIBPATH=":". 7193383Smdodd 7293383SmdoddLIB_SEARCH_DIRS=`echo ${libdir} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g'` 7370594Speter 7470594Speter# Generate 5 or 6 script files from a master script template in 7521826Sjoerg# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6 7670594Speter# script files is actually used depends on command line options given 7721826Sjoerg# to ld. (SCRIPT_NAME was set in the emulparams_file.) 78199542Sjhb# 7993383Smdodd# A .x script file is the default script. 8093383Smdodd# A .xr script is for linking without relocation (-r flag). 8121826Sjoerg# A .xu script is like .xr, but *do* create constructors (-Ur flag). 8293383Smdodd# A .xn script is for linking with -n flag (mix text and data on same page). 8393383Smdodd# A .xbn script is for linking with -N flag (mix text and data on same page). 8493383Smdodd# A .xs script is for generating a shared library with the --shared 8521826Sjoerg# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the 8621826Sjoerg# emulation parameters. 8721826Sjoerg# A .xc script is for linking with -z combreloc; it is only generated if 8870594Speter# $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or 8921826Sjoerg# $SCRIPT_NAME is "elf". 9070594Speter# A .xsc script is for linking with --shared -z combreloc; it is generated 9170594Speter# if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or 9221826Sjoerg# $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation 9370594Speter# parameters too. 9470594Speter 9570594Speterif [ "x$SCRIPT_NAME" = "xelf" ]; then 96143158Simp GENERATE_COMBRELOC_SCRIPT=yes 9721826Sjoergfi 9893383Smdodd 9993383SmdoddSEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}} 10021826Sjoerg 10121826Sjoerg# Determine DATA_ALIGNMENT for the 5 variants, using 10221826Sjoerg# values specified in the emulparams/<script_to_run>.sh file or default. 10370594Speter 10421826SjoergDATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}" 10570594SpeterDATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}" 10693383SmdoddDATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}" 10793383SmdoddDATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}" 10821826SjoergDATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}" 10970594Speter 11021826SjoergLD_FLAG=r 11193383SmdoddDATA_ALIGNMENT=${DATA_ALIGNMENT_r} 11293383SmdoddDEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})" 11393383Smdodd( echo "/* Script for ld -r: link without relocation */" 11493383Smdodd . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 11593383Smdodd . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 11693383Smdodd) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr 11793383Smdodd 11893383SmdoddLD_FLAG=u 11993383SmdoddDATA_ALIGNMENT=${DATA_ALIGNMENT_u} 12093383SmdoddCONSTRUCTING=" " 12193383Smdodd( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */" 12293383Smdodd . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 12393383Smdodd . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 12493383Smdodd) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu 12593383Smdodd 126127135SnjlLD_FLAG= 127127135SnjlDATA_ALIGNMENT=${DATA_ALIGNMENT_} 12893383SmdoddRELOCATING=" " 12993383Smdodd( echo "/* Default linker script, for normal executables */" 13093383Smdodd . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 13170594Speter . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 13293383Smdodd) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x 13393383Smdodd 13493383SmdoddLD_FLAG=n 13593383SmdoddDATA_ALIGNMENT=${DATA_ALIGNMENT_n} 13693383SmdoddTEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}} 137127135Snjl( echo "/* Script for -n: mix text and data on same page */" 138127135Snjl . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 13993383Smdodd . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 14093383Smdodd) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn 14193383Smdodd 14270594SpeterLD_FLAG=N 14393383SmdoddDATA_ALIGNMENT=${DATA_ALIGNMENT_N} 14493383Smdodd( echo "/* Script for -N: mix text and data on same page; don't align data */" 145199542Sjhb . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 146199542Sjhb . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 14770594Speter) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn 148199542Sjhb 149199542Sjhbif test -n "$GENERATE_COMBRELOC_SCRIPT"; then 150199542Sjhb DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}} 15193383Smdodd LD_FLAG=c 15293383Smdodd COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp 153199542Sjhb ( echo "/* Script for -z combreloc: combine and sort reloc sections */" 154199542Sjhb . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 15593383Smdodd . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 15693383Smdodd ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc 15793383Smdodd rm -f ${COMBRELOC} 15893383Smdodd LD_FLAG=w 15970594Speter RELRO_NOW=" " 16093383Smdodd COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp 16193383Smdodd ( echo "/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */" 16221826Sjoerg . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 16321826Sjoerg . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 16493383Smdodd ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xw 16593383Smdodd rm -f ${COMBRELOC} 16693383Smdodd COMBRELOC= 16793383Smdodd unset RELRO_NOW 16893383Smdoddfi 16993383Smdodd 17093383Smdoddif test -n "$GENERATE_SHLIB_SCRIPT"; then 17193383Smdodd LD_FLAG=shared 17293383Smdodd DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} 17393383Smdodd CREATE_SHLIB=" " 17493383Smdodd # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. 17593383Smdodd ( 176194023Savg echo "/* Script for ld --shared: link shared library */" 17770594Speter . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 17821826Sjoerg . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 17970594Speter ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs 18021826Sjoerg if test -n "$GENERATE_COMBRELOC_SCRIPT"; then 18170594Speter LD_FLAG=cshared 182199542Sjhb DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} 18370594Speter COMBRELOC=ldscripts/${EMULATION_NAME}.xsc.tmp 184199542Sjhb ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */" 18593383Smdodd . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 186194023Savg . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 18721826Sjoerg ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc 18821826Sjoerg rm -f ${COMBRELOC} 18970594Speter LD_FLAG=wshared 19070594Speter RELRO_NOW=" " 19170594Speter COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp 19270594Speter ( echo "/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */" 19393383Smdodd . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 19470594Speter . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 19593383Smdodd ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsw 19670594Speter rm -f ${COMBRELOC} 19721826Sjoerg COMBRELOC= 19893383Smdodd unset RELRO_NOW 19970594Speter fi 20070594Speter unset CREATE_SHLIB 20170594Speterfi 20270594Speter 20321826Sjoergif test -n "$GENERATE_PIE_SCRIPT"; then 20493383Smdodd LD_FLAG=pie 205113506Smdodd DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} 206113506Smdodd CREATE_PIE=" " 207113506Smdodd # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. 208 ( 209 echo "/* Script for ld -pie: link position independent executable */" 210 . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 211 . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 212 ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd 213 if test -n "$GENERATE_COMBRELOC_SCRIPT"; then 214 LD_FLAG=cpie 215 DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} 216 COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp 217 ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */" 218 . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 219 . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 220 ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc 221 rm -f ${COMBRELOC} 222 LD_FLAG=wpie 223 RELRO_NOW=" " 224 COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp 225 ( echo "/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */" 226 . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 227 . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 228 ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdw 229 rm -f ${COMBRELOC} 230 COMBRELOC= 231 unset RELRO_NOW 232 fi 233 unset CREATE_PIE 234fi 235 236case " $EMULATION_LIBPATH " in 237 *" ${EMULATION_NAME} "*) COMPILE_IN=true;; 238esac 239 240# Generate e${EMULATION_NAME}.c. 241. ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em 242