gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / ld / emultempl / elf.em
1 # This shell script emits a C file. -*- C -*-
2 # It does some substitutions.
3 test -z "${ELFSIZE}" && ELFSIZE=32
4 if [ -z "$MACHINE" ]; then
5 OUTPUT_ARCH=${ARCH}
6 else
7 OUTPUT_ARCH=${ARCH}:${MACHINE}
8 fi
9 fragment <<EOF
10 /* This file is is generated by a shell script. DO NOT EDIT! */
11
12 /* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
13 Copyright (C) 1991-2020 Free Software Foundation, Inc.
14 Written by Steve Chamberlain <sac@cygnus.com>
15 ELF support by Ian Lance Taylor <ian@cygnus.com>
16
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. */
33
34 #define TARGET_IS_${EMULATION_NAME}
35
36 #include "sysdep.h"
37 #include "bfd.h"
38 #include "libiberty.h"
39 #include "getopt.h"
40 #include "bfdlink.h"
41 #include "ctf-api.h"
42 #include "ld.h"
43 #include "ldmain.h"
44 #include "ldmisc.h"
45 #include "ldexp.h"
46 #include "ldlang.h"
47 #include "ldfile.h"
48 #include "ldemul.h"
49 #include <ldgram.h>
50 #include "elf-bfd.h"
51 #include "ldelf.h"
52 #include "ldelfgen.h"
53
54 /* Declare functions used by various EXTRA_EM_FILEs. */
55 static void gld${EMULATION_NAME}_before_parse (void);
56 static void gld${EMULATION_NAME}_after_open (void);
57 static void gld${EMULATION_NAME}_before_allocation (void);
58 static void gld${EMULATION_NAME}_after_allocation (void);
59 EOF
60
61 # Import any needed special functions and/or overrides.
62 #
63 source_em ${srcdir}/emultempl/elf-generic.em
64 if test -n "$EXTRA_EM_FILE" ; then
65 source_em ${srcdir}/emultempl/${EXTRA_EM_FILE}.em
66 fi
67
68 # Functions in this file can be overridden by setting the LDEMUL_* shell
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 #
74 if test x"$LDEMUL_BEFORE_PARSE" != xgld"$EMULATION_NAME"_before_parse; then
75 fragment <<EOF
76
77 static void
78 gld${EMULATION_NAME}_before_parse (void)
79 {
80 ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
81 input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
82 config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
83 config.separate_code = `if test "x${SEPARATE_CODE}" = xyes ; then echo TRUE ; else echo FALSE ; fi`;
84 link_info.check_relocs_after_open_input = TRUE;
85 link_info.relro = DEFAULT_LD_Z_RELRO;
86 link_info.separate_code = DEFAULT_LD_Z_SEPARATE_CODE;
87 }
88
89 EOF
90 fi
91
92 fragment <<EOF
93
94 /* These variables are used to implement target options */
95
96 static char *audit; /* colon (typically) separated list of libs */
97 static char *depaudit; /* colon (typically) separated list of libs */
98
99 EOF
100
101 if test x"$LDEMUL_AFTER_OPEN" != xgld"$EMULATION_NAME"_after_open; then
102
103 IS_LINUX_TARGET=FALSE
104 IS_FREEBSD_TARGET=FALSE
105 case ${target} in
106 *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
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
119
120 fragment <<EOF
121
122 /* This is called after all the input files have been opened. */
123
124 static void
125 gld${EMULATION_NAME}_after_open (void)
126 {
127 ldelf_after_open ($IS_LIBPATH, $IS_NATIVE,
128 $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, "$prefix");
129 }
130
131 EOF
132 fi
133
134 if 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
138 fragment <<EOF
139
140 /* This is called after the sections have been attached to output
141 sections, but before any sizes or addresses have been set. */
142
143 static void
144 gld${EMULATION_NAME}_before_allocation (void)
145 {
146 ldelf_before_allocation (audit, depaudit, ${ELF_INTERPRETER_NAME});
147 }
148
149 EOF
150 fi
151
152 if test x"$LDEMUL_AFTER_ALLOCATION" != xgld"$EMULATION_NAME"_after_allocation; then
153 fragment <<EOF
154
155 static void
156 gld${EMULATION_NAME}_after_allocation (void)
157 {
158 int need_layout = bfd_elf_discard_info (link_info.output_bfd, &link_info);
159
160 if (need_layout < 0)
161 einfo (_("%X%P: .eh_frame/.stab edit: %E\n"));
162 else
163 ldelf_map_segments (need_layout);
164 }
165 EOF
166 fi
167
168 if test x"$LDEMUL_GET_SCRIPT" != xgld"$EMULATION_NAME"_get_script; then
169 fragment <<EOF
170
171 static char *
172 gld${EMULATION_NAME}_get_script (int *isfile)
173 EOF
174
175 if test x"$COMPILE_IN" = xyes
176 then
177 # Scripts compiled in.
178
179 # sed commands to quote an ld script as a C string.
180 sc="-f stringify.sed"
181
182 fragment <<EOF
183 {
184 *isfile = 0;
185
186 if (bfd_link_relocatable (&link_info) && config.build_constructors)
187 return
188 EOF
189 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
190 echo ' ; else if (bfd_link_relocatable (&link_info)) return' >> e${EMULATION_NAME}.c
191 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
192 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
193 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
194 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then : ; else
195 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
196 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
197 fi
198 if test -n "$GENERATE_PIE_SCRIPT" ; then
199 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
200 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
201 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
202 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
203 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
204 sed $sc ldscripts/${EMULATION_NAME}.xdwe >> e${EMULATION_NAME}.c
205 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
206 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
207 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
208 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
209 sed $sc ldscripts/${EMULATION_NAME}.xdw >> e${EMULATION_NAME}.c
210 if test -n "$GENERATE_RELRO_SCRIPT" ; then
211 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
212 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
213 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
214 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
215 sed $sc ldscripts/${EMULATION_NAME}.xdceo >> e${EMULATION_NAME}.c
216 fi
217 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
218 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
219 echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
220 sed $sc ldscripts/${EMULATION_NAME}.xdce >> e${EMULATION_NAME}.c
221 if test -n "$GENERATE_RELRO_SCRIPT" ; then
222 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
223 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
224 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
225 sed $sc ldscripts/${EMULATION_NAME}.xdco >> e${EMULATION_NAME}.c
226 fi
227 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
228 echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
229 sed $sc ldscripts/${EMULATION_NAME}.xdc >> e${EMULATION_NAME}.c
230 if test -n "$GENERATE_RELRO_SCRIPT" ; then
231 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
232 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
233 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
234 sed $sc ldscripts/${EMULATION_NAME}.xdeo >> e${EMULATION_NAME}.c
235 fi
236 fi
237 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
238 echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
239 sed $sc ldscripts/${EMULATION_NAME}.xde >> e${EMULATION_NAME}.c
240 if test -n "$GENERATE_RELRO_SCRIPT" ; then
241 echo ' ; else if (bfd_link_pie (&link_info)' >> e${EMULATION_NAME}.c
242 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
243 sed $sc ldscripts/${EMULATION_NAME}.xdo >> e${EMULATION_NAME}.c
244 fi
245 echo ' ; else if (bfd_link_pie (&link_info)) return' >> e${EMULATION_NAME}.c
246 sed $sc ldscripts/${EMULATION_NAME}.xd >> e${EMULATION_NAME}.c
247 fi
248 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
249 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
250 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
251 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
252 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
253 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
254 sed $sc ldscripts/${EMULATION_NAME}.xswe >> e${EMULATION_NAME}.c
255 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
256 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
257 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
258 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
259 sed $sc ldscripts/${EMULATION_NAME}.xsw >> e${EMULATION_NAME}.c
260 if test -n "$GENERATE_RELRO_SCRIPT" ; then
261 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
262 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
263 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
264 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
265 sed $sc ldscripts/${EMULATION_NAME}.xsceo >> e${EMULATION_NAME}.c
266 fi
267 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
268 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
269 echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
270 sed $sc ldscripts/${EMULATION_NAME}.xsce >> e${EMULATION_NAME}.c
271 if test -n "$GENERATE_RELRO_SCRIPT" ; then
272 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
273 echo ' && link_info.combreloc' >> e${EMULATION_NAME}.c
274 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
275 sed $sc ldscripts/${EMULATION_NAME}.xsco >> e${EMULATION_NAME}.c
276 fi
277 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
278 echo ' && link_info.combreloc) return' >> e${EMULATION_NAME}.c
279 sed $sc ldscripts/${EMULATION_NAME}.xsc >> e${EMULATION_NAME}.c
280 if test -n "$GENERATE_RELRO_SCRIPT" ; then
281 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
282 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
283 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
284 sed $sc ldscripts/${EMULATION_NAME}.xseo >> e${EMULATION_NAME}.c
285 fi
286 fi
287 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
288 echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
289 sed $sc ldscripts/${EMULATION_NAME}.xse >> e${EMULATION_NAME}.c
290 if test -n "$GENERATE_RELRO_SCRIPT" ; then
291 echo ' ; else if (bfd_link_dll (&link_info)' >> e${EMULATION_NAME}.c
292 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
293 sed $sc ldscripts/${EMULATION_NAME}.xso >> e${EMULATION_NAME}.c
294 fi
295 echo ' ; else if (bfd_link_dll (&link_info)) return' >> e${EMULATION_NAME}.c
296 sed $sc ldscripts/${EMULATION_NAME}.xs >> e${EMULATION_NAME}.c
297 fi
298 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
299 echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
300 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
301 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
302 sed $sc ldscripts/${EMULATION_NAME}.xwe >> e${EMULATION_NAME}.c
303 echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
304 echo ' && link_info.relro' >> e${EMULATION_NAME}.c
305 echo ' && (link_info.flags & DF_BIND_NOW)) return' >> e${EMULATION_NAME}.c
306 sed $sc ldscripts/${EMULATION_NAME}.xw >> e${EMULATION_NAME}.c
307 if test -n "$GENERATE_RELRO_SCRIPT" ; then
308 echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
309 echo ' && link_info.separate_code' >> e${EMULATION_NAME}.c
310 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
311 sed $sc ldscripts/${EMULATION_NAME}.xceo >> e${EMULATION_NAME}.c
312 fi
313 echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
314 echo ' && link_info.separate_code) return' >> e${EMULATION_NAME}.c
315 sed $sc ldscripts/${EMULATION_NAME}.xce >> e${EMULATION_NAME}.c
316 if test -n "$GENERATE_RELRO_SCRIPT" ; then
317 echo ' ; else if (link_info.combreloc' >> e${EMULATION_NAME}.c
318 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
319 sed $sc ldscripts/${EMULATION_NAME}.xco >> e${EMULATION_NAME}.c
320 fi
321 echo ' ; else if (link_info.combreloc) return' >> e${EMULATION_NAME}.c
322 sed $sc ldscripts/${EMULATION_NAME}.xc >> e${EMULATION_NAME}.c
323 fi
324 if test -n "$GENERATE_RELRO_SCRIPT" ; then
325 echo ' ; else if (link_info.separate_code' >> e${EMULATION_NAME}.c
326 echo ' && link_info.relro) return' >> e${EMULATION_NAME}.c
327 sed $sc ldscripts/${EMULATION_NAME}.xeo >> e${EMULATION_NAME}.c
328 fi
329 echo ' ; else if (link_info.separate_code) return' >> e${EMULATION_NAME}.c
330 sed $sc ldscripts/${EMULATION_NAME}.xe >> e${EMULATION_NAME}.c
331 if test -n "$GENERATE_RELRO_SCRIPT" ; then
332 echo ' ; else if (link_info.relro) return' >> e${EMULATION_NAME}.c
333 sed $sc ldscripts/${EMULATION_NAME}.xo >> e${EMULATION_NAME}.c
334 fi
335 echo ' ; else return' >> e${EMULATION_NAME}.c
336 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
337 echo '; }' >> e${EMULATION_NAME}.c
338
339 else
340 # Scripts read from the filesystem.
341
342 fragment <<EOF
343 {
344 *isfile = 1;
345
346 if (bfd_link_relocatable (&link_info) && config.build_constructors)
347 return "ldscripts/${EMULATION_NAME}.xu";
348 else if (bfd_link_relocatable (&link_info))
349 return "ldscripts/${EMULATION_NAME}.xr";
350 else if (!config.text_read_only)
351 return "ldscripts/${EMULATION_NAME}.xbn";
352 EOF
353 if cmp -s ldscripts/${EMULATION_NAME}.x ldscripts/${EMULATION_NAME}.xn; then :
354 else
355 fragment <<EOF
356 else if (!config.magic_demand_paged)
357 return "ldscripts/${EMULATION_NAME}.xn";
358 EOF
359 fi
360 if test -n "$GENERATE_PIE_SCRIPT" ; then
361 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
362 fragment <<EOF
363 else if (bfd_link_pie (&link_info)
364 && link_info.combreloc
365 && link_info.relro
366 && (link_info.flags & DF_BIND_NOW))
367 {
368 if (link_info.separate_code)
369 return "ldscripts/${EMULATION_NAME}.xdwe";
370 else
371 return "ldscripts/${EMULATION_NAME}.xdw";
372 }
373 EOF
374 if test -n "$GENERATE_RELRO_SCRIPT" ; then
375 fragment <<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 }
385 EOF
386 fi
387 fragment <<EOF
388 else if (bfd_link_pie (&link_info)
389 && link_info.combreloc)
390 {
391 if (link_info.separate_code)
392 return "ldscripts/${EMULATION_NAME}.xdce";
393 else
394 return "ldscripts/${EMULATION_NAME}.xdc";
395 }
396 EOF
397 fi
398 if test -n "$GENERATE_RELRO_SCRIPT" ; then
399 fragment <<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 }
408 EOF
409 fi
410 fragment <<EOF
411 else if (bfd_link_pie (&link_info))
412 {
413 if (link_info.separate_code)
414 return "ldscripts/${EMULATION_NAME}.xde";
415 else
416 return "ldscripts/${EMULATION_NAME}.xd";
417 }
418 EOF
419 fi
420 if test -n "$GENERATE_SHLIB_SCRIPT" ; then
421 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
422 fragment <<EOF
423 else if (bfd_link_dll (&link_info) && link_info.combreloc
424 && link_info.relro && (link_info.flags & DF_BIND_NOW))
425 {
426 if (link_info.separate_code)
427 return "ldscripts/${EMULATION_NAME}.xswe";
428 else
429 return "ldscripts/${EMULATION_NAME}.xsw";
430 }
431 EOF
432 if test -n "$GENERATE_RELRO_SCRIPT" ; then
433 fragment <<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 }
443 EOF
444 fi
445 fragment <<EOF
446 else if (bfd_link_dll (&link_info) && link_info.combreloc)
447 {
448 if (link_info.separate_code)
449 return "ldscripts/${EMULATION_NAME}.xsce";
450 else
451 return "ldscripts/${EMULATION_NAME}.xsc";
452 }
453 EOF
454 fi
455 if test -n "$GENERATE_RELRO_SCRIPT" ; then
456 fragment <<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 }
465 EOF
466 fi
467 fragment <<EOF
468 else if (bfd_link_dll (&link_info))
469 {
470 if (link_info.separate_code)
471 return "ldscripts/${EMULATION_NAME}.xse";
472 else
473 return "ldscripts/${EMULATION_NAME}.xs";
474 }
475 EOF
476 fi
477 if test -n "$GENERATE_COMBRELOC_SCRIPT" ; then
478 fragment <<EOF
479 else if (link_info.combreloc && link_info.relro
480 && (link_info.flags & DF_BIND_NOW))
481 {
482 if (link_info.separate_code)
483 return "ldscripts/${EMULATION_NAME}.xwe";
484 else
485 return "ldscripts/${EMULATION_NAME}.xw";
486 }
487 EOF
488 if test -n "$GENERATE_RELRO_SCRIPT" ; then
489 fragment <<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 }
498 EOF
499 fi
500 fragment <<EOF
501 else if (link_info.combreloc)
502 {
503 if (link_info.separate_code)
504 return "ldscripts/${EMULATION_NAME}.xce";
505 else
506 return "ldscripts/${EMULATION_NAME}.xc";
507 }
508 EOF
509 fi
510 if test -n "$GENERATE_RELRO_SCRIPT" ; then
511 fragment <<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 }
519 EOF
520 fi
521 fragment <<EOF
522 else
523 {
524 if (link_info.separate_code)
525 return "ldscripts/${EMULATION_NAME}.xe";
526 else
527 return "ldscripts/${EMULATION_NAME}.x";
528 }
529 }
530
531 EOF
532 fi
533 fi
534
535 if test -n "$PARSE_AND_LIST_PROLOGUE" ; then
536 fragment <<EOF
537 $PARSE_AND_LIST_PROLOGUE
538 EOF
539 fi
540
541 fragment <<EOF
542
543 enum 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 };
556
557 static void
558 gld${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)
561 {
562 EOF
563 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
564 fragment <<EOF
565 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:P:";
566 EOF
567 else
568 fragment <<EOF
569 static const char xtra_short[] = "${PARSE_AND_LIST_SHORTOPTS}z:";
570 EOF
571 fi
572 fragment <<EOF
573 static const struct option xtra_long[] = {
574 EOF
575 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
576 fragment <<EOF
577 {"audit", required_argument, NULL, OPTION_AUDIT},
578 {"Bgroup", no_argument, NULL, OPTION_GROUP},
579 EOF
580 fi
581 fragment <<EOF
582 {"build-id", optional_argument, NULL, OPTION_BUILD_ID},
583 {"compress-debug-sections", required_argument, NULL, OPTION_COMPRESS_DEBUG},
584 EOF
585 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
586 fragment <<EOF
587 {"depaudit", required_argument, NULL, 'P'},
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},
591 {"no-eh-frame-hdr", no_argument, NULL, OPTION_NO_EH_FRAME_HDR},
592 {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
593 {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
594 EOF
595 fi
596 if test -n "$PARSE_AND_LIST_LONGOPTS" ; then
597 fragment <<EOF
598 $PARSE_AND_LIST_LONGOPTS
599 EOF
600 fi
601 fragment <<EOF
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 }
611
612 #define DEFAULT_BUILD_ID_STYLE "sha1"
613
614 static bfd_boolean
615 gld${EMULATION_NAME}_handle_option (int optc)
616 {
617 switch (optc)
618 {
619 default:
620 return FALSE;
621
622 case OPTION_BUILD_ID:
623 free ((char *) ldelf_emit_note_gnu_build_id);
624 ldelf_emit_note_gnu_build_id = NULL;
625 if (optarg == NULL)
626 optarg = DEFAULT_BUILD_ID_STYLE;
627 if (strcmp (optarg, "none"))
628 ldelf_emit_note_gnu_build_id = xstrdup (optarg);
629 break;
630
631 case OPTION_COMPRESS_DEBUG:
632 if (strcasecmp (optarg, "none") == 0)
633 link_info.compress_debug = COMPRESS_DEBUG_NONE;
634 else if (strcasecmp (optarg, "zlib") == 0)
635 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
636 else if (strcasecmp (optarg, "zlib-gnu") == 0)
637 link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
638 else if (strcasecmp (optarg, "zlib-gabi") == 0)
639 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
640 else
641 einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
642 optarg);
643 break;
644 EOF
645
646 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
647 fragment <<EOF
648 case OPTION_AUDIT:
649 ldelf_append_to_separated_string (&audit, optarg);
650 break;
651
652 case 'P':
653 ldelf_append_to_separated_string (&depaudit, optarg);
654 break;
655
656 case OPTION_DISABLE_NEW_DTAGS:
657 link_info.new_dtags = FALSE;
658 break;
659
660 case OPTION_ENABLE_NEW_DTAGS:
661 link_info.new_dtags = TRUE;
662 break;
663
664 case OPTION_EH_FRAME_HDR:
665 link_info.eh_frame_hdr_type = DWARF2_EH_HDR;
666 break;
667
668 case OPTION_NO_EH_FRAME_HDR:
669 link_info.eh_frame_hdr_type = 0;
670 break;
671
672 case OPTION_GROUP:
673 link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
674 /* Groups must be self-contained. */
675 link_info.unresolved_syms_in_objects = RM_DIAGNOSE;
676 link_info.unresolved_syms_in_shared_libs = RM_DIAGNOSE;
677 break;
678
679 case OPTION_EXCLUDE_LIBS:
680 add_excluded_libs (optarg);
681 break;
682
683 case OPTION_HASH_STYLE:
684 link_info.emit_hash = FALSE;
685 link_info.emit_gnu_hash = FALSE;
686 if (strcmp (optarg, "sysv") == 0)
687 link_info.emit_hash = TRUE;
688 else if (strcmp (optarg, "gnu") == 0)
689 link_info.emit_gnu_hash = TRUE;
690 else if (strcmp (optarg, "both") == 0)
691 {
692 link_info.emit_hash = TRUE;
693 link_info.emit_gnu_hash = TRUE;
694 }
695 else
696 einfo (_("%F%P: invalid hash style \`%s'\n"), optarg);
697 break;
698
699 EOF
700 fi
701 fragment <<EOF
702 case 'z':
703 if (strcmp (optarg, "defs") == 0)
704 link_info.unresolved_syms_in_objects = RM_DIAGNOSE;
705 else if (strcmp (optarg, "undefs") == 0)
706 link_info.unresolved_syms_in_objects = RM_IGNORE;
707 else if (strcmp (optarg, "muldefs") == 0)
708 link_info.allow_multiple_definition = TRUE;
709 else if (CONST_STRNEQ (optarg, "max-page-size="))
710 {
711 char *end;
712
713 config.maxpagesize = strtoul (optarg + 14, &end, 0);
714 if (*end || (config.maxpagesize & (config.maxpagesize - 1)) != 0)
715 einfo (_("%F%P: invalid maximum page size \`%s'\n"),
716 optarg + 14);
717 }
718 else if (CONST_STRNEQ (optarg, "common-page-size="))
719 {
720 char *end;
721 config.commonpagesize = strtoul (optarg + 17, &end, 0);
722 if (*end
723 || (config.commonpagesize & (config.commonpagesize - 1)) != 0)
724 einfo (_("%F%P: invalid common page size \`%s'\n"),
725 optarg + 17);
726 }
727 else if (CONST_STRNEQ (optarg, "stack-size="))
728 {
729 char *end;
730 link_info.stacksize = strtoul (optarg + 11, &end, 0);
731 if (*end || link_info.stacksize < 0)
732 einfo (_("%F%P: invalid stack size \`%s'\n"), optarg + 11);
733 if (!link_info.stacksize)
734 /* Use -1 for explicit no-stack, because zero means
735 'default'. */
736 link_info.stacksize = -1;
737 }
738 else if (strcmp (optarg, "execstack") == 0)
739 {
740 link_info.execstack = TRUE;
741 link_info.noexecstack = FALSE;
742 }
743 else if (strcmp (optarg, "noexecstack") == 0)
744 {
745 link_info.noexecstack = TRUE;
746 link_info.execstack = FALSE;
747 }
748 else if (strcmp (optarg, "globalaudit") == 0)
749 {
750 link_info.flags_1 |= DF_1_GLOBAUDIT;
751 }
752 EOF
753
754 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
755 fragment <<EOF
756 else if (strcmp (optarg, "global") == 0)
757 link_info.flags_1 |= (bfd_vma) DF_1_GLOBAL;
758 else if (strcmp (optarg, "initfirst") == 0)
759 link_info.flags_1 |= (bfd_vma) DF_1_INITFIRST;
760 else if (strcmp (optarg, "interpose") == 0)
761 link_info.flags_1 |= (bfd_vma) DF_1_INTERPOSE;
762 else if (strcmp (optarg, "loadfltr") == 0)
763 link_info.flags_1 |= (bfd_vma) DF_1_LOADFLTR;
764 else if (strcmp (optarg, "nodefaultlib") == 0)
765 link_info.flags_1 |= (bfd_vma) DF_1_NODEFLIB;
766 else if (strcmp (optarg, "nodelete") == 0)
767 link_info.flags_1 |= (bfd_vma) DF_1_NODELETE;
768 else if (strcmp (optarg, "nodlopen") == 0)
769 link_info.flags_1 |= (bfd_vma) DF_1_NOOPEN;
770 else if (strcmp (optarg, "nodump") == 0)
771 link_info.flags_1 |= (bfd_vma) DF_1_NODUMP;
772 else if (strcmp (optarg, "now") == 0)
773 {
774 link_info.flags |= (bfd_vma) DF_BIND_NOW;
775 link_info.flags_1 |= (bfd_vma) DF_1_NOW;
776 }
777 else if (strcmp (optarg, "lazy") == 0)
778 {
779 link_info.flags &= ~(bfd_vma) DF_BIND_NOW;
780 link_info.flags_1 &= ~(bfd_vma) DF_1_NOW;
781 }
782 else if (strcmp (optarg, "origin") == 0)
783 {
784 link_info.flags |= (bfd_vma) DF_ORIGIN;
785 link_info.flags_1 |= (bfd_vma) DF_1_ORIGIN;
786 }
787 else if (strcmp (optarg, "combreloc") == 0)
788 link_info.combreloc = TRUE;
789 else if (strcmp (optarg, "nocombreloc") == 0)
790 link_info.combreloc = FALSE;
791 else if (strcmp (optarg, "nocopyreloc") == 0)
792 link_info.nocopyreloc = TRUE;
793 else if (strcmp (optarg, "relro") == 0)
794 link_info.relro = TRUE;
795 else if (strcmp (optarg, "norelro") == 0)
796 link_info.relro = FALSE;
797 else if (strcmp (optarg, "separate-code") == 0)
798 link_info.separate_code = TRUE;
799 else if (strcmp (optarg, "noseparate-code") == 0)
800 link_info.separate_code = FALSE;
801 else if (strcmp (optarg, "common") == 0)
802 link_info.elf_stt_common = elf_stt_common;
803 else if (strcmp (optarg, "nocommon") == 0)
804 link_info.elf_stt_common = no_elf_stt_common;
805 else if (strcmp (optarg, "text") == 0)
806 link_info.textrel_check = textrel_check_error;
807 else if (strcmp (optarg, "notext") == 0)
808 link_info.textrel_check = textrel_check_none;
809 else if (strcmp (optarg, "textoff") == 0)
810 link_info.textrel_check = textrel_check_none;
811 EOF
812 fi
813
814 if test -n "$PARSE_AND_LIST_ARGS_CASE_Z" ; then
815 fragment <<EOF
816 $PARSE_AND_LIST_ARGS_CASE_Z
817 EOF
818 fi
819
820 fragment <<EOF
821 else
822 einfo (_("%P: warning: -z %s ignored\n"), optarg);
823 break;
824 EOF
825
826 if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
827 fragment <<EOF
828 $PARSE_AND_LIST_ARGS_CASES
829 EOF
830 fi
831
832 fragment <<EOF
833 }
834
835 return TRUE;
836 }
837
838 EOF
839
840 if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
841 gld_list_options="gld${EMULATION_NAME}_list_options"
842 if test -n "$PARSE_AND_LIST_OPTIONS"; then
843 fragment <<EOF
844
845 static void
846 gld${EMULATION_NAME}_list_options (FILE * file)
847 {
848 EOF
849
850 if test -n "$PARSE_AND_LIST_OPTIONS" ; then
851 fragment <<EOF
852 $PARSE_AND_LIST_OPTIONS
853 EOF
854 fi
855
856 fragment <<EOF
857 }
858 EOF
859 else
860 gld_list_options="NULL"
861 fi
862
863 if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
864 fragment <<EOF
865 $PARSE_AND_LIST_EPILOGUE
866 EOF
867 fi
868 fi
869
870 fragment <<EOF
871
872 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
873 {
874 ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
875 ${LDEMUL_SYSLIB-syslib_default},
876 ${LDEMUL_HLL-hll_default},
877 ${LDEMUL_AFTER_PARSE-ldelf_after_parse},
878 ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
879 ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default},
880 ${LDEMUL_BEFORE_PLACE_ORPHANS-ldelf_before_place_orphans},
881 ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
882 ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
883 ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
884 ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
885 ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
886 "${EMULATION_NAME}",
887 "${OUTPUT_FORMAT}",
888 ${LDEMUL_FINISH-finish_default},
889 ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
890 ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-ldelf_open_dynamic_archive},
891 ${LDEMUL_PLACE_ORPHAN-ldelf_place_orphan},
892 ${LDEMUL_SET_SYMBOLS-NULL},
893 ${LDEMUL_PARSE_ARGS-NULL},
894 gld${EMULATION_NAME}_add_options,
895 gld${EMULATION_NAME}_handle_option,
896 ${LDEMUL_UNRECOGNIZED_FILE-NULL},
897 ${LDEMUL_LIST_OPTIONS-${gld_list_options}},
898 ${LDEMUL_RECOGNIZED_FILE-ldelf_load_symbols},
899 ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
900 ${LDEMUL_NEW_VERS_PATTERN-NULL},
901 ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
902 ${LDEMUL_EMIT_CTF_EARLY-NULL},
903 ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL},
904 ${LDEMUL_PRINT_SYMBOL-NULL}
905 };
906 EOF
This page took 0.049606 seconds and 4 git commands to generate.