1 # This shell script emits a C file. -*- C -*-
2 # It does some substitutions.
3 cat >e${EMULATION_NAME}.c <<EOF
4 /* This file is is generated by a shell script. DO NOT EDIT! */
6 /* AIX emulation code for ${EMULATION_NAME}
7 Copyright 1991, 1993, 1995, 1996, 1997, 1998, 2000
8 Free Software Foundation, Inc.
9 Written by Steve Chamberlain <sac@cygnus.com>
10 AIX support by Ian Lance Taylor <ian@cygnus.com>
12 This file is part of GLD, the Gnu Linker.
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; if not, write to the Free Software
26 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
28 #define TARGET_IS_${EMULATION_NAME}
32 #include "libiberty.h"
49 static void gld${EMULATION_NAME}_before_parse PARAMS ((void));
50 static int gld${EMULATION_NAME}_parse_args PARAMS ((int, char **));
51 static void gld${EMULATION_NAME}_after_open PARAMS ((void));
52 static void gld${EMULATION_NAME}_before_allocation PARAMS ((void));
53 static void gld${EMULATION_NAME}_read_file PARAMS ((const char *, boolean));
54 static void gld${EMULATION_NAME}_free PARAMS ((PTR));
55 static void gld${EMULATION_NAME}_find_relocs
56 PARAMS ((lang_statement_union_type *));
57 static void gld${EMULATION_NAME}_find_exp_assignment PARAMS ((etree_type *));
58 static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));
60 /* The file alignment required for each section. */
61 static unsigned long file_align;
63 /* The maximum size the stack is permitted to grow. This is stored in
65 static unsigned long maxstack;
67 /* The maximum data size. This is stored in the a.out header. */
68 static unsigned long maxdata;
70 /* Whether to perform garbage collection. */
73 /* The module type to use. */
74 static unsigned short modtype = ('1' << 8) | 'L';
76 /* Whether the .text section must be read-only (i.e., no relocs
80 /* Whether to implement Unix like linker semantics. */
83 /* Structure used to hold import file list. */
87 struct filelist *next;
91 /* List of import files. */
92 static struct filelist *import_files;
94 /* List of export symbols read from the export files. */
96 struct export_symbol_list
98 struct export_symbol_list *next;
103 static struct export_symbol_list *export_symbols;
105 /* This routine is called before anything else is done. */
108 gld${EMULATION_NAME}_before_parse()
110 #ifndef TARGET_ /* I.e., if not generic. */
111 ldfile_output_architecture = bfd_arch_${ARCH};
112 #endif /* not TARGET_ */
113 config.has_shared = true;
116 /* Handle AIX specific options. */
119 gld${EMULATION_NAME}_parse_args (argc, argv)
123 int prevoptind = optind;
124 int prevopterr = opterr;
131 #define OPTION_IGNORE (300)
132 #define OPTION_AUTOIMP (OPTION_IGNORE + 1)
133 #define OPTION_ERNOTOK (OPTION_AUTOIMP + 1)
134 #define OPTION_EROK (OPTION_ERNOTOK + 1)
135 #define OPTION_EXPORT (OPTION_EROK + 1)
136 #define OPTION_IMPORT (OPTION_EXPORT + 1)
137 #define OPTION_LOADMAP (OPTION_IMPORT + 1)
138 #define OPTION_MAXDATA (OPTION_LOADMAP + 1)
139 #define OPTION_MAXSTACK (OPTION_MAXDATA + 1)
140 #define OPTION_MODTYPE (OPTION_MAXSTACK + 1)
141 #define OPTION_NOAUTOIMP (OPTION_MODTYPE + 1)
142 #define OPTION_NOSTRCMPCT (OPTION_NOAUTOIMP + 1)
143 #define OPTION_PD (OPTION_NOSTRCMPCT + 1)
144 #define OPTION_PT (OPTION_PD + 1)
145 #define OPTION_STRCMPCT (OPTION_PT + 1)
146 #define OPTION_UNIX (OPTION_STRCMPCT + 1)
148 static struct option longopts[] = {
149 {"basis", no_argument, NULL, OPTION_IGNORE},
150 {"bautoimp", no_argument, NULL, OPTION_AUTOIMP},
151 {"bcomprld", no_argument, NULL, OPTION_IGNORE},
152 {"bcrld", no_argument, NULL, OPTION_IGNORE},
153 {"bcror31", no_argument, NULL, OPTION_IGNORE},
154 {"bD", required_argument, NULL, OPTION_MAXDATA},
155 {"bE", required_argument, NULL, OPTION_EXPORT},
156 {"bernotok", no_argument, NULL, OPTION_ERNOTOK},
157 {"berok", no_argument, NULL, OPTION_EROK},
158 {"berrmsg", no_argument, NULL, OPTION_IGNORE},
159 {"bexport", required_argument, NULL, OPTION_EXPORT},
160 {"bf", no_argument, NULL, OPTION_ERNOTOK},
161 {"bgc", no_argument, &gc, 1},
162 {"bh", required_argument, NULL, OPTION_IGNORE},
163 {"bhalt", required_argument, NULL, OPTION_IGNORE},
164 {"bI", required_argument, NULL, OPTION_IMPORT},
165 {"bimport", required_argument, NULL, OPTION_IMPORT},
166 {"bl", required_argument, NULL, OPTION_LOADMAP},
167 {"bloadmap", required_argument, NULL, OPTION_LOADMAP},
168 {"bmaxdata", required_argument, NULL, OPTION_MAXDATA},
169 {"bmaxstack", required_argument, NULL, OPTION_MAXSTACK},
170 {"bM", required_argument, NULL, OPTION_MODTYPE},
171 {"bmodtype", required_argument, NULL, OPTION_MODTYPE},
172 {"bnoautoimp", no_argument, NULL, OPTION_NOAUTOIMP},
173 {"bnodelcsect", no_argument, NULL, OPTION_IGNORE},
174 {"bnoentry", no_argument, NULL, OPTION_IGNORE},
175 {"bnogc", no_argument, &gc, 0},
176 {"bnso", no_argument, NULL, OPTION_NOAUTOIMP},
177 {"bnostrcmpct", no_argument, NULL, OPTION_NOSTRCMPCT},
178 {"bnotextro", no_argument, &textro, 0},
179 {"bnro", no_argument, &textro, 0},
180 {"bpD", required_argument, NULL, OPTION_PD},
181 {"bpT", required_argument, NULL, OPTION_PT},
182 {"bro", no_argument, &textro, 1},
183 {"bS", required_argument, NULL, OPTION_MAXSTACK},
184 {"bso", no_argument, NULL, OPTION_AUTOIMP},
185 {"bstrcmpct", no_argument, NULL, OPTION_STRCMPCT},
186 {"btextro", no_argument, &textro, 1},
187 {"static", no_argument, NULL, OPTION_NOAUTOIMP},
188 {"unix", no_argument, NULL, OPTION_UNIX},
189 {NULL, no_argument, NULL, 0}
192 /* Options supported by the AIX linker which we do not support: -f,
193 -S, -v, -Z, -bbindcmds, -bbinder, -bbindopts, -bcalls, -bcaps,
194 -bcror15, -bdebugopt, -bdbg, -bdelcsect, -bex?, -bfilelist, -bfl,
195 -bgcbypass, -bglink, -binsert, -bi, -bloadmap, -bl, -bmap, -bnl,
196 -bnobind, -bnocomprld, -bnocrld, -bnoerrmsg, -bnoglink,
197 -bnoloadmap, -bnl, -bnoobjreorder, -bnoquiet, -bnoreorder,
198 -bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
201 /* If the current option starts with -b, change the first : to an =.
202 The AIX linker uses : to separate the option from the argument;
203 changing it to = lets us treat it as a getopt option. */
207 if (indx < argc && strncmp (argv[indx], "-b", 2) == 0)
211 for (s = argv[indx]; *s != '\0'; s++)
221 /* We add s and u so to the short options list so that -s and -u on
222 the command line do not match -static and -unix. */
225 optc = getopt_long_only (argc, argv, "-D:H:KT:zsu", longopts, &longind);
237 /* Long option which just sets a flag. */
241 val = strtol (optarg, &end, 0);
243 einfo ("%P: warning: ignoring invalid -D number %s\n", optarg);
245 lang_section_start (".data", exp_intop (val));
249 val = strtoul (optarg, &end, 0);
251 || (val & (val - 1)) != 0)
252 einfo ("%P: warning: ignoring invalid -H number %s\n", optarg);
259 /* FIXME: This should use the page size for the target system. */
264 /* On AIX this is the same as GNU ld -Ttext. When we see -T
265 number, we assume the AIX option is intended. Otherwise, we
266 assume the usual GNU ld -T option is intended. We can't just
267 ignore the AIX option, because gcc passes it to the linker. */
268 val = strtoul (optarg, &end, 0);
274 lang_section_start (".text", exp_intop (val));
281 link_info.static_link = false;
285 force_make_executable = false;
289 force_make_executable = true;
293 gld${EMULATION_NAME}_read_file (optarg, false);
299 struct filelist **flpp;
301 n = (struct filelist *) xmalloc (sizeof (struct filelist));
304 flpp = &import_files;
305 while (*flpp != NULL)
306 flpp = &(*flpp)->next;
312 config.map_filename = optarg;
316 val = strtoul (optarg, &end, 0);
318 einfo ("%P: warning: ignoring invalid -bmaxdata number %s\n",
324 case OPTION_MAXSTACK:
325 val = strtoul (optarg, &end, 0);
327 einfo ("%P: warning: ignoring invalid -bmaxstack number %s\n",
336 link_info.shared = true;
339 if (*optarg == '\0' || optarg[1] == '\0')
340 einfo ("%P: warning: ignoring invalid module type %s\n", optarg);
342 modtype = (*optarg << 8) | optarg[1];
345 case OPTION_NOAUTOIMP:
346 link_info.static_link = true;
349 case OPTION_NOSTRCMPCT:
350 link_info.traditional_format = true;
354 /* This sets the page that the .data section is supposed to
355 start on. The offset within the page should still be the
356 offset within the file, so we need to build an appropriate
358 val = strtoul (optarg, &end, 0);
360 einfo ("%P: warning: ignoring invalid -pD number %s\n", optarg);
368 exp_nameop (NAME, "."),
371 exp_binop ('+', t, exp_intop (31)),
372 exp_intop (~ (bfd_vma) 31));
373 lang_section_start (".data", t);
378 /* This set the page that the .text section is supposed to start
379 on. The offset within the page should still be the offset
381 val = strtoul (optarg, &end, 0);
383 einfo ("%P: warning: ignoring invalid -pT number %s\n", optarg);
390 exp_nameop (SIZEOF_HEADERS, NULL));
392 exp_binop ('+', t, exp_intop (31)),
393 exp_intop (~ (bfd_vma) 31));
394 lang_section_start (".text", t);
398 case OPTION_STRCMPCT:
399 link_info.traditional_format = false;
410 /* This is called when an input file can not be recognized as a BFD
411 object or an archive. If the file starts with #!, we must treat it
412 as an import file. This is for AIX compatibility. */
415 gld${EMULATION_NAME}_unrecognized_file (entry)
416 lang_input_statement_type *entry;
421 e = fopen (entry->filename, FOPEN_RT);
427 if (getc (e) == '#' && getc (e) == '!')
430 struct filelist **flpp;
432 n = (struct filelist *) xmalloc (sizeof (struct filelist));
434 n->name = entry->filename;
435 flpp = &import_files;
436 while (*flpp != NULL)
437 flpp = &(*flpp)->next;
441 entry->loaded = true;
449 /* This is called after the input files have been opened. */
452 gld${EMULATION_NAME}_after_open ()
457 /* Call ldctor_build_sets, after pretending that this is a
458 relocateable link. We do this because AIX requires relocation
459 entries for all references to symbols, even in a final
460 executable. Of course, we only want to do this if we are
461 producing an XCOFF output file. */
462 r = link_info.relocateable;
463 if (strstr (bfd_get_target (output_bfd), "xcoff") != NULL)
464 link_info.relocateable = true;
465 ldctor_build_sets ();
466 link_info.relocateable = r;
468 /* For each set, record the size, so that the XCOFF backend can
469 output the correct csect length. */
470 for (p = sets; p != (struct set_info *) NULL; p = p->next)
474 /* If the symbol is defined, we may have been invoked from
475 collect, and the sets may already have been built, so we do
477 if (p->h->type == bfd_link_hash_defined
478 || p->h->type == bfd_link_hash_defweak)
481 if (p->reloc != BFD_RELOC_CTOR)
483 /* Handle this if we need to. */
487 size = (p->count + 2) * 4;
488 if (! bfd_xcoff_link_record_set (output_bfd, &link_info, p->h, size))
489 einfo ("%F%P: bfd_xcoff_link_record_set failed: %E\n");
493 /* This is called after the sections have been attached to output
494 sections, but before any sizes or addresses have been set. */
497 gld${EMULATION_NAME}_before_allocation ()
500 struct export_symbol_list *el;
502 asection *special_sections[6];
505 /* Handle the import and export files, if any. */
506 for (fl = import_files; fl != NULL; fl = fl->next)
507 gld${EMULATION_NAME}_read_file (fl->name, true);
508 for (el = export_symbols; el != NULL; el = el->next)
510 struct bfd_link_hash_entry *h;
512 h = bfd_link_hash_lookup (link_info.hash, el->name, false, false, false);
514 einfo ("%P%F: bfd_link_hash_lookup of export symbol failed: %E\n");
515 if (! bfd_xcoff_export_symbol (output_bfd, &link_info, h, el->syscall))
516 einfo ("%P%F: bfd_xcoff_export_symbol failed: %E\n");
519 /* Track down all relocations called for by the linker script (these
520 are typically constructor/destructor entries created by
521 CONSTRUCTORS) and let the backend know it will need to create
522 .loader relocs for them. */
523 lang_for_each_statement (gld${EMULATION_NAME}_find_relocs);
525 /* We need to build LIBPATH from the -L arguments. If any -rpath
526 arguments were used, though, we use -rpath instead, as a GNU
528 if (command_line.rpath != NULL)
529 libpath = command_line.rpath;
530 else if (search_head == NULL)
531 libpath = (char *) "";
535 search_dirs_type *search;
537 len = strlen (search_head->name);
538 libpath = xmalloc (len + 1);
539 strcpy (libpath, search_head->name);
540 for (search = search_head->next; search != NULL; search = search->next)
544 nlen = strlen (search->name);
545 libpath = xrealloc (libpath, len + nlen + 2);
547 strcpy (libpath + len + 1, search->name);
552 /* Let the XCOFF backend set up the .loader section. */
553 if (! bfd_xcoff_size_dynamic_sections (output_bfd, &link_info, libpath,
554 entry_symbol, file_align,
556 gc && ! unix_ld ? true : false,
558 textro ? true : false,
561 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
563 /* Look through the special sections, and put them in the right
564 place in the link ordering. This is especially magic. */
565 for (i = 0; i < 6; i++)
568 lang_output_section_statement_type *os;
569 lang_statement_union_type **pls;
570 lang_input_section_type *is;
574 sec = special_sections[i];
578 /* Remove this section from the list of the output section.
579 This assumes we know what the script looks like. */
581 os = lang_output_section_find (sec->output_section->name);
583 einfo ("%P%F: can't find output section %s\n",
584 sec->output_section->name);
585 for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->next)
587 if ((*pls)->header.type == lang_input_section_enum
588 && (*pls)->input_section.section == sec)
590 is = (lang_input_section_type *) *pls;
594 if ((*pls)->header.type == lang_wild_statement_enum)
596 lang_statement_union_type **pwls;
598 for (pwls = &(*pls)->wild_statement.children.head;
600 pwls = &(*pwls)->next)
602 if ((*pwls)->header.type == lang_input_section_enum
603 && (*pwls)->input_section.section == sec)
605 is = (lang_input_section_type *) *pwls;
606 *pwls = (*pwls)->next;
616 einfo ("%P%F: can't find %s in output section\n",
617 bfd_get_section_name (sec->owner, sec));
619 /* Now figure out where the section should go. */
622 default: /* to avoid warnings */
651 os = lang_output_section_find (oname);
655 is->header.next = os->children.head;
656 os->children.head = (lang_statement_union_type *) is;
660 is->header.next = NULL;
661 lang_statement_append (&os->children,
662 (lang_statement_union_type *) is,
668 /* Read an import or export file. For an import file, this is called
669 by the before_allocation emulation routine. For an export file,
670 this is called by the parse_args emulation routine. */
673 gld${EMULATION_NAME}_read_file (filename, import)
674 const char *filename;
684 const char *impmember;
686 o = (struct obstack *) xmalloc (sizeof (struct obstack));
687 obstack_specify_allocation (o, 0, 0, xmalloc, gld${EMULATION_NAME}_free);
689 f = fopen (filename, FOPEN_RT);
692 bfd_set_error (bfd_error_system_call);
693 einfo ("%F%s: %E\n", filename);
703 while ((c = getc (f)) != EOF)
709 struct bfd_link_hash_entry *h;
713 obstack_1grow (o, c);
717 obstack_1grow (o, '\0');
720 s = (char *) obstack_base (o);
721 while (isspace ((unsigned char) *s))
725 || (*s == '#' && s[1] == ' ')
726 || (! import && *s == '#' && s[1] == '!'))
728 obstack_free (o, obstack_base (o));
732 if (*s == '#' && s[1] == '!')
735 while (isspace ((unsigned char) *s))
742 obstack_free (o, obstack_base (o));
745 einfo ("%F%s%d: #! ([member]) is not supported in import files\n",
752 (void) obstack_finish (o);
756 while (! isspace ((unsigned char) *s) && *s != '(' && *s != '\0')
766 if (imppath == file - 1)
776 while (isspace ((unsigned char) cs))
785 einfo ("%s:%d: warning: syntax error in import file\n",
792 while (*s != ')' && *s != '\0')
797 einfo ("%s:%d: warning: syntax error in import file\n",
805 /* This is a symbol to be imported or exported. */
808 address = (bfd_vma) -1;
810 while (! isspace ((unsigned char) *s) && *s != '\0')
818 while (isspace ((unsigned char) *s))
822 while (! isspace ((unsigned char) *se) && *se != '\0')
827 while (isspace ((unsigned char) *se))
830 einfo ("%s%d: warning: syntax error in import/export file\n",
836 /* There was no address after all. */
838 else if (strcasecmp (s, "svc") == 0
839 || strcasecmp (s, "syscall") == 0)
845 address = strtoul (s, &end, 0);
847 einfo ("%s:%d: warning: syntax error in import/export file\n",
854 struct export_symbol_list *n;
856 ldlang_add_undef (symname);
857 n = ((struct export_symbol_list *)
858 xmalloc (sizeof (struct export_symbol_list)));
859 n->next = export_symbols;
860 n->name = xstrdup (symname);
861 n->syscall = syscall;
866 h = bfd_link_hash_lookup (link_info.hash, symname, false, false,
868 if (h == NULL || h->type == bfd_link_hash_new)
870 /* We can just ignore attempts to import an unreferenced
875 if (! bfd_xcoff_import_symbol (output_bfd, &link_info, h,
876 address, imppath, impfile,
878 einfo ("%X%s:%d: failed to import symbol %s: %E\n",
879 filename, lineno, symname);
883 obstack_free (o, obstack_base (o));
886 if (obstack_object_size (o) > 0)
888 einfo ("%s:%d: warning: ignoring unterminated last line\n",
890 obstack_free (o, obstack_base (o));
895 obstack_free (o, NULL);
900 /* This routine saves us from worrying about declaring free. */
903 gld${EMULATION_NAME}_free (p)
909 /* This is called by the before_allocation routine via
910 lang_for_each_statement. It looks for relocations and assignments
914 gld${EMULATION_NAME}_find_relocs (s)
915 lang_statement_union_type *s;
917 if (s->header.type == lang_reloc_statement_enum)
919 lang_reloc_statement_type *rs;
921 rs = &s->reloc_statement;
922 if (rs->name == NULL)
923 einfo ("%F%P: only relocations against symbols are permitted\n");
924 if (! bfd_xcoff_link_count_reloc (output_bfd, &link_info, rs->name))
925 einfo ("%F%P: bfd_xcoff_link_count_reloc failed: %E\n");
928 if (s->header.type == lang_assignment_statement_enum)
929 gld${EMULATION_NAME}_find_exp_assignment (s->assignment_statement.exp);
932 /* Look through an expression for an assignment statement. */
935 gld${EMULATION_NAME}_find_exp_assignment (exp)
938 struct bfd_link_hash_entry *h;
940 switch (exp->type.node_class)
943 h = bfd_link_hash_lookup (link_info.hash, exp->assign.dst,
944 false, false, false);
949 if (strcmp (exp->assign.dst, ".") != 0)
951 if (! bfd_xcoff_record_link_assignment (output_bfd, &link_info,
953 einfo ("%P%F: failed to record assignment to %s: %E\n",
956 gld${EMULATION_NAME}_find_exp_assignment (exp->assign.src);
960 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.lhs);
961 gld${EMULATION_NAME}_find_exp_assignment (exp->binary.rhs);
965 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.cond);
966 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.lhs);
967 gld${EMULATION_NAME}_find_exp_assignment (exp->trinary.rhs);
971 gld${EMULATION_NAME}_find_exp_assignment (exp->unary.child);
980 gld${EMULATION_NAME}_get_script(isfile)
984 if test -n "$COMPILE_IN"
986 # Scripts compiled in.
988 # sed commands to quote an ld script as a C string.
989 sc="-f stringify.sed"
991 cat >>e${EMULATION_NAME}.c <<EOF
995 if (link_info.relocateable == true && config.build_constructors == true)
998 sed $sc ldscripts/${EMULATION_NAME}.xu >> e${EMULATION_NAME}.c
999 echo ' ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.c
1000 sed $sc ldscripts/${EMULATION_NAME}.xr >> e${EMULATION_NAME}.c
1001 echo ' ; else if (!config.text_read_only) return' >> e${EMULATION_NAME}.c
1002 sed $sc ldscripts/${EMULATION_NAME}.xbn >> e${EMULATION_NAME}.c
1003 echo ' ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
1004 sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c
1005 echo ' ; else return' >> e${EMULATION_NAME}.c
1006 sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c
1007 echo '; }' >> e${EMULATION_NAME}.c
1010 # Scripts read from the filesystem.
1012 cat >>e${EMULATION_NAME}.c <<EOF
1016 if (link_info.relocateable == true && config.build_constructors == true)
1017 return "ldscripts/${EMULATION_NAME}.xu";
1018 else if (link_info.relocateable == true)
1019 return "ldscripts/${EMULATION_NAME}.xr";
1020 else if (!config.text_read_only)
1021 return "ldscripts/${EMULATION_NAME}.xbn";
1022 else if (!config.magic_demand_paged)
1023 return "ldscripts/${EMULATION_NAME}.xn";
1025 return "ldscripts/${EMULATION_NAME}.x";
1031 cat >>e${EMULATION_NAME}.c <<EOF
1033 struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
1035 gld${EMULATION_NAME}_before_parse,
1038 after_parse_default,
1039 gld${EMULATION_NAME}_after_open,
1040 after_allocation_default,
1041 set_output_arch_default,
1042 ldemul_default_target,
1043 gld${EMULATION_NAME}_before_allocation,
1044 gld${EMULATION_NAME}_get_script,
1045 "${EMULATION_NAME}",
1048 0, /* create_output_section_statements */
1049 0, /* open_dynamic_archive */
1050 0, /* place_orphan */
1051 0, /* set_symbols */
1052 gld${EMULATION_NAME}_parse_args,
1053 gld${EMULATION_NAME}_unrecognized_file,
1054 NULL /* find_potential_libraries */