genscripts.sh revision 204548
152939Sjb#!/bin/sh 252939Sjb# genscripts.sh - generate the ld-emulation-target specific files 352939Sjb# 452939Sjb# Usage: genscripts.sh srcdir libdir host target target_alias \ 552939Sjb# default_emulation native_lib_dirs this_emulation 652939Sjb# 752939Sjb# Sample usage: 852939Sjb# genscripts.sh /djm/ld-devo/devo/ld /usr/local/lib sparc-sun-sunos4.1.3 \ 952939Sjb# sparc-sun-sunos4.1.3 sparc-sun-sunos4.1.3 sun4 "" sun3 sparc-sun-sunos4.1.3 1052939Sjb# produces sun3.x sun3.xbn sun3.xn sun3.xr sun3.xu em_sun3.c 1152939Sjb# 1252939Sjb# $FreeBSD: head/gnu/usr.bin/binutils/ld/genscripts.sh 204548 2010-03-02 05:43:04Z imp $ 1352939Sjb# 1452939Sjb# This is a cut-down version of the GNU script. Instead of jumping through 1552939Sjb# hoops for all possible combinations of paths, just use the libdir 1652939Sjb# argument in place of LIB_PATH. 1752939Sjb# 18130575Sobrien# The exec_prefix, target_alias, use_sysroot, NATIVE_LIB_DIRS, TOOL_LIB, CUSTOMIZER_SCRIPT 19130575Sobrien# arguments are not used in this version. 2052939Sjb# 2152939Sjb 2252939Sjbsrcdir=$1 2352939Sjblibdir=$2 24130575Sobrienexec_prefix=$3 25130575Sobrienhost=$4 26130575Sobrientarget=$5 27130575Sobrientarget_alias=$6 28130575SobrienEMULATION_LIBPATH=$7 29130575SobrienNATIVE_LIB_DIRS=$8 30130575Sobrienuse_sysroot=$9 31130575Sobrienshift 9 32130575SobrienEMULATION_NAME=$1 33130575SobrienTOOL_LIB=$2 34130575SobrienCUSTOMIZER_SCRIPT=$3 3552939Sjb 36130575Sobrien# Create the 'CUSTOMIZER_SCRIPT' knob to better sync this script with 37130575Sobrien# FSF BU ver 2.15 which allows for a more generic emulparams processing. 38130575Sobrien# To reduce the diff, I also include the ${EMULATION_NAME} parameter in uses 39130575Sobrien# of 'CUSTOMIZER_SCRIPT'. 40162301Simp 41162301Simp# XXX: arm hack : until those file are merged back into the FSF repo, just 42162301Simp# use the version in this directory. 43162301Simpif !(test -f ${CUSTOMIZER_SCRIPT}"";) then 44130575SobrienCUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh" 45162301Simpfi 46130575Sobrien 4752939Sjb# Include the emulation-specific parameters: 48130575Sobrien. ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 4952939Sjb 5052939Sjbif test -d ldscripts; then 5152939Sjb true 5252939Sjbelse 53204548Simp rm -f ldscripts 5452939Sjb mkdir ldscripts 5552939Sjbfi 5652939Sjb 57130575Sobrien# Set some flags for the emultempl scripts. USE_LIBPATH will 58172243Sobrien# be set for any libpath-using emulation; NATIVE will be set for a 59172243Sobrien# emulation to enable 'LD_LIBRARY_PATH=/foo:/bar ld -lfooz' 60172243Sobrien if [ "x${host}" = "x${target}" ] ; then 61172243Sobrien NATIVE=yes 62172243Sobrien fi 63172243Sobrien USE_LIBPATH=yes 64130575Sobrien 6560777Sobrien# Set the library search path, for libraries named by -lfoo. 6660777Sobrien# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used. 6760777Sobrien# Otherwise, the default is set here. 6860777Sobrien# 6960777Sobrien# The format is the usual list of colon-separated directories. 7060777Sobrien# To force a logically empty LIB_PATH, do LIBPATH=":". 7160777Sobrien 72104878SobrienLIB_SEARCH_DIRS=`echo ${libdir} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\1);/g'` 73130575Sobrien#2.13: LIB_SEARCH_DIRS=`echo ${libdir} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'` 7452939Sjb 7552939Sjb# Generate 5 or 6 script files from a master script template in 7652939Sjb# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh. Which one of the 5 or 6 7752939Sjb# script files is actually used depends on command line options given 7852939Sjb# to ld. (SCRIPT_NAME was set in the emulparams_file.) 7952939Sjb# 8052939Sjb# A .x script file is the default script. 8152939Sjb# A .xr script is for linking without relocation (-r flag). 8252939Sjb# A .xu script is like .xr, but *do* create constructors (-Ur flag). 8352939Sjb# A .xn script is for linking with -n flag (mix text and data on same page). 8452939Sjb# A .xbn script is for linking with -N flag (mix text and data on same page). 8552939Sjb# A .xs script is for generating a shared library with the --shared 8652939Sjb# flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the 8752939Sjb# emulation parameters. 8892237Sobrien# A .xc script is for linking with -z combreloc; it is only generated if 8992237Sobrien# $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or 9092237Sobrien# $SCRIPT_NAME is "elf". 9192237Sobrien# A .xsc script is for linking with --shared -z combreloc; it is generated 9292237Sobrien# if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or 9392237Sobrien# $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation 9492237Sobrien# parameters too. 9552939Sjb 9692237Sobrienif [ "x$SCRIPT_NAME" = "xelf" ]; then 9792237Sobrien GENERATE_COMBRELOC_SCRIPT=yes 9892237Sobrienfi 9992237Sobrien 100130575Sobrien#2.13: SEGMENT_SIZE=${SEGMENT_SIZE-${TARGET_PAGE_SIZE}} 101130575SobrienSEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}} 10252939Sjb 10352939Sjb# Determine DATA_ALIGNMENT for the 5 variants, using 10452939Sjb# values specified in the emulparams/<emulation>.sh file or default. 10552939Sjb 10652939SjbDATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}" 10752939SjbDATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}" 10852939SjbDATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}" 10952939SjbDATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}" 11052939SjbDATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}" 11152939Sjb 11252939SjbLD_FLAG=r 11352939SjbDATA_ALIGNMENT=${DATA_ALIGNMENT_r} 11452939SjbDEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})" 11592237Sobrien( echo "/* Script for ld -r: link without relocation */" 116130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 11792237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 11892237Sobrien) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr 11952939Sjb 12052939SjbLD_FLAG=u 12152939SjbDATA_ALIGNMENT=${DATA_ALIGNMENT_u} 12252939SjbCONSTRUCTING=" " 12392237Sobrien( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */" 124130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 12592237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 12692237Sobrien) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu 12752939Sjb 12852939SjbLD_FLAG= 12952939SjbDATA_ALIGNMENT=${DATA_ALIGNMENT_} 13052939SjbRELOCATING=" " 13192237Sobrien( echo "/* Default linker script, for normal executables */" 132130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 13392237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 13492237Sobrien) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x 13552939Sjb 13652939SjbLD_FLAG=n 13752939SjbDATA_ALIGNMENT=${DATA_ALIGNMENT_n} 13852939SjbTEXT_START_ADDR=${NONPAGED_TEXT_START_ADDR-${TEXT_START_ADDR}} 13992237Sobrien( echo "/* Script for -n: mix text and data on same page */" 140130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 14192237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 14292237Sobrien) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn 14352939Sjb 14452939SjbLD_FLAG=N 14552939SjbDATA_ALIGNMENT=${DATA_ALIGNMENT_N} 14692237Sobrien( echo "/* Script for -N: mix text and data on same page; don't align data */" 147130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 14892237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 14992237Sobrien) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn 15052939Sjb 15192237Sobrienif test -n "$GENERATE_COMBRELOC_SCRIPT"; then 15292237Sobrien DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}} 15392237Sobrien LD_FLAG=c 15492237Sobrien COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp 15592237Sobrien ( echo "/* Script for -z combreloc: combine and sort reloc sections */" 156130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 15792237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 15892237Sobrien ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc 15992237Sobrien rm -f ${COMBRELOC} 16092237Sobrien COMBRELOC= 16192237Sobrienfi 16292237Sobrien 16352939Sjbif test -n "$GENERATE_SHLIB_SCRIPT"; then 16452939Sjb LD_FLAG=shared 16552939Sjb DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} 16652939Sjb CREATE_SHLIB=" " 16752939Sjb # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. 16892237Sobrien ( 16992237Sobrien echo "/* Script for ld --shared: link shared library */" 170130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 17192237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 17292237Sobrien ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs 17392237Sobrien if test -n "$GENERATE_COMBRELOC_SCRIPT"; then 17492237Sobrien LD_FLAG=cshared 17592237Sobrien DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} 17692237Sobrien COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp 17792237Sobrien ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */" 178130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 17992237Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 18092237Sobrien ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc 18192237Sobrien rm -f ${COMBRELOC} 18292237Sobrien COMBRELOC= 18392237Sobrien fi 184130575Sobrien unset CREATE_SHLIB 18552939Sjbfi 18652939Sjb 187130575Sobrienif test -n "$GENERATE_PIE_SCRIPT"; then 188130575Sobrien LD_FLAG=pie 189130575Sobrien DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} 190130575Sobrien CREATE_PIE=" " 191130575Sobrien # Note that TEXT_START_ADDR is set to NONPAGED_TEXT_START_ADDR. 192130575Sobrien ( 193130575Sobrien echo "/* Script for ld -pie: link position independent executable */" 194130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 195130575Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 196130575Sobrien ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd 197130575Sobrien if test -n "$GENERATE_COMBRELOC_SCRIPT"; then 198130575Sobrien LD_FLAG=cpie 199130575Sobrien DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} 200130575Sobrien COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp 201130575Sobrien ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */" 202130575Sobrien . ${CUSTOMIZER_SCRIPT} ${EMULATION_NAME} 203130575Sobrien . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 204130575Sobrien ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc 205130575Sobrien rm -f ${COMBRELOC} 206130575Sobrien COMBRELOC= 207130575Sobrien fi 208130575Sobrien unset CREATE_PIE 209130575Sobrienfi 210130575Sobrien 211104878Sobriencase " $EMULATION_LIBPATH " in 212104878Sobrien *" ${EMULATION_NAME} "*) COMPILE_IN=true;; 213104878Sobrienesac 214104878Sobrien 21552939Sjb# Generate e${EMULATION_NAME}.c. 21652939Sjb. ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em 217