1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 #include "libiberty.h"
26 #include "safe-ctype.h"
44 static lang_statement_union_type *new_statement
45 PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
48 static struct obstack stat_obstack;
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52 static const char *startup_file;
53 static lang_statement_list_type input_file_chain;
54 static boolean placed_commons = false;
55 static lang_output_section_statement_type *default_common_section;
56 static boolean map_option_f;
57 static bfd_vma print_dot;
58 static lang_input_statement_type *first_file;
59 static const char *current_target;
60 static const char *output_target;
61 static lang_statement_list_type statement_list;
62 static struct lang_phdr *lang_phdr_list;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*) (lang_statement_union_type *),
66 lang_statement_union_type *));
67 static lang_input_statement_type *new_afile
68 PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
69 static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
70 static void lang_map_flags PARAMS ((flagword));
71 static void init_os PARAMS ((lang_output_section_statement_type *));
72 static void exp_init_os PARAMS ((etree_type *));
73 static void section_already_linked PARAMS ((bfd *, asection *, PTR));
74 static struct bfd_hash_entry *already_linked_newfunc
75 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
76 static void already_linked_table_init PARAMS ((void));
77 static void already_linked_table_free PARAMS ((void));
78 static boolean wildcardp PARAMS ((const char *));
79 static lang_statement_union_type *wild_sort
80 PARAMS ((lang_wild_statement_type *, struct wildcard_list *,
81 lang_input_statement_type *, asection *));
82 static void output_section_callback
83 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
84 lang_input_statement_type *, PTR));
85 static lang_input_statement_type *lookup_name PARAMS ((const char *));
86 static boolean load_symbols
87 PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
89 PARAMS ((lang_wild_statement_type *,
90 const char *, lang_output_section_statement_type *));
91 static bfd *open_output PARAMS ((const char *));
92 static void ldlang_open_output PARAMS ((lang_statement_union_type *));
93 static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
94 static void lang_reasonable_defaults PARAMS ((void));
95 static void lang_place_undefineds PARAMS ((void));
96 static void map_input_to_output_sections
97 PARAMS ((lang_statement_union_type *, const char *,
98 lang_output_section_statement_type *));
99 static void print_output_section_statement
100 PARAMS ((lang_output_section_statement_type *));
101 static void print_assignment
102 PARAMS ((lang_assignment_statement_type *,
103 lang_output_section_statement_type *));
104 static void print_input_statement PARAMS ((lang_input_statement_type *));
105 static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
106 static void print_input_section PARAMS ((lang_input_section_type *));
107 static void print_fill_statement PARAMS ((lang_fill_statement_type *));
108 static void print_data_statement PARAMS ((lang_data_statement_type *));
109 static void print_address_statement PARAMS ((lang_address_statement_type *));
110 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
111 static void print_padding_statement PARAMS ((lang_padding_statement_type *));
112 static void print_wild_statement
113 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
114 static void print_group
115 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
116 static void print_statement
117 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
118 static void print_statement_list
119 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
120 static void print_statements PARAMS ((void));
121 static void insert_pad
122 PARAMS ((lang_statement_union_type **, fill_type,
123 unsigned int, asection *, bfd_vma));
124 static bfd_vma size_input_section
125 PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
126 fill_type, bfd_vma));
127 static void lang_finish PARAMS ((void));
128 static void ignore_bfd_errors PARAMS ((const char *, ...));
129 static void lang_check PARAMS ((void));
130 static void lang_common PARAMS ((void));
131 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
132 static void lang_place_orphans PARAMS ((void));
133 static int topower PARAMS ((int));
134 static void lang_set_startof PARAMS ((void));
135 static void reset_memory_regions PARAMS ((void));
136 static void gc_section_callback
137 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
138 lang_input_statement_type *, PTR));
139 static void lang_record_phdrs PARAMS ((void));
140 static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
141 static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
142 static void lang_gc_sections PARAMS ((void));
143 static int lang_vers_match_lang_c
144 PARAMS ((struct bfd_elf_version_expr *, const char *));
145 static int lang_vers_match_lang_cplusplus
146 PARAMS ((struct bfd_elf_version_expr *, const char *));
147 static int lang_vers_match_lang_java
148 PARAMS ((struct bfd_elf_version_expr *, const char *));
149 static void lang_do_version_exports_section PARAMS ((void));
150 static void lang_check_section_addresses PARAMS ((void));
151 static void os_region_check
152 PARAMS ((lang_output_section_statement_type *,
153 struct memory_region_struct *, etree_type *, bfd_vma));
155 typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
156 struct wildcard_list *,
158 lang_input_statement_type *,
160 static void walk_wild
161 PARAMS ((lang_wild_statement_type *, callback_t, PTR));
162 static void walk_wild_section
163 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
165 static void walk_wild_file
166 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
169 static int get_target PARAMS ((const bfd_target *, PTR));
170 static void stricpy PARAMS ((char *, char *));
171 static void strcut PARAMS ((char *, char *));
172 static int name_compare PARAMS ((char *, char *));
173 static int closest_target_match PARAMS ((const bfd_target *, PTR));
174 static char * get_first_input_target PARAMS ((void));
177 lang_output_section_statement_type *abs_output_section;
178 lang_statement_list_type lang_output_section_statement;
179 lang_statement_list_type *stat_ptr = &statement_list;
180 lang_statement_list_type file_chain = { NULL, NULL };
181 const char *entry_symbol = NULL;
182 boolean entry_from_cmdline;
183 boolean lang_has_input_file = false;
184 boolean had_output_filename = false;
185 boolean lang_float_flag = false;
186 boolean delete_output_file_on_failure = false;
187 struct lang_nocrossrefs *nocrossref_list;
188 struct unique_sections *unique_section_list;
190 etree_type *base; /* Relocation base - or null */
192 #if defined (__STDC__) || defined (ALMOST_STDC)
193 #define cat(a,b) a##b
195 #define cat(a,b) a/**/b
198 /* Don't beautify the line below with "innocent" whitespace, it breaks
199 the K&R C preprocessor! */
200 #define new_stat(x, y) \
201 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
203 #define outside_section_address(q) \
204 ((q)->output_offset + (q)->output_section->vma)
206 #define outside_symbol_address(q) \
207 ((q)->value + outside_section_address (q->section))
209 #define SECTION_NAME_MAP_LENGTH (16)
215 return obstack_alloc (&stat_obstack, size);
219 unique_section_p (secnam)
222 struct unique_sections *unam;
224 for (unam = unique_section_list; unam; unam = unam->next)
225 if (wildcardp (unam->name)
226 ? fnmatch (unam->name, secnam, 0) == 0
227 : strcmp (unam->name, secnam) == 0)
235 /* Generic traversal routines for finding matching sections. */
238 walk_wild_section (ptr, file, callback, data)
239 lang_wild_statement_type *ptr;
240 lang_input_statement_type *file;
246 if (file->just_syms_flag)
249 for (s = file->the_bfd->sections; s != NULL; s = s->next)
251 struct wildcard_list *sec;
253 sec = ptr->section_list;
255 (*callback) (ptr, sec, s, file, data);
259 boolean skip = false;
260 struct name_list *list_tmp;
262 /* Don't process sections from files which were
264 for (list_tmp = sec->spec.exclude_name_list;
266 list_tmp = list_tmp->next)
268 if (wildcardp (list_tmp->name))
269 skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
271 skip = strcmp (list_tmp->name, file->filename) == 0;
277 if (!skip && sec->spec.name != NULL)
279 const char *sname = bfd_get_section_name (file->the_bfd, s);
281 if (wildcardp (sec->spec.name))
282 skip = fnmatch (sec->spec.name, sname, 0) != 0;
284 skip = strcmp (sec->spec.name, sname) != 0;
288 (*callback) (ptr, sec, s, file, data);
295 /* Handle a wild statement for a single file F. */
298 walk_wild_file (s, f, callback, data)
299 lang_wild_statement_type *s;
300 lang_input_statement_type *f;
304 if (f->the_bfd == NULL
305 || ! bfd_check_format (f->the_bfd, bfd_archive))
306 walk_wild_section (s, f, callback, data);
311 /* This is an archive file. We must map each member of the
312 archive separately. */
313 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
314 while (member != NULL)
316 /* When lookup_name is called, it will call the add_symbols
317 entry point for the archive. For each element of the
318 archive which is included, BFD will call ldlang_add_file,
319 which will set the usrdata field of the member to the
320 lang_input_statement. */
321 if (member->usrdata != NULL)
323 walk_wild_section (s,
324 (lang_input_statement_type *) member->usrdata,
328 member = bfd_openr_next_archived_file (f->the_bfd, member);
334 walk_wild (s, callback, data)
335 lang_wild_statement_type *s;
339 const char *file_spec = s->filename;
341 if (file_spec == NULL)
343 /* Perform the iteration over all files in the list. */
344 LANG_FOR_EACH_INPUT_STATEMENT (f)
346 walk_wild_file (s, f, callback, data);
349 else if (wildcardp (file_spec))
351 LANG_FOR_EACH_INPUT_STATEMENT (f)
353 if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
354 walk_wild_file (s, f, callback, data);
359 lang_input_statement_type *f;
361 /* Perform the iteration over a single file. */
362 f = lookup_name (file_spec);
364 walk_wild_file (s, f, callback, data);
368 /* lang_for_each_statement walks the parse tree and calls the provided
369 function for each node. */
372 lang_for_each_statement_worker (func, s)
373 void (*func) PARAMS ((lang_statement_union_type *));
374 lang_statement_union_type *s;
376 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
380 switch (s->header.type)
382 case lang_constructors_statement_enum:
383 lang_for_each_statement_worker (func, constructor_list.head);
385 case lang_output_section_statement_enum:
386 lang_for_each_statement_worker
388 s->output_section_statement.children.head);
390 case lang_wild_statement_enum:
391 lang_for_each_statement_worker
393 s->wild_statement.children.head);
395 case lang_group_statement_enum:
396 lang_for_each_statement_worker (func,
397 s->group_statement.children.head);
399 case lang_data_statement_enum:
400 case lang_reloc_statement_enum:
401 case lang_object_symbols_statement_enum:
402 case lang_output_statement_enum:
403 case lang_target_statement_enum:
404 case lang_input_section_enum:
405 case lang_input_statement_enum:
406 case lang_assignment_statement_enum:
407 case lang_padding_statement_enum:
408 case lang_address_statement_enum:
409 case lang_fill_statement_enum:
419 lang_for_each_statement (func)
420 void (*func) PARAMS ((lang_statement_union_type *));
422 lang_for_each_statement_worker (func, statement_list.head);
425 /*----------------------------------------------------------------------*/
428 lang_list_init (list)
429 lang_statement_list_type *list;
431 list->head = (lang_statement_union_type *) NULL;
432 list->tail = &list->head;
435 /* Build a new statement node for the parse tree. */
437 static lang_statement_union_type *
438 new_statement (type, size, list)
439 enum statement_enum type;
441 lang_statement_list_type *list;
443 lang_statement_union_type *new = (lang_statement_union_type *)
446 new->header.type = type;
447 new->header.next = (lang_statement_union_type *) NULL;
448 lang_statement_append (list, new, &new->header.next);
452 /* Build a new input file node for the language. There are several
453 ways in which we treat an input file, eg, we only look at symbols,
454 or prefix it with a -l etc.
456 We can be supplied with requests for input files more than once;
457 they may, for example be split over serveral lines like foo.o(.text)
458 foo.o(.data) etc, so when asked for a file we check that we haven't
459 got it already so we don't duplicate the bfd. */
461 static lang_input_statement_type *
462 new_afile (name, file_type, target, add_to_list)
464 lang_input_file_enum_type file_type;
468 lang_input_statement_type *p;
471 p = new_stat (lang_input_statement, stat_ptr);
474 p = ((lang_input_statement_type *)
475 stat_alloc (sizeof (lang_input_statement_type)));
476 p->header.next = NULL;
479 lang_has_input_file = true;
483 case lang_input_file_is_symbols_only_enum:
485 p->is_archive = false;
487 p->local_sym_name = name;
488 p->just_syms_flag = true;
489 p->search_dirs_flag = false;
491 case lang_input_file_is_fake_enum:
493 p->is_archive = false;
495 p->local_sym_name = name;
496 p->just_syms_flag = false;
497 p->search_dirs_flag = false;
499 case lang_input_file_is_l_enum:
500 p->is_archive = true;
503 p->local_sym_name = concat ("-l", name, (const char *) NULL);
504 p->just_syms_flag = false;
505 p->search_dirs_flag = true;
507 case lang_input_file_is_marker_enum:
509 p->is_archive = false;
511 p->local_sym_name = name;
512 p->just_syms_flag = false;
513 p->search_dirs_flag = true;
515 case lang_input_file_is_search_file_enum:
517 p->is_archive = false;
519 p->local_sym_name = name;
520 p->just_syms_flag = false;
521 p->search_dirs_flag = true;
523 case lang_input_file_is_file_enum:
525 p->is_archive = false;
527 p->local_sym_name = name;
528 p->just_syms_flag = false;
529 p->search_dirs_flag = false;
534 p->the_bfd = (bfd *) NULL;
535 p->asymbols = (asymbol **) NULL;
536 p->next_real_file = (lang_statement_union_type *) NULL;
537 p->next = (lang_statement_union_type *) NULL;
539 p->dynamic = config.dynamic_link;
540 p->whole_archive = whole_archive;
542 lang_statement_append (&input_file_chain,
543 (lang_statement_union_type *) p,
548 lang_input_statement_type *
549 lang_add_input_file (name, file_type, target)
551 lang_input_file_enum_type file_type;
554 lang_has_input_file = true;
555 return new_afile (name, file_type, target, true);
558 /* Build enough state so that the parser can build its tree. */
563 obstack_begin (&stat_obstack, 1000);
565 stat_ptr = &statement_list;
567 lang_list_init (stat_ptr);
569 lang_list_init (&input_file_chain);
570 lang_list_init (&lang_output_section_statement);
571 lang_list_init (&file_chain);
572 first_file = lang_add_input_file ((char *) NULL,
573 lang_input_file_is_marker_enum,
576 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
578 abs_output_section->bfd_section = bfd_abs_section_ptr;
582 /*----------------------------------------------------------------------
583 A region is an area of memory declared with the
584 MEMORY { name:org=exp, len=exp ... }
587 We maintain a list of all the regions here.
589 If no regions are specified in the script, then the default is used
590 which is created when looked up to be the entire data space. */
592 static lang_memory_region_type *lang_memory_region_list;
593 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
595 lang_memory_region_type *
596 lang_memory_region_lookup (name)
597 const char *const name;
599 lang_memory_region_type *p;
601 for (p = lang_memory_region_list;
602 p != (lang_memory_region_type *) NULL;
605 if (strcmp (p->name, name) == 0)
612 /* This code used to always use the first region in the list as the
613 default region. I changed it to instead use a region
614 encompassing all of memory as the default region. This permits
615 NOLOAD sections to work reasonably without requiring a region.
616 People should specify what region they mean, if they really want
618 if (strcmp (name, "*default*") == 0)
620 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
622 return lang_memory_region_list;
628 lang_memory_region_type *new =
629 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
631 new->name = xstrdup (name);
632 new->next = (lang_memory_region_type *) NULL;
634 *lang_memory_region_list_tail = new;
635 lang_memory_region_list_tail = &new->next;
639 new->length = ~(bfd_size_type) 0;
641 new->had_full_message = false;
647 static lang_memory_region_type *
648 lang_memory_default (section)
651 lang_memory_region_type *p;
653 flagword sec_flags = section->flags;
655 /* Override SEC_DATA to mean a writable section. */
656 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
657 sec_flags |= SEC_DATA;
659 for (p = lang_memory_region_list;
660 p != (lang_memory_region_type *) NULL;
663 if ((p->flags & sec_flags) != 0
664 && (p->not_flags & sec_flags) == 0)
669 return lang_memory_region_lookup ("*default*");
672 lang_output_section_statement_type *
673 lang_output_section_find (name)
674 const char *const name;
676 lang_statement_union_type *u;
677 lang_output_section_statement_type *lookup;
679 for (u = lang_output_section_statement.head;
680 u != (lang_statement_union_type *) NULL;
683 lookup = &u->output_section_statement;
684 if (strcmp (name, lookup->name) == 0)
689 return (lang_output_section_statement_type *) NULL;
692 lang_output_section_statement_type *
693 lang_output_section_statement_lookup (name)
694 const char *const name;
696 lang_output_section_statement_type *lookup;
698 lookup = lang_output_section_find (name);
699 if (lookup == (lang_output_section_statement_type *) NULL)
702 lookup = (lang_output_section_statement_type *)
703 new_stat (lang_output_section_statement, stat_ptr);
704 lookup->region = (lang_memory_region_type *) NULL;
705 lookup->lma_region = (lang_memory_region_type *) NULL;
707 lookup->block_value = 1;
710 lookup->next = (lang_statement_union_type *) NULL;
711 lookup->bfd_section = (asection *) NULL;
712 lookup->processed = false;
713 lookup->sectype = normal_section;
714 lookup->addr_tree = (etree_type *) NULL;
715 lang_list_init (&lookup->children);
717 lookup->memspec = (const char *) NULL;
719 lookup->subsection_alignment = -1;
720 lookup->section_alignment = -1;
721 lookup->load_base = (union etree_union *) NULL;
722 lookup->phdrs = NULL;
724 lang_statement_append (&lang_output_section_statement,
725 (lang_statement_union_type *) lookup,
732 lang_map_flags (flag)
735 if (flag & SEC_ALLOC)
741 if (flag & SEC_READONLY)
754 lang_memory_region_type *m;
756 minfo (_("\nMemory Configuration\n\n"));
757 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
758 _("Name"), _("Origin"), _("Length"), _("Attributes"));
760 for (m = lang_memory_region_list;
761 m != (lang_memory_region_type *) NULL;
767 fprintf (config.map_file, "%-16s ", m->name);
769 sprintf_vma (buf, m->origin);
770 minfo ("0x%s ", buf);
778 minfo ("0x%V", m->length);
779 if (m->flags || m->not_flags)
787 lang_map_flags (m->flags);
793 lang_map_flags (m->not_flags);
800 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
805 /* Initialize an output section. */
809 lang_output_section_statement_type *s;
811 section_userdata_type *new;
813 if (s->bfd_section != NULL)
816 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
817 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
819 new = ((section_userdata_type *)
820 stat_alloc (sizeof (section_userdata_type)));
822 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
823 if (s->bfd_section == (asection *) NULL)
824 s->bfd_section = bfd_make_section (output_bfd, s->name);
825 if (s->bfd_section == (asection *) NULL)
827 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
828 output_bfd->xvec->name, s->name);
830 s->bfd_section->output_section = s->bfd_section;
832 /* We initialize an output sections output offset to minus its own
833 vma to allow us to output a section through itself. */
834 s->bfd_section->output_offset = 0;
835 get_userdata (s->bfd_section) = (PTR) new;
837 /* If there is a base address, make sure that any sections it might
838 mention are initialized. */
839 if (s->addr_tree != NULL)
840 exp_init_os (s->addr_tree);
843 /* Make sure that all output sections mentioned in an expression are
850 switch (exp->type.node_class)
853 exp_init_os (exp->assign.src);
857 exp_init_os (exp->binary.lhs);
858 exp_init_os (exp->binary.rhs);
862 exp_init_os (exp->trinary.cond);
863 exp_init_os (exp->trinary.lhs);
864 exp_init_os (exp->trinary.rhs);
868 exp_init_os (exp->unary.child);
872 switch (exp->type.node_code)
878 lang_output_section_statement_type *os;
880 os = lang_output_section_find (exp->name.name);
881 if (os != NULL && os->bfd_section == NULL)
892 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
893 once into the output. This routine checks each section, and
894 arrange to discard it if a section of the same name has already
895 been linked. If the section has COMDAT information, then it uses
896 that to decide whether the section should be included. This code
897 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
898 that is, it does not depend solely upon the section name.
899 section_already_linked is called via bfd_map_over_sections. */
901 /* This is the shape of the elements inside the already_linked hash
902 table. It maps a name onto a list of already_linked elements with
903 the same name. It's possible to get more than one element in a
904 list if the COMDAT sections have different names. */
906 struct already_linked_hash_entry
908 struct bfd_hash_entry root;
909 struct already_linked *entry;
912 struct already_linked
914 struct already_linked *next;
918 /* The hash table. */
920 static struct bfd_hash_table already_linked_table;
923 section_already_linked (abfd, sec, data)
928 lang_input_statement_type *entry = (lang_input_statement_type *) data;
931 struct already_linked *l;
932 struct already_linked_hash_entry *already_linked_list;
934 /* If we are only reading symbols from this object, then we want to
935 discard all sections. */
936 if (entry->just_syms_flag)
938 sec->output_section = bfd_abs_section_ptr;
939 sec->output_offset = sec->vma;
943 flags = bfd_get_section_flags (abfd, sec);
945 if ((flags & SEC_LINK_ONCE) == 0)
948 /* FIXME: When doing a relocatable link, we may have trouble
949 copying relocations in other sections that refer to local symbols
950 in the section being discarded. Those relocations will have to
951 be converted somehow; as of this writing I'm not sure that any of
952 the backends handle that correctly.
954 It is tempting to instead not discard link once sections when
955 doing a relocatable link (technically, they should be discarded
956 whenever we are building constructors). However, that fails,
957 because the linker winds up combining all the link once sections
958 into a single large link once section, which defeats the purpose
959 of having link once sections in the first place.
961 Also, not merging link once sections in a relocatable link
962 causes trouble for MIPS ELF, which relies in link once semantics
963 to handle the .reginfo section correctly. */
965 name = bfd_get_section_name (abfd, sec);
967 already_linked_list =
968 ((struct already_linked_hash_entry *)
969 bfd_hash_lookup (&already_linked_table, name, true, false));
971 for (l = already_linked_list->entry; l != NULL; l = l->next)
973 if (sec->comdat == NULL
974 || l->sec->comdat == NULL
975 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
977 /* The section has already been linked. See if we should
979 switch (flags & SEC_LINK_DUPLICATES)
984 case SEC_LINK_DUPLICATES_DISCARD:
987 case SEC_LINK_DUPLICATES_ONE_ONLY:
988 if (sec->comdat == NULL)
989 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
992 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
993 abfd, name, sec->comdat->name);
996 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
997 /* FIXME: We should really dig out the contents of both
998 sections and memcmp them. The COFF/PE spec says that
999 the Microsoft linker does not implement this
1000 correctly, so I'm not going to bother doing it
1003 case SEC_LINK_DUPLICATES_SAME_SIZE:
1004 if (bfd_section_size (abfd, sec)
1005 != bfd_section_size (l->sec->owner, l->sec))
1006 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1011 /* Set the output_section field so that lang_add_section
1012 does not create a lang_input_section structure for this
1014 sec->output_section = bfd_abs_section_ptr;
1020 /* This is the first section with this name. Record it. Allocate
1021 the memory from the same obstack as the hash table is kept in. */
1023 l = ((struct already_linked *)
1024 bfd_hash_allocate (&already_linked_table, sizeof *l));
1027 l->next = already_linked_list->entry;
1028 already_linked_list->entry = l;
1031 /* Support routines for the hash table used by section_already_linked,
1032 initialize the table, fill in an entry and remove the table. */
1034 static struct bfd_hash_entry *
1035 already_linked_newfunc (entry, table, string)
1036 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1037 struct bfd_hash_table *table;
1038 const char *string ATTRIBUTE_UNUSED;
1040 struct already_linked_hash_entry *ret =
1041 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1045 return (struct bfd_hash_entry *) ret;
1049 already_linked_table_init ()
1051 if (! bfd_hash_table_init_n (&already_linked_table,
1052 already_linked_newfunc,
1054 einfo (_("%P%F: Failed to create hash table\n"));
1058 already_linked_table_free ()
1060 bfd_hash_table_free (&already_linked_table);
1063 /* The wild routines.
1065 These expand statements like *(.text) and foo.o to a list of
1066 explicit actions, like foo.o(.text), bar.o(.text) and
1067 foo.o(.text, .data). */
1069 /* Return true if the PATTERN argument is a wildcard pattern.
1070 Although backslashes are treated specially if a pattern contains
1071 wildcards, we do not consider the mere presence of a backslash to
1072 be enough to cause the pattern to be treated as a wildcard.
1073 That lets us handle DOS filenames more naturally. */
1077 const char *pattern;
1081 for (s = pattern; *s != '\0'; ++s)
1089 /* Add SECTION to the output section OUTPUT. Do this by creating a
1090 lang_input_section statement which is placed at PTR. FILE is the
1091 input file which holds SECTION. */
1094 lang_add_section (ptr, section, output, file)
1095 lang_statement_list_type *ptr;
1097 lang_output_section_statement_type *output;
1098 lang_input_statement_type *file;
1103 flags = bfd_get_section_flags (section->owner, section);
1107 /* If we are doing a final link, discard sections marked with
1109 if (! link_info.relocateable
1110 && (flags & SEC_EXCLUDE) != 0)
1113 /* Discard input sections which are assigned to a section named
1114 DISCARD_SECTION_NAME. */
1115 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1118 /* Discard debugging sections if we are stripping debugging
1120 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1121 && (flags & SEC_DEBUGGING) != 0)
1126 if (section->output_section == NULL)
1128 /* This prevents future calls from assigning this section. */
1129 section->output_section = bfd_abs_section_ptr;
1134 if (section->output_section == NULL)
1137 lang_input_section_type *new;
1140 if (output->bfd_section == NULL)
1143 first = ! output->bfd_section->linker_has_input;
1144 output->bfd_section->linker_has_input = 1;
1146 /* Add a section reference to the list. */
1147 new = new_stat (lang_input_section, ptr);
1149 new->section = section;
1151 section->output_section = output->bfd_section;
1153 flags = section->flags;
1155 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1156 to an output section, because we want to be able to include a
1157 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1158 section (I don't know why we want to do this, but we do).
1159 build_link_order in ldwrite.c handles this case by turning
1160 the embedded SEC_NEVER_LOAD section into a fill. */
1162 flags &= ~ SEC_NEVER_LOAD;
1164 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1165 already been processed. One reason to do this is that on pe
1166 format targets, .text$foo sections go into .text and it's odd
1167 to see .text with SEC_LINK_ONCE set. */
1169 if (! link_info.relocateable)
1170 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1172 /* If this is not the first input section, and the SEC_READONLY
1173 flag is not currently set, then don't set it just because the
1174 input section has it set. */
1176 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1177 flags &= ~ SEC_READONLY;
1179 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1181 && ((section->output_section->flags & (SEC_MERGE | SEC_STRINGS))
1182 != (flags & (SEC_MERGE | SEC_STRINGS))
1183 || ((flags & SEC_MERGE)
1184 && section->output_section->entsize != section->entsize)))
1186 section->output_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1187 flags &= ~ (SEC_MERGE | SEC_STRINGS);
1190 section->output_section->flags |= flags;
1192 if (flags & SEC_MERGE)
1193 section->output_section->entsize = section->entsize;
1195 /* If SEC_READONLY is not set in the input section, then clear
1196 it from the output section. */
1197 if ((section->flags & SEC_READONLY) == 0)
1198 section->output_section->flags &= ~SEC_READONLY;
1200 switch (output->sectype)
1202 case normal_section:
1207 case overlay_section:
1208 output->bfd_section->flags &= ~SEC_ALLOC;
1210 case noload_section:
1211 output->bfd_section->flags &= ~SEC_LOAD;
1212 output->bfd_section->flags |= SEC_NEVER_LOAD;
1216 /* Copy over SEC_SMALL_DATA. */
1217 if (section->flags & SEC_SMALL_DATA)
1218 section->output_section->flags |= SEC_SMALL_DATA;
1220 if (section->alignment_power > output->bfd_section->alignment_power)
1221 output->bfd_section->alignment_power = section->alignment_power;
1223 /* If supplied an aligment, then force it. */
1224 if (output->section_alignment != -1)
1225 output->bfd_section->alignment_power = output->section_alignment;
1227 if (section->flags & SEC_BLOCK)
1229 section->output_section->flags |= SEC_BLOCK;
1230 /* FIXME: This value should really be obtained from the bfd... */
1231 output->block_value = 128;
1236 /* Handle wildcard sorting. This returns the lang_input_section which
1237 should follow the one we are going to create for SECTION and FILE,
1238 based on the sorting requirements of WILD. It returns NULL if the
1239 new section should just go at the end of the current list. */
1241 static lang_statement_union_type *
1242 wild_sort (wild, sec, file, section)
1243 lang_wild_statement_type *wild;
1244 struct wildcard_list *sec;
1245 lang_input_statement_type *file;
1248 const char *section_name;
1249 lang_statement_union_type *l;
1251 if (!wild->filenames_sorted && (sec == NULL || !sec->spec.sorted))
1254 section_name = bfd_get_section_name (file->the_bfd, section);
1255 for (l = wild->children.head; l != NULL; l = l->header.next)
1257 lang_input_section_type *ls;
1259 if (l->header.type != lang_input_section_enum)
1261 ls = &l->input_section;
1263 /* Sorting by filename takes precedence over sorting by section
1266 if (wild->filenames_sorted)
1268 const char *fn, *ln;
1272 /* The PE support for the .idata section as generated by
1273 dlltool assumes that files will be sorted by the name of
1274 the archive and then the name of the file within the
1277 if (file->the_bfd != NULL
1278 && bfd_my_archive (file->the_bfd) != NULL)
1280 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1285 fn = file->filename;
1289 if (ls->ifile->the_bfd != NULL
1290 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1292 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1297 ln = ls->ifile->filename;
1301 i = strcmp (fn, ln);
1310 fn = file->filename;
1312 ln = ls->ifile->filename;
1314 i = strcmp (fn, ln);
1322 /* Here either the files are not sorted by name, or we are
1323 looking at the sections for this file. */
1325 if (sec != NULL && sec->spec.sorted)
1327 if (strcmp (section_name,
1328 bfd_get_section_name (ls->ifile->the_bfd,
1338 /* Expand a wild statement for a particular FILE. SECTION may be
1339 NULL, in which case it is a wild card. */
1342 output_section_callback (ptr, sec, section, file, output)
1343 lang_wild_statement_type *ptr;
1344 struct wildcard_list *sec;
1346 lang_input_statement_type *file;
1349 lang_statement_union_type *before;
1351 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1352 if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
1355 /* If the wild pattern was marked KEEP, the member sections
1356 should be as well. */
1357 if (ptr->keep_sections)
1358 section->flags |= SEC_KEEP;
1360 before = wild_sort (ptr, sec, file, section);
1362 /* Here BEFORE points to the lang_input_section which
1363 should follow the one we are about to add. If BEFORE
1364 is NULL, then the section should just go at the end
1365 of the current list. */
1368 lang_add_section (&ptr->children, section,
1369 (lang_output_section_statement_type *) output,
1373 lang_statement_list_type list;
1374 lang_statement_union_type **pp;
1376 lang_list_init (&list);
1377 lang_add_section (&list, section,
1378 (lang_output_section_statement_type *) output,
1381 /* If we are discarding the section, LIST.HEAD will
1383 if (list.head != NULL)
1385 ASSERT (list.head->header.next == NULL);
1387 for (pp = &ptr->children.head;
1389 pp = &(*pp)->header.next)
1390 ASSERT (*pp != NULL);
1392 list.head->header.next = *pp;
1398 /* This is passed a file name which must have been seen already and
1399 added to the statement tree. We will see if it has been opened
1400 already and had its symbols read. If not then we'll read it. */
1402 static lang_input_statement_type *
1406 lang_input_statement_type *search;
1408 for (search = (lang_input_statement_type *) input_file_chain.head;
1409 search != (lang_input_statement_type *) NULL;
1410 search = (lang_input_statement_type *) search->next_real_file)
1412 if (search->filename == (char *) NULL && name == (char *) NULL)
1414 if (search->filename != (char *) NULL
1415 && name != (char *) NULL
1416 && strcmp (search->filename, name) == 0)
1420 if (search == (lang_input_statement_type *) NULL)
1421 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1424 /* If we have already added this file, or this file is not real
1425 (FIXME: can that ever actually happen?) or the name is NULL
1426 (FIXME: can that ever actually happen?) don't add this file. */
1429 || search->filename == (const char *) NULL)
1432 if (! load_symbols (search, (lang_statement_list_type *) NULL))
1438 /* Get the symbols for an input file. */
1441 load_symbols (entry, place)
1442 lang_input_statement_type *entry;
1443 lang_statement_list_type *place;
1450 ldfile_open_file (entry);
1452 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1453 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1456 lang_statement_list_type *hold;
1457 boolean bad_load = true;
1459 err = bfd_get_error ();
1461 /* See if the emulation has some special knowledge. */
1462 if (ldemul_unrecognized_file (entry))
1465 if (err == bfd_error_file_ambiguously_recognized)
1469 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1470 einfo (_("%B: matching formats:"), entry->the_bfd);
1471 for (p = matching; *p != NULL; p++)
1475 else if (err != bfd_error_file_not_recognized
1477 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1481 bfd_close (entry->the_bfd);
1482 entry->the_bfd = NULL;
1484 /* Try to interpret the file as a linker script. */
1485 ldfile_open_command_file (entry->filename);
1490 ldfile_assumed_script = true;
1491 parser_input = input_script;
1493 ldfile_assumed_script = false;
1500 if (ldemul_recognized_file (entry))
1503 /* We don't call ldlang_add_file for an archive. Instead, the
1504 add_symbols entry point will call ldlang_add_file, via the
1505 add_archive_element callback, for each element of the archive
1507 switch (bfd_get_format (entry->the_bfd))
1513 ldlang_add_file (entry);
1514 if (trace_files || trace_file_tries)
1515 info_msg ("%I\n", entry);
1519 if (entry->whole_archive)
1521 bfd * member = NULL;
1522 boolean loaded = true;
1526 member = bfd_openr_next_archived_file (entry->the_bfd, member);
1531 if (! bfd_check_format (member, bfd_object))
1533 einfo (_("%F%B: member %B in archive is not an object\n"),
1534 entry->the_bfd, member);
1538 if (! ((*link_info.callbacks->add_archive_element)
1539 (&link_info, member, "--whole-archive")))
1542 if (! bfd_link_add_symbols (member, &link_info))
1544 einfo (_("%F%B: could not read symbols: %E\n"), member);
1549 entry->loaded = loaded;
1555 if (bfd_link_add_symbols (entry->the_bfd, &link_info))
1556 entry->loaded = true;
1558 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1560 return entry->loaded;
1563 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1564 may be NULL, indicating that it is a wildcard. Separate
1565 lang_input_section statements are created for each part of the
1566 expansion; they are added after the wild statement S. OUTPUT is
1567 the output section. */
1570 wild (s, target, output)
1571 lang_wild_statement_type *s;
1572 const char *target ATTRIBUTE_UNUSED;
1573 lang_output_section_statement_type *output;
1575 struct wildcard_list *sec;
1577 walk_wild (s, output_section_callback, (PTR) output);
1579 for (sec = s->section_list; sec != NULL; sec = sec->next)
1581 if (default_common_section != NULL)
1583 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
1585 /* Remember the section that common is going to in case we
1586 later get something which doesn't know where to put it. */
1587 default_common_section = output;
1592 /* Return true iff target is the sought target. */
1595 get_target (target, data)
1596 const bfd_target *target;
1599 const char *sought = (const char *) data;
1601 return strcmp (target->name, sought) == 0;
1604 /* Like strcpy() but convert to lower case as well. */
1613 while ((c = *src++) != 0)
1614 *dest++ = TOLOWER (c);
1619 /* Remove the first occurance of needle (if any) in haystack
1623 strcut (haystack, needle)
1627 haystack = strstr (haystack, needle);
1633 for (src = haystack + strlen (needle); *src;)
1634 *haystack++ = *src++;
1640 /* Compare two target format name strings.
1641 Return a value indicating how "similar" they are. */
1644 name_compare (first, second)
1652 copy1 = xmalloc (strlen (first) + 1);
1653 copy2 = xmalloc (strlen (second) + 1);
1655 /* Convert the names to lower case. */
1656 stricpy (copy1, first);
1657 stricpy (copy2, second);
1659 /* Remove and endian strings from the name. */
1660 strcut (copy1, "big");
1661 strcut (copy1, "little");
1662 strcut (copy2, "big");
1663 strcut (copy2, "little");
1665 /* Return a value based on how many characters match,
1666 starting from the beginning. If both strings are
1667 the same then return 10 * their length. */
1668 for (result = 0; copy1[result] == copy2[result]; result++)
1669 if (copy1[result] == 0)
1681 /* Set by closest_target_match() below. */
1682 static const bfd_target *winner;
1684 /* Scan all the valid bfd targets looking for one that has the endianness
1685 requirement that was specified on the command line, and is the nearest
1686 match to the original output target. */
1689 closest_target_match (target, data)
1690 const bfd_target *target;
1693 const bfd_target *original = (const bfd_target *) data;
1695 if (command_line.endian == ENDIAN_BIG
1696 && target->byteorder != BFD_ENDIAN_BIG)
1699 if (command_line.endian == ENDIAN_LITTLE
1700 && target->byteorder != BFD_ENDIAN_LITTLE)
1703 /* Must be the same flavour. */
1704 if (target->flavour != original->flavour)
1707 /* If we have not found a potential winner yet, then record this one. */
1714 /* Oh dear, we now have two potential candidates for a successful match.
1715 Compare their names and choose the better one. */
1716 if (name_compare (target->name, original->name)
1717 > name_compare (winner->name, original->name))
1720 /* Keep on searching until wqe have checked them all. */
1724 /* Return the BFD target format of the first input file. */
1727 get_first_input_target ()
1729 char *target = NULL;
1731 LANG_FOR_EACH_INPUT_STATEMENT (s)
1733 if (s->header.type == lang_input_statement_enum
1736 ldfile_open_file (s);
1738 if (s->the_bfd != NULL
1739 && bfd_check_format (s->the_bfd, bfd_object))
1741 target = bfd_get_target (s->the_bfd);
1752 /* Open the output file. */
1760 /* Has the user told us which output format to use? */
1761 if (output_target == (char *) NULL)
1763 /* No - has the current target been set to something other than
1765 if (current_target != default_target)
1766 output_target = current_target;
1768 /* No - can we determine the format of the first input file? */
1771 output_target = get_first_input_target ();
1773 /* Failed - use the default output target. */
1774 if (output_target == NULL)
1775 output_target = default_target;
1779 /* Has the user requested a particular endianness on the command
1781 if (command_line.endian != ENDIAN_UNSET)
1783 const bfd_target *target;
1784 enum bfd_endian desired_endian;
1786 /* Get the chosen target. */
1787 target = bfd_search_for_target (get_target, (PTR) output_target);
1789 /* If the target is not supported, we cannot do anything. */
1792 if (command_line.endian == ENDIAN_BIG)
1793 desired_endian = BFD_ENDIAN_BIG;
1795 desired_endian = BFD_ENDIAN_LITTLE;
1797 /* See if the target has the wrong endianness. This should
1798 not happen if the linker script has provided big and
1799 little endian alternatives, but some scrips don't do
1801 if (target->byteorder != desired_endian)
1803 /* If it does, then see if the target provides
1804 an alternative with the correct endianness. */
1805 if (target->alternative_target != NULL
1806 && (target->alternative_target->byteorder == desired_endian))
1807 output_target = target->alternative_target->name;
1810 /* Try to find a target as similar as possible to
1811 the default target, but which has the desired
1812 endian characteristic. */
1813 (void) bfd_search_for_target (closest_target_match,
1816 /* Oh dear - we could not find any targets that
1817 satisfy our requirements. */
1819 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1821 output_target = winner->name;
1827 output = bfd_openw (name, output_target);
1829 if (output == (bfd *) NULL)
1831 if (bfd_get_error () == bfd_error_invalid_target)
1832 einfo (_("%P%F: target %s not found\n"), output_target);
1834 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1837 delete_output_file_on_failure = true;
1840 output->flags |= D_PAGED;
1843 if (! bfd_set_format (output, bfd_object))
1844 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1845 if (! bfd_set_arch_mach (output,
1846 ldfile_output_architecture,
1847 ldfile_output_machine))
1848 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1850 link_info.hash = bfd_link_hash_table_create (output);
1851 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1852 einfo (_("%P%F: can not create link hash table: %E\n"));
1854 bfd_set_gp_size (output, g_switch_value);
1859 ldlang_open_output (statement)
1860 lang_statement_union_type *statement;
1862 switch (statement->header.type)
1864 case lang_output_statement_enum:
1865 ASSERT (output_bfd == (bfd *) NULL);
1866 output_bfd = open_output (statement->output_statement.name);
1867 ldemul_set_output_arch ();
1868 if (config.magic_demand_paged && !link_info.relocateable)
1869 output_bfd->flags |= D_PAGED;
1871 output_bfd->flags &= ~D_PAGED;
1872 if (config.text_read_only)
1873 output_bfd->flags |= WP_TEXT;
1875 output_bfd->flags &= ~WP_TEXT;
1876 if (link_info.traditional_format)
1877 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1879 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1882 case lang_target_statement_enum:
1883 current_target = statement->target_statement.target;
1890 /* Open all the input files. */
1893 open_input_bfds (s, force)
1894 lang_statement_union_type *s;
1897 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
1899 switch (s->header.type)
1901 case lang_constructors_statement_enum:
1902 open_input_bfds (constructor_list.head, force);
1904 case lang_output_section_statement_enum:
1905 open_input_bfds (s->output_section_statement.children.head, force);
1907 case lang_wild_statement_enum:
1908 /* Maybe we should load the file's symbols. */
1909 if (s->wild_statement.filename
1910 && ! wildcardp (s->wild_statement.filename))
1911 (void) lookup_name (s->wild_statement.filename);
1912 open_input_bfds (s->wild_statement.children.head, force);
1914 case lang_group_statement_enum:
1916 struct bfd_link_hash_entry *undefs;
1918 /* We must continually search the entries in the group
1919 until no new symbols are added to the list of undefined
1924 undefs = link_info.hash->undefs_tail;
1925 open_input_bfds (s->group_statement.children.head, true);
1927 while (undefs != link_info.hash->undefs_tail);
1930 case lang_target_statement_enum:
1931 current_target = s->target_statement.target;
1933 case lang_input_statement_enum:
1934 if (s->input_statement.real)
1936 lang_statement_list_type add;
1938 s->input_statement.target = current_target;
1940 /* If we are being called from within a group, and this
1941 is an archive which has already been searched, then
1942 force it to be researched unless the whole archive
1943 has been loaded already. */
1945 && !s->input_statement.whole_archive
1946 && s->input_statement.loaded
1947 && bfd_check_format (s->input_statement.the_bfd,
1949 s->input_statement.loaded = false;
1951 lang_list_init (&add);
1953 if (! load_symbols (&s->input_statement, &add))
1954 config.make_executable = false;
1956 if (add.head != NULL)
1958 *add.tail = s->header.next;
1959 s->header.next = add.head;
1969 /* If there are [COMMONS] statements, put a wild one into the bss
1973 lang_reasonable_defaults ()
1976 lang_output_section_statement_lookup (".text");
1977 lang_output_section_statement_lookup (".data");
1979 default_common_section = lang_output_section_statement_lookup (".bss");
1981 if (placed_commons == false)
1983 lang_wild_statement_type *new =
1984 new_stat (lang_wild_statement,
1985 &default_common_section->children);
1987 new->section_name = "COMMON";
1988 new->filename = (char *) NULL;
1989 lang_list_init (&new->children);
1994 /* Add the supplied name to the symbol table as an undefined reference.
1995 Remove items from the chain as we open input bfds. */
1996 typedef struct ldlang_undef_chain_list
1998 struct ldlang_undef_chain_list *next;
2000 } ldlang_undef_chain_list_type;
2002 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
2005 ldlang_add_undef (name)
2006 const char *const name;
2008 ldlang_undef_chain_list_type *new =
2009 ((ldlang_undef_chain_list_type *)
2010 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
2012 new->next = ldlang_undef_chain_list_head;
2013 ldlang_undef_chain_list_head = new;
2015 new->name = xstrdup (name);
2018 /* Run through the list of undefineds created above and place them
2019 into the linker hash table as undefined symbols belonging to the
2023 lang_place_undefineds ()
2025 ldlang_undef_chain_list_type *ptr;
2027 for (ptr = ldlang_undef_chain_list_head;
2028 ptr != (ldlang_undef_chain_list_type *) NULL;
2031 struct bfd_link_hash_entry *h;
2033 h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
2034 if (h == (struct bfd_link_hash_entry *) NULL)
2035 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2036 if (h->type == bfd_link_hash_new)
2038 h->type = bfd_link_hash_undefined;
2039 h->u.undef.abfd = NULL;
2040 bfd_link_add_undef (link_info.hash, h);
2045 /* Open input files and attatch to output sections. */
2048 map_input_to_output_sections (s, target, output_section_statement)
2049 lang_statement_union_type *s;
2051 lang_output_section_statement_type *output_section_statement;
2053 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2055 switch (s->header.type)
2057 case lang_wild_statement_enum:
2058 wild (&s->wild_statement, target, output_section_statement);
2059 case lang_constructors_statement_enum:
2060 map_input_to_output_sections (constructor_list.head,
2062 output_section_statement);
2064 case lang_output_section_statement_enum:
2065 map_input_to_output_sections (s->output_section_statement.children.head,
2067 &s->output_section_statement);
2069 case lang_output_statement_enum:
2071 case lang_target_statement_enum:
2072 target = s->target_statement.target;
2074 case lang_group_statement_enum:
2075 map_input_to_output_sections (s->group_statement.children.head,
2077 output_section_statement);
2079 case lang_fill_statement_enum:
2080 case lang_input_section_enum:
2081 case lang_object_symbols_statement_enum:
2082 case lang_data_statement_enum:
2083 case lang_reloc_statement_enum:
2084 case lang_padding_statement_enum:
2085 case lang_input_statement_enum:
2086 if (output_section_statement != NULL
2087 && output_section_statement->bfd_section == NULL)
2088 init_os (output_section_statement);
2090 case lang_assignment_statement_enum:
2091 if (output_section_statement != NULL
2092 && output_section_statement->bfd_section == NULL)
2093 init_os (output_section_statement);
2095 /* Make sure that any sections mentioned in the assignment
2097 exp_init_os (s->assignment_statement.exp);
2099 case lang_afile_asection_pair_statement_enum:
2102 case lang_address_statement_enum:
2103 /* Mark the specified section with the supplied address. */
2105 lang_output_section_statement_type *os =
2106 lang_output_section_statement_lookup
2107 (s->address_statement.section_name);
2109 if (os->bfd_section == NULL)
2111 os->addr_tree = s->address_statement.address;
2119 print_output_section_statement (output_section_statement)
2120 lang_output_section_statement_type *output_section_statement;
2122 asection *section = output_section_statement->bfd_section;
2125 if (output_section_statement != abs_output_section)
2127 minfo ("\n%s", output_section_statement->name);
2129 if (section != NULL)
2131 print_dot = section->vma;
2133 len = strlen (output_section_statement->name);
2134 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2139 while (len < SECTION_NAME_MAP_LENGTH)
2145 minfo ("0x%V %W", section->vma, section->_raw_size);
2147 if (output_section_statement->load_base != NULL)
2151 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2152 "load base", lang_final_phase_enum);
2153 minfo (_(" load address 0x%V"), addr);
2160 print_statement_list (output_section_statement->children.head,
2161 output_section_statement);
2165 print_assignment (assignment, output_section)
2166 lang_assignment_statement_type *assignment;
2167 lang_output_section_statement_type *output_section;
2170 etree_value_type result;
2172 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2175 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2176 lang_final_phase_enum, print_dot, &print_dot);
2178 minfo ("0x%V", result.value + result.section->bfd_section->vma);
2189 exp_print_tree (assignment->exp);
2195 print_input_statement (statm)
2196 lang_input_statement_type *statm;
2198 if (statm->filename != (char *) NULL)
2200 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2204 /* Print all symbols defined in a particular section. This is called
2205 via bfd_link_hash_traverse. */
2208 print_one_symbol (hash_entry, ptr)
2209 struct bfd_link_hash_entry *hash_entry;
2212 asection *sec = (asection *) ptr;
2214 if ((hash_entry->type == bfd_link_hash_defined
2215 || hash_entry->type == bfd_link_hash_defweak)
2216 && sec == hash_entry->u.def.section)
2220 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2223 (hash_entry->u.def.value
2224 + hash_entry->u.def.section->output_offset
2225 + hash_entry->u.def.section->output_section->vma));
2227 minfo (" %T\n", hash_entry->root.string);
2233 /* Print information about an input section to the map file. */
2236 print_input_section (in)
2237 lang_input_section_type *in;
2239 asection *i = in->section;
2240 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
2241 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2242 ldfile_output_machine);
2247 minfo ("%s", i->name);
2249 if (i->output_section != NULL)
2253 len = 1 + strlen (i->name);
2254 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2259 while (len < SECTION_NAME_MAP_LENGTH)
2265 minfo ("0x%V %W %B\n",
2266 i->output_section->vma + i->output_offset, size / opb,
2269 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2271 len = SECTION_NAME_MAP_LENGTH + 3;
2283 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2286 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2288 print_dot = i->output_section->vma + i->output_offset + size / opb;
2294 print_fill_statement (fill)
2295 lang_fill_statement_type *fill;
2297 fprintf (config.map_file, " FILL mask 0x%x\n", fill->fill);
2301 print_data_statement (data)
2302 lang_data_statement_type *data;
2308 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2309 ldfile_output_machine);
2311 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2314 addr = data->output_vma;
2315 if (data->output_section != NULL)
2316 addr += data->output_section->vma;
2344 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2346 if (data->exp->type.node_class != etree_value)
2349 exp_print_tree (data->exp);
2354 print_dot = addr + size / opb;
2358 /* Print an address statement. These are generated by options like
2362 print_address_statement (address)
2363 lang_address_statement_type *address;
2365 minfo (_("Address of section %s set to "), address->section_name);
2366 exp_print_tree (address->address);
2370 /* Print a reloc statement. */
2373 print_reloc_statement (reloc)
2374 lang_reloc_statement_type *reloc;
2379 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2380 ldfile_output_machine);
2382 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2385 addr = reloc->output_vma;
2386 if (reloc->output_section != NULL)
2387 addr += reloc->output_section->vma;
2389 size = bfd_get_reloc_size (reloc->howto);
2391 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2393 if (reloc->name != NULL)
2394 minfo ("%s+", reloc->name);
2396 minfo ("%s+", reloc->section->name);
2398 exp_print_tree (reloc->addend_exp);
2402 print_dot = addr + size / opb;
2406 print_padding_statement (s)
2407 lang_padding_statement_type *s;
2411 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2412 ldfile_output_machine);
2416 len = sizeof " *fill*" - 1;
2417 while (len < SECTION_NAME_MAP_LENGTH)
2423 addr = s->output_offset;
2424 if (s->output_section != NULL)
2425 addr += s->output_section->vma;
2426 minfo ("0x%V %W", addr, s->size);
2429 minfo (" %u", s->fill);
2433 print_dot = addr + s->size / opb;
2437 print_wild_statement (w, os)
2438 lang_wild_statement_type *w;
2439 lang_output_section_statement_type *os;
2441 struct wildcard_list *sec;
2445 if (w->filenames_sorted)
2447 if (w->filename != NULL)
2448 minfo ("%s", w->filename);
2451 if (w->filenames_sorted)
2455 for (sec = w->section_list; sec; sec = sec->next)
2457 if (sec->spec.sorted)
2459 if (sec->spec.exclude_name_list != NULL)
2462 minfo ("EXCLUDE_FILE ( %s", sec->spec.exclude_name_list->name);
2463 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
2464 minfo (", %s", tmp->name);
2467 if (sec->spec.name != NULL)
2468 minfo ("%s", sec->spec.name);
2471 if (sec->spec.sorted)
2478 print_statement_list (w->children.head, os);
2481 /* Print a group statement. */
2485 lang_group_statement_type *s;
2486 lang_output_section_statement_type *os;
2488 fprintf (config.map_file, "START GROUP\n");
2489 print_statement_list (s->children.head, os);
2490 fprintf (config.map_file, "END GROUP\n");
2493 /* Print the list of statements in S.
2494 This can be called for any statement type. */
2497 print_statement_list (s, os)
2498 lang_statement_union_type *s;
2499 lang_output_section_statement_type *os;
2503 print_statement (s, os);
2508 /* Print the first statement in statement list S.
2509 This can be called for any statement type. */
2512 print_statement (s, os)
2513 lang_statement_union_type *s;
2514 lang_output_section_statement_type *os;
2516 switch (s->header.type)
2519 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2522 case lang_constructors_statement_enum:
2523 if (constructor_list.head != NULL)
2525 if (constructors_sorted)
2526 minfo (" SORT (CONSTRUCTORS)\n");
2528 minfo (" CONSTRUCTORS\n");
2529 print_statement_list (constructor_list.head, os);
2532 case lang_wild_statement_enum:
2533 print_wild_statement (&s->wild_statement, os);
2535 case lang_address_statement_enum:
2536 print_address_statement (&s->address_statement);
2538 case lang_object_symbols_statement_enum:
2539 minfo (" CREATE_OBJECT_SYMBOLS\n");
2541 case lang_fill_statement_enum:
2542 print_fill_statement (&s->fill_statement);
2544 case lang_data_statement_enum:
2545 print_data_statement (&s->data_statement);
2547 case lang_reloc_statement_enum:
2548 print_reloc_statement (&s->reloc_statement);
2550 case lang_input_section_enum:
2551 print_input_section (&s->input_section);
2553 case lang_padding_statement_enum:
2554 print_padding_statement (&s->padding_statement);
2556 case lang_output_section_statement_enum:
2557 print_output_section_statement (&s->output_section_statement);
2559 case lang_assignment_statement_enum:
2560 print_assignment (&s->assignment_statement, os);
2562 case lang_target_statement_enum:
2563 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2565 case lang_output_statement_enum:
2566 minfo ("OUTPUT(%s", s->output_statement.name);
2567 if (output_target != NULL)
2568 minfo (" %s", output_target);
2571 case lang_input_statement_enum:
2572 print_input_statement (&s->input_statement);
2574 case lang_group_statement_enum:
2575 print_group (&s->group_statement, os);
2577 case lang_afile_asection_pair_statement_enum:
2586 print_statement_list (statement_list.head, abs_output_section);
2589 /* Print the first N statements in statement list S to STDERR.
2590 If N == 0, nothing is printed.
2591 If N < 0, the entire list is printed.
2592 Intended to be called from GDB. */
2595 dprint_statement (s, n)
2596 lang_statement_union_type *s;
2599 FILE *map_save = config.map_file;
2601 config.map_file = stderr;
2604 print_statement_list (s, abs_output_section);
2607 while (s && --n >= 0)
2609 print_statement (s, abs_output_section);
2614 config.map_file = map_save;
2618 insert_pad (ptr, fill, alignment_needed, output_section, dot)
2619 lang_statement_union_type **ptr;
2621 unsigned int alignment_needed;
2622 asection *output_section;
2625 lang_statement_union_type *pad;
2627 pad = ((lang_statement_union_type *)
2628 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
2629 if (ptr != &statement_list.head
2630 && pad->header.type == lang_padding_statement_enum
2631 && pad->padding_statement.output_section == output_section)
2633 /* Use the existing pad statement. The above test on output
2634 section is probably redundant, but it doesn't hurt to check. */
2638 /* Make a new padding statement, linked into existing chain. */
2639 pad = ((lang_statement_union_type *)
2640 stat_alloc (sizeof (lang_padding_statement_type)));
2641 pad->header.next = *ptr;
2643 pad->header.type = lang_padding_statement_enum;
2644 pad->padding_statement.output_section = output_section;
2645 pad->padding_statement.fill = fill;
2647 pad->padding_statement.output_offset = dot - output_section->vma;
2648 pad->padding_statement.size = alignment_needed;
2649 output_section->_raw_size += alignment_needed;
2652 /* Work out how much this section will move the dot point. */
2655 size_input_section (this_ptr, output_section_statement, fill, dot)
2656 lang_statement_union_type **this_ptr;
2657 lang_output_section_statement_type *output_section_statement;
2661 lang_input_section_type *is = &((*this_ptr)->input_section);
2662 asection *i = is->section;
2664 if (is->ifile->just_syms_flag == false)
2666 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2667 ldfile_output_machine);
2668 unsigned int alignment_needed;
2671 /* Align this section first to the input sections requirement,
2672 then to the output section's requirement. If this alignment
2673 is greater than any seen before, then record it too. Perform
2674 the alignment by inserting a magic 'padding' statement. */
2676 if (output_section_statement->subsection_alignment != -1)
2677 i->alignment_power = output_section_statement->subsection_alignment;
2679 o = output_section_statement->bfd_section;
2680 if (o->alignment_power < i->alignment_power)
2681 o->alignment_power = i->alignment_power;
2683 alignment_needed = align_power (dot, i->alignment_power) - dot;
2685 if (alignment_needed != 0)
2687 insert_pad (this_ptr, fill, alignment_needed * opb, o, dot);
2688 dot += alignment_needed;
2691 /* Remember where in the output section this input section goes. */
2693 i->output_offset = dot - o->vma;
2695 /* Mark how big the output section must be to contain this now. */
2696 if (i->_cooked_size != 0)
2697 dot += i->_cooked_size / opb;
2699 dot += i->_raw_size / opb;
2700 o->_raw_size = (dot - o->vma) * opb;
2704 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2710 #define IGNORE_SECTION(bfd, s) \
2711 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2712 != (SEC_ALLOC | SEC_LOAD)) \
2713 || bfd_section_size (bfd, s) == 0)
2715 /* Check to see if any allocated sections overlap with other allocated
2716 sections. This can happen when the linker script specifically specifies
2717 the output section addresses of the two sections. */
2720 lang_check_section_addresses ()
2723 unsigned opb = bfd_octets_per_byte (output_bfd);
2725 /* Scan all sections in the output list. */
2726 for (s = output_bfd->sections; s != NULL; s = s->next)
2730 /* Ignore sections which are not loaded or which have no contents. */
2731 if (IGNORE_SECTION (output_bfd, s))
2734 /* Once we reach section 's' stop our seach. This prevents two
2735 warning messages from being produced, one for 'section A overlaps
2736 section B' and one for 'section B overlaps section A'. */
2737 for (os = output_bfd->sections; os != s; os = os->next)
2744 /* Only consider loadable sections with real contents. */
2745 if (IGNORE_SECTION (output_bfd, os))
2748 /* We must check the sections' LMA addresses not their
2749 VMA addresses because overlay sections can have
2750 overlapping VMAs but they must have distinct LMAs. */
2751 s_start = bfd_section_lma (output_bfd, s);
2752 os_start = bfd_section_lma (output_bfd, os);
2753 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2754 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
2756 /* Look for an overlap. */
2757 if ((s_end < os_start) || (s_start > os_end))
2761 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2762 s->name, s_start, s_end, os->name, os_start, os_end);
2764 /* Once we have found one overlap for this section,
2765 stop looking for others. */
2771 /* Make sure the new address is within the region. We explicitly permit the
2772 current address to be at the exact end of the region when the address is
2773 non-zero, in case the region is at the end of addressable memory and the
2774 calculation wraps around. */
2777 os_region_check (os, region, tree, base)
2778 lang_output_section_statement_type *os;
2779 struct memory_region_struct *region;
2783 if ((region->current < region->origin
2784 || (region->current - region->origin > region->length))
2785 && ((region->current != region->origin + region->length)
2788 if (tree != (etree_type *) NULL)
2790 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2792 os->bfd_section->owner,
2793 os->bfd_section->name,
2798 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2800 os->bfd_section->owner,
2801 os->bfd_section->name);
2803 /* Reset the region pointer. */
2804 region->current = region->origin;
2808 /* Set the sizes for all the output sections. */
2811 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
2812 lang_statement_union_type *s;
2813 lang_output_section_statement_type *output_section_statement;
2814 lang_statement_union_type **prev;
2819 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2820 ldfile_output_machine);
2822 /* Size up the sections from their constituent parts. */
2823 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2825 switch (s->header.type)
2827 case lang_output_section_statement_enum:
2830 lang_output_section_statement_type *os;
2832 os = &s->output_section_statement;
2833 if (os->bfd_section == NULL)
2834 /* This section was never actually created. */
2837 /* If this is a COFF shared library section, use the size and
2838 address from the input section. FIXME: This is COFF
2839 specific; it would be cleaner if there were some other way
2840 to do this, but nothing simple comes to mind. */
2841 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2845 if (os->children.head == NULL
2846 || os->children.head->header.next != NULL
2847 || os->children.head->header.type != lang_input_section_enum)
2848 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2851 input = os->children.head->input_section.section;
2852 bfd_set_section_vma (os->bfd_section->owner,
2854 bfd_section_vma (input->owner, input));
2855 os->bfd_section->_raw_size = input->_raw_size;
2859 if (bfd_is_abs_section (os->bfd_section))
2861 /* No matter what happens, an abs section starts at zero. */
2862 ASSERT (os->bfd_section->vma == 0);
2866 if (os->addr_tree == (etree_type *) NULL)
2868 /* No address specified for this section, get one
2869 from the region specification. */
2870 if (os->region == (lang_memory_region_type *) NULL
2871 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2872 & (SEC_ALLOC | SEC_LOAD)) != 0)
2873 && os->region->name[0] == '*'
2874 && strcmp (os->region->name, "*default*") == 0))
2876 os->region = lang_memory_default (os->bfd_section);
2879 /* If a loadable section is using the default memory
2880 region, and some non default memory regions were
2881 defined, issue a warning. */
2882 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
2883 & (SEC_ALLOC | SEC_LOAD)) != 0
2884 && ! link_info.relocateable
2885 && strcmp (os->region->name, "*default*") == 0
2886 && lang_memory_region_list != NULL
2887 && (strcmp (lang_memory_region_list->name,
2889 || lang_memory_region_list->next != NULL))
2890 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2891 bfd_get_section_name (output_bfd,
2894 dot = os->region->current;
2896 if (os->section_alignment == -1)
2901 dot = align_power (dot,
2902 os->bfd_section->alignment_power);
2904 if (dot != olddot && config.warn_section_align)
2905 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2906 os->name, (unsigned int) (dot - olddot));
2913 r = exp_fold_tree (os->addr_tree,
2915 lang_allocating_phase_enum,
2917 if (r.valid_p == false)
2919 einfo (_("%F%S: non constant address expression for section %s\n"),
2922 dot = r.value + r.section->bfd_section->vma;
2925 /* The section starts here.
2926 First, align to what the section needs. */
2928 if (os->section_alignment != -1)
2929 dot = align_power (dot, os->section_alignment);
2931 bfd_set_section_vma (0, os->bfd_section, dot);
2933 os->bfd_section->output_offset = 0;
2936 lang_size_sections (os->children.head, os, &os->children.head,
2937 os->fill, dot, relax);
2939 /* Put the section within the requested block size, or
2940 align at the block boundary. */
2941 after = ALIGN_N (os->bfd_section->vma
2942 + os->bfd_section->_raw_size / opb,
2943 /* The coercion here is important, see ld.h. */
2944 (bfd_vma) os->block_value);
2946 if (bfd_is_abs_section (os->bfd_section))
2947 ASSERT (after == os->bfd_section->vma);
2949 os->bfd_section->_raw_size =
2950 (after - os->bfd_section->vma) * opb;
2951 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
2952 os->processed = true;
2954 /* Update dot in the region ?
2955 We only do this if the section is going to be allocated,
2956 since unallocated sections do not contribute to the region's
2957 overall size in memory.
2959 If the SEC_NEVER_LOAD bit is not set, it will affect the
2960 addresses of sections after it. We have to update
2962 if (os->region != (lang_memory_region_type *) NULL
2963 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
2964 & SEC_NEVER_LOAD) == 0
2965 || (bfd_get_section_flags (output_bfd, os->bfd_section)
2966 & (SEC_ALLOC | SEC_LOAD))))
2968 os->region->current = dot;
2970 /* Make sure the new address is within the region. */
2971 os_region_check (os, os->region, os->addr_tree,
2972 os->bfd_section->vma);
2974 /* If there's no load address specified, use the run
2975 region as the load region. */
2976 if (os->lma_region == NULL && os->load_base == NULL)
2977 os->lma_region = os->region;
2979 if (os->lma_region != NULL)
2981 if (os->load_base != NULL)
2983 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
2987 /* Don't allocate twice. */
2988 if (os->lma_region != os->region)
2990 /* Set load_base, which will be handled later. */
2992 exp_intop (os->lma_region->current);
2993 os->lma_region->current +=
2994 os->bfd_section->_raw_size / opb;
2995 os_region_check (os, os->lma_region, NULL,
2996 os->bfd_section->lma);
3004 case lang_constructors_statement_enum:
3005 dot = lang_size_sections (constructor_list.head,
3006 output_section_statement,
3007 &s->wild_statement.children.head,
3011 case lang_data_statement_enum:
3013 unsigned int size = 0;
3015 s->data_statement.output_vma =
3016 dot - output_section_statement->bfd_section->vma;
3017 s->data_statement.output_section =
3018 output_section_statement->bfd_section;
3020 switch (s->data_statement.type)
3041 output_section_statement->bfd_section->_raw_size += size;
3042 /* The output section gets contents, and then we inspect for
3043 any flags set in the input script which override any ALLOC. */
3044 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
3045 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
3047 output_section_statement->bfd_section->flags |=
3048 SEC_ALLOC | SEC_LOAD;
3053 case lang_reloc_statement_enum:
3057 s->reloc_statement.output_vma =
3058 dot - output_section_statement->bfd_section->vma;
3059 s->reloc_statement.output_section =
3060 output_section_statement->bfd_section;
3061 size = bfd_get_reloc_size (s->reloc_statement.howto);
3063 output_section_statement->bfd_section->_raw_size += size;
3067 case lang_wild_statement_enum:
3069 dot = lang_size_sections (s->wild_statement.children.head,
3070 output_section_statement,
3071 &s->wild_statement.children.head,
3076 case lang_object_symbols_statement_enum:
3077 link_info.create_object_symbols_section =
3078 output_section_statement->bfd_section;
3080 case lang_output_statement_enum:
3081 case lang_target_statement_enum:
3083 case lang_input_section_enum:
3087 i = (*prev)->input_section.section;
3090 if (i->_cooked_size == 0)
3091 i->_cooked_size = i->_raw_size;
3097 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3098 einfo (_("%P%F: can't relax section: %E\n"));
3102 dot = size_input_section (prev, output_section_statement,
3103 output_section_statement->fill, dot);
3106 case lang_input_statement_enum:
3108 case lang_fill_statement_enum:
3109 s->fill_statement.output_section =
3110 output_section_statement->bfd_section;
3112 fill = s->fill_statement.fill;
3114 case lang_assignment_statement_enum:
3116 bfd_vma newdot = dot;
3118 exp_fold_tree (s->assignment_statement.exp,
3119 output_section_statement,
3120 lang_allocating_phase_enum,
3126 if (output_section_statement == abs_output_section)
3128 /* If we don't have an output section, then just adjust
3129 the default memory address. */
3130 lang_memory_region_lookup ("*default*")->current = newdot;
3134 /* Insert a pad after this statement. We can't
3135 put the pad before when relaxing, in case the
3136 assignment references dot. */
3137 insert_pad (&s->header.next, fill, (newdot - dot) * opb,
3138 output_section_statement->bfd_section, dot);
3140 /* Don't neuter the pad below when relaxing. */
3149 case lang_padding_statement_enum:
3150 /* If this is the first time lang_size_sections is called,
3151 we won't have any padding statements. If this is the
3152 second or later passes when relaxing, we should allow
3153 padding to shrink. If padding is needed on this pass, it
3154 will be added back in. */
3155 s->padding_statement.size = 0;
3157 /* Make sure output_offset is valid. If relaxation shrinks
3158 the section and this pad isn't needed, it's possible to
3159 have output_offset larger than the final size of the
3160 section. bfd_set_section_contents will complain even for
3161 a pad size of zero. */
3162 s->padding_statement.output_offset
3163 = dot - output_section_statement->bfd_section->vma;
3166 case lang_group_statement_enum:
3167 dot = lang_size_sections (s->group_statement.children.head,
3168 output_section_statement,
3169 &s->group_statement.children.head,
3177 /* We can only get here when relaxing is turned on. */
3178 case lang_address_statement_enum:
3181 prev = &s->header.next;
3187 lang_do_assignments (s, output_section_statement, fill, dot)
3188 lang_statement_union_type *s;
3189 lang_output_section_statement_type *output_section_statement;
3193 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3194 ldfile_output_machine);
3196 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3198 switch (s->header.type)
3200 case lang_constructors_statement_enum:
3201 dot = lang_do_assignments (constructor_list.head,
3202 output_section_statement,
3207 case lang_output_section_statement_enum:
3209 lang_output_section_statement_type *os;
3211 os = &(s->output_section_statement);
3212 if (os->bfd_section != NULL)
3214 dot = os->bfd_section->vma;
3215 (void) lang_do_assignments (os->children.head, os,
3217 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3222 /* If nothing has been placed into the output section then
3223 it won't have a bfd_section. */
3224 if (os->bfd_section)
3226 os->bfd_section->lma
3227 = exp_get_abs_int (os->load_base, 0, "load base",
3228 lang_final_phase_enum);
3233 case lang_wild_statement_enum:
3235 dot = lang_do_assignments (s->wild_statement.children.head,
3236 output_section_statement,
3241 case lang_object_symbols_statement_enum:
3242 case lang_output_statement_enum:
3243 case lang_target_statement_enum:
3245 case lang_common_statement_enum:
3248 case lang_data_statement_enum:
3250 etree_value_type value;
3252 value = exp_fold_tree (s->data_statement.exp,
3254 lang_final_phase_enum, dot, &dot);
3255 s->data_statement.value = value.value;
3256 if (value.valid_p == false)
3257 einfo (_("%F%P: invalid data statement\n"));
3261 switch (s->data_statement.type)
3285 case lang_reloc_statement_enum:
3287 etree_value_type value;
3289 value = exp_fold_tree (s->reloc_statement.addend_exp,
3291 lang_final_phase_enum, dot, &dot);
3292 s->reloc_statement.addend_value = value.value;
3293 if (value.valid_p == false)
3294 einfo (_("%F%P: invalid reloc statement\n"));
3296 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
3299 case lang_input_section_enum:
3301 asection *in = s->input_section.section;
3303 if (in->_cooked_size != 0)
3304 dot += in->_cooked_size / opb;
3306 dot += in->_raw_size / opb;
3310 case lang_input_statement_enum:
3312 case lang_fill_statement_enum:
3313 fill = s->fill_statement.fill;
3315 case lang_assignment_statement_enum:
3317 exp_fold_tree (s->assignment_statement.exp,
3318 output_section_statement,
3319 lang_final_phase_enum,
3325 case lang_padding_statement_enum:
3326 dot += s->padding_statement.size / opb;
3329 case lang_group_statement_enum:
3330 dot = lang_do_assignments (s->group_statement.children.head,
3331 output_section_statement,
3339 case lang_address_statement_enum:
3347 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3348 operator .startof. (section_name), it produces an undefined symbol
3349 .startof.section_name. Similarly, when it sees
3350 .sizeof. (section_name), it produces an undefined symbol
3351 .sizeof.section_name. For all the output sections, we look for
3352 such symbols, and set them to the correct value. */
3359 if (link_info.relocateable)
3362 for (s = output_bfd->sections; s != NULL; s = s->next)
3364 const char *secname;
3366 struct bfd_link_hash_entry *h;
3368 secname = bfd_get_section_name (output_bfd, s);
3369 buf = xmalloc (10 + strlen (secname));
3371 sprintf (buf, ".startof.%s", secname);
3372 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3373 if (h != NULL && h->type == bfd_link_hash_undefined)
3375 h->type = bfd_link_hash_defined;
3376 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3377 h->u.def.section = bfd_abs_section_ptr;
3380 sprintf (buf, ".sizeof.%s", secname);
3381 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3382 if (h != NULL && h->type == bfd_link_hash_undefined)
3386 opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3387 ldfile_output_machine);
3388 h->type = bfd_link_hash_defined;
3389 if (s->_cooked_size != 0)
3390 h->u.def.value = s->_cooked_size / opb;
3392 h->u.def.value = s->_raw_size / opb;
3393 h->u.def.section = bfd_abs_section_ptr;
3403 struct bfd_link_hash_entry *h;
3406 if (link_info.relocateable || link_info.shared)
3411 if (entry_symbol == (char *) NULL)
3413 /* No entry has been specified. Look for start, but don't warn
3414 if we don't find it. */
3415 entry_symbol = "start";
3419 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
3420 if (h != (struct bfd_link_hash_entry *) NULL
3421 && (h->type == bfd_link_hash_defined
3422 || h->type == bfd_link_hash_defweak)
3423 && h->u.def.section->output_section != NULL)
3427 val = (h->u.def.value
3428 + bfd_get_section_vma (output_bfd,
3429 h->u.def.section->output_section)
3430 + h->u.def.section->output_offset);
3431 if (! bfd_set_start_address (output_bfd, val))
3432 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol);
3439 /* We couldn't find the entry symbol. Try parsing it as a
3441 val = bfd_scan_vma (entry_symbol, &send, 0);
3444 if (! bfd_set_start_address (output_bfd, val))
3445 einfo (_("%P%F: can't set start address\n"));
3451 /* Can't find the entry symbol, and it's not a number. Use
3452 the first address in the text section. */
3453 ts = bfd_get_section_by_name (output_bfd, ".text");
3454 if (ts != (asection *) NULL)
3457 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3458 entry_symbol, bfd_get_section_vma (output_bfd, ts));
3459 if (! bfd_set_start_address (output_bfd,
3460 bfd_get_section_vma (output_bfd,
3462 einfo (_("%P%F: can't set start address\n"));
3467 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3474 /* This is a small function used when we want to ignore errors from
3478 #ifdef ANSI_PROTOTYPES
3479 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
3481 ignore_bfd_errors (s)
3482 const char *s ATTRIBUTE_UNUSED;
3485 /* Don't do anything. */
3488 /* Check that the architecture of all the input files is compatible
3489 with the output file. Also call the backend to let it do any
3490 other checking that is needed. */
3495 lang_statement_union_type *file;
3497 const bfd_arch_info_type *compatible;
3499 for (file = file_chain.head;
3500 file != (lang_statement_union_type *) NULL;
3501 file = file->input_statement.next)
3503 input_bfd = file->input_statement.the_bfd;
3504 compatible = bfd_arch_get_compatible (input_bfd,
3506 if (compatible == NULL)
3508 if (command_line.warn_mismatch)
3509 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3510 bfd_printable_name (input_bfd), input_bfd,
3511 bfd_printable_name (output_bfd));
3513 else if (link_info.relocateable
3514 /* In general it is not possible to perform a relocatable
3515 link between differing object formats when the input
3516 file has relocations, because the relocations in the
3517 input format may not have equivalent representations in
3518 the output format (and besides BFD does not translate
3519 relocs for other link purposes than a final link). */
3520 && bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd)
3521 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
3522 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3523 bfd_get_target (input_bfd), input_bfd,
3524 bfd_get_target (output_bfd), output_bfd);
3525 else if (bfd_count_sections (input_bfd))
3527 /* If the input bfd has no contents, it shouldn't set the
3528 private data of the output bfd. */
3530 bfd_error_handler_type pfn = NULL;
3532 /* If we aren't supposed to warn about mismatched input
3533 files, temporarily set the BFD error handler to a
3534 function which will do nothing. We still want to call
3535 bfd_merge_private_bfd_data, since it may set up
3536 information which is needed in the output file. */
3537 if (! command_line.warn_mismatch)
3538 pfn = bfd_set_error_handler (ignore_bfd_errors);
3539 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3541 if (command_line.warn_mismatch)
3542 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3545 if (! command_line.warn_mismatch)
3546 bfd_set_error_handler (pfn);
3551 /* Look through all the global common symbols and attach them to the
3552 correct section. The -sort-common command line switch may be used
3553 to roughly sort the entries by size. */
3558 if (command_line.inhibit_common_definition)
3560 if (link_info.relocateable
3561 && ! command_line.force_common_definition)
3564 if (! config.sort_common)
3565 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3570 for (power = 4; power >= 0; power--)
3571 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3576 /* Place one common symbol in the correct section. */
3579 lang_one_common (h, info)
3580 struct bfd_link_hash_entry *h;
3583 unsigned int power_of_two;
3586 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3587 ldfile_output_machine);
3589 if (h->type != bfd_link_hash_common)
3593 power_of_two = h->u.c.p->alignment_power;
3595 if (config.sort_common
3596 && power_of_two < (unsigned int) *(int *) info)
3599 section = h->u.c.p->section;
3601 /* Increase the size of the section. */
3602 section->_cooked_size = ALIGN_N ((section->_cooked_size + opb - 1) / opb,
3603 (bfd_size_type) (1 << power_of_two)) * opb;
3605 /* Adjust the alignment if necessary. */
3606 if (power_of_two > section->alignment_power)
3607 section->alignment_power = power_of_two;
3609 /* Change the symbol from common to defined. */
3610 h->type = bfd_link_hash_defined;
3611 h->u.def.section = section;
3612 h->u.def.value = section->_cooked_size;
3614 /* Increase the size of the section. */
3615 section->_cooked_size += size;
3617 /* Make sure the section is allocated in memory, and make sure that
3618 it is no longer a common section. */
3619 section->flags |= SEC_ALLOC;
3620 section->flags &= ~SEC_IS_COMMON;
3622 if (config.map_file != NULL)
3624 static boolean header_printed;
3629 if (! header_printed)
3631 minfo (_("\nAllocating common symbols\n"));
3632 minfo (_("Common symbol size file\n\n"));
3633 header_printed = true;
3636 name = demangle (h->root.string);
3638 len = strlen (name);
3653 if (size <= 0xffffffff)
3654 sprintf (buf, "%lx", (unsigned long) size);
3656 sprintf_vma (buf, size);
3666 minfo ("%B\n", section->owner);
3672 /* Run through the input files and ensure that every input section has
3673 somewhere to go. If one is found without a destination then create
3674 an input request and place it into the statement tree. */
3677 lang_place_orphans ()
3679 LANG_FOR_EACH_INPUT_STATEMENT (file)
3683 for (s = file->the_bfd->sections;
3684 s != (asection *) NULL;
3687 if (s->output_section == (asection *) NULL)
3689 /* This section of the file is not attatched, root
3690 around for a sensible place for it to go. */
3692 if (file->just_syms_flag)
3694 /* We are only retrieving symbol values from this
3695 file. We want the symbols to act as though the
3696 values in the file are absolute. */
3697 s->output_section = bfd_abs_section_ptr;
3698 s->output_offset = s->vma;
3700 else if (strcmp (s->name, "COMMON") == 0)
3702 /* This is a lonely common section which must have
3703 come from an archive. We attach to the section
3704 with the wildcard. */
3705 if (! link_info.relocateable
3706 || command_line.force_common_definition)
3708 if (default_common_section == NULL)
3711 /* This message happens when using the
3712 svr3.ifile linker script, so I have
3714 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3716 default_common_section =
3717 lang_output_section_statement_lookup (".bss");
3720 lang_add_section (&default_common_section->children, s,
3721 default_common_section, file);
3724 else if (ldemul_place_orphan (file, s))
3728 lang_output_section_statement_type *os;
3730 os = lang_output_section_statement_lookup (s->name);
3731 lang_add_section (&os->children, s, os, file);
3739 lang_set_flags (ptr, flags, invert)
3740 lang_memory_region_type *ptr;
3744 flagword *ptr_flags;
3746 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
3752 *ptr_flags |= SEC_ALLOC;
3756 *ptr_flags |= SEC_READONLY;
3760 *ptr_flags |= SEC_DATA;
3764 *ptr_flags |= SEC_CODE;
3769 *ptr_flags |= SEC_LOAD;
3773 einfo (_("%P%F: invalid syntax in flags\n"));
3780 /* Call a function on each input file. This function will be called
3781 on an archive, but not on the elements. */
3784 lang_for_each_input_file (func)
3785 void (*func) PARAMS ((lang_input_statement_type *));
3787 lang_input_statement_type *f;
3789 for (f = (lang_input_statement_type *) input_file_chain.head;
3791 f = (lang_input_statement_type *) f->next_real_file)
3795 /* Call a function on each file. The function will be called on all
3796 the elements of an archive which are included in the link, but will
3797 not be called on the archive file itself. */
3800 lang_for_each_file (func)
3801 void (*func) PARAMS ((lang_input_statement_type *));
3803 LANG_FOR_EACH_INPUT_STATEMENT (f)
3814 lang_for_each_input_section (func)
3815 void (*func) PARAMS ((bfd *ab, asection *as));
3817 LANG_FOR_EACH_INPUT_STATEMENT (f)
3821 for (s = f->the_bfd->sections;
3822 s != (asection *) NULL;
3825 func (f->the_bfd, s);
3833 ldlang_add_file (entry)
3834 lang_input_statement_type *entry;
3838 lang_statement_append (&file_chain,
3839 (lang_statement_union_type *) entry,
3842 /* The BFD linker needs to have a list of all input BFDs involved in
3844 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
3845 ASSERT (entry->the_bfd != output_bfd);
3846 for (pp = &link_info.input_bfds;
3847 *pp != (bfd *) NULL;
3848 pp = &(*pp)->link_next)
3850 *pp = entry->the_bfd;
3851 entry->the_bfd->usrdata = (PTR) entry;
3852 bfd_set_gp_size (entry->the_bfd, g_switch_value);
3854 /* Look through the sections and check for any which should not be
3855 included in the link. We need to do this now, so that we can
3856 notice when the backend linker tries to report multiple
3857 definition errors for symbols which are in sections we aren't
3858 going to link. FIXME: It might be better to entirely ignore
3859 symbols which are defined in sections which are going to be
3860 discarded. This would require modifying the backend linker for
3861 each backend which might set the SEC_LINK_ONCE flag. If we do
3862 this, we should probably handle SEC_EXCLUDE in the same way. */
3864 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
3868 lang_add_output (name, from_script)
3872 /* Make -o on command line override OUTPUT in script. */
3873 if (had_output_filename == false || !from_script)
3875 output_filename = name;
3876 had_output_filename = true;
3880 static lang_output_section_statement_type *current_section;
3892 for (l = 0; l < 32; l++)
3894 if (i >= (unsigned int) x)
3902 lang_output_section_statement_type *
3903 lang_enter_output_section_statement (output_section_statement_name,
3904 address_exp, sectype, block_value,
3905 align, subalign, ebase)
3906 const char *output_section_statement_name;
3907 etree_type *address_exp;
3908 enum section_type sectype;
3909 bfd_vma block_value;
3911 etree_type *subalign;
3914 lang_output_section_statement_type *os;
3918 lang_output_section_statement_lookup (output_section_statement_name);
3920 /* Add this statement to tree. */
3922 add_statement (lang_output_section_statement_enum,
3923 output_section_statement);
3925 /* Make next things chain into subchain of this. */
3927 if (os->addr_tree == (etree_type *) NULL)
3929 os->addr_tree = address_exp;
3931 os->sectype = sectype;
3932 if (sectype != noload_section)
3933 os->flags = SEC_NO_FLAGS;
3935 os->flags = SEC_NEVER_LOAD;
3936 os->block_value = block_value ? block_value : 1;
3937 stat_ptr = &os->children;
3939 os->subsection_alignment =
3940 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
3941 os->section_alignment =
3942 topower (exp_get_value_int (align, -1, "section alignment", 0));
3944 os->load_base = ebase;
3951 lang_output_statement_type *new =
3952 new_stat (lang_output_statement, stat_ptr);
3954 new->name = output_filename;
3957 /* Reset the current counters in the regions. */
3960 reset_memory_regions ()
3962 lang_memory_region_type *p = lang_memory_region_list;
3965 for (p = lang_memory_region_list;
3966 p != (lang_memory_region_type *) NULL;
3969 p->old_length = (bfd_size_type) (p->current - p->origin);
3970 p->current = p->origin;
3973 for (o = output_bfd->sections; o != NULL; o = o->next)
3977 /* If the wild pattern was marked KEEP, the member sections
3978 should be as well. */
3981 gc_section_callback (ptr, sec, section, file, data)
3982 lang_wild_statement_type *ptr;
3983 struct wildcard_list *sec ATTRIBUTE_UNUSED;
3985 lang_input_statement_type *file ATTRIBUTE_UNUSED;
3986 PTR data ATTRIBUTE_UNUSED;
3988 if (ptr->keep_sections)
3989 section->flags |= SEC_KEEP;
3992 /* Handle a wild statement, marking it against GC. */
3996 lang_wild_statement_type *s;
3998 walk_wild (s, gc_section_callback, NULL);
4001 /* Iterate over sections marking them against GC. */
4004 lang_gc_sections_1 (s)
4005 lang_statement_union_type *s;
4007 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
4009 switch (s->header.type)
4011 case lang_wild_statement_enum:
4012 lang_gc_wild (&s->wild_statement);
4013 case lang_constructors_statement_enum:
4014 lang_gc_sections_1 (constructor_list.head);
4016 case lang_output_section_statement_enum:
4017 lang_gc_sections_1 (s->output_section_statement.children.head);
4019 case lang_group_statement_enum:
4020 lang_gc_sections_1 (s->group_statement.children.head);
4031 struct bfd_link_hash_entry *h;
4032 ldlang_undef_chain_list_type *ulist, fake_list_start;
4034 /* Keep all sections so marked in the link script. */
4036 lang_gc_sections_1 (statement_list.head);
4038 /* Keep all sections containing symbols undefined on the command-line.
4039 Handle the entry symbol at the same time. */
4041 if (entry_symbol != NULL)
4043 fake_list_start.next = ldlang_undef_chain_list_head;
4044 fake_list_start.name = (char *) entry_symbol;
4045 ulist = &fake_list_start;
4048 ulist = ldlang_undef_chain_list_head;
4050 for (; ulist; ulist = ulist->next)
4052 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
4053 false, false, false);
4055 if (h != (struct bfd_link_hash_entry *) NULL
4056 && (h->type == bfd_link_hash_defined
4057 || h->type == bfd_link_hash_defweak)
4058 && ! bfd_is_abs_section (h->u.def.section))
4060 h->u.def.section->flags |= SEC_KEEP;
4064 bfd_gc_sections (output_bfd, &link_info);
4070 lang_reasonable_defaults ();
4071 current_target = default_target;
4073 /* Open the output file. */
4074 lang_for_each_statement (ldlang_open_output);
4076 ldemul_create_output_section_statements ();
4078 /* Add to the hash table all undefineds on the command line. */
4079 lang_place_undefineds ();
4081 already_linked_table_init ();
4083 /* Create a bfd for each input file. */
4084 current_target = default_target;
4085 open_input_bfds (statement_list.head, false);
4087 ldemul_after_open ();
4089 already_linked_table_free ();
4091 /* Make sure that we're not mixing architectures. We call this
4092 after all the input files have been opened, but before we do any
4093 other processing, so that any operations merge_private_bfd_data
4094 does on the output file will be known during the rest of the
4098 /* Handle .exports instead of a version script if we're told to do so. */
4099 if (command_line.version_exports_section)
4100 lang_do_version_exports_section ();
4102 /* Build all sets based on the information gathered from the input
4104 ldctor_build_sets ();
4106 /* Remove unreferenced sections if asked to. */
4107 if (command_line.gc_sections)
4108 lang_gc_sections ();
4110 /* If there were any SEC_MERGE sections, finish their merging, so that
4111 section sizes can be computed. This has to be done after GC of sections,
4112 so that GCed sections are not merged, but before assigning output
4113 sections, since removing whole input sections is hard then. */
4114 bfd_merge_sections (output_bfd, &link_info);
4116 /* Size up the common data. */
4119 /* Run through the contours of the script and attach input sections
4120 to the correct output sections. */
4121 map_input_to_output_sections (statement_list.head, (char *) NULL,
4122 (lang_output_section_statement_type *) NULL);
4124 /* Find any sections not attached explicitly and handle them. */
4125 lang_place_orphans ();
4127 ldemul_before_allocation ();
4129 /* We must record the program headers before we try to fix the
4130 section positions, since they will affect SIZEOF_HEADERS. */
4131 lang_record_phdrs ();
4133 /* Size up the sections. */
4134 lang_size_sections (statement_list.head,
4136 &statement_list.head, 0, (bfd_vma) 0, NULL);
4138 /* Now run around and relax if we can. */
4139 if (command_line.relax)
4141 /* Keep relaxing until bfd_relax_section gives up. */
4142 boolean relax_again;
4146 reset_memory_regions ();
4148 relax_again = false;
4150 /* Note: pe-dll.c does something like this also. If you find
4151 you need to change this code, you probably need to change
4152 pe-dll.c also. DJ */
4154 /* Do all the assignments with our current guesses as to
4156 lang_do_assignments (statement_list.head,
4158 (fill_type) 0, (bfd_vma) 0);
4160 /* Perform another relax pass - this time we know where the
4161 globals are, so can make better guess. */
4162 lang_size_sections (statement_list.head,
4164 &(statement_list.head), 0, (bfd_vma) 0,
4167 while (relax_again);
4170 /* See if anything special should be done now we know how big
4172 ldemul_after_allocation ();
4174 /* Fix any .startof. or .sizeof. symbols. */
4175 lang_set_startof ();
4177 /* Do all the assignments, now that we know the final resting places
4178 of all the symbols. */
4180 lang_do_assignments (statement_list.head,
4182 (fill_type) 0, (bfd_vma) 0);
4184 /* Make sure that the section addresses make sense. */
4185 if (! link_info.relocateable
4186 && command_line.check_section_addresses)
4187 lang_check_section_addresses ();
4195 /* EXPORTED TO YACC */
4198 lang_add_wild (filespec, section_list, keep_sections)
4199 struct wildcard_spec *filespec;
4200 struct wildcard_list *section_list;
4201 boolean keep_sections;
4203 struct wildcard_list *curr, *next;
4204 lang_wild_statement_type *new;
4206 /* Reverse the list as the parser puts it back to front. */
4207 for (curr = section_list, section_list = NULL;
4209 section_list = curr, curr = next)
4211 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
4212 placed_commons = true;
4215 curr->next = section_list;
4218 if (filespec != NULL && filespec->name != NULL)
4220 if (strcmp (filespec->name, "*") == 0)
4221 filespec->name = NULL;
4222 else if (! wildcardp (filespec->name))
4223 lang_has_input_file = true;
4226 new = new_stat (lang_wild_statement, stat_ptr);
4227 new->filename = NULL;
4228 new->filenames_sorted = false;
4229 if (filespec != NULL)
4231 new->filename = filespec->name;
4232 new->filenames_sorted = filespec->sorted;
4234 new->section_list = section_list;
4235 new->keep_sections = keep_sections;
4236 lang_list_init (&new->children);
4240 lang_section_start (name, address)
4242 etree_type *address;
4244 lang_address_statement_type *ad;
4246 ad = new_stat (lang_address_statement, stat_ptr);
4247 ad->section_name = name;
4248 ad->address = address;
4251 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4252 because of a -e argument on the command line, or zero if this is
4253 called by ENTRY in a linker script. Command line arguments take
4257 lang_add_entry (name, cmdline)
4261 if (entry_symbol == NULL
4263 || ! entry_from_cmdline)
4265 entry_symbol = name;
4266 entry_from_cmdline = cmdline;
4271 lang_add_target (name)
4274 lang_target_statement_type *new = new_stat (lang_target_statement,
4290 map_option_f = true;
4301 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4308 lang_add_data (type, exp)
4310 union etree_union *exp;
4313 lang_data_statement_type *new = new_stat (lang_data_statement,
4321 /* Create a new reloc statement. RELOC is the BFD relocation type to
4322 generate. HOWTO is the corresponding howto structure (we could
4323 look this up, but the caller has already done so). SECTION is the
4324 section to generate a reloc against, or NAME is the name of the
4325 symbol to generate a reloc against. Exactly one of SECTION and
4326 NAME must be NULL. ADDEND is an expression for the addend. */
4329 lang_add_reloc (reloc, howto, section, name, addend)
4330 bfd_reloc_code_real_type reloc;
4331 reloc_howto_type *howto;
4334 union etree_union *addend;
4336 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
4340 p->section = section;
4342 p->addend_exp = addend;
4344 p->addend_value = 0;
4345 p->output_section = NULL;
4349 lang_assignment_statement_type *
4350 lang_add_assignment (exp)
4353 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4361 lang_add_attribute (attribute)
4362 enum statement_enum attribute;
4364 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4371 if (startup_file != (char *) NULL)
4373 einfo (_("%P%Fmultiple STARTUP files\n"));
4375 first_file->filename = name;
4376 first_file->local_sym_name = name;
4377 first_file->real = true;
4379 startup_file = name;
4386 lang_float_flag = maybe;
4390 lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
4392 const char *memspec;
4393 struct lang_output_section_phdr_list *phdrs;
4394 const char *lma_memspec;
4396 current_section->fill = fill;
4397 current_section->region = lang_memory_region_lookup (memspec);
4398 if (strcmp (lma_memspec, "*default*") != 0)
4400 current_section->lma_region = lang_memory_region_lookup (lma_memspec);
4401 /* If no runtime region has been given, but the load region has
4402 been, use the load region. */
4403 if (strcmp (memspec, "*default*") == 0)
4404 current_section->region = lang_memory_region_lookup (lma_memspec);
4406 current_section->phdrs = phdrs;
4407 stat_ptr = &statement_list;
4410 /* Create an absolute symbol with the given name with the value of the
4411 address of first byte of the section named.
4413 If the symbol already exists, then do nothing. */
4416 lang_abs_symbol_at_beginning_of (secname, name)
4417 const char *secname;
4420 struct bfd_link_hash_entry *h;
4422 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4423 if (h == (struct bfd_link_hash_entry *) NULL)
4424 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4426 if (h->type == bfd_link_hash_new
4427 || h->type == bfd_link_hash_undefined)
4431 h->type = bfd_link_hash_defined;
4433 sec = bfd_get_section_by_name (output_bfd, secname);
4434 if (sec == (asection *) NULL)
4437 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4439 h->u.def.section = bfd_abs_section_ptr;
4443 /* Create an absolute symbol with the given name with the value of the
4444 address of the first byte after the end of the section named.
4446 If the symbol already exists, then do nothing. */
4449 lang_abs_symbol_at_end_of (secname, name)
4450 const char *secname;
4453 struct bfd_link_hash_entry *h;
4455 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4456 if (h == (struct bfd_link_hash_entry *) NULL)
4457 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4459 if (h->type == bfd_link_hash_new
4460 || h->type == bfd_link_hash_undefined)
4464 h->type = bfd_link_hash_defined;
4466 sec = bfd_get_section_by_name (output_bfd, secname);
4467 if (sec == (asection *) NULL)
4470 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4471 + bfd_section_size (output_bfd, sec) /
4472 bfd_octets_per_byte (output_bfd));
4474 h->u.def.section = bfd_abs_section_ptr;
4479 lang_statement_append (list, element, field)
4480 lang_statement_list_type *list;
4481 lang_statement_union_type *element;
4482 lang_statement_union_type **field;
4484 *(list->tail) = element;
4488 /* Set the output format type. -oformat overrides scripts. */
4491 lang_add_output_format (format, big, little, from_script)
4497 if (output_target == NULL || !from_script)
4499 if (command_line.endian == ENDIAN_BIG
4502 else if (command_line.endian == ENDIAN_LITTLE
4506 output_target = format;
4510 /* Enter a group. This creates a new lang_group_statement, and sets
4511 stat_ptr to build new statements within the group. */
4516 lang_group_statement_type *g;
4518 g = new_stat (lang_group_statement, stat_ptr);
4519 lang_list_init (&g->children);
4520 stat_ptr = &g->children;
4523 /* Leave a group. This just resets stat_ptr to start writing to the
4524 regular list of statements again. Note that this will not work if
4525 groups can occur inside anything else which can adjust stat_ptr,
4526 but currently they can't. */
4531 stat_ptr = &statement_list;
4534 /* Add a new program header. This is called for each entry in a PHDRS
4535 command in a linker script. */
4538 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4546 struct lang_phdr *n, **pp;
4548 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4551 n->type = exp_get_value_int (type, 0, "program header type",
4552 lang_final_phase_enum);
4553 n->filehdr = filehdr;
4558 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4563 /* Record the program header information in the output BFD. FIXME: We
4564 should not be calling an ELF specific function here. */
4567 lang_record_phdrs ()
4571 struct lang_output_section_phdr_list *last;
4572 struct lang_phdr *l;
4573 lang_statement_union_type *u;
4576 secs = (asection **) xmalloc (alc * sizeof (asection *));
4578 for (l = lang_phdr_list; l != NULL; l = l->next)
4585 for (u = lang_output_section_statement.head;
4587 u = u->output_section_statement.next)
4589 lang_output_section_statement_type *os;
4590 struct lang_output_section_phdr_list *pl;
4592 os = &u->output_section_statement;
4599 if (os->sectype == noload_section
4600 || os->bfd_section == NULL
4601 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4606 if (os->bfd_section == NULL)
4609 for (; pl != NULL; pl = pl->next)
4611 if (strcmp (pl->name, l->name) == 0)
4616 secs = ((asection **)
4617 xrealloc (secs, alc * sizeof (asection *)));
4619 secs[c] = os->bfd_section;
4626 if (l->flags == NULL)
4629 flags = exp_get_vma (l->flags, 0, "phdr flags",
4630 lang_final_phase_enum);
4635 at = exp_get_vma (l->at, 0, "phdr load address",
4636 lang_final_phase_enum);
4638 if (! bfd_record_phdr (output_bfd, l->type,
4639 l->flags != NULL, flags, l->at != NULL,
4640 at, l->filehdr, l->phdrs, c, secs))
4641 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4646 /* Make sure all the phdr assignments succeeded. */
4647 for (u = lang_output_section_statement.head;
4649 u = u->output_section_statement.next)
4651 struct lang_output_section_phdr_list *pl;
4653 if (u->output_section_statement.bfd_section == NULL)
4656 for (pl = u->output_section_statement.phdrs;
4659 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4660 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4661 u->output_section_statement.name, pl->name);
4665 /* Record a list of sections which may not be cross referenced. */
4668 lang_add_nocrossref (l)
4669 struct lang_nocrossref *l;
4671 struct lang_nocrossrefs *n;
4673 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4674 n->next = nocrossref_list;
4676 nocrossref_list = n;
4678 /* Set notice_all so that we get informed about all symbols. */
4679 link_info.notice_all = true;
4682 /* Overlay handling. We handle overlays with some static variables. */
4684 /* The overlay virtual address. */
4685 static etree_type *overlay_vma;
4687 /* The overlay load address. */
4688 static etree_type *overlay_lma;
4690 /* Whether nocrossrefs is set for this overlay. */
4691 static int overlay_nocrossrefs;
4693 /* An expression for the maximum section size seen so far. */
4694 static etree_type *overlay_max;
4696 /* A list of all the sections in this overlay. */
4698 struct overlay_list {
4699 struct overlay_list *next;
4700 lang_output_section_statement_type *os;
4703 static struct overlay_list *overlay_list;
4705 /* Start handling an overlay. */
4708 lang_enter_overlay (vma_expr, lma_expr, nocrossrefs)
4709 etree_type *vma_expr;
4710 etree_type *lma_expr;
4713 /* The grammar should prevent nested overlays from occurring. */
4714 ASSERT (overlay_vma == NULL
4715 && overlay_lma == NULL
4716 && overlay_list == NULL
4717 && overlay_max == NULL);
4719 overlay_vma = vma_expr;
4720 overlay_lma = lma_expr;
4721 overlay_nocrossrefs = nocrossrefs;
4724 /* Start a section in an overlay. We handle this by calling
4725 lang_enter_output_section_statement with the correct VMA and LMA. */
4728 lang_enter_overlay_section (name)
4731 struct overlay_list *n;
4734 lang_enter_output_section_statement (name, overlay_vma, normal_section,
4735 0, 0, 0, overlay_lma);
4737 /* If this is the first section, then base the VMA and LMA of future
4738 sections on this one. This will work correctly even if `.' is
4739 used in the addresses. */
4740 if (overlay_list == NULL)
4742 overlay_vma = exp_nameop (ADDR, name);
4743 overlay_lma = exp_nameop (LOADADDR, name);
4746 /* Remember the section. */
4747 n = (struct overlay_list *) xmalloc (sizeof *n);
4748 n->os = current_section;
4749 n->next = overlay_list;
4752 size = exp_nameop (SIZEOF, name);
4754 /* Adjust the LMA for the next section. */
4755 overlay_lma = exp_binop ('+', overlay_lma, size);
4757 /* Arrange to work out the maximum section end address. */
4758 if (overlay_max == NULL)
4761 overlay_max = exp_binop (MAX_K, overlay_max, size);
4764 /* Finish a section in an overlay. There isn't any special to do
4768 lang_leave_overlay_section (fill, phdrs)
4770 struct lang_output_section_phdr_list *phdrs;
4777 name = current_section->name;
4779 lang_leave_output_section_statement (fill, "*default*",
4780 phdrs, "*default*");
4782 /* Define the magic symbols. */
4784 clean = xmalloc (strlen (name) + 1);
4786 for (s1 = name; *s1 != '\0'; s1++)
4787 if (ISALNUM (*s1) || *s1 == '_')
4791 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4792 sprintf (buf, "__load_start_%s", clean);
4793 lang_add_assignment (exp_assop ('=', buf,
4794 exp_nameop (LOADADDR, name)));
4796 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4797 sprintf (buf, "__load_stop_%s", clean);
4798 lang_add_assignment (exp_assop ('=', buf,
4800 exp_nameop (LOADADDR, name),
4801 exp_nameop (SIZEOF, name))));
4806 /* Finish an overlay. If there are any overlay wide settings, this
4807 looks through all the sections in the overlay and sets them. */
4810 lang_leave_overlay (fill, memspec, phdrs, lma_memspec)
4812 const char *memspec;
4813 struct lang_output_section_phdr_list *phdrs;
4814 const char *lma_memspec;
4816 lang_memory_region_type *region;
4817 lang_memory_region_type * default_region;
4818 lang_memory_region_type *lma_region;
4819 struct overlay_list *l;
4820 struct lang_nocrossref *nocrossref;
4822 default_region = lang_memory_region_lookup ("*default*");
4824 if (memspec == NULL)
4827 region = lang_memory_region_lookup (memspec);
4829 if (lma_memspec == NULL)
4832 lma_region = lang_memory_region_lookup (lma_memspec);
4839 struct overlay_list *next;
4841 if (fill != 0 && l->os->fill == 0)
4844 /* Assign a region to the sections, if one has been specified.
4845 Override the assignment of the default section, but not
4847 if (region != NULL &&
4848 (l->os->region == NULL ||
4849 l->os->region == default_region))
4850 l->os->region = region;
4852 /* We only set lma_region for the first overlay section, as
4853 subsequent overlay sections will have load_base set relative
4854 to the first section. Also, don't set lma_region if
4855 load_base is specified. FIXME: There should really be a test
4856 that `AT ( LDADDR )' doesn't conflict with `AT >LMA_REGION'
4857 rather than letting LDADDR simply override LMA_REGION. */
4858 if (lma_region != NULL && l->os->lma_region == NULL
4859 && l->next == NULL && l->os->load_base == NULL)
4860 l->os->lma_region = lma_region;
4862 if (phdrs != NULL && l->os->phdrs == NULL)
4863 l->os->phdrs = phdrs;
4865 if (overlay_nocrossrefs)
4867 struct lang_nocrossref *nc;
4869 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
4870 nc->name = l->os->name;
4871 nc->next = nocrossref;
4880 if (nocrossref != NULL)
4881 lang_add_nocrossref (nocrossref);
4883 /* Update . for the end of the overlay. */
4884 lang_add_assignment (exp_assop ('=', ".",
4885 exp_binop ('+', overlay_vma, overlay_max)));
4889 overlay_nocrossrefs = 0;
4890 overlay_list = NULL;
4894 /* Version handling. This is only useful for ELF. */
4896 /* This global variable holds the version tree that we build. */
4898 struct bfd_elf_version_tree *lang_elf_version_info;
4901 lang_vers_match_lang_c (expr, sym)
4902 struct bfd_elf_version_expr *expr;
4905 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4907 return fnmatch (expr->pattern, sym, 0) == 0;
4911 lang_vers_match_lang_cplusplus (expr, sym)
4912 struct bfd_elf_version_expr *expr;
4918 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4921 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
4924 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
4925 Should we early out false in this case? */
4926 result = fnmatch (expr->pattern, sym, 0) == 0;
4930 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
4938 lang_vers_match_lang_java (expr, sym)
4939 struct bfd_elf_version_expr *expr;
4945 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4948 alt_sym = cplus_demangle (sym, DMGL_JAVA);
4951 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
4952 Should we early out false in this case? */
4953 result = fnmatch (expr->pattern, sym, 0) == 0;
4957 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
4964 /* This is called for each variable name or match expression. */
4966 struct bfd_elf_version_expr *
4967 lang_new_vers_regex (orig, new, lang)
4968 struct bfd_elf_version_expr *orig;
4972 struct bfd_elf_version_expr *ret;
4974 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
4978 if (lang == NULL || strcasecmp (lang, "C") == 0)
4979 ret->match = lang_vers_match_lang_c;
4980 else if (strcasecmp (lang, "C++") == 0)
4981 ret->match = lang_vers_match_lang_cplusplus;
4982 else if (strcasecmp (lang, "Java") == 0)
4983 ret->match = lang_vers_match_lang_java;
4986 einfo (_("%X%P: unknown language `%s' in version information\n"),
4988 ret->match = lang_vers_match_lang_c;
4994 /* This is called for each set of variable names and match
4997 struct bfd_elf_version_tree *
4998 lang_new_vers_node (globals, locals)
4999 struct bfd_elf_version_expr *globals;
5000 struct bfd_elf_version_expr *locals;
5002 struct bfd_elf_version_tree *ret;
5004 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
5008 ret->globals = globals;
5009 ret->locals = locals;
5011 ret->name_indx = (unsigned int) -1;
5016 /* This static variable keeps track of version indices. */
5018 static int version_index;
5020 /* This is called when we know the name and dependencies of the
5024 lang_register_vers_node (name, version, deps)
5026 struct bfd_elf_version_tree *version;
5027 struct bfd_elf_version_deps *deps;
5029 struct bfd_elf_version_tree *t, **pp;
5030 struct bfd_elf_version_expr *e1;
5032 /* Make sure this node has a unique name. */
5033 for (t = lang_elf_version_info; t != NULL; t = t->next)
5034 if (strcmp (t->name, name) == 0)
5035 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
5037 /* Check the global and local match names, and make sure there
5038 aren't any duplicates. */
5040 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
5042 for (t = lang_elf_version_info; t != NULL; t = t->next)
5044 struct bfd_elf_version_expr *e2;
5046 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
5047 if (strcmp (e1->pattern, e2->pattern) == 0)
5048 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5053 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
5055 for (t = lang_elf_version_info; t != NULL; t = t->next)
5057 struct bfd_elf_version_expr *e2;
5059 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
5060 if (strcmp (e1->pattern, e2->pattern) == 0)
5061 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5066 version->deps = deps;
5067 version->name = name;
5069 version->vernum = version_index;
5071 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
5076 /* This is called when we see a version dependency. */
5078 struct bfd_elf_version_deps *
5079 lang_add_vers_depend (list, name)
5080 struct bfd_elf_version_deps *list;
5083 struct bfd_elf_version_deps *ret;
5084 struct bfd_elf_version_tree *t;
5086 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
5089 for (t = lang_elf_version_info; t != NULL; t = t->next)
5091 if (strcmp (t->name, name) == 0)
5093 ret->version_needed = t;
5098 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5104 lang_do_version_exports_section ()
5106 struct bfd_elf_version_expr *greg = NULL, *lreg;
5108 LANG_FOR_EACH_INPUT_STATEMENT (is)
5110 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5117 len = bfd_section_size (is->the_bfd, sec);
5118 contents = xmalloc (len);
5119 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
5120 einfo (_("%X%P: unable to read .exports section contents\n"), sec);
5123 while (p < contents + len)
5125 greg = lang_new_vers_regex (greg, p, NULL);
5126 p = strchr (p, '\0') + 1;
5129 /* Do not free the contents, as we used them creating the regex. */
5131 /* Do not include this section in the link. */
5132 bfd_set_section_flags (is->the_bfd, sec,
5133 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5136 lreg = lang_new_vers_regex (NULL, "*", NULL);
5137 lang_register_vers_node (command_line.version_exports_section,
5138 lang_new_vers_node (greg, lreg), NULL);
5142 lang_add_unique (name)
5145 struct unique_sections *ent;
5147 for (ent = unique_section_list; ent; ent = ent->next)
5148 if (strcmp (ent->name, name) == 0)
5151 ent = (struct unique_sections *) xmalloc (sizeof *ent);
5152 ent->name = xstrdup (name);
5153 ent->next = unique_section_list;
5154 unique_section_list = ent;