]> Git Repo - binutils.git/blob - ld/emultempl/elf.em
bfd, ld: add CTF section linking
[binutils.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-2019 Free Software Foundation, Inc.
14    Written by Steve Chamberlain <[email protected]>
15    ELF support by Ian Lance Taylor <[email protected]>
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);
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       if (ldelf_emit_note_gnu_build_id != NULL)
624         {
625           free ((char *) ldelf_emit_note_gnu_build_id);
626           ldelf_emit_note_gnu_build_id = NULL;
627         }
628       if (optarg == NULL)
629         optarg = DEFAULT_BUILD_ID_STYLE;
630       if (strcmp (optarg, "none"))
631         ldelf_emit_note_gnu_build_id = xstrdup (optarg);
632       break;
633
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)
638         link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
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
644         einfo (_("%F%P: invalid --compress-debug-sections option: \`%s'\n"),
645                optarg);
646       break;
647 EOF
648
649 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
650 fragment <<EOF
651     case OPTION_AUDIT:
652         ldelf_append_to_separated_string (&audit, optarg);
653         break;
654
655     case 'P':
656         ldelf_append_to_separated_string (&depaudit, optarg);
657         break;
658
659     case OPTION_DISABLE_NEW_DTAGS:
660       link_info.new_dtags = FALSE;
661       break;
662
663     case OPTION_ENABLE_NEW_DTAGS:
664       link_info.new_dtags = TRUE;
665       break;
666
667     case OPTION_EH_FRAME_HDR:
668       link_info.eh_frame_hdr_type = DWARF2_EH_HDR;
669       break;
670
671     case OPTION_NO_EH_FRAME_HDR:
672       link_info.eh_frame_hdr_type = 0;
673       break;
674
675     case OPTION_GROUP:
676       link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
677       /* Groups must be self-contained.  */
678       link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
679       link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
680       break;
681
682     case OPTION_EXCLUDE_LIBS:
683       add_excluded_libs (optarg);
684       break;
685
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
699         einfo (_("%F%P: invalid hash style \`%s'\n"), optarg);
700       break;
701
702 EOF
703 fi
704 fragment <<EOF
705     case 'z':
706       if (strcmp (optarg, "defs") == 0)
707         link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
708       else if (strcmp (optarg, "undefs") == 0)
709         link_info.unresolved_syms_in_objects = RM_IGNORE;
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)
718             einfo (_("%F%P: invalid maximum page size \`%s'\n"),
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)
727             einfo (_("%F%P: invalid common page size \`%s'\n"),
728                    optarg + 17);
729         }
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)
735             einfo (_("%F%P: invalid stack size \`%s'\n"), optarg + 11);
736           if (!link_info.stacksize)
737             /* Use -1 for explicit no-stack, because zero means
738                'default'.   */
739             link_info.stacksize = -1;
740         }
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         }
751       else if (strcmp (optarg, "globalaudit") == 0)
752         {
753           link_info.flags_1 |= DF_1_GLOBAUDIT;
754         }
755 EOF
756
757 if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
758 fragment <<EOF
759       else if (strcmp (optarg, "global") == 0)
760         link_info.flags_1 |= (bfd_vma) DF_1_GLOBAL;
761       else if (strcmp (optarg, "initfirst") == 0)
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         }
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         }
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         }
790       else if (strcmp (optarg, "combreloc") == 0)
791         link_info.combreloc = TRUE;
792       else if (strcmp (optarg, "nocombreloc") == 0)
793         link_info.combreloc = FALSE;
794       else if (strcmp (optarg, "nocopyreloc") == 0)
795         link_info.nocopyreloc = TRUE;
796       else if (strcmp (optarg, "relro") == 0)
797         link_info.relro = TRUE;
798       else if (strcmp (optarg, "norelro") == 0)
799         link_info.relro = FALSE;
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;
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;
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;
814 EOF
815 fi
816
817 if test -n "$PARSE_AND_LIST_ARGS_CASE_Z" ; then
818 fragment <<EOF
819  $PARSE_AND_LIST_ARGS_CASE_Z
820 EOF
821 fi
822
823 fragment <<EOF
824       else
825         einfo (_("%P: warning: -z %s ignored\n"), optarg);
826       break;
827 EOF
828
829 if test -n "$PARSE_AND_LIST_ARGS_CASES" ; then
830 fragment <<EOF
831  $PARSE_AND_LIST_ARGS_CASES
832 EOF
833 fi
834
835 fragment <<EOF
836     }
837
838   return TRUE;
839 }
840
841 EOF
842
843 if test x"$LDEMUL_LIST_OPTIONS" != xgld"$EMULATION_NAME"_list_options; then
844 gld_list_options="gld${EMULATION_NAME}_list_options"
845 if test -n "$PARSE_AND_LIST_OPTIONS"; then
846 fragment <<EOF
847
848 static void
849 gld${EMULATION_NAME}_list_options (FILE * file)
850 {
851 EOF
852
853 if test -n "$PARSE_AND_LIST_OPTIONS" ; then
854 fragment <<EOF
855  $PARSE_AND_LIST_OPTIONS
856 EOF
857 fi
858
859 fragment <<EOF
860 }
861 EOF
862 else
863   gld_list_options="NULL"
864 fi
865
866 if test -n "$PARSE_AND_LIST_EPILOGUE" ; then
867 fragment <<EOF
868  $PARSE_AND_LIST_EPILOGUE
869 EOF
870 fi
871 fi
872
873 fragment <<EOF
874
875 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
876 {
877   ${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
878   ${LDEMUL_SYSLIB-syslib_default},
879   ${LDEMUL_HLL-hll_default},
880   ${LDEMUL_AFTER_PARSE-ldelf_after_parse},
881   ${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
882   ${LDEMUL_AFTER_CHECK_RELOCS-after_check_relocs_default},
883   ${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
884   ${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
885   ${LDEMUL_CHOOSE_TARGET-ldemul_default_target},
886   ${LDEMUL_BEFORE_ALLOCATION-gld${EMULATION_NAME}_before_allocation},
887   ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script},
888   "${EMULATION_NAME}",
889   "${OUTPUT_FORMAT}",
890   ${LDEMUL_FINISH-finish_default},
891   ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL},
892   ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-ldelf_open_dynamic_archive},
893   ${LDEMUL_PLACE_ORPHAN-ldelf_place_orphan},
894   ${LDEMUL_SET_SYMBOLS-NULL},
895   ${LDEMUL_PARSE_ARGS-NULL},
896   gld${EMULATION_NAME}_add_options,
897   gld${EMULATION_NAME}_handle_option,
898   ${LDEMUL_UNRECOGNIZED_FILE-NULL},
899   ${LDEMUL_LIST_OPTIONS-${gld_list_options}},
900   ${LDEMUL_RECOGNIZED_FILE-ldelf_load_symbols},
901   ${LDEMUL_FIND_POTENTIAL_LIBRARIES-NULL},
902   ${LDEMUL_NEW_VERS_PATTERN-NULL},
903   ${LDEMUL_EXTRA_MAP_FILE_TEXT-NULL},
904   ${LDEMUL_EMIT_CTF_EARLY-NULL},
905   ${LDEMUL_EXAMINE_STRTAB_FOR_CTF-NULL}
906 };
907 EOF
This page took 0.074643 seconds and 4 git commands to generate.