1fae548d3Szrj#!/bin/sh 2fae548d3Szrj# genscripts.sh - generate the ld-emulation-target specific files 3fae548d3Szrj# Copyright (C) 2004-2020 Free Software Foundation, Inc. 4fae548d3Szrj# 5fae548d3Szrj# This file is part of the Gnu Linker. 6fae548d3Szrj# 7fae548d3Szrj# This program is free software; you can redistribute it and/or modify 8fae548d3Szrj# it under the terms of the GNU General Public License as published by 9fae548d3Szrj# the Free Software Foundation; either version 3, or (at your option) 10fae548d3Szrj# any later version. 11fae548d3Szrj# 12fae548d3Szrj# This program is distributed in the hope that it will be useful, 13fae548d3Szrj# but WITHOUT ANY WARRANTY; without even the implied warranty of 14fae548d3Szrj# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15fae548d3Szrj# GNU General Public License for more details. 16fae548d3Szrj# 17fae548d3Szrj# You should have received a copy of the GNU General Public License 18fae548d3Szrj# along with GLD; see the file COPYING. If not, write to the Free 19fae548d3Szrj# Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 20fae548d3Szrj# 02110-1301, USA. 21fae548d3Szrj# 22fae548d3Szrj# Usage: genscripts_extra.sh \ 23fae548d3Szrj# srcdir \ 24fae548d3Szrj# libdir \ 25fae548d3Szrj# prefix \ 26fae548d3Szrj# exec_prefix \ 27fae548d3Szrj# host \ 28fae548d3Szrj# target \ 29fae548d3Szrj# target_alias \ 30fae548d3Szrj# default_emulation \ 31fae548d3Szrj# native_lib_dirs \ 32fae548d3Szrj# use_sysroot \ 33fae548d3Szrj# enable_initfini_array \ 34fae548d3Szrj# this_emulation \ 35fae548d3Szrj# optional: 36fae548d3Szrj# tool_dir 37fae548d3Szrj# 38fae548d3Szrj# Sample usage: 39fae548d3Szrj# 40fae548d3Szrj# genscripts_extra.sh \ 41fae548d3Szrj# /sources/ld \ 42fae548d3Szrj# /usr/local/lib \ 43fae548d3Szrj# /usr/local \ 44fae548d3Szrj# /usr/local \ 45fae548d3Szrj# sparc-sun-sunos4.1.3 \ 46fae548d3Szrj# sparc-sun-sunos4.1.3 \ 47fae548d3Szrj# sparc-sun-sunos4.1.3 \ 48fae548d3Szrj# sun4 \ 49fae548d3Szrj# "" \ 50fae548d3Szrj# no \ 51fae548d3Szrj# sun3 \ 52fae548d3Szrj# sparc-sun-sunos4.1.3 \ 53fae548d3Szrj# sparc.sh 54fae548d3Szrj# 55fae548d3Szrj# produces the linker scripts: 56fae548d3Szrj# 57fae548d3Szrj# sun3.x [default linker script] 58fae548d3Szrj# sun3.xbn [used when the linker is invoked with "-N"] 59fae548d3Szrj# sun3.xn [used when the linker is invoked with "-n"] 60fae548d3Szrj# sun3.xr [used when the linker is invoked with "-r"] 61fae548d3Szrj# sun3.xu [used when the linker is invoked with "-Ur"] 62fae548d3Szrj# 63fae548d3Szrj# depending on platform specific settings linker scripts with the 64fae548d3Szrj# following suffixes might be generated as well: 65fae548d3Szrj# 66fae548d3Szrj# xdwe: -pie -z combreloc -z separate-code -z relro -z now 67fae548d3Szrj# xdw: -pie -z combreloc -z relro -z now 68fae548d3Szrj# xdceo: -pie -z combreloc -z separate-code -z relro 69fae548d3Szrj# xdce: -pie -z combreloc -z separate-code 70fae548d3Szrj# xdco: -pie -z combreloc -z relro 71fae548d3Szrj# xdc: -pie -z combreloc 72fae548d3Szrj# xdeo: -pie -z separate-code -z relro 73fae548d3Szrj# xde: -pie -z separate-code 74fae548d3Szrj# xdo: -pie -z relro 75fae548d3Szrj# xd: -pie 76fae548d3Szrj# 77fae548d3Szrj# xswe: -shared -z combreloc -z separate-code -z relro -z now 78fae548d3Szrj# xsw: -shared -z combreloc -z relro -z now 79fae548d3Szrj# xsceo: -shared -z combreloc -z separate-code -z relro 80fae548d3Szrj# xsce: -shared -z combreloc -z separate-code 81fae548d3Szrj# xsco: -shared -z combreloc -z relro 82fae548d3Szrj# xsc: -shared -z combreloc 83fae548d3Szrj# xseo: -shared -z separate-code -z relro 84fae548d3Szrj# xse: -shared -z separate-code 85fae548d3Szrj# xso: -shared -z relro 86fae548d3Szrj# xs: -shared 87fae548d3Szrj# 88fae548d3Szrj# xwe: -z combreloc -z separate-code -z relro -z now 89fae548d3Szrj# xw: -z combreloc -z relro -z now 90fae548d3Szrj# xceo: -z combreloc -z separate-code -z relro 91fae548d3Szrj# xce: -z combreloc -z separate-code 92fae548d3Szrj# xco: -z combreloc -z relro 93fae548d3Szrj# xc: -z combreloc 94fae548d3Szrj# xeo: -z separate-code -z relro 95fae548d3Szrj# xe: -z separate-code 96fae548d3Szrj# xo: -z relro 97fae548d3Szrj# 98fae548d3Szrj# 99fae548d3Szrj# It also produced the C source file: 100fae548d3Szrj# 101fae548d3Szrj# em_sun3.c 102fae548d3Szrj# 103fae548d3Szrj# which is then compiled into the linker. 104fae548d3Szrj# 105fae548d3Szrj# The linker scripts are created by running the shell script 106fae548d3Szrj# /sources/ld/emulparams/sparc.sh to set the value of ${SCRIPT_NAME} 107fae548d3Szrj# (and any other variables it wants to). ${SCRIPT_NAME} is then 108fae548d3Szrj# invoked with a variable called ${LD_FLAG} to tell it which version 109fae548d3Szrj# of the linker script to create. 110fae548d3Szrj 111fae548d3Szrj 112fae548d3Szrjsrcdir=$1 113fae548d3Szrjlibdir=$2 114fae548d3Szrjprefix=$3 115fae548d3Szrjexec_prefix=$4 116fae548d3Szrjhost=$5 117fae548d3Szrjtarget=$6 118fae548d3Szrjtarget_alias=$7 119fae548d3SzrjDEPDIR=$8 120fae548d3Szrjshift 8 121fae548d3SzrjLIB_PATH=$1 122fae548d3SzrjEMULATION_LIBPATH=$2 123fae548d3SzrjNATIVE_LIB_DIRS=$3 124fae548d3Szrjuse_sysroot=$4 125fae548d3SzrjENABLE_INITFINI_ARRAY=$5 126fae548d3Szrjshift 5 127fae548d3SzrjEMULATION_NAME=$1 128fae548d3SzrjTOOL_LIB=$2 129fae548d3Szrj 130fae548d3Szrjsource_sh() 131fae548d3Szrj{ 132*a72d4fb1Szrj if test -d "${DEPDIR}"; then 133fae548d3Szrj echo $1 >> ${DEPDIR}/e${EMULATION_NAME}.Tc 134fae548d3Szrj fi 135fae548d3Szrj . $1 136fae548d3Szrj} 137fae548d3Szrj 138*a72d4fb1Szrjif test -d "${DEPDIR}"; then 139fae548d3Szrj rm -f ${DEPDIR}/e${EMULATION_NAME}.Tc 140fae548d3Szrjfi 141fae548d3Szrj 142fae548d3Szrj# Include the emulation-specific parameters: 143fae548d3SzrjCUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh" 144fae548d3Szrjsource_sh ${CUSTOMIZER_SCRIPT} 145fae548d3Szrj 146fae548d3Szrjif test -d ldscripts; then 147fae548d3Szrj true 148fae548d3Szrjelse 149fae548d3Szrj mkdir ldscripts 150fae548d3Szrjfi 151fae548d3Szrj 152fae548d3Szrj# Set some flags for the emultempl scripts. USE_LIBPATH will 153fae548d3Szrj# be set for any libpath-using emulation; NATIVE will be set for a 154fae548d3Szrj# libpath-using emulation where ${host} = ${target}. NATIVE 155fae548d3Szrj# may already have been set by the emulparams file, but that's OK 156fae548d3Szrj# (it'll just get set to "yes" twice). 157fae548d3Szrj 158fae548d3Szrjcase " $EMULATION_LIBPATH " in 159fae548d3Szrj *" ${EMULATION_NAME} "*) 160fae548d3Szrj if [ "x${host}" = "x${target}" ] ; then 161fae548d3Szrj NATIVE=yes 162fae548d3Szrj USE_LIBPATH=yes 163fae548d3Szrj elif [ "x${use_sysroot}" = "xyes" ] ; then 164fae548d3Szrj USE_LIBPATH=yes 165fae548d3Szrj fi 166fae548d3Szrj ;; 167fae548d3Szrjesac 168fae548d3Szrj 169fae548d3Szrj# If the emulparams file sets NATIVE, make sure USE_LIBPATH is set also. 170fae548d3Szrjif test "x$NATIVE" = "xyes" ; then 171fae548d3Szrj USE_LIBPATH=yes 172fae548d3Szrjfi 173fae548d3Szrj 174fae548d3Szrj# Set the library search path, for libraries named by -lfoo. 175fae548d3Szrj# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used. 176fae548d3Szrj# Otherwise, the default is set here. 177fae548d3Szrj# 178fae548d3Szrj# The format is the usual list of colon-separated directories. 179fae548d3Szrj# To force a logically empty LIB_PATH, do LIBPATH=":". 180fae548d3Szrj# 181fae548d3Szrj# If we are using a sysroot, prefix library paths with "=" to indicate this. 182fae548d3Szrj# 183fae548d3Szrj# If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of 184fae548d3Szrj# the library path with the suffix applied. 185fae548d3Szrj 186fae548d3Szrj# Paths with LIBPATH_SUFFIX 187fae548d3Szrjlib_path1= 188fae548d3Szrj# Paths without LIBPATH_SUFFIX 189fae548d3Szrjlib_path2= 190fae548d3Szrjif [ "${LIB_PATH}" != ":" ] ; then 191fae548d3Szrj lib_path2=${LIB_PATH} 192fae548d3Szrjfi 193fae548d3Szrj 194fae548d3Szrj# Add args to lib_path1 and lib_path2, discarding any duplicates 195fae548d3Szrjappend_to_lib_path() 196fae548d3Szrj{ 197fae548d3Szrj if [ $# != 0 ]; then 198fae548d3Szrj for lib in "$@"; do 199fae548d3Szrj # The "=" is harmless if we aren't using a sysroot, but also needless. 200fae548d3Szrj if [ "x${use_sysroot}" = "xyes" ] ; then 201fae548d3Szrj lib="=${lib}" 202fae548d3Szrj fi 203fae548d3Szrj skip_lib=no 204fae548d3Szrj for libpath_suffix in ${LIBPATH_SUFFIX}; do 205fae548d3Szrj case "${lib}" in 206fae548d3Szrj *${libpath_suffix}) 207fae548d3Szrj case :${lib_path1}: in 208fae548d3Szrj *:${lib}:*) ;; 209fae548d3Szrj ::) lib_path1=${lib} ;; 210fae548d3Szrj *) lib_path1=${lib_path1}:${lib} ;; 211fae548d3Szrj esac ;; 212fae548d3Szrj *) 213fae548d3Szrj if test -n "${LIBPATH_SUFFIX_SKIP}"; then 214fae548d3Szrj case "${lib}" in 215fae548d3Szrj *${LIBPATH_SUFFIX_SKIP}) skip_lib=yes ;; 216fae548d3Szrj esac 217fae548d3Szrj fi 218fae548d3Szrj if test "${skip_lib}" = "no"; then 219fae548d3Szrj case :${lib_path1}: in 220fae548d3Szrj *:${lib}${libpath_suffix}:*) ;; 221fae548d3Szrj ::) lib_path1=${lib}${libpath_suffix} ;; 222fae548d3Szrj *) lib_path1=${lib_path1}:${lib}${libpath_suffix} ;; 223fae548d3Szrj esac 224fae548d3Szrj fi ;; 225fae548d3Szrj esac 226fae548d3Szrj done 227fae548d3Szrj if test "${skip_lib}" = "no"; then 228fae548d3Szrj case :${lib_path1}:${lib_path2}: in 229fae548d3Szrj *:${lib}:*) ;; 230fae548d3Szrj *::) lib_path2=${lib} ;; 231fae548d3Szrj *) lib_path2=${lib_path2}:${lib} ;; 232fae548d3Szrj esac 233fae548d3Szrj fi 234fae548d3Szrj done 235fae548d3Szrj fi 236fae548d3Szrj} 237fae548d3Szrj 238fae548d3Szrj# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib when native 239fae548d3Szrj# except when LIBPATH=":". 240fae548d3Szrjif [ "${LIB_PATH}" != ":" ] ; then 241fae548d3Szrj libs= 242fae548d3Szrj if [ "x${TOOL_LIB}" = "x" ] ; then 243fae548d3Szrj if [ "x${NATIVE}" = "xyes" ] ; then 244fae548d3Szrj libs="${exec_prefix}/${target_alias}/lib" 245fae548d3Szrj fi 246fae548d3Szrj else 247fae548d3Szrj # For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX} 248fae548d3Szrj # and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path, 249fae548d3Szrj # because 64bit libraries may be in both places, depending on 250fae548d3Szrj # cross-development setup method (e.g.: /usr/s390x-linux/lib64 251fae548d3Szrj # vs. /usr/s390-linux/lib64) 252fae548d3Szrj for libpath_suffix in ${LIBPATH_SUFFIX}; do 253fae548d3Szrj case "${NATIVE}:${libpath_suffix}:${TOOL_LIB}" in 254fae548d3Szrj :* | *::* | *:*:*${libpath_suffix}) ;; 255fae548d3Szrj *) libs="${exec_prefix}/${target_alias}/lib${libpath_suffix}" ;; 256fae548d3Szrj esac 257fae548d3Szrj done 258fae548d3Szrj libs="${exec_prefix}/${TOOL_LIB}/lib ${libs}" 259fae548d3Szrj fi 260fae548d3Szrj append_to_lib_path ${libs} 261fae548d3Szrjfi 262fae548d3Szrj 263fae548d3Szrjif [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then 264fae548d3Szrj libs=${NATIVE_LIB_DIRS} 265fae548d3Szrj if [ "x${NATIVE}" = "xyes" ] ; then 266fae548d3Szrj case " ${libs} " in 267fae548d3Szrj *" ${libdir} "*) ;; 268fae548d3Szrj *) libs="${libdir} ${libs}" ;; 269fae548d3Szrj esac 270fae548d3Szrj fi 271fae548d3Szrj append_to_lib_path ${libs} 272fae548d3Szrjfi 273fae548d3Szrj 274fae548d3Szrjcase :${lib_path1}:${lib_path2}: in 275fae548d3Szrj *:: | ::*) LIB_PATH=${lib_path1}${lib_path2} ;; 276fae548d3Szrj *) LIB_PATH=${lib_path1}:${lib_path2} ;; 277fae548d3Szrjesac 278fae548d3Szrj 279fae548d3SzrjLIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'` 280fae548d3Szrj 281fae548d3Szrj# We need it for testsuite. 282fae548d3Szrjset $EMULATION_LIBPATH 283fae548d3Szrjif [ "x$1" = "x$EMULATION_NAME" ]; then 284fae548d3Szrj test -d tmpdir || mkdir tmpdir 285fae548d3Szrj rm -f tmpdir/libpath.exp 286fae548d3Szrj echo "set libpath \"${LIB_PATH}\"" | sed -e 's/:/ /g' > tmpdir/libpath.exp 287fae548d3Szrjfi 288fae548d3Szrj 289fae548d3Szrjif [ "x$SCRIPT_NAME" = "xelf" ]; then 290fae548d3Szrj GENERATE_COMBRELOC_SCRIPT=yes 291fae548d3Szrjfi 292fae548d3Szrj 293fae548d3SzrjSEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}} 294fae548d3Szrj 295fae548d3Szrj# Determine DATA_ALIGNMENT for the 5 variants, using 296fae548d3Szrj# values specified in the emulparams/<script_to_run>.sh file or default. 297fae548d3Szrj 298fae548d3SzrjDATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}" 299fae548d3SzrjDATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}" 300fae548d3SzrjDATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}" 301fae548d3SzrjDATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}" 302fae548d3SzrjDATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}" 303fae548d3Szrj 304fae548d3SzrjLD_FLAG=r 305fae548d3SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_r} 306fae548d3SzrjDEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})" 307fae548d3Szrj( echo "/* Script for -r */" 308fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 309fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 310fae548d3Szrj) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xr 311fae548d3Szrj 312fae548d3SzrjLD_FLAG=u 313fae548d3SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_u} 314fae548d3SzrjCONSTRUCTING=" " 315fae548d3Szrj( echo "/* Script for -Ur */" 316fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 317fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 318fae548d3Szrj) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xu 319fae548d3Szrj 320fae548d3SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_} 321fae548d3SzrjRELOCATING=" " 322fae548d3SzrjLD_FLAG= 323fae548d3Szrj( echo "/* Default linker script, for normal executables */" 324fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 325fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 326fae548d3Szrj) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.x 327fae548d3Szrj 328fae548d3SzrjLD_FLAG=textonly 329fae548d3Szrj( echo "/* Script for -z separate-code */" 330fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 331fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 332fae548d3Szrj) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xe 333fae548d3Szrj 334fae548d3Szrjif test -n "$GENERATE_RELRO_SCRIPT"; then 335fae548d3Szrj LD_FLAG= 336fae548d3Szrj RELRO=" " 337fae548d3Szrj ( echo "/* Script for -z relro */" 338fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 339fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 340fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xo 341fae548d3Szrj LD_FLAG=textonly 342fae548d3Szrj ( echo "/* Script for -z separate-code -z relro */" 343fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 344fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 345fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xeo 346fae548d3Szrj unset RELRO 347fae548d3Szrjfi 348fae548d3SzrjLD_FLAG=n 349fae548d3SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_n} 350fae548d3Szrj( echo "/* Script for -n */" 351fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 352fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 353fae548d3Szrj) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xn 354fae548d3Szrj 355fae548d3SzrjLD_FLAG=N 356fae548d3SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_N} 357fae548d3Szrj( echo "/* Script for -N */" 358fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 359fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 360fae548d3Szrj) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xbn 361fae548d3Szrj 362fae548d3Szrjif test -n "$GENERATE_COMBRELOC_SCRIPT"; then 363fae548d3Szrj DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}} 364fae548d3Szrj LD_FLAG=c 365fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp 366fae548d3Szrj ( echo "/* Script for -z combreloc */" 367fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 368fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 369fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xc 370fae548d3Szrj rm -f ${COMBRELOC} 371fae548d3Szrj LD_FLAG=ctextonly 372fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xce.tmp 373fae548d3Szrj ( echo "/* Script for -z combreloc -z separate-code */" 374fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 375fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 376fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xce 377fae548d3Szrj rm -f ${COMBRELOC} 378fae548d3Szrj RELRO_NOW=" " 379fae548d3Szrj LD_FLAG=w 380fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp 381fae548d3Szrj ( echo "/* Script for -z combreloc -z relro -z now */" 382fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 383fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 384fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xw 385fae548d3Szrj rm -f ${COMBRELOC} 386fae548d3Szrj LD_FLAG=wtextonly 387fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xwe.tmp 388fae548d3Szrj ( echo "/* Script for -z combreloc -z separate-code -z relro -z now */" 389fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 390fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 391fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xwe 392fae548d3Szrj rm -f ${COMBRELOC} 393fae548d3Szrj COMBRELOC= 394fae548d3Szrj unset RELRO_NOW 395fae548d3Szrj if test -n "$GENERATE_RELRO_SCRIPT"; then 396fae548d3Szrj LD_FLAG=c 397fae548d3Szrj RELRO=" " 398fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xco.tmp 399fae548d3Szrj ( echo "/* Script for -z combreloc -z relro */" 400fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 401fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 402fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xco 403fae548d3Szrj rm -f ${COMBRELOC} 404fae548d3Szrj LD_FLAG=ctextonly 405fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xceo.tmp 406fae548d3Szrj ( echo "/* Script for -z combreloc -z separate-code -z relro */" 407fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 408fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 409fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xceo 410fae548d3Szrj rm -f ${COMBRELOC} 411fae548d3Szrj COMBRELOC= 412fae548d3Szrj unset RELRO 413fae548d3Szrj fi 414fae548d3Szrjfi 415fae548d3Szrj 416fae548d3Szrjif test -n "$GENERATE_SHLIB_SCRIPT"; then 417fae548d3Szrj DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} 418fae548d3Szrj CREATE_SHLIB=" " 419fae548d3Szrj LD_FLAG=shared 420fae548d3Szrj ( echo "/* Script for -shared */" 421fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 422fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 423fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xs 424fae548d3Szrj LD_FLAG=sharedtextonly 425fae548d3Szrj ( echo "/* Script for -shared -z separate-code */" 426fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 427fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 428fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xse 429fae548d3Szrj 430fae548d3Szrj if test -n "$GENERATE_RELRO_SCRIPT"; then 431fae548d3Szrj RELRO=" " 432fae548d3Szrj LD_FLAG=shared 433fae548d3Szrj ( echo "/* Script for -shared -z relro */" 434fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 435fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 436fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xso 437fae548d3Szrj LD_FLAG=sharedtextonly 438fae548d3Szrj ( echo "/* Script for -shared -z separate-code -z relro */" 439fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 440fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 441fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xseo 442fae548d3Szrj unset RELRO 443fae548d3Szrj fi 444fae548d3Szrj if test -n "$GENERATE_COMBRELOC_SCRIPT"; then 445fae548d3Szrj DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} 446fae548d3Szrj LD_FLAG=cshared 447fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xsc.tmp 448fae548d3Szrj ( echo "/* Script for -shared -z combreloc */" 449fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 450fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 451fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsc 452fae548d3Szrj rm -f ${COMBRELOC} 453fae548d3Szrj LD_FLAG=csharedtextonly 454fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xsce.tmp 455fae548d3Szrj ( echo "/* Script for -shared -z combreloc -z separate-code */" 456fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 457fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 458fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsce 459fae548d3Szrj rm -f ${COMBRELOC} 460fae548d3Szrj RELRO_NOW=" " 461fae548d3Szrj LD_FLAG=wshared 462fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp 463fae548d3Szrj ( echo "/* Script for -shared -z combreloc -z relro -z now */" 464fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 465fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 466fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsw 467fae548d3Szrj rm -f ${COMBRELOC} 468fae548d3Szrj LD_FLAG=wsharedtextonly 469fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xswe.tmp 470fae548d3Szrj ( echo "/* Script for -shared -z combreloc -z separate-code -z relro -z now */" 471fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 472fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 473fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xswe 474fae548d3Szrj rm -f ${COMBRELOC} 475fae548d3Szrj unset RELRO_NOW 476fae548d3Szrj 477fae548d3Szrj if test -n "$GENERATE_RELRO_SCRIPT"; then 478fae548d3Szrj LD_FLAG=wshared 479fae548d3Szrj RELRO=" " 480fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xsco.tmp 481fae548d3Szrj ( echo "/* Script for -shared -z combreloc -z relro */" 482fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 483fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 484fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsco 485fae548d3Szrj rm -f ${COMBRELOC} 486fae548d3Szrj LD_FLAG=wsharedtextonly 487fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xsceo.tmp 488fae548d3Szrj ( echo "/* Script for -shared -z combreloc -z separate-code -z relro */" 489fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 490fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 491fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xsceo 492fae548d3Szrj rm -f ${COMBRELOC} 493fae548d3Szrj unset RELRO 494fae548d3Szrj fi 495fae548d3Szrj COMBRELOC= 496fae548d3Szrj fi 497fae548d3Szrj unset CREATE_SHLIB 498fae548d3Szrjfi 499fae548d3Szrj 500fae548d3Szrjif test -n "$GENERATE_PIE_SCRIPT"; then 501fae548d3Szrj DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}} 502fae548d3Szrj CREATE_PIE=" " 503fae548d3Szrj LD_FLAG=pie 504fae548d3Szrj ( echo "/* Script for -pie */" 505fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 506fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 507fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xd 508fae548d3Szrj LD_FLAG=pietextonly 509fae548d3Szrj ( echo "/* Script for -pie -z separate-code */" 510fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 511fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 512fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xde 513fae548d3Szrj if test -n "$GENERATE_RELRO_SCRIPT"; then 514fae548d3Szrj RELRO=" " 515fae548d3Szrj LD_FLAG=pie 516fae548d3Szrj ( echo "/* Script for -pie -z relro */" 517fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 518fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 519fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdo 520fae548d3Szrj LD_FLAG=pietextonly 521fae548d3Szrj ( echo "/* Script for -pie -z separate-code -z relro */" 522fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 523fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 524fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdeo 525fae548d3Szrj unset RELRO 526fae548d3Szrj fi 527fae548d3Szrj if test -n "$GENERATE_COMBRELOC_SCRIPT"; then 528fae548d3Szrj DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}} 529fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp 530fae548d3Szrj LD_FLAG=cpie 531fae548d3Szrj ( echo "/* Script for -pie -z combreloc */" 532fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 533fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 534fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdc 535fae548d3Szrj rm -f ${COMBRELOC} 536fae548d3Szrj LD_FLAG=cpietextonly 537fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xdce.tmp 538fae548d3Szrj ( echo "/* Script for -pie -z combreloc -z separate-code */" 539fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 540fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 541fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdce 542fae548d3Szrj rm -f ${COMBRELOC} 543fae548d3Szrj RELRO_NOW=" " 544fae548d3Szrj LD_FLAG=wpie 545fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp 546fae548d3Szrj ( echo "/* Script for -pie -z combreloc -z relro -z now */" 547fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 548fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 549fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdw 550fae548d3Szrj rm -f ${COMBRELOC} 551fae548d3Szrj LD_FLAG=wpietextonly 552fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xdwe.tmp 553fae548d3Szrj ( echo "/* Script for -pie -z combreloc -z separate-code -z relro -z now */" 554fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 555fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 556fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdwe 557fae548d3Szrj rm -f ${COMBRELOC} 558fae548d3Szrj unset RELRO_NOW 559fae548d3Szrj 560fae548d3Szrj if test -n "$GENERATE_RELRO_SCRIPT"; then 561fae548d3Szrj LD_FLAG=wpie 562fae548d3Szrj RELRO=" " 563fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xdco.tmp 564fae548d3Szrj ( echo "/* Script for -pie -z combreloc -z relro */" 565fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 566fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 567fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdco 568fae548d3Szrj rm -f ${COMBRELOC} 569fae548d3Szrj LD_FLAG=wpietextonly 570fae548d3Szrj COMBRELOC=ldscripts/${EMULATION_NAME}.xdceo.tmp 571fae548d3Szrj ( echo "/* Script for -pie -z combreloc -z separate-code -z relro */" 572fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 573fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 574fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xdceo 575fae548d3Szrj rm -f ${COMBRELOC} 576fae548d3Szrj 577fae548d3Szrj unset RELRO 578fae548d3Szrj fi 579fae548d3Szrj COMBRELOC= 580fae548d3Szrj fi 581fae548d3Szrj unset CREATE_PIE 582fae548d3Szrjfi 583fae548d3Szrj 584fae548d3Szrjif test -n "$GENERATE_AUTO_IMPORT_SCRIPT"; then 585fae548d3Szrj LD_FLAG=auto_import 586fae548d3Szrj DATA_ALIGNMENT=${DATA_ALIGNMENT_} 587fae548d3Szrj ( echo "/* Script for --enable-auto-import */" 588fae548d3Szrj source_sh ${CUSTOMIZER_SCRIPT} 589fae548d3Szrj source_sh ${srcdir}/scripttempl/${SCRIPT_NAME}.sc 590fae548d3Szrj ) | sed -e '/^ *$/d;s/[ ]*$//' > ldscripts/${EMULATION_NAME}.xa 591fae548d3Szrjfi 592fae548d3Szrj 593fae548d3Szrjcase "$COMPILE_IN: $EMULATION_LIBPATH " in 594fae548d3Szrj :*" ${EMULATION_NAME} "*) COMPILE_IN=yes;; 595fae548d3Szrjesac 596fae548d3Szrj 597fae548d3Szrj# PR ld/5652: 598fae548d3Szrj# Determine if the shell has support for the variable BASH_LINENO. 599fae548d3Szrj# When it is the case, it is only available inside functions. 600fae548d3Szrjhas_lineno() 601fae548d3Szrj{ 602fae548d3Szrj test "x$BASH_LINENO" != "x" 603fae548d3Szrj} 604fae548d3Szrj 605fae548d3Szrj# Enable accruate error source in the compiler error messages, if possible. 606fae548d3Szrjif has_lineno; then 607fae548d3Szrj . ${srcdir}/genscrba.sh 608fae548d3Szrjelse 609fae548d3Szrj source_em() 610fae548d3Szrj { 611fae548d3Szrj source_sh $1 612fae548d3Szrj } 613fae548d3Szrj fragment() 614fae548d3Szrj { 615fae548d3Szrj cat >> e${EMULATION_NAME}.c 616fae548d3Szrj } 617fae548d3Szrjfi 618fae548d3Szrj 619fae548d3Szrj# Generate e${EMULATION_NAME}.c. 620fae548d3Szrj# Start with an empty file, then the sourced .em script 621fae548d3Szrj# can use the "fragment" function to append. 622fae548d3Szrj> e${EMULATION_NAME}.c 623fae548d3Szrjsource_em ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em 624fae548d3Szrj 625*a72d4fb1Szrjif test -d "${DEPDIR}"; then 626fae548d3Szrj ecdeps= 627fae548d3Szrj for dep in `cat ${DEPDIR}/e${EMULATION_NAME}.Tc`; do 628fae548d3Szrj case " $ecdeps " in 629fae548d3Szrj *" $dep "*): ;; 630fae548d3Szrj *) ecdeps="$ecdeps $dep" ;; 631fae548d3Szrj esac 632fae548d3Szrj done 633fae548d3Szrj rm -f ${DEPDIR}/e${EMULATION_NAME}.Tc 634fae548d3Szrj echo "e${EMULATION_NAME}.c:${ecdeps}" > ${DEPDIR}/e${EMULATION_NAME}.Pc 635fae548d3Szrjfi 636