1 /* This file is is generated by a shell script. DO NOT EDIT! */
3 /* AIX emulation code for ppcmacos
4 Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
5 Written by Steve Chamberlain <sac@cygnus.com>
6 AIX support by Ian Lance Taylor <ian@cygnus.com>
8 This file is part of GLD, the Gnu Linker.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
24 #define TARGET_IS_ppcmacos
28 #include "libiberty.h"
44 static void gldppcmacos_before_parse
PARAMS ((void));
45 static int gldppcmacos_parse_args
PARAMS ((int, char **));
46 static void gldppcmacos_after_open
PARAMS ((void));
47 static void gldppcmacos_before_allocation
PARAMS ((void));
48 static void gldppcmacos_read_file
PARAMS ((const char *, boolean
));
49 static void gldppcmacos_free
PARAMS ((PTR
));
50 static void gldppcmacos_find_relocs
51 PARAMS ((lang_statement_union_type
*));
52 static void gldppcmacos_find_exp_assignment
PARAMS ((etree_type
*));
53 static char *gldppcmacos_get_script
PARAMS ((int *isfile
));
55 /* The file alignment required for each section. */
56 static unsigned long file_align
;
58 /* The maximum size the stack is permitted to grow. This is stored in
60 static unsigned long maxstack
;
62 /* The maximum data size. This is stored in the a.out header. */
63 static unsigned long maxdata
;
65 /* Whether to perform garbage collection. */
68 /* The module type to use. */
69 static unsigned short modtype
= ('1' << 8) | 'L';
71 /* Whether the .text section must be read-only (i.e., no relocs
75 /* Whether to implement Unix like linker semantics. */
78 /* Structure used to hold import file list. */
82 struct filelist
*next
;
86 /* List of import files. */
87 static struct filelist
*import_files
;
89 /* List of export symbols read from the export files. */
91 struct export_symbol_list
93 struct export_symbol_list
*next
;
98 static struct export_symbol_list
*export_symbols
;
100 /* This routine is called before anything else is done. */
103 gldppcmacos_before_parse()
105 #ifndef TARGET_ /* I.e., if not generic. */
106 ldfile_output_architecture
= bfd_arch_powerpc
;
107 #endif /* not TARGET_ */
110 /* Handle AIX specific options. */
113 gldppcmacos_parse_args (argc
, argv
)
117 int prevoptind
= optind
;
118 int prevopterr
= opterr
;
125 #define OPTION_IGNORE (300)
126 #define OPTION_AUTOIMP (OPTION_IGNORE + 1)
127 #define OPTION_ERNOTOK (OPTION_AUTOIMP + 1)
128 #define OPTION_EROK (OPTION_ERNOTOK + 1)
129 #define OPTION_EXPORT (OPTION_EROK + 1)
130 #define OPTION_IMPORT (OPTION_EXPORT + 1)
131 #define OPTION_LOADMAP (OPTION_IMPORT + 1)
132 #define OPTION_MAXDATA (OPTION_LOADMAP + 1)
133 #define OPTION_MAXSTACK (OPTION_MAXDATA + 1)
134 #define OPTION_MODTYPE (OPTION_MAXSTACK + 1)
135 #define OPTION_NOAUTOIMP (OPTION_MODTYPE + 1)
136 #define OPTION_NOSTRCMPCT (OPTION_NOAUTOIMP + 1)
137 #define OPTION_PD (OPTION_NOSTRCMPCT + 1)
138 #define OPTION_PT (OPTION_PD + 1)
139 #define OPTION_STRCMPCT (OPTION_PT + 1)
140 #define OPTION_UNIX (OPTION_STRCMPCT + 1)
142 static struct option longopts
[] = {
143 {"basis", no_argument
, NULL
, OPTION_IGNORE
},
144 {"bautoimp", no_argument
, NULL
, OPTION_AUTOIMP
},
145 {"bcomprld", no_argument
, NULL
, OPTION_IGNORE
},
146 {"bcrld", no_argument
, NULL
, OPTION_IGNORE
},
147 {"bcror31", no_argument
, NULL
, OPTION_IGNORE
},
148 {"bD", required_argument
, NULL
, OPTION_MAXDATA
},
149 {"bE", required_argument
, NULL
, OPTION_EXPORT
},
150 {"bernotok", no_argument
, NULL
, OPTION_ERNOTOK
},
151 {"berok", no_argument
, NULL
, OPTION_EROK
},
152 {"berrmsg", no_argument
, NULL
, OPTION_IGNORE
},
153 {"bexport", required_argument
, NULL
, OPTION_EXPORT
},
154 {"bf", no_argument
, NULL
, OPTION_ERNOTOK
},
155 {"bgc", no_argument
, &gc
, 1},
156 {"bh", required_argument
, NULL
, OPTION_IGNORE
},
157 {"bhalt", required_argument
, NULL
, OPTION_IGNORE
},
158 {"bI", required_argument
, NULL
, OPTION_IMPORT
},
159 {"bimport", required_argument
, NULL
, OPTION_IMPORT
},
160 {"bl", required_argument
, NULL
, OPTION_LOADMAP
},
161 {"bloadmap", required_argument
, NULL
, OPTION_LOADMAP
},
162 {"bmaxdata", required_argument
, NULL
, OPTION_MAXDATA
},
163 {"bmaxstack", required_argument
, NULL
, OPTION_MAXSTACK
},
164 {"bM", required_argument
, NULL
, OPTION_MODTYPE
},
165 {"bmodtype", required_argument
, NULL
, OPTION_MODTYPE
},
166 {"bnoautoimp", no_argument
, NULL
, OPTION_NOAUTOIMP
},
167 {"bnodelcsect", no_argument
, NULL
, OPTION_IGNORE
},
168 {"bnogc", no_argument
, &gc
, 0},
169 {"bnso", no_argument
, NULL
, OPTION_NOAUTOIMP
},
170 {"bnostrcmpct", no_argument
, NULL
, OPTION_NOSTRCMPCT
},
171 {"bnotextro", no_argument
, &textro
, 0},
172 {"bnro", no_argument
, &textro
, 0},
173 {"bpD", required_argument
, NULL
, OPTION_PD
},
174 {"bpT", required_argument
, NULL
, OPTION_PT
},
175 {"bro", no_argument
, &textro
, 1},
176 {"bS", required_argument
, NULL
, OPTION_MAXSTACK
},
177 {"bso", no_argument
, NULL
, OPTION_AUTOIMP
},
178 {"bstrcmpct", no_argument
, NULL
, OPTION_STRCMPCT
},
179 {"btextro", no_argument
, &textro
, 1},
180 {"static", no_argument
, NULL
, OPTION_NOAUTOIMP
},
181 {"unix", no_argument
, NULL
, OPTION_UNIX
},
182 {NULL
, no_argument
, NULL
, 0}
185 /* Options supported by the AIX linker which we do not support: -f,
186 -S, -v, -Z, -bbindcmds, -bbinder, -bbindopts, -bcalls, -bcaps,
187 -bcror15, -bdebugopt, -bdbg, -bdelcsect, -bex?, -bfilelist, -bfl,
188 -bgcbypass, -bglink, -binsert, -bi, -bloadmap, -bl, -bmap, -bnl,
189 -bnobind, -bnocomprld, -bnocrld, -bnoerrmsg, -bnoglink,
190 -bnoloadmap, -bnl, -bnoobjreorder, -bnoquiet, -bnoreorder,
191 -bnotypchk, -bnox, -bquiet, -bR, -brename, -breorder, -btypchk,
194 /* If the current option starts with -b, change the first : to an =.
195 The AIX linker uses : to separate the option from the argument;
196 changing it to = lets us treat it as a getopt option. */
200 if (indx
< argc
&& strncmp (argv
[indx
], "-b", 2) == 0)
204 for (s
= argv
[indx
]; *s
!= '\0'; s
++)
215 optc
= getopt_long_only (argc
, argv
, "-D:H:KT:z", longopts
, &longind
);
225 /* Long option which just sets a flag. */
229 val
= strtol (optarg
, &end
, 0);
231 einfo ("%P: warning: ignoring invalid -D number %s\n", optarg
);
233 lang_section_start (".data", exp_intop (val
));
237 val
= strtoul (optarg
, &end
, 0);
239 || (val
& (val
- 1)) != 0)
240 einfo ("%P: warning: ignoring invalid -H number %s\n", optarg
);
247 /* FIXME: This should use the page size for the target system. */
252 /* On AIX this is the same as GNU ld -Ttext. When we see -T
253 number, we assume the AIX option is intended. Otherwise, we
254 assume the usual GNU ld -T option is intended. We can't just
255 ignore the AIX option, because gcc passes it to the linker. */
256 val
= strtoul (optarg
, &end
, 0);
262 lang_section_start (".text", exp_intop (val
));
269 link_info
.static_link
= false;
273 force_make_executable
= false;
277 force_make_executable
= true;
281 gldppcmacos_read_file (optarg
, false);
287 struct filelist
**flpp
;
289 n
= (struct filelist
*) xmalloc (sizeof (struct filelist
));
292 flpp
= &import_files
;
293 while (*flpp
!= NULL
)
294 flpp
= &(*flpp
)->next
;
300 config
.map_filename
= optarg
;
304 val
= strtoul (optarg
, &end
, 0);
306 einfo ("%P: warning: ignoring invalid -bmaxdata number %s\n",
312 case OPTION_MAXSTACK
:
313 val
= strtoul (optarg
, &end
, 0);
315 einfo ("%P: warning: ignoring invalid -bmaxstack number %s\n",
324 link_info
.shared
= true;
327 if (*optarg
== '\0' || optarg
[1] == '\0')
328 einfo ("%P: warning: ignoring invalid module type %s\n", optarg
);
330 modtype
= (*optarg
<< 8) | optarg
[1];
333 case OPTION_NOAUTOIMP
:
334 link_info
.static_link
= true;
337 case OPTION_NOSTRCMPCT
:
338 config
.traditional_format
= true;
342 /* This sets the page that the .data section is supposed to
343 start on. The offset within the page should still be the
344 offset within the file, so we need to build an appropriate
346 val
= strtoul (optarg
, &end
, 0);
348 einfo ("%P: warning: ignoring invalid -pD number %s\n", optarg
);
356 exp_nameop (NAME
, "."),
359 exp_binop ('+', t
, exp_intop (7)),
360 exp_intop (~ (bfd_vma
) 7));
361 lang_section_start (".data", t
);
366 /* This set the page that the .text section is supposed to start
367 on. The offset within the page should still be the offset
369 val
= strtoul (optarg
, &end
, 0);
371 einfo ("%P: warning: ignoring invalid -pT number %s\n", optarg
);
378 exp_nameop (SIZEOF_HEADERS
, NULL
));
380 exp_binop ('+', t
, exp_intop (7)),
381 exp_intop (~ (bfd_vma
) 7));
382 lang_section_start (".text", t
);
386 case OPTION_STRCMPCT
:
387 config
.traditional_format
= false;
398 /* This is called after the input files have been opened. */
401 gldppcmacos_after_open ()
406 /* Call ldctor_build_sets, after pretending that this is a
407 relocateable link. We do this because AIX requires relocation
408 entries for all references to symbols, even in a final
410 r
= link_info
.relocateable
;
411 link_info
.relocateable
= true;
412 ldctor_build_sets ();
413 link_info
.relocateable
= r
;
415 /* For each set, record the size, so that the XCOFF backend can
416 output the correct csect length. */
417 for (p
= sets
; p
!= (struct set_info
*) NULL
; p
= p
->next
)
421 /* If the symbol is defined, we may have been invoked from
422 collect, and the sets may already have been built, so we do
424 if (p
->h
->type
== bfd_link_hash_defined
425 || p
->h
->type
== bfd_link_hash_defweak
)
428 if (p
->reloc
!= BFD_RELOC_CTOR
)
430 /* Handle this if we need to. */
434 size
= (p
->count
+ 2) * 4;
435 if (! bfd_xcoff_link_record_set (output_bfd
, &link_info
, p
->h
, size
))
436 einfo ("%F%P: bfd_xcoff_link_record_set failed: %E\n");
440 /* This is called after the sections have been attached to output
441 sections, but before any sizes or addresses have been set. */
444 gldppcmacos_before_allocation ()
447 struct export_symbol_list
*el
;
449 boolean export_defineds
;
450 asection
*special_sections
[6];
453 /* Handle the import and export files, if any. */
454 for (fl
= import_files
; fl
!= NULL
; fl
= fl
->next
)
455 gldppcmacos_read_file (fl
->name
, true);
456 for (el
= export_symbols
; el
!= NULL
; el
= el
->next
)
458 struct bfd_link_hash_entry
*h
;
460 h
= bfd_link_hash_lookup (link_info
.hash
, el
->name
, false, false, false);
462 einfo ("%P%F: bfd_link_hash_lookup of export symbol failed: %E\n");
463 if (! bfd_xcoff_export_symbol (output_bfd
, &link_info
, h
, el
->syscall
))
464 einfo ("%P%F: bfd_xcoff_export_symbol failed: %E\n");
467 /* Track down all relocations called for by the linker script (these
468 are typically constructor/destructor entries created by
469 CONSTRUCTORS) and let the backend know it will need to create
470 .loader relocs for them. */
471 lang_for_each_statement (gldppcmacos_find_relocs
);
473 /* We need to build LIBPATH from the -L arguments. If any -rpath
474 arguments were used, though, we use -rpath instead, as a GNU
476 if (command_line
.rpath
!= NULL
)
477 libpath
= command_line
.rpath
;
478 else if (search_head
== NULL
)
479 libpath
= (char *) "";
483 search_dirs_type
*search
;
485 len
= strlen (search_head
->name
);
486 libpath
= xmalloc (len
+ 1);
487 strcpy (libpath
, search_head
->name
);
488 for (search
= search_head
->next
; search
!= NULL
; search
= search
->next
)
492 nlen
= strlen (search
->name
);
493 libpath
= xrealloc (libpath
, len
+ nlen
+ 2);
495 strcpy (libpath
+ len
+ 1, search
->name
);
500 /* If we are emulating the Unix linker, we want to export all
501 defined symbols, unless an explicit -bE option was used. */
502 export_defineds
= false;
503 if (unix_ld
&& export_symbols
== NULL
)
504 export_defineds
= true;
506 /* Let the XCOFF backend set up the .loader section. */
507 if (! bfd_xcoff_size_dynamic_sections (output_bfd
, &link_info
, libpath
,
508 entry_symbol
, file_align
,
510 gc
&& ! unix_ld
? true : false,
512 textro
? true : false,
515 einfo ("%P%F: failed to set dynamic section sizes: %E\n");
517 /* Look through the special sections, and put them in the right
518 place in the link ordering. This is especially magic. */
519 for (i
= 0; i
< 6; i
++)
522 lang_output_section_statement_type
*os
;
523 lang_statement_union_type
**pls
;
524 lang_input_section_type
*is
;
528 sec
= special_sections
[i
];
532 /* Remove this section from the list of the output section.
533 This assumes we know what the script looks like. */
535 os
= lang_output_section_find (sec
->output_section
->name
);
537 einfo ("%P%F: can't find output section %s\n",
538 sec
->output_section
->name
);
539 for (pls
= &os
->children
.head
; *pls
!= NULL
; pls
= &(*pls
)->next
)
541 if ((*pls
)->header
.type
== lang_input_section_enum
542 && (*pls
)->input_section
.section
== sec
)
544 is
= (lang_input_section_type
*) *pls
;
548 if ((*pls
)->header
.type
== lang_wild_statement_enum
)
550 lang_statement_union_type
**pwls
;
552 for (pwls
= &(*pls
)->wild_statement
.children
.head
;
554 pwls
= &(*pwls
)->next
)
556 if ((*pwls
)->header
.type
== lang_input_section_enum
557 && (*pwls
)->input_section
.section
== sec
)
559 is
= (lang_input_section_type
*) *pwls
;
560 *pwls
= (*pwls
)->next
;
570 einfo ("%P%F: can't find %s in output section\n",
571 bfd_get_section_name (sec
->owner
, sec
));
573 /* Now figure out where the section should go. */
576 default: /* to avoid warnings */
605 os
= lang_output_section_find (oname
);
609 is
->header
.next
= os
->children
.head
;
610 os
->children
.head
= (lang_statement_union_type
*) is
;
614 is
->header
.next
= NULL
;
615 lang_statement_append (&os
->children
,
616 (lang_statement_union_type
*) is
,
622 /* Read an import or export file. For an import file, this is called
623 by the before_allocation emulation routine. For an export file,
624 this is called by the parse_args emulation routine. */
627 gldppcmacos_read_file (filename
, import
)
628 const char *filename
;
638 const char *impmember
;
640 o
= (struct obstack
*) xmalloc (sizeof (struct obstack
));
641 obstack_specify_allocation (o
, 0, 0, xmalloc
, gldppcmacos_free
);
643 f
= fopen (filename
, "r");
646 bfd_set_error (bfd_error_system_call
);
647 einfo ("%F%s: %E\n", filename
);
657 while ((c
= getc (f
)) != EOF
)
663 struct bfd_link_hash_entry
*h
;
667 obstack_1grow (o
, c
);
671 obstack_1grow (o
, '\0');
674 s
= (char *) obstack_base (o
);
675 while (isspace ((unsigned char) *s
))
679 || (*s
== '#' && s
[1] == ' ')
680 || (! import
&& *s
== '#' && s
[1] == '!'))
682 obstack_free (o
, obstack_base (o
));
686 if (*s
== '#' && s
[1] == '!')
689 while (isspace ((unsigned char) *s
))
696 obstack_free (o
, obstack_base (o
));
699 einfo ("%F%s%d: #! ([member]) is not supported in import files",
706 (void) obstack_finish (o
);
710 while (! isspace ((unsigned char) *s
) && *s
!= '(' && *s
!= '\0')
720 if (imppath
== file
- 1)
730 while (isspace ((unsigned char) cs
))
739 einfo ("%s:%d: warning: syntax error in import file\n",
746 while (*s
!= ')' && *s
!= '\0')
751 einfo ("%s:%d: warning: syntax error in import file\n",
759 /* This is a symbol to be imported or exported. */
762 address
= (bfd_vma
) -1;
764 while (! isspace ((unsigned char) *s
) && *s
!= '\0')
772 while (isspace ((unsigned char) *s
))
776 while (! isspace ((unsigned char) *se
) && *se
!= '\0')
781 while (isspace ((unsigned char) *se
))
784 einfo ("%s%d: warning: syntax error in import/export file\n",
788 if (strcasecmp (s
, "svc") == 0
789 || strcasecmp (s
, "syscall") == 0)
795 address
= strtoul (s
, &end
, 0);
797 einfo ("%s:%d: warning: syntax error in import/export file\n",
804 struct export_symbol_list
*n
;
806 ldlang_add_undef (symname
);
807 n
= ((struct export_symbol_list
*)
808 xmalloc (sizeof (struct export_symbol_list
)));
809 n
->next
= export_symbols
;
810 n
->name
= buystring (symname
);
811 n
->syscall
= syscall
;
816 h
= bfd_link_hash_lookup (link_info
.hash
, symname
, false, false,
818 if (h
== NULL
|| h
->type
== bfd_link_hash_new
)
820 /* We can just ignore attempts to import an unreferenced
825 if (! bfd_xcoff_import_symbol (output_bfd
, &link_info
, h
,
826 address
, imppath
, impfile
,
828 einfo ("%X%s:%d: failed to import symbol %s: %E\n",
829 filename
, lineno
, symname
);
833 obstack_free (o
, obstack_base (o
));
836 if (obstack_object_size (o
) > 0)
838 einfo ("%s:%d: warning: ignoring unterminated last line\n",
840 obstack_free (o
, obstack_base (o
));
845 obstack_free (o
, NULL
);
850 /* This routine saves us from worrying about declaring free. */
859 /* This is called by the before_allocation routine via
860 lang_for_each_statement. It looks for relocations and assignments
864 gldppcmacos_find_relocs (s
)
865 lang_statement_union_type
*s
;
867 if (s
->header
.type
== lang_reloc_statement_enum
)
869 lang_reloc_statement_type
*rs
;
871 rs
= &s
->reloc_statement
;
872 if (rs
->name
== NULL
)
873 einfo ("%F%P: only relocations against symbols are permitted\n");
874 if (! bfd_xcoff_link_count_reloc (output_bfd
, &link_info
, rs
->name
))
875 einfo ("%F%P: bfd_xcoff_link_count_reloc failed: %E\n");
878 if (s
->header
.type
== lang_assignment_statement_enum
)
879 gldppcmacos_find_exp_assignment (s
->assignment_statement
.exp
);
882 /* Look through an expression for an assignment statement. */
885 gldppcmacos_find_exp_assignment (exp
)
888 struct bfd_link_hash_entry
*h
;
890 switch (exp
->type
.node_class
)
893 h
= bfd_link_hash_lookup (link_info
.hash
, exp
->assign
.dst
,
894 false, false, false);
899 if (strcmp (exp
->assign
.dst
, ".") != 0)
901 if (! bfd_xcoff_record_link_assignment (output_bfd
, &link_info
,
903 einfo ("%P%F: failed to record assignment to %s: %E\n",
906 gldppcmacos_find_exp_assignment (exp
->assign
.src
);
910 gldppcmacos_find_exp_assignment (exp
->binary
.lhs
);
911 gldppcmacos_find_exp_assignment (exp
->binary
.rhs
);
915 gldppcmacos_find_exp_assignment (exp
->trinary
.cond
);
916 gldppcmacos_find_exp_assignment (exp
->trinary
.lhs
);
917 gldppcmacos_find_exp_assignment (exp
->trinary
.rhs
);
921 gldppcmacos_find_exp_assignment (exp
->unary
.child
);
930 gldppcmacos_get_script(isfile
)
935 if (link_info
.relocateable
== true && config
.build_constructors
== true)
937 "OUTPUT_FORMAT(\"xcoff-powermac\")\n\
938 OUTPUT_ARCH(powerpc)\n\
942 .pad 0 : { *(.pad) }\n\
978 ; else if (link_info
.relocateable
== true) return
979 "OUTPUT_FORMAT(\"xcoff-powermac\")\n\
980 OUTPUT_ARCH(powerpc)\n\
984 .pad 0 : { *(.pad) }\n\
1019 ; else if (!config
.text_read_only
) return
1020 "OUTPUT_FORMAT(\"xcoff-powermac\")\n\
1021 OUTPUT_ARCH(powerpc)\n\
1022 SEARCH_DIR(/usr/local/powerpc-apple-macos/lib);\n\
1026 .pad 0 : { *(.pad) }\n\
1028 PROVIDE (_text = .);\n\
1037 PROVIDE (_etext = .);\n\
1040 PROVIDE (_data = .);\n\
1051 PROVIDE (_edata = .);\n\
1058 PROVIDE (_end = .);\n\
1059 PROVIDE (end = .);\n\
1068 ; else if (!config
.magic_demand_paged
) return
1069 "OUTPUT_FORMAT(\"xcoff-powermac\")\n\
1070 OUTPUT_ARCH(powerpc)\n\
1071 SEARCH_DIR(/usr/local/powerpc-apple-macos/lib);\n\
1075 .pad 0 : { *(.pad) }\n\
1077 PROVIDE (_text = .);\n\
1086 PROVIDE (_etext = .);\n\
1089 PROVIDE (_data = .);\n\
1100 PROVIDE (_edata = .);\n\
1107 PROVIDE (_end = .);\n\
1108 PROVIDE (end = .);\n\
1118 "OUTPUT_FORMAT(\"xcoff-powermac\")\n\
1119 OUTPUT_ARCH(powerpc)\n\
1120 SEARCH_DIR(/usr/local/powerpc-apple-macos/lib);\n\
1124 .pad 0 : { *(.pad) }\n\
1126 PROVIDE (_text = .);\n\
1135 PROVIDE (_etext = .);\n\
1138 PROVIDE (_data = .);\n\
1149 PROVIDE (_edata = .);\n\
1156 PROVIDE (_end = .);\n\
1157 PROVIDE (end = .);\n\
1168 struct ld_emulation_xfer_struct ld_ppcmacos_emulation
=
1170 gldppcmacos_before_parse
,
1173 after_parse_default
,
1174 gldppcmacos_after_open
,
1175 after_allocation_default
,
1176 set_output_arch_default
,
1177 ldemul_default_target
,
1178 gldppcmacos_before_allocation
,
1179 gldppcmacos_get_script
,
1183 0, /* create_output_section_statements */
1184 0, /* open_dynamic_archive */
1185 0, /* place_orphan */
1186 0, /* set_symbols */
1187 gldppcmacos_parse_args
,