xref: /dflybsd-src/contrib/binutils-2.27/ld/genscripts.sh (revision e656dc90e3d65d744d534af2f5ea88cf8101ebcf)
1*a9fa9459Szrj#!/bin/sh
2*a9fa9459Szrj# genscripts.sh - generate the ld-emulation-target specific files
3*a9fa9459Szrj# Copyright (C) 2004-2016 Free Software Foundation, Inc.
4*a9fa9459Szrj#
5*a9fa9459Szrj# This file is part of the Gnu Linker.
6*a9fa9459Szrj#
7*a9fa9459Szrj# This program is free software; you can redistribute it and/or modify
8*a9fa9459Szrj# it under the terms of the GNU General Public License as published by
9*a9fa9459Szrj# the Free Software Foundation; either version 3, or (at your option)
10*a9fa9459Szrj# any later version.
11*a9fa9459Szrj#
12*a9fa9459Szrj# This program is distributed in the hope that it will be useful,
13*a9fa9459Szrj# but WITHOUT ANY WARRANTY; without even the implied warranty of
14*a9fa9459Szrj# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*a9fa9459Szrj# GNU General Public License for more details.
16*a9fa9459Szrj#
17*a9fa9459Szrj# You should have received a copy of the GNU General Public License
18*a9fa9459Szrj# along with GLD; see the file COPYING.  If not, write to the Free
19*a9fa9459Szrj# Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20*a9fa9459Szrj# 02110-1301, USA.
21*a9fa9459Szrj#
22*a9fa9459Szrj# Usage: genscripts_extra.sh \
23*a9fa9459Szrj#          srcdir \
24*a9fa9459Szrj#          libdir \
25*a9fa9459Szrj#          prefix \
26*a9fa9459Szrj#          exec_prefix \
27*a9fa9459Szrj#          host \
28*a9fa9459Szrj#          target \
29*a9fa9459Szrj#          target_alias \
30*a9fa9459Szrj#          default_emulation \
31*a9fa9459Szrj#          native_lib_dirs \
32*a9fa9459Szrj#          use_sysroot \
33*a9fa9459Szrj#          enable_initfini_array \
34*a9fa9459Szrj#          this_emulation \
35*a9fa9459Szrj# optional:
36*a9fa9459Szrj#          tool_dir
37*a9fa9459Szrj#
38*a9fa9459Szrj# Sample usage:
39*a9fa9459Szrj#
40*a9fa9459Szrj#   genscripts_extra.sh \
41*a9fa9459Szrj#    /sources/ld \
42*a9fa9459Szrj#    /usr/local/lib \
43*a9fa9459Szrj#    /usr/local \
44*a9fa9459Szrj#    /usr/local \
45*a9fa9459Szrj#    sparc-sun-sunos4.1.3 \
46*a9fa9459Szrj#    sparc-sun-sunos4.1.3 \
47*a9fa9459Szrj#    sparc-sun-sunos4.1.3 \
48*a9fa9459Szrj#    sun4 \
49*a9fa9459Szrj#    "" \
50*a9fa9459Szrj#    no \
51*a9fa9459Szrj#    sun3 \
52*a9fa9459Szrj#    sparc-sun-sunos4.1.3 \
53*a9fa9459Szrj#    sparc.sh
54*a9fa9459Szrj#
55*a9fa9459Szrj# produces the linker scripts:
56*a9fa9459Szrj#
57*a9fa9459Szrj#   sun3.x       [default linker script]
58*a9fa9459Szrj#   sun3.xbn     [used when the linker is invoked with "-N"]
59*a9fa9459Szrj#   sun3.xn      [used when the linker is invoked with "-n"]
60*a9fa9459Szrj#   sun3.xr      [used when the linker is invoked with "-r"]
61*a9fa9459Szrj#   sun3.xu      [used when the linker is invoked with "-Ur"]
62*a9fa9459Szrj# and maybe:
63*a9fa9459Szrj#   sun3.xc      [used when the linker is invoked with "-z combreloc"]
64*a9fa9459Szrj#   sun3.xsc     [used when the linker is invoked with "--shared"]
65*a9fa9459Szrj#   sun3.xdc     [used when the linker is invoked with "-pie"]
66*a9fa9459Szrj#   sun3.xa      [used when the linker is invoked with "--enable-auto-import"]
67*a9fa9459Szrj#
68*a9fa9459Szrj# It also produced the C source file:
69*a9fa9459Szrj#
70*a9fa9459Szrj#   em_sun3.c
71*a9fa9459Szrj#
72*a9fa9459Szrj# which is then compiled into the linker.
73*a9fa9459Szrj#
74*a9fa9459Szrj# The linker scripts are created by running the shell script
75*a9fa9459Szrj# /sources/ld/emulparams/sparc.sh to set the value of ${SCRIPT_NAME}
76*a9fa9459Szrj# (and any other variables it wants to).  ${SCRIPT_NAME} is then
77*a9fa9459Szrj# invoked with a variable called ${LD_FLAG} to tell it which version
78*a9fa9459Szrj# of the linker script to create.
79*a9fa9459Szrj
80*a9fa9459Szrj
81*a9fa9459Szrjsrcdir=$1
82*a9fa9459Szrjlibdir=$2
83*a9fa9459Szrjprefix=$3
84*a9fa9459Szrjexec_prefix=$4
85*a9fa9459Szrjhost=$5
86*a9fa9459Szrjtarget=$6
87*a9fa9459Szrjtarget_alias=$7
88*a9fa9459SzrjEMULATION_LIBPATH=$8
89*a9fa9459SzrjNATIVE_LIB_DIRS=$9
90*a9fa9459Szrjshift 9
91*a9fa9459Szrjuse_sysroot=$1
92*a9fa9459SzrjENABLE_INITFINI_ARRAY=$2
93*a9fa9459SzrjEMULATION_NAME=$3
94*a9fa9459SzrjTOOL_LIB=$4
95*a9fa9459Szrj
96*a9fa9459Szrj# Include the emulation-specific parameters:
97*a9fa9459SzrjCUSTOMIZER_SCRIPT="${srcdir}/emulparams/${EMULATION_NAME}.sh"
98*a9fa9459Szrj. ${CUSTOMIZER_SCRIPT}
99*a9fa9459Szrj
100*a9fa9459Szrjif test -d ldscripts; then
101*a9fa9459Szrj  true
102*a9fa9459Szrjelse
103*a9fa9459Szrj  mkdir ldscripts
104*a9fa9459Szrjfi
105*a9fa9459Szrj
106*a9fa9459Szrj# Set some flags for the emultempl scripts.  USE_LIBPATH will
107*a9fa9459Szrj# be set for any libpath-using emulation; NATIVE will be set for a
108*a9fa9459Szrj# libpath-using emulation where ${host} = ${target}.  NATIVE
109*a9fa9459Szrj# may already have been set by the emulparams file, but that's OK
110*a9fa9459Szrj# (it'll just get set to "yes" twice).
111*a9fa9459Szrj
112*a9fa9459Szrjcase " $EMULATION_LIBPATH " in
113*a9fa9459Szrj  *" ${EMULATION_NAME} "*)
114*a9fa9459Szrj    if [ "x${host}" = "x${target}" ] ; then
115*a9fa9459Szrj      NATIVE=yes
116*a9fa9459Szrj      USE_LIBPATH=yes
117*a9fa9459Szrj    elif [ "x${use_sysroot}" = "xyes" ] ; then
118*a9fa9459Szrj      USE_LIBPATH=yes
119*a9fa9459Szrj    fi
120*a9fa9459Szrj    ;;
121*a9fa9459Szrjesac
122*a9fa9459Szrj
123*a9fa9459Szrj# If the emulparams file sets NATIVE, make sure USE_LIBPATH is set also.
124*a9fa9459Szrjif test "x$NATIVE" = "xyes" ; then
125*a9fa9459Szrj  USE_LIBPATH=yes
126*a9fa9459Szrjfi
127*a9fa9459Szrj
128*a9fa9459Szrj# Set the library search path, for libraries named by -lfoo.
129*a9fa9459Szrj# If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used.
130*a9fa9459Szrj# Otherwise, the default is set here.
131*a9fa9459Szrj#
132*a9fa9459Szrj# The format is the usual list of colon-separated directories.
133*a9fa9459Szrj# To force a logically empty LIB_PATH, do LIBPATH=":".
134*a9fa9459Szrj#
135*a9fa9459Szrj# If we are using a sysroot, prefix library paths with "=" to indicate this.
136*a9fa9459Szrj#
137*a9fa9459Szrj# If the emulparams file set LIBPATH_SUFFIX, prepend an extra copy of
138*a9fa9459Szrj# the library path with the suffix applied.
139*a9fa9459Szrj
140*a9fa9459Szrj# Paths with LIBPATH_SUFFIX
141*a9fa9459Szrjlib_path1=
142*a9fa9459Szrj# Paths without LIBPATH_SUFFIX
143*a9fa9459Szrjlib_path2=
144*a9fa9459Szrjif [ "${LIB_PATH}" != ":" ] ; then
145*a9fa9459Szrj  lib_path2=${LIB_PATH}
146*a9fa9459Szrjfi
147*a9fa9459Szrj
148*a9fa9459Szrj# Add args to lib_path1 and lib_path2, discarding any duplicates
149*a9fa9459Szrjappend_to_lib_path()
150*a9fa9459Szrj{
151*a9fa9459Szrj  if [ $# != 0 ]; then
152*a9fa9459Szrj    for lib in "$@"; do
153*a9fa9459Szrj      # The "=" is harmless if we aren't using a sysroot, but also needless.
154*a9fa9459Szrj      if [ "x${use_sysroot}" = "xyes" ] ; then
155*a9fa9459Szrj	lib="=${lib}"
156*a9fa9459Szrj      fi
157*a9fa9459Szrj      skip_lib=no
158*a9fa9459Szrj      if test -n "${LIBPATH_SUFFIX}"; then
159*a9fa9459Szrj	case "${lib}" in
160*a9fa9459Szrj	  *${LIBPATH_SUFFIX})
161*a9fa9459Szrj	    case :${lib_path1}: in
162*a9fa9459Szrj	      *:${lib}:*) ;;
163*a9fa9459Szrj	      ::) lib_path1=${lib} ;;
164*a9fa9459Szrj	      *) lib_path1=${lib_path1}:${lib} ;;
165*a9fa9459Szrj	    esac ;;
166*a9fa9459Szrj	  *)
167*a9fa9459Szrj	    if test -n "${LIBPATH_SUFFIX_SKIP}"; then
168*a9fa9459Szrj	      case "${lib}" in
169*a9fa9459Szrj		*${LIBPATH_SUFFIX_SKIP}) skip_lib=yes ;;
170*a9fa9459Szrj	      esac
171*a9fa9459Szrj	    fi
172*a9fa9459Szrj	    if test "${skip_lib}" = "no"; then
173*a9fa9459Szrj	      case :${lib_path1}: in
174*a9fa9459Szrj		*:${lib}${LIBPATH_SUFFIX}:*) ;;
175*a9fa9459Szrj		::) lib_path1=${lib}${LIBPATH_SUFFIX} ;;
176*a9fa9459Szrj	        *) lib_path1=${lib_path1}:${lib}${LIBPATH_SUFFIX} ;;
177*a9fa9459Szrj	      esac
178*a9fa9459Szrj	    fi ;;
179*a9fa9459Szrj	esac
180*a9fa9459Szrj      fi
181*a9fa9459Szrj      if test "${skip_lib}" = "no"; then
182*a9fa9459Szrj	case :${lib_path1}:${lib_path2}: in
183*a9fa9459Szrj	  *:${lib}:*) ;;
184*a9fa9459Szrj	  *::) lib_path2=${lib} ;;
185*a9fa9459Szrj	  *) lib_path2=${lib_path2}:${lib} ;;
186*a9fa9459Szrj	esac
187*a9fa9459Szrj      fi
188*a9fa9459Szrj    done
189*a9fa9459Szrj  fi
190*a9fa9459Szrj}
191*a9fa9459Szrj
192*a9fa9459Szrj# Always search $(tooldir)/lib, aka /usr/local/TARGET/lib when native
193*a9fa9459Szrj# except when LIBPATH=":".
194*a9fa9459Szrjif [ "${LIB_PATH}" != ":" ] ; then
195*a9fa9459Szrj  libs=
196*a9fa9459Szrj  if [ "x${TOOL_LIB}" = "x" ] ; then
197*a9fa9459Szrj    if [ "x${NATIVE}" = "xyes" ] ; then
198*a9fa9459Szrj      libs="${exec_prefix}/${target_alias}/lib"
199*a9fa9459Szrj    fi
200*a9fa9459Szrj  else
201*a9fa9459Szrj    # For multilib'ed targets, ensure both ${target_alias}/lib${LIBPATH_SUFFIX}
202*a9fa9459Szrj    # and ${TOOL_LIB}/lib${LIBPATH_SUFFIX} are in the default search path,
203*a9fa9459Szrj    # because 64bit libraries may be in both places, depending on
204*a9fa9459Szrj    # cross-development setup method (e.g.: /usr/s390x-linux/lib64
205*a9fa9459Szrj    # vs. /usr/s390-linux/lib64)
206*a9fa9459Szrj    case "${NATIVE}:${LIBPATH_SUFFIX}:${TOOL_LIB}" in
207*a9fa9459Szrj      :* | *::* | *:*:*${LIBPATH_SUFFIX}) ;;
208*a9fa9459Szrj      *) libs="${exec_prefix}/${target_alias}/lib${LIBPATH_SUFFIX}" ;;
209*a9fa9459Szrj    esac
210*a9fa9459Szrj    libs="${exec_prefix}/${TOOL_LIB}/lib ${libs}"
211*a9fa9459Szrj  fi
212*a9fa9459Szrj  append_to_lib_path ${libs}
213*a9fa9459Szrjfi
214*a9fa9459Szrj
215*a9fa9459Szrjif [ "x${LIB_PATH}" = "x" ] && [ "x${USE_LIBPATH}" = xyes ] ; then
216*a9fa9459Szrj  libs=${NATIVE_LIB_DIRS}
217*a9fa9459Szrj  if [ "x${NATIVE}" = "xyes" ] ; then
218*a9fa9459Szrj    case " ${libs} " in
219*a9fa9459Szrj      *" ${libdir} "*) ;;
220*a9fa9459Szrj      *) libs="${libdir} ${libs}" ;;
221*a9fa9459Szrj    esac
222*a9fa9459Szrj  fi
223*a9fa9459Szrj  append_to_lib_path ${libs}
224*a9fa9459Szrjfi
225*a9fa9459Szrj
226*a9fa9459Szrjcase :${lib_path1}:${lib_path2}: in
227*a9fa9459Szrj  *:: | ::*) LIB_PATH=${lib_path1}${lib_path2} ;;
228*a9fa9459Szrj  *) LIB_PATH=${lib_path1}:${lib_path2} ;;
229*a9fa9459Szrjesac
230*a9fa9459Szrj
231*a9fa9459SzrjLIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
232*a9fa9459Szrj
233*a9fa9459Szrj# We need it for testsuite.
234*a9fa9459Szrjset $EMULATION_LIBPATH
235*a9fa9459Szrjif [ "x$1" = "x$EMULATION_NAME" ]; then
236*a9fa9459Szrj    test -d tmpdir || mkdir tmpdir
237*a9fa9459Szrj    rm -f tmpdir/libpath.exp
238*a9fa9459Szrj    echo "set libpath \"${LIB_PATH}\"" | sed -e 's/:/ /g' > tmpdir/libpath.exp
239*a9fa9459Szrjfi
240*a9fa9459Szrj
241*a9fa9459Szrj# Generate 5 or 6 script files from a master script template in
242*a9fa9459Szrj# ${srcdir}/scripttempl/${SCRIPT_NAME}.sh.  Which one of the 5 or 6
243*a9fa9459Szrj# script files is actually used depends on command line options given
244*a9fa9459Szrj# to ld.  (SCRIPT_NAME was set in the emulparams_file.)
245*a9fa9459Szrj#
246*a9fa9459Szrj# A .x script file is the default script.
247*a9fa9459Szrj# A .xr script is for linking without relocation (-r flag).
248*a9fa9459Szrj# A .xu script is like .xr, but *do* create constructors (-Ur flag).
249*a9fa9459Szrj# A .xn script is for linking with -n flag (mix text and data on same page).
250*a9fa9459Szrj# A .xbn script is for linking with -N flag (mix text and data on same page).
251*a9fa9459Szrj# A .xs script is for generating a shared library with the --shared
252*a9fa9459Szrj#   flag; it is only generated if $GENERATE_SHLIB_SCRIPT is set by the
253*a9fa9459Szrj#   emulation parameters.
254*a9fa9459Szrj# A .xc script is for linking with -z combreloc; it is only generated if
255*a9fa9459Szrj#   $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
256*a9fa9459Szrj#   $SCRIPT_NAME is "elf".
257*a9fa9459Szrj# A .xsc script is for linking with --shared -z combreloc; it is generated
258*a9fa9459Szrj#   if $GENERATE_COMBRELOC_SCRIPT is set by the emulation parameters or
259*a9fa9459Szrj#   $SCRIPT_NAME is "elf" and $GENERATE_SHLIB_SCRIPT is set by the emulation
260*a9fa9459Szrj#   parameters too.
261*a9fa9459Szrj
262*a9fa9459Szrjif [ "x$SCRIPT_NAME" = "xelf" ]; then
263*a9fa9459Szrj  GENERATE_COMBRELOC_SCRIPT=yes
264*a9fa9459Szrjfi
265*a9fa9459Szrj
266*a9fa9459SzrjSEGMENT_SIZE=${SEGMENT_SIZE-${MAXPAGESIZE-${TARGET_PAGE_SIZE}}}
267*a9fa9459Szrj
268*a9fa9459Szrj# Determine DATA_ALIGNMENT for the 5 variants, using
269*a9fa9459Szrj# values specified in the emulparams/<script_to_run>.sh file or default.
270*a9fa9459Szrj
271*a9fa9459SzrjDATA_ALIGNMENT_="${DATA_ALIGNMENT_-${DATA_ALIGNMENT-ALIGN(${SEGMENT_SIZE})}}"
272*a9fa9459SzrjDATA_ALIGNMENT_n="${DATA_ALIGNMENT_n-${DATA_ALIGNMENT_}}"
273*a9fa9459SzrjDATA_ALIGNMENT_N="${DATA_ALIGNMENT_N-${DATA_ALIGNMENT-.}}"
274*a9fa9459SzrjDATA_ALIGNMENT_r="${DATA_ALIGNMENT_r-${DATA_ALIGNMENT-}}"
275*a9fa9459SzrjDATA_ALIGNMENT_u="${DATA_ALIGNMENT_u-${DATA_ALIGNMENT_r}}"
276*a9fa9459Szrj
277*a9fa9459SzrjLD_FLAG=r
278*a9fa9459SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_r}
279*a9fa9459SzrjDEFAULT_DATA_ALIGNMENT="ALIGN(${SEGMENT_SIZE})"
280*a9fa9459Szrj( echo "/* Script for ld -r: link without relocation */"
281*a9fa9459Szrj  . ${CUSTOMIZER_SCRIPT}
282*a9fa9459Szrj  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
283*a9fa9459Szrj) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xr
284*a9fa9459Szrj
285*a9fa9459SzrjLD_FLAG=u
286*a9fa9459SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_u}
287*a9fa9459SzrjCONSTRUCTING=" "
288*a9fa9459Szrj( echo "/* Script for ld -Ur: link w/out relocation, do create constructors */"
289*a9fa9459Szrj  . ${CUSTOMIZER_SCRIPT}
290*a9fa9459Szrj  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
291*a9fa9459Szrj) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xu
292*a9fa9459Szrj
293*a9fa9459SzrjLD_FLAG=
294*a9fa9459SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_}
295*a9fa9459SzrjRELOCATING=" "
296*a9fa9459Szrj( echo "/* Default linker script, for normal executables */"
297*a9fa9459Szrj  . ${CUSTOMIZER_SCRIPT}
298*a9fa9459Szrj  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
299*a9fa9459Szrj) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.x
300*a9fa9459Szrj
301*a9fa9459SzrjLD_FLAG=n
302*a9fa9459SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_n}
303*a9fa9459Szrj( echo "/* Script for -n: mix text and data on same page */"
304*a9fa9459Szrj  . ${CUSTOMIZER_SCRIPT}
305*a9fa9459Szrj  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
306*a9fa9459Szrj) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xn
307*a9fa9459Szrj
308*a9fa9459SzrjLD_FLAG=N
309*a9fa9459SzrjDATA_ALIGNMENT=${DATA_ALIGNMENT_N}
310*a9fa9459Szrj( echo "/* Script for -N: mix text and data on same page; don't align data */"
311*a9fa9459Szrj  . ${CUSTOMIZER_SCRIPT}
312*a9fa9459Szrj  . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
313*a9fa9459Szrj) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xbn
314*a9fa9459Szrj
315*a9fa9459Szrjif test -n "$GENERATE_COMBRELOC_SCRIPT"; then
316*a9fa9459Szrj  DATA_ALIGNMENT=${DATA_ALIGNMENT_c-${DATA_ALIGNMENT_}}
317*a9fa9459Szrj  LD_FLAG=c
318*a9fa9459Szrj  COMBRELOC=ldscripts/${EMULATION_NAME}.xc.tmp
319*a9fa9459Szrj  ( echo "/* Script for -z combreloc: combine and sort reloc sections */"
320*a9fa9459Szrj    . ${CUSTOMIZER_SCRIPT}
321*a9fa9459Szrj    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
322*a9fa9459Szrj  ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xc
323*a9fa9459Szrj  rm -f ${COMBRELOC}
324*a9fa9459Szrj  LD_FLAG=w
325*a9fa9459Szrj  RELRO_NOW=" "
326*a9fa9459Szrj  COMBRELOC=ldscripts/${EMULATION_NAME}.xw.tmp
327*a9fa9459Szrj  ( echo "/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */"
328*a9fa9459Szrj    . ${CUSTOMIZER_SCRIPT}
329*a9fa9459Szrj    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
330*a9fa9459Szrj  ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xw
331*a9fa9459Szrj  rm -f ${COMBRELOC}
332*a9fa9459Szrj  COMBRELOC=
333*a9fa9459Szrj  unset RELRO_NOW
334*a9fa9459Szrjfi
335*a9fa9459Szrj
336*a9fa9459Szrjif test -n "$GENERATE_SHLIB_SCRIPT"; then
337*a9fa9459Szrj  LD_FLAG=shared
338*a9fa9459Szrj  DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
339*a9fa9459Szrj  CREATE_SHLIB=" "
340*a9fa9459Szrj  (
341*a9fa9459Szrj    echo "/* Script for ld --shared: link shared library */"
342*a9fa9459Szrj    . ${CUSTOMIZER_SCRIPT}
343*a9fa9459Szrj    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
344*a9fa9459Szrj  ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xs
345*a9fa9459Szrj  if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
346*a9fa9459Szrj    LD_FLAG=cshared
347*a9fa9459Szrj    DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
348*a9fa9459Szrj    COMBRELOC=ldscripts/${EMULATION_NAME}.xsc.tmp
349*a9fa9459Szrj    ( echo "/* Script for --shared -z combreloc: shared library, combine & sort relocs */"
350*a9fa9459Szrj      . ${CUSTOMIZER_SCRIPT}
351*a9fa9459Szrj      . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
352*a9fa9459Szrj    ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xsc
353*a9fa9459Szrj    rm -f ${COMBRELOC}
354*a9fa9459Szrj    LD_FLAG=wshared
355*a9fa9459Szrj    RELRO_NOW=" "
356*a9fa9459Szrj    COMBRELOC=ldscripts/${EMULATION_NAME}.xsw.tmp
357*a9fa9459Szrj    ( echo "/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */"
358*a9fa9459Szrj      . ${CUSTOMIZER_SCRIPT}
359*a9fa9459Szrj      . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
360*a9fa9459Szrj    ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xsw
361*a9fa9459Szrj    rm -f ${COMBRELOC}
362*a9fa9459Szrj    COMBRELOC=
363*a9fa9459Szrj    unset RELRO_NOW
364*a9fa9459Szrj  fi
365*a9fa9459Szrj  unset CREATE_SHLIB
366*a9fa9459Szrjfi
367*a9fa9459Szrj
368*a9fa9459Szrjif test -n "$GENERATE_PIE_SCRIPT"; then
369*a9fa9459Szrj  LD_FLAG=pie
370*a9fa9459Szrj  DATA_ALIGNMENT=${DATA_ALIGNMENT_s-${DATA_ALIGNMENT_}}
371*a9fa9459Szrj  CREATE_PIE=" "
372*a9fa9459Szrj  (
373*a9fa9459Szrj    echo "/* Script for ld -pie: link position independent executable */"
374*a9fa9459Szrj    . ${CUSTOMIZER_SCRIPT}
375*a9fa9459Szrj    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
376*a9fa9459Szrj  ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xd
377*a9fa9459Szrj  if test -n "$GENERATE_COMBRELOC_SCRIPT"; then
378*a9fa9459Szrj    LD_FLAG=cpie
379*a9fa9459Szrj    DATA_ALIGNMENT=${DATA_ALIGNMENT_sc-${DATA_ALIGNMENT}}
380*a9fa9459Szrj    COMBRELOC=ldscripts/${EMULATION_NAME}.xdc.tmp
381*a9fa9459Szrj    ( echo "/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */"
382*a9fa9459Szrj      . ${CUSTOMIZER_SCRIPT}
383*a9fa9459Szrj      . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
384*a9fa9459Szrj    ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xdc
385*a9fa9459Szrj    rm -f ${COMBRELOC}
386*a9fa9459Szrj    LD_FLAG=wpie
387*a9fa9459Szrj    RELRO_NOW=" "
388*a9fa9459Szrj    COMBRELOC=ldscripts/${EMULATION_NAME}.xdw.tmp
389*a9fa9459Szrj    ( echo "/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */"
390*a9fa9459Szrj      . ${CUSTOMIZER_SCRIPT}
391*a9fa9459Szrj      . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
392*a9fa9459Szrj    ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xdw
393*a9fa9459Szrj    rm -f ${COMBRELOC}
394*a9fa9459Szrj    COMBRELOC=
395*a9fa9459Szrj    unset RELRO_NOW
396*a9fa9459Szrj  fi
397*a9fa9459Szrj  unset CREATE_PIE
398*a9fa9459Szrjfi
399*a9fa9459Szrj
400*a9fa9459Szrjif test -n "$GENERATE_AUTO_IMPORT_SCRIPT"; then
401*a9fa9459Szrj  LD_FLAG=auto_import
402*a9fa9459Szrj  DATA_ALIGNMENT=${DATA_ALIGNMENT_}
403*a9fa9459Szrj  (
404*a9fa9459Szrj    echo "/* Script for ld --enable-auto-import: Like the default script except read only data is placed into .data  */"
405*a9fa9459Szrj    . ${CUSTOMIZER_SCRIPT}
406*a9fa9459Szrj    . ${srcdir}/scripttempl/${SCRIPT_NAME}.sc
407*a9fa9459Szrj  ) | sed -e '/^ *$/d;s/[ 	]*$//' > ldscripts/${EMULATION_NAME}.xa
408*a9fa9459Szrjfi
409*a9fa9459Szrj
410*a9fa9459Szrjcase "$COMPILE_IN: $EMULATION_LIBPATH " in
411*a9fa9459Szrj    :*" ${EMULATION_NAME} "*) COMPILE_IN=yes;;
412*a9fa9459Szrjesac
413*a9fa9459Szrj
414*a9fa9459Szrj# PR ld/5652:
415*a9fa9459Szrj# Determine if the shell has support for the variable BASH_LINENO.
416*a9fa9459Szrj# When it is the case, it is only available inside functions.
417*a9fa9459Szrjhas_lineno()
418*a9fa9459Szrj{
419*a9fa9459Szrj  test "x$BASH_LINENO" != "x"
420*a9fa9459Szrj}
421*a9fa9459Szrj
422*a9fa9459Szrj# Enable accruate error source in the compiler error messages, if possible.
423*a9fa9459Szrjif has_lineno; then
424*a9fa9459Szrj  . ${srcdir}/genscrba.sh
425*a9fa9459Szrjelse
426*a9fa9459Szrj  source_em()
427*a9fa9459Szrj  {
428*a9fa9459Szrj    . $1
429*a9fa9459Szrj  }
430*a9fa9459Szrj  fragment()
431*a9fa9459Szrj  {
432*a9fa9459Szrj    cat >> e${EMULATION_NAME}.c
433*a9fa9459Szrj  }
434*a9fa9459Szrjfi
435*a9fa9459Szrj
436*a9fa9459Szrj# Generate e${EMULATION_NAME}.c.
437*a9fa9459Szrj# Start with an empty file, then the sourced .em script
438*a9fa9459Szrj# can use the "fragment" function to append.
439*a9fa9459Szrj> e${EMULATION_NAME}.c
440*a9fa9459Szrjsource_em ${srcdir}/emultempl/${TEMPLATE_NAME-generic}.em
441