Unify the behaviour of ld.bfd and ld.gold with respect to warning about unresolved...
[deliverable/binutils-gdb.git] / ld / emultempl / elf.em
CommitLineData
252b5132
RH
1# This shell script emits a C file. -*- C -*-
2# It does some substitutions.
252b5132 3test -z "${ELFSIZE}" && ELFSIZE=32
86af25fe
L
4if [ -z "$MACHINE" ]; then
5 OUTPUT_ARCH=${ARCH}
6else
7 OUTPUT_ARCH=${ARCH}:${MACHINE}
8fi
92b93329 9fragment <<EOF
252b5132
RH
10/* This file is is generated by a shell script. DO NOT EDIT! */
11
12/* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
b3adc24a 13 Copyright (C) 1991-2020 Free Software Foundation, Inc.
252b5132
RH
14 Written by Steve Chamberlain <sac@cygnus.com>
15 ELF support by Ian Lance Taylor <ian@cygnus.com>
16
f96b4a7b
NC
17 This file is part of the GNU Binutils.
18
19 This program is free software; you can redistribute it and/or modify
20 it under the terms of the GNU General Public License as published by
21 the Free Software Foundation; either version 3 of the License, or
22 (at your option) any later version.
23
24 This program is distributed in the hope that it will be useful,
25 but WITHOUT ANY WARRANTY; without even the implied warranty of
26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 GNU General Public License for more details.
28
29 You should have received a copy of the GNU General Public License
30 along with this program; if not, write to the Free Software
31 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
32 MA 02110-1301, USA. */
252b5132
RH
33
34#define TARGET_IS_${EMULATION_NAME}
35
252b5132 36#include "sysdep.h"
3db64b00 37#include "bfd.h"
1c9acd94 38#include "libiberty.h"
fcf65871 39#include "getopt.h"
252b5132 40#include "bfdlink.h"
1ff6de03 41#include "ctf-api.h"
252b5132
RH
42#include "ld.h"
43#include "ldmain.h"
252b5132
RH
44#include "ldmisc.h"
45#include "ldexp.h"
46#include "ldlang.h"
b71e2778
AM
47#include "ldfile.h"
48#include "ldemul.h"
df2a7313 49#include <ldgram.h>
ecca9871 50#include "elf-bfd.h"
d871d478
AM
51#include "ldelf.h"
52#include "ldelfgen.h"
252b5132 53
0c7a8e5a
AM
54/* Declare functions used by various EXTRA_EM_FILEs. */
55static void gld${EMULATION_NAME}_before_parse (void);
56static void gld${EMULATION_NAME}_after_open (void);
57static void gld${EMULATION_NAME}_before_allocation (void);
eaeb0a9d 58static void gld${EMULATION_NAME}_after_allocation (void);
d3989512 59EOF
d3989512 60
41392f03
AM
61# Import any needed special functions and/or overrides.
62#
92b93329 63source_em ${srcdir}/emultempl/elf-generic.em
41392f03 64if test -n "$EXTRA_EM_FILE" ; then
92b93329 65 source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
41392f03
AM
66fi
67
f813923c 68# Functions in this file can be overridden by setting the LDEMUL_* shell
41392f03
AM
69# variables. If the name of the overriding function is the same as is
70# defined in this file, then don't output this file's version.
71# If a different overriding name is given then output the standard function
72# as presumably it is called from the overriding function.
73#
74if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
92b93329 75fragment <<EOF
41392f03 76
252b5132 77static void
0c7a8e5a 78gld${EMULATION_NAME}_before_parse (void)
252b5132 79{
5e2f1575 80 ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
66be1055 81 input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
b34976b6 82 config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
4724d37e 83 config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
5c3261b0 84 link_info.check_relocs_after_open_input = TRUE;
647e4d46 85 link_info.relro = DEFAULT_LD_Z_RELRO;
f6aec96d 86 link_info.separate_code = DEFAULT_LD_Z_SEPARATE_CODE;
663fa543
L
87}
88
822b8bf4 89EOF
663fa543 90fi
822b8bf4 91
92b93329 92fragment <<EOF
252b5132 93
7ee314fa
AM
94/* These variables are used to implement target options */
95
96static char *audit; /* colon (typically) separated list of libs */
97static char *depaudit; /* colon (typically) separated list of libs */
252b5132 98
04925e1e 99EOF
316a1245 100
d871d478 101if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
04925e1e 102
d871d478
AM
103 IS_LINUX_TARGET=FALSE
104 IS_FREEBSD_TARGET=FALSE
3dc16cab 105 case ${target} in
a5244b7e 106 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
d871d478
AM
107 IS_LINUX_TARGET=TRUE ;;
108 *-*-freebsd* | *-*-dragonfly*)
109 IS_FREEBSD_TARGET=TRUE ;;
110 esac
111 IS_LIBPATH=FALSE
112 if test "x${USE_LIBPATH}" = xyes; then
113 IS_LIBPATH=TRUE
114 fi
115 IS_NATIVE=FALSE
116 if test "x${NATIVE}" = xyes; then
117 IS_NATIVE=TRUE
118 fi
04925e1e 119
d871d478 120fragment <<EOF
04925e1e 121
d871d478 122/* This is called after all the input files have been opened. */
d3989512
JJ
123
124static void
d871d478 125gld${EMULATION_NAME}_after_open (void)
d3989512 126{
d871d478 127 ldelf_after_open ($IS_LIBPATH, $IS_NATIVE,
ef8f08ca 128 $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, "$prefix");
252b5132
RH
129}
130
04925e1e 131EOF
04925e1e 132fi
d871d478
AM
133
134if test x"$LDEMUL_BEFORE_ALLOCATION" != xgld"$EMULATION_NAME"_before_allocation; then
135 if test x"${ELF_INTERPRETER_NAME}" = x; then
136 ELF_INTERPRETER_NAME=NULL
137 fi
92b93329 138fragment <<EOF
04925e1e 139
d871d478
AM
140/* This is called after the sections have been attached to output
141 sections, but before any sizes or addresses have been set. */
252b5132
RH
142
143static void
d871d478 144gld${EMULATION_NAME}_before_allocation (void)
252b5132 145{
d871d478
AM
146 ldelf_before_allocation (audit, depaudit, ${ELF_INTERPRETER_NAME});
147}
7cedef86 148
c56feb2b
AM
149EOF
150fi
151
eaeb0a9d 152if test x"$LDEMUL_AFTER_ALLOCATION" != xgld"$EMULATION_NAME"_after_allocation; then
92b93329 153fragment <<EOF
252b5132 154
deb04cdb 155static void
eaeb0a9d 156gld${EMULATION_NAME}_after_allocation (void)
deb04cdb 157{
75938853
AM
158 int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
159
160 if (need_layout < 0)
d003af55 161 einfo (_("%X%P: .eh_frame/.stab edit: %E\n"));
75938853 162 else
d871d478 163 ldelf_map_segments (need_layout);
73d074b4 164}
41392f03
AM
165EOF
166fi
167
168if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
92b93329 169fragment <<EOF
252b5132
RH
170
171static char *
0c7a8e5a 172gld${EMULATION_NAME}_get_script (int *isfile)
252b5132
RH
173EOF
174
7225345d 175if test x"$COMPILE_IN" = xyes
252b5132
RH
176then
177# Scripts compiled in.
178
179# sed commands to quote an ld script as a C string.
597e2591 180sc="-f stringify.sed"
252b5132 181
92b93329 182fragment <<EOF
60bcf0fa 183{
252b5132
RH
184 *isfile = 0;
185
0e1862bb 186 if (bfd_link_relocatable (&link_info) && config.build_constructors)
597e2591 187 return
252b5132 188EOF
afd7a018 189sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
0e1862bb 190echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
afd7a018
AM
191sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
192echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
193sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
61585df2 194if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else
afd7a018
AM
195echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
196sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
db6751f2 197fi
36af4a4e
JJ
198if test -n "$GENERATE_PIE_SCRIPT" ; then
199if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
0e1862bb
L
200echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
201echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
47acac12
L
202echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
203echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
204sed $sc ldscripts/${EMULATION_NAME}.xdwe >> e${EMULATION_NAME}.c
205echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
206echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
0e1862bb 207echo ' && link_info.relro' >> e${EMULATION_NAME}.c
fbfca19e 208echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
afd7a018 209sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
a3813728
AK
210if test -n "$GENERATE_RELRO_SCRIPT" ; then
211echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
212echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
213echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
214echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
215sed $sc ldscripts/${EMULATION_NAME}.xdceo >> e${EMULATION_NAME}.c
216fi
0e1862bb 217echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
47acac12
L
218echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
219echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
220sed $sc ldscripts/${EMULATION_NAME}.xdce >> e${EMULATION_NAME}.c
a3813728
AK
221if test -n "$GENERATE_RELRO_SCRIPT" ; then
222echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
223echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
224echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
225sed $sc ldscripts/${EMULATION_NAME}.xdco >> e${EMULATION_NAME}.c
226fi
47acac12 227echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
0e1862bb 228echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
afd7a018 229sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
a3813728
AK
230if test -n "$GENERATE_RELRO_SCRIPT" ; then
231echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
232echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
233echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
234sed $sc ldscripts/${EMULATION_NAME}.xdeo >> e${EMULATION_NAME}.c
235fi
36af4a4e 236fi
47acac12
L
237echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
238echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
239sed $sc ldscripts/${EMULATION_NAME}.xde >> e${EMULATION_NAME}.c
a3813728
AK
240if test -n "$GENERATE_RELRO_SCRIPT" ; then
241echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
242echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
243sed $sc ldscripts/${EMULATION_NAME}.xdo >> e${EMULATION_NAME}.c
244fi
0e1862bb 245echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c
afd7a018 246sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
36af4a4e 247fi
252b5132 248if test -n "$GENERATE_SHLIB_SCRIPT" ; then
82434356 249if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
fb24d531
L
250echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
251echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
47acac12
L
252echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
253echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
254sed $sc ldscripts/${EMULATION_NAME}.xswe >> e${EMULATION_NAME}.c
255echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
256echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
fb24d531 257echo ' && link_info.relro' >> e${EMULATION_NAME}.c
fbfca19e 258echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
afd7a018 259sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
a3813728
AK
260if test -n "$GENERATE_RELRO_SCRIPT" ; then
261echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
262echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
263echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
264echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
265sed $sc ldscripts/${EMULATION_NAME}.xsceo >> e${EMULATION_NAME}.c
266fi
fb24d531 267echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
47acac12
L
268echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
269echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
270sed $sc ldscripts/${EMULATION_NAME}.xsce >> e${EMULATION_NAME}.c
a3813728
AK
271if test -n "$GENERATE_RELRO_SCRIPT" ; then
272echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
273echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
274echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
275sed $sc ldscripts/${EMULATION_NAME}.xsco >> e${EMULATION_NAME}.c
276fi
47acac12 277echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
fb24d531 278echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
afd7a018 279sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
a3813728
AK
280if test -n "$GENERATE_RELRO_SCRIPT" ; then
281echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
282echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
283echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
284sed $sc ldscripts/${EMULATION_NAME}.xseo >> e${EMULATION_NAME}.c
285fi
82434356 286fi
47acac12
L
287echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
288echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
289sed $sc ldscripts/${EMULATION_NAME}.xse >> e${EMULATION_NAME}.c
a3813728
AK
290if test -n "$GENERATE_RELRO_SCRIPT" ; then
291echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
292echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
293sed $sc ldscripts/${EMULATION_NAME}.xso >> e${EMULATION_NAME}.c
294fi
0e1862bb 295echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c
afd7a018 296sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
252b5132 297fi
82434356 298if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
fb24d531 299echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
47acac12
L
300echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
301echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
302sed $sc ldscripts/${EMULATION_NAME}.xwe >> e${EMULATION_NAME}.c
303echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
fb24d531 304echo ' && link_info.relro' >> e${EMULATION_NAME}.c
fbfca19e 305echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
afd7a018 306sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
a3813728
AK
307if test -n "$GENERATE_RELRO_SCRIPT" ; then
308echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
309echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
310echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
311sed $sc ldscripts/${EMULATION_NAME}.xceo >> e${EMULATION_NAME}.c
312fi
47acac12
L
313echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
314echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
315sed $sc ldscripts/${EMULATION_NAME}.xce >> e${EMULATION_NAME}.c
a3813728
AK
316if test -n "$GENERATE_RELRO_SCRIPT" ; then
317echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
318echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
319sed $sc ldscripts/${EMULATION_NAME}.xco >> e${EMULATION_NAME}.c
320fi
afd7a018
AM
321echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
322sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
82434356 323fi
a3813728
AK
324if test -n "$GENERATE_RELRO_SCRIPT" ; then
325echo ' ; else if (link_info.separate_code' >> e${EMULATION_NAME}.c
326echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
327sed $sc ldscripts/${EMULATION_NAME}.xeo >> e${EMULATION_NAME}.c
328fi
329echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c
47acac12 330sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c
a3813728
AK
331if test -n "$GENERATE_RELRO_SCRIPT" ; then
332echo ' ; else if (link_info.relro) return' >> e${EMULATION_NAME}.c
333sed $sc ldscripts/${EMULATION_NAME}.xo >> e${EMULATION_NAME}.c
334fi
afd7a018
AM
335echo ' ; else return' >> e${EMULATION_NAME}.c
336sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
337echo '; }' >> e${EMULATION_NAME}.c
252b5132
RH
338
339else
340# Scripts read from the filesystem.
341
92b93329 342fragment <<EOF
60bcf0fa 343{
252b5132
RH
344 *isfile = 1;
345
0e1862bb 346 if (bfd_link_relocatable (&link_info) && config.build_constructors)
252b5132 347 return "ldscripts/${EMULATION_NAME}.xu";
0e1862bb 348 else if (bfd_link_relocatable (&link_info))
252b5132
RH
349 return "ldscripts/${EMULATION_NAME}.xr";
350 else if (!config.text_read_only)
351 return "ldscripts/${EMULATION_NAME}.xbn";
a060b769
AM
352EOF
353if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then :
354else
92b93329 355fragment <<EOF
252b5132
RH
356 else if (!config.magic_demand_paged)
357 return "ldscripts/${EMULATION_NAME}.xn";
a060b769
AM
358EOF
359fi
36af4a4e
JJ
360if test -n "$GENERATE_PIE_SCRIPT" ; then
361if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
92b93329 362fragment <<EOF
0e1862bb
L
363 else if (bfd_link_pie (&link_info)
364 && link_info.combreloc
365 && link_info.relro
366 && (link_info.flags & DF_BIND_NOW))
47acac12
L
367 {
368 if (link_info.separate_code)
369 return "ldscripts/${EMULATION_NAME}.xdwe";
370 else
371 return "ldscripts/${EMULATION_NAME}.xdw";
372 }
a3813728
AK
373EOF
374if test -n "$GENERATE_RELRO_SCRIPT" ; then
375fragment <<EOF
376 else if (bfd_link_pie (&link_info)
377 && link_info.combreloc
378 && link_info.relro)
379 {
380 if (link_info.separate_code)
381 return "ldscripts/${EMULATION_NAME}.xdceo";
382 else
383 return "ldscripts/${EMULATION_NAME}.xdco";
384 }
385EOF
386fi
387fragment <<EOF
0e1862bb
L
388 else if (bfd_link_pie (&link_info)
389 && link_info.combreloc)
47acac12
L
390 {
391 if (link_info.separate_code)
392 return "ldscripts/${EMULATION_NAME}.xdce";
393 else
394 return "ldscripts/${EMULATION_NAME}.xdc";
395 }
36af4a4e
JJ
396EOF
397fi
a3813728
AK
398if test -n "$GENERATE_RELRO_SCRIPT" ; then
399fragment <<EOF
400 else if (bfd_link_pie (&link_info)
401 && link_info.relro)
402 {
403 if (link_info.separate_code)
404 return "ldscripts/${EMULATION_NAME}.xdeo";
405 else
406 return "ldscripts/${EMULATION_NAME}.xdo";
407 }
408EOF
409fi
92b93329 410fragment <<EOF
0e1862bb 411 else if (bfd_link_pie (&link_info))
47acac12
L
412 {
413 if (link_info.separate_code)
414 return "ldscripts/${EMULATION_NAME}.xde";
415 else
416 return "ldscripts/${EMULATION_NAME}.xd";
417 }
36af4a4e
JJ
418EOF
419fi
a060b769
AM
420if test -n "$GENERATE_SHLIB_SCRIPT" ; then
421if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
92b93329 422fragment <<EOF
0e1862bb 423 else if (bfd_link_dll (&link_info) && link_info.combreloc
fbfca19e 424 && link_info.relro && (link_info.flags & DF_BIND_NOW))
47acac12
L
425 {
426 if (link_info.separate_code)
427 return "ldscripts/${EMULATION_NAME}.xswe";
428 else
429 return "ldscripts/${EMULATION_NAME}.xsw";
430 }
a3813728
AK
431EOF
432if test -n "$GENERATE_RELRO_SCRIPT" ; then
433fragment <<EOF
434 else if (bfd_link_dll (&link_info)
435 && link_info.combreloc
436 && link_info.relro)
437 {
438 if (link_info.separate_code)
439 return "ldscripts/${EMULATION_NAME}.xsceo";
440 else
441 return "ldscripts/${EMULATION_NAME}.xsco";
442 }
443EOF
444fi
445fragment <<EOF
0e1862bb 446 else if (bfd_link_dll (&link_info) && link_info.combreloc)
47acac12
L
447 {
448 if (link_info.separate_code)
449 return "ldscripts/${EMULATION_NAME}.xsce";
450 else
451 return "ldscripts/${EMULATION_NAME}.xsc";
452 }
a060b769
AM
453EOF
454fi
a3813728
AK
455if test -n "$GENERATE_RELRO_SCRIPT" ; then
456fragment <<EOF
457 else if (bfd_link_dll (&link_info)
458 && link_info.relro)
459 {
460 if (link_info.separate_code)
461 return "ldscripts/${EMULATION_NAME}.xseo";
462 else
463 return "ldscripts/${EMULATION_NAME}.xso";
464 }
465EOF
466fi
92b93329 467fragment <<EOF
0e1862bb 468 else if (bfd_link_dll (&link_info))
47acac12
L
469 {
470 if (link_info.separate_code)
471 return "ldscripts/${EMULATION_NAME}.xse";
472 else
473 return "ldscripts/${EMULATION_NAME}.xs";
474 }
a060b769
AM
475EOF
476fi
477if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
92b93329 478fragment <<EOF
8c37241b 479 else if (link_info.combreloc && link_info.relro
fbfca19e 480 && (link_info.flags & DF_BIND_NOW))
47acac12
L
481 {
482 if (link_info.separate_code)
483 return "ldscripts/${EMULATION_NAME}.xwe";
484 else
485 return "ldscripts/${EMULATION_NAME}.xw";
486 }
a3813728
AK
487EOF
488if test -n "$GENERATE_RELRO_SCRIPT" ; then
489fragment <<EOF
490 else if (link_info.combreloc
491 && link_info.relro)
492 {
493 if (link_info.separate_code)
494 return "ldscripts/${EMULATION_NAME}.xceo";
495 else
496 return "ldscripts/${EMULATION_NAME}.xco";
497 }
498EOF
499fi
500fragment <<EOF
a060b769 501 else if (link_info.combreloc)
47acac12
L
502 {
503 if (link_info.separate_code)
504 return "ldscripts/${EMULATION_NAME}.xce";
505 else
506 return "ldscripts/${EMULATION_NAME}.xc";
507 }
a060b769
AM
508EOF
509fi
a3813728
AK
510if test -n "$GENERATE_RELRO_SCRIPT" ; then
511fragment <<EOF
512 else if (link_info.relro)
513 {
514 if (link_info.separate_code)
515 return "ldscripts/${EMULATION_NAME}.xeo";
516 else
517 return "ldscripts/${EMULATION_NAME}.xo";
518 }
519EOF
520fi
92b93329 521fragment <<EOF
252b5132 522 else
47acac12
L
523 {
524 if (link_info.separate_code)
525 return "ldscripts/${EMULATION_NAME}.xe";
526 else
527 return "ldscripts/${EMULATION_NAME}.x";
528 }
252b5132 529}
252b5132 530
3b108066 531EOF
41392f03
AM
532fi
533fi
3b108066 534
e0ee487b 535if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
92b93329 536fragment <<EOF
e0ee487b
L
537 $PARSE_AND_LIST_PROLOGUE
538EOF
539fi
540
92b93329 541fragment <<EOF
e0ee487b 542
29063f8b
NC
543enum elf_options
544{
545 OPTION_DISABLE_NEW_DTAGS = 400,
546 OPTION_ENABLE_NEW_DTAGS,
547 OPTION_GROUP,
548 OPTION_EH_FRAME_HDR,
549 OPTION_NO_EH_FRAME_HDR,
550 OPTION_EXCLUDE_LIBS,
551 OPTION_HASH_STYLE,
552 OPTION_BUILD_ID,
553 OPTION_AUDIT,
554 OPTION_COMPRESS_DEBUG
555};
e13629bc 556
3bcf5557 557static void
0c7a8e5a
AM
558gld${EMULATION_NAME}_add_options
559 (int ns, char **shortopts, int nl, struct option **longopts,
560 int nrl ATTRIBUTE_UNUSED, struct option **really_longopts ATTRIBUTE_UNUSED)
e0ee487b 561{
fb42df5e
AM
562EOF
563if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
564fragment <<EOF
7ee314fa 565 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:P:";
fb42df5e
AM
566EOF
567else
568fragment <<EOF
569 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:";
570EOF
571fi
572fragment <<EOF
3bcf5557 573 static const struct option xtra_long[] = {
fb42df5e
AM
574EOF
575if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
576fragment <<EOF
7ee314fa 577 {"audit", required_argument, NULL, OPTION_AUDIT},
fb42df5e
AM
578 {"Bgroup", no_argument, NULL, OPTION_GROUP},
579EOF
580fi
581fragment <<EOF
582 {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
0ce398f1 583 {"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
e0ee487b 584EOF
e0ee487b 585if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
92b93329 586fragment <<EOF
fb42df5e 587 {"depaudit", required_argument, NULL, 'P'},
3bcf5557
AM
588 {"disable-new-dtags", no_argument, NULL, OPTION_DISABLE_NEW_DTAGS},
589 {"enable-new-dtags", no_argument, NULL, OPTION_ENABLE_NEW_DTAGS},
590 {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
29063f8b 591 {"no-eh-frame-hdr", no_argument, NULL, OPTION_NO_EH_FRAME_HDR},
b58f81ae 592 {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
fdc90cb4 593 {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
e0ee487b
L
594EOF
595fi
e0ee487b 596if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
92b93329 597fragment <<EOF
3bcf5557 598 $PARSE_AND_LIST_LONGOPTS
e0ee487b
L
599EOF
600fi
92b93329 601fragment <<EOF
3bcf5557
AM
602 {NULL, no_argument, NULL, 0}
603 };
604
605 *shortopts = (char *) xrealloc (*shortopts, ns + sizeof (xtra_short));
606 memcpy (*shortopts + ns, &xtra_short, sizeof (xtra_short));
607 *longopts = (struct option *)
608 xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
609 memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
610}
04925e1e 611
24382dca 612#define DEFAULT_BUILD_ID_STYLE "sha1"
c0065db7 613
3bcf5557 614static bfd_boolean
0c7a8e5a 615gld${EMULATION_NAME}_handle_option (int optc)
e0ee487b 616{
e0ee487b
L
617 switch (optc)
618 {
619 default:
3bcf5557 620 return FALSE;
6c1439be 621
c0065db7 622 case OPTION_BUILD_ID:
d871d478 623 if (ldelf_emit_note_gnu_build_id != NULL)
c0065db7 624 {
d871d478
AM
625 free ((char *) ldelf_emit_note_gnu_build_id);
626 ldelf_emit_note_gnu_build_id = NULL;
c0065db7
RM
627 }
628 if (optarg == NULL)
629 optarg = DEFAULT_BUILD_ID_STYLE;
630 if (strcmp (optarg, "none"))
d871d478 631 ldelf_emit_note_gnu_build_id = xstrdup (optarg);
c0065db7 632 break;
fb42df5e 633
0ce398f1
L
634 case OPTION_COMPRESS_DEBUG:
635 if (strcasecmp (optarg, "none") == 0)
636 link_info.compress_debug = COMPRESS_DEBUG_NONE;
637 else if (strcasecmp (optarg, "zlib") == 0)
19a7fe52 638 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
0ce398f1
L
639 else if (strcasecmp (optarg, "zlib-gnu") == 0)
640 link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
641 else if (strcasecmp (optarg, "zlib-gabi") == 0)
642 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
643 else
df5f2391 644 einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
0ce398f1
L
645 optarg);
646 break;
fb42df5e
AM
647EOF
648
649if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
650fragment <<EOF
7ee314fa 651 case OPTION_AUDIT:
d871d478 652 ldelf_append_to_separated_string (&audit, optarg);
7ee314fa 653 break;
fb42df5e 654
7ee314fa 655 case 'P':
d871d478 656 ldelf_append_to_separated_string (&depaudit, optarg);
7ee314fa 657 break;
c0065db7 658
6c1439be 659 case OPTION_DISABLE_NEW_DTAGS:
b34976b6 660 link_info.new_dtags = FALSE;
6c1439be
L
661 break;
662
663 case OPTION_ENABLE_NEW_DTAGS:
b34976b6 664 link_info.new_dtags = TRUE;
6c1439be
L
665 break;
666
65765700 667 case OPTION_EH_FRAME_HDR:
2f0c68f2 668 link_info.eh_frame_hdr_type = DWARF2_EH_HDR;
65765700
JJ
669 break;
670
29063f8b
NC
671 case OPTION_NO_EH_FRAME_HDR:
672 link_info.eh_frame_hdr_type = 0;
673 break;
674
a1ab1d2a
UD
675 case OPTION_GROUP:
676 link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
677 /* Groups must be self-contained. */
95a51568
FS
678 link_info.unresolved_syms_in_objects = RM_DIAGNOSE;
679 link_info.unresolved_syms_in_shared_libs = RM_DIAGNOSE;
a1ab1d2a
UD
680 break;
681
b58f81ae
DJ
682 case OPTION_EXCLUDE_LIBS:
683 add_excluded_libs (optarg);
684 break;
685
fdc90cb4
JJ
686 case OPTION_HASH_STYLE:
687 link_info.emit_hash = FALSE;
688 link_info.emit_gnu_hash = FALSE;
689 if (strcmp (optarg, "sysv") == 0)
690 link_info.emit_hash = TRUE;
691 else if (strcmp (optarg, "gnu") == 0)
692 link_info.emit_gnu_hash = TRUE;
693 else if (strcmp (optarg, "both") == 0)
694 {
695 link_info.emit_hash = TRUE;
696 link_info.emit_gnu_hash = TRUE;
697 }
698 else
df5f2391 699 einfo (_("%F%P: invalid hash style \`%s'\n"), optarg);
fdc90cb4
JJ
700 break;
701
fb42df5e
AM
702EOF
703fi
704fragment <<EOF
e0ee487b 705 case 'z':
fb42df5e 706 if (strcmp (optarg, "defs") == 0)
95a51568 707 link_info.unresolved_syms_in_objects = RM_DIAGNOSE;
97a232d7
NC
708 else if (strcmp (optarg, "undefs") == 0)
709 link_info.unresolved_syms_in_objects = RM_IGNORE;
fb42df5e
AM
710 else if (strcmp (optarg, "muldefs") == 0)
711 link_info.allow_multiple_definition = TRUE;
712 else if (CONST_STRNEQ (optarg, "max-page-size="))
713 {
714 char *end;
715
716 config.maxpagesize = strtoul (optarg + 14, &end, 0);
717 if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0)
eca4b721 718 einfo (_("%F%P: invalid maximum page size \`%s'\n"),
fb42df5e
AM
719 optarg + 14);
720 }
721 else if (CONST_STRNEQ (optarg, "common-page-size="))
722 {
723 char *end;
724 config.commonpagesize = strtoul (optarg + 17, &end, 0);
725 if (*end
726 || (config.commonpagesize & (config.commonpagesize - 1)) != 0)
df5f2391 727 einfo (_("%F%P: invalid common page size \`%s'\n"),
fb42df5e
AM
728 optarg + 17);
729 }
04c3a755
NS
730 else if (CONST_STRNEQ (optarg, "stack-size="))
731 {
732 char *end;
733 link_info.stacksize = strtoul (optarg + 11, &end, 0);
734 if (*end || link_info.stacksize < 0)
df5f2391 735 einfo (_("%F%P: invalid stack size \`%s'\n"), optarg + 11);
04c3a755
NS
736 if (!link_info.stacksize)
737 /* Use -1 for explicit no-stack, because zero means
738 'default'. */
739 link_info.stacksize = -1;
740 }
fb42df5e
AM
741 else if (strcmp (optarg, "execstack") == 0)
742 {
743 link_info.execstack = TRUE;
744 link_info.noexecstack = FALSE;
745 }
746 else if (strcmp (optarg, "noexecstack") == 0)
747 {
748 link_info.noexecstack = TRUE;
749 link_info.execstack = FALSE;
750 }
93ab9c0d
NC
751 else if (strcmp (optarg, "globalaudit") == 0)
752 {
753 link_info.flags_1 |= DF_1_GLOBAUDIT;
754 }
fb42df5e 755EOF
d258b828 756
fb42df5e
AM
757if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
758fragment <<EOF
b039ef04
L
759 else if (strcmp (optarg, "global") == 0)
760 link_info.flags_1 |= (bfd_vma) DF_1_GLOBAL;
fb42df5e 761 else if (strcmp (optarg, "initfirst") == 0)
e0ee487b
L
762 link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
763 else if (strcmp (optarg, "interpose") == 0)
764 link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE;
765 else if (strcmp (optarg, "loadfltr") == 0)
766 link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR;
767 else if (strcmp (optarg, "nodefaultlib") == 0)
768 link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB;
769 else if (strcmp (optarg, "nodelete") == 0)
770 link_info.flags_1 |= (bfd_vma) DF_1_NODELETE;
771 else if (strcmp (optarg, "nodlopen") == 0)
772 link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN;
773 else if (strcmp (optarg, "nodump") == 0)
774 link_info.flags_1 |= (bfd_vma) DF_1_NODUMP;
775 else if (strcmp (optarg, "now") == 0)
776 {
777 link_info.flags |= (bfd_vma) DF_BIND_NOW;
778 link_info.flags_1 |= (bfd_vma) DF_1_NOW;
779 }
5fa222e4
AM
780 else if (strcmp (optarg, "lazy") == 0)
781 {
782 link_info.flags &= ~(bfd_vma) DF_BIND_NOW;
783 link_info.flags_1 &= ~(bfd_vma) DF_1_NOW;
784 }
e0ee487b
L
785 else if (strcmp (optarg, "origin") == 0)
786 {
787 link_info.flags |= (bfd_vma) DF_ORIGIN;
788 link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
789 }
db6751f2 790 else if (strcmp (optarg, "combreloc") == 0)
b34976b6 791 link_info.combreloc = TRUE;
db6751f2 792 else if (strcmp (optarg, "nocombreloc") == 0)
b34976b6 793 link_info.combreloc = FALSE;
8bd621d8 794 else if (strcmp (optarg, "nocopyreloc") == 0)
0c7a8e5a 795 link_info.nocopyreloc = TRUE;
8c37241b
JJ
796 else if (strcmp (optarg, "relro") == 0)
797 link_info.relro = TRUE;
798 else if (strcmp (optarg, "norelro") == 0)
799 link_info.relro = FALSE;
47acac12
L
800 else if (strcmp (optarg, "separate-code") == 0)
801 link_info.separate_code = TRUE;
802 else if (strcmp (optarg, "noseparate-code") == 0)
803 link_info.separate_code = FALSE;
b8871f35
L
804 else if (strcmp (optarg, "common") == 0)
805 link_info.elf_stt_common = elf_stt_common;
806 else if (strcmp (optarg, "nocommon") == 0)
807 link_info.elf_stt_common = no_elf_stt_common;
c192a133
AM
808 else if (strcmp (optarg, "text") == 0)
809 link_info.error_textrel = TRUE;
810 else if (strcmp (optarg, "notext") == 0)
811 link_info.error_textrel = FALSE;
812 else if (strcmp (optarg, "textoff") == 0)
813 link_info.error_textrel = FALSE;
88b882e9 814EOF
fb42df5e 815fi
88b882e9 816
eba27bd7
L
817if test -n "$PARSE_AND_LIST_ARGS_CASE_Z" ; then
818fragment <<EOF
819 $PARSE_AND_LIST_ARGS_CASE_Z
820EOF
821fi
822
92b93329 823fragment <<EOF
fb42df5e 824 else
df5f2391 825 einfo (_("%P: warning: -z %s ignored\n"), optarg);
6c1439be 826 break;
e0ee487b 827EOF
e0ee487b
L
828
829if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
92b93329 830fragment <<EOF
e0ee487b
L
831 $PARSE_AND_LIST_ARGS_CASES
832EOF
833fi
834
92b93329 835fragment <<EOF
e0ee487b
L
836 }
837
3bcf5557 838 return TRUE;
e0ee487b
L
839}
840
41392f03 841EOF
41392f03 842
4b209b22 843if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
c58212ea 844gld_list_options="gld${EMULATION_NAME}_list_options"
eba27bd7 845if test -n "$PARSE_AND_LIST_OPTIONS"; then
92b93329 846fragment <<EOF
41392f03 847
e0ee487b 848static void
0c7a8e5a 849gld${EMULATION_NAME}_list_options (FILE * file)
e0ee487b 850{
fb42df5e 851EOF
e0ee487b
L
852
853if test -n "$PARSE_AND_LIST_OPTIONS" ; then
92b93329 854fragment <<EOF
e0ee487b
L
855 $PARSE_AND_LIST_OPTIONS
856EOF
857fi
858
92b93329 859fragment <<EOF
e0ee487b
L
860}
861EOF
c58212ea
L
862else
863 gld_list_options="NULL"
864fi
e0ee487b
L
865
866if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
92b93329 867fragment <<EOF
e0ee487b
L
868 $PARSE_AND_LIST_EPILOGUE
869EOF
870fi
41392f03 871fi
e0ee487b 872
92b93329 873fragment <<EOF
252b5132 874
60bcf0fa 875struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
252b5132 876{
41392f03
AM
877 ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
878 ${LDEMUL_SYSLIB-syslib_default},
879 ${LDEMUL_HLL-hll_default},
d871d478 880 ${LDEMUL_AFTER_PARSE-ldelf_after_parse},
41392f03 881 ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
5c3261b0 882 ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default},
9b538ba7 883 ${LDEMUL_BEFORE_PLACE_ORPHANS-ldelf_before_place_orphans},
eaeb0a9d 884 ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
41392f03
AM
885 ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
886 ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
887 ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
888 ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
252b5132
RH
889 "${EMULATION_NAME}",
890 "${OUTPUT_FORMAT}",
eaeb0a9d 891 ${LDEMUL_FINISH-finish_default},
41392f03 892 ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
d871d478
AM
893 ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-ldelf_open_dynamic_archive},
894 ${LDEMUL_PLACE_ORPHAN-ldelf_place_orphan},
41392f03 895 ${LDEMUL_SET_SYMBOLS-NULL},
3bcf5557
AM
896 ${LDEMUL_PARSE_ARGS-NULL},
897 gld${EMULATION_NAME}_add_options,
898 gld${EMULATION_NAME}_handle_option,
41392f03 899 ${LDEMUL_UNRECOGNIZED_FILE-NULL},
c58212ea 900 ${LDEMUL_LIST_OPTIONS-${gld_list_options}},
d871d478 901 ${LDEMUL_RECOGNIZED_FILE-ldelf_load_symbols},
41392f03 902 ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
7a2f2d82 903 ${LDEMUL_NEW_VERS_PATTERN-NULL},
1ff6de03
NA
904 ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
905 ${LDEMUL_EMIT_CTF_EARLY-NULL},
906 ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}
252b5132
RH
907};
908EOF
This page took 1.256949 seconds and 4 git commands to generate.