xref: /dflybsd-src/contrib/binutils-2.34/ld/genscripts.sh (revision a72d4fb11b2b988dc5145de33d627d77bb17732b)
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