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