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 #define offsetof(TYPE,MEMBER) ((size_t)&(((TYPE*)0)->MEMBER))
48 static lang_statement_union_type *new_statement
49 PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
52 static struct obstack stat_obstack;
54 #define obstack_chunk_alloc xmalloc
55 #define obstack_chunk_free free
56 static const char *startup_file;
57 static lang_statement_list_type input_file_chain;
58 static boolean placed_commons = false;
59 static lang_output_section_statement_type *default_common_section;
60 static boolean map_option_f;
61 static bfd_vma print_dot;
62 static lang_input_statement_type *first_file;
63 static const char *current_target;
64 static const char *output_target;
65 static lang_statement_list_type statement_list;
66 static struct lang_phdr *lang_phdr_list;
68 static void lang_for_each_statement_worker
69 PARAMS ((void (*) (lang_statement_union_type *),
70 lang_statement_union_type *));
71 static lang_input_statement_type *new_afile
72 PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
73 static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
74 static void lang_map_flags PARAMS ((flagword));
75 static void init_os PARAMS ((lang_output_section_statement_type *));
76 static void exp_init_os PARAMS ((etree_type *));
77 static void section_already_linked PARAMS ((bfd *, asection *, PTR));
78 static struct bfd_hash_entry *already_linked_newfunc
79 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
80 static void already_linked_table_init PARAMS ((void));
81 static void already_linked_table_free PARAMS ((void));
82 static boolean wildcardp PARAMS ((const char *));
83 static lang_statement_union_type *wild_sort
84 PARAMS ((lang_wild_statement_type *, struct wildcard_list *,
85 lang_input_statement_type *, asection *));
86 static void output_section_callback
87 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
88 lang_input_statement_type *, PTR));
89 static lang_input_statement_type *lookup_name PARAMS ((const char *));
90 static boolean load_symbols
91 PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
93 PARAMS ((lang_wild_statement_type *,
94 const char *, lang_output_section_statement_type *));
95 static bfd *open_output PARAMS ((const char *));
96 static void ldlang_open_output PARAMS ((lang_statement_union_type *));
97 static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
98 static void lang_reasonable_defaults PARAMS ((void));
99 static void insert_undefined PARAMS ((const char *));
100 static void lang_place_undefineds PARAMS ((void));
101 static void map_input_to_output_sections
102 PARAMS ((lang_statement_union_type *, const char *,
103 lang_output_section_statement_type *));
104 static void strip_excluded_output_sections PARAMS ((void));
105 static void print_output_section_statement
106 PARAMS ((lang_output_section_statement_type *));
107 static void print_assignment
108 PARAMS ((lang_assignment_statement_type *,
109 lang_output_section_statement_type *));
110 static void print_input_statement PARAMS ((lang_input_statement_type *));
111 static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
112 static void print_input_section PARAMS ((lang_input_section_type *));
113 static void print_fill_statement PARAMS ((lang_fill_statement_type *));
114 static void print_data_statement PARAMS ((lang_data_statement_type *));
115 static void print_address_statement PARAMS ((lang_address_statement_type *));
116 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
117 static void print_padding_statement PARAMS ((lang_padding_statement_type *));
118 static void print_wild_statement
119 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
120 static void print_group
121 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
122 static void print_statement
123 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
124 static void print_statement_list
125 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
126 static void print_statements PARAMS ((void));
127 static void insert_pad
128 PARAMS ((lang_statement_union_type **, fill_type *,
129 unsigned int, asection *, bfd_vma));
130 static bfd_vma size_input_section
131 PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
132 fill_type *, bfd_vma));
133 static void lang_finish PARAMS ((void));
134 static void ignore_bfd_errors PARAMS ((const char *, ...));
135 static void lang_check PARAMS ((void));
136 static void lang_common PARAMS ((void));
137 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
138 static void lang_place_orphans PARAMS ((void));
139 static int topower PARAMS ((int));
140 static void lang_set_startof PARAMS ((void));
141 static void gc_section_callback
142 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
143 lang_input_statement_type *, PTR));
144 static void lang_get_regions PARAMS ((struct memory_region_struct **,
145 struct memory_region_struct **,
146 const char *, const char *, int));
147 static void lang_record_phdrs PARAMS ((void));
148 static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
149 static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
150 static void lang_gc_sections PARAMS ((void));
151 static int lang_vers_match_lang_c
152 PARAMS ((struct bfd_elf_version_expr *, const char *));
153 static int lang_vers_match_lang_cplusplus
154 PARAMS ((struct bfd_elf_version_expr *, const char *));
155 static int lang_vers_match_lang_java
156 PARAMS ((struct bfd_elf_version_expr *, const char *));
157 static void lang_do_version_exports_section PARAMS ((void));
158 static void lang_check_section_addresses PARAMS ((void));
159 static void os_region_check
160 PARAMS ((lang_output_section_statement_type *,
161 struct memory_region_struct *, etree_type *, bfd_vma));
162 static bfd_vma lang_size_sections_1
163 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *,
164 lang_statement_union_type **, fill_type *, bfd_vma, boolean *));
166 typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
167 struct wildcard_list *,
169 lang_input_statement_type *,
171 static void walk_wild
172 PARAMS ((lang_wild_statement_type *, callback_t, PTR));
173 static void walk_wild_section
174 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
176 static void walk_wild_file
177 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
180 static int get_target PARAMS ((const bfd_target *, PTR));
181 static void stricpy PARAMS ((char *, char *));
182 static void strcut PARAMS ((char *, char *));
183 static int name_compare PARAMS ((char *, char *));
184 static int closest_target_match PARAMS ((const bfd_target *, PTR));
185 static char * get_first_input_target PARAMS ((void));
188 lang_output_section_statement_type *abs_output_section;
189 lang_statement_list_type lang_output_section_statement;
190 lang_statement_list_type *stat_ptr = &statement_list;
191 lang_statement_list_type file_chain = { NULL, NULL };
192 struct bfd_sym_chain entry_symbol = { NULL, NULL };
193 const char *entry_section = ".text";
194 boolean entry_from_cmdline;
195 boolean lang_has_input_file = false;
196 boolean had_output_filename = false;
197 boolean lang_float_flag = false;
198 boolean delete_output_file_on_failure = false;
199 struct lang_nocrossrefs *nocrossref_list;
200 struct unique_sections *unique_section_list;
202 etree_type *base; /* Relocation base - or null */
204 #if defined (__STDC__) || defined (ALMOST_STDC)
205 #define cat(a,b) a##b
207 #define cat(a,b) a/**/b
210 /* Don't beautify the line below with "innocent" whitespace, it breaks
211 the K&R C preprocessor! */
212 #define new_stat(x, y) \
213 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
215 #define outside_section_address(q) \
216 ((q)->output_offset + (q)->output_section->vma)
218 #define outside_symbol_address(q) \
219 ((q)->value + outside_section_address (q->section))
221 #define SECTION_NAME_MAP_LENGTH (16)
227 return obstack_alloc (&stat_obstack, size);
231 unique_section_p (secnam)
234 struct unique_sections *unam;
236 for (unam = unique_section_list; unam; unam = unam->next)
237 if (wildcardp (unam->name)
238 ? fnmatch (unam->name, secnam, 0) == 0
239 : strcmp (unam->name, secnam) == 0)
247 /* Generic traversal routines for finding matching sections. */
250 walk_wild_section (ptr, file, callback, data)
251 lang_wild_statement_type *ptr;
252 lang_input_statement_type *file;
258 if (file->just_syms_flag)
261 for (s = file->the_bfd->sections; s != NULL; s = s->next)
263 struct wildcard_list *sec;
265 sec = ptr->section_list;
267 (*callback) (ptr, sec, s, file, data);
271 boolean skip = false;
272 struct name_list *list_tmp;
274 /* Don't process sections from files which were
276 for (list_tmp = sec->spec.exclude_name_list;
278 list_tmp = list_tmp->next)
280 if (wildcardp (list_tmp->name))
281 skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
283 skip = strcmp (list_tmp->name, file->filename) == 0;
285 /* If this file is part of an archive, and the archive is
286 excluded, exclude this file. */
287 if (! skip && file->the_bfd != NULL
288 && file->the_bfd->my_archive != NULL
289 && file->the_bfd->my_archive->filename != NULL)
291 if (wildcardp (list_tmp->name))
292 skip = fnmatch (list_tmp->name,
293 file->the_bfd->my_archive->filename,
296 skip = strcmp (list_tmp->name,
297 file->the_bfd->my_archive->filename) == 0;
304 if (!skip && sec->spec.name != NULL)
306 const char *sname = bfd_get_section_name (file->the_bfd, s);
308 if (wildcardp (sec->spec.name))
309 skip = fnmatch (sec->spec.name, sname, 0) != 0;
311 skip = strcmp (sec->spec.name, sname) != 0;
315 (*callback) (ptr, sec, s, file, data);
322 /* Handle a wild statement for a single file F. */
325 walk_wild_file (s, f, callback, data)
326 lang_wild_statement_type *s;
327 lang_input_statement_type *f;
331 if (f->the_bfd == NULL
332 || ! bfd_check_format (f->the_bfd, bfd_archive))
333 walk_wild_section (s, f, callback, data);
338 /* This is an archive file. We must map each member of the
339 archive separately. */
340 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
341 while (member != NULL)
343 /* When lookup_name is called, it will call the add_symbols
344 entry point for the archive. For each element of the
345 archive which is included, BFD will call ldlang_add_file,
346 which will set the usrdata field of the member to the
347 lang_input_statement. */
348 if (member->usrdata != NULL)
350 walk_wild_section (s,
351 (lang_input_statement_type *) member->usrdata,
355 member = bfd_openr_next_archived_file (f->the_bfd, member);
361 walk_wild (s, callback, data)
362 lang_wild_statement_type *s;
366 const char *file_spec = s->filename;
368 if (file_spec == NULL)
370 /* Perform the iteration over all files in the list. */
371 LANG_FOR_EACH_INPUT_STATEMENT (f)
373 walk_wild_file (s, f, callback, data);
376 else if (wildcardp (file_spec))
378 LANG_FOR_EACH_INPUT_STATEMENT (f)
380 if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
381 walk_wild_file (s, f, callback, data);
386 lang_input_statement_type *f;
388 /* Perform the iteration over a single file. */
389 f = lookup_name (file_spec);
391 walk_wild_file (s, f, callback, data);
395 /* lang_for_each_statement walks the parse tree and calls the provided
396 function for each node. */
399 lang_for_each_statement_worker (func, s)
400 void (*func) PARAMS ((lang_statement_union_type *));
401 lang_statement_union_type *s;
403 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
407 switch (s->header.type)
409 case lang_constructors_statement_enum:
410 lang_for_each_statement_worker (func, constructor_list.head);
412 case lang_output_section_statement_enum:
413 lang_for_each_statement_worker
415 s->output_section_statement.children.head);
417 case lang_wild_statement_enum:
418 lang_for_each_statement_worker
420 s->wild_statement.children.head);
422 case lang_group_statement_enum:
423 lang_for_each_statement_worker (func,
424 s->group_statement.children.head);
426 case lang_data_statement_enum:
427 case lang_reloc_statement_enum:
428 case lang_object_symbols_statement_enum:
429 case lang_output_statement_enum:
430 case lang_target_statement_enum:
431 case lang_input_section_enum:
432 case lang_input_statement_enum:
433 case lang_assignment_statement_enum:
434 case lang_padding_statement_enum:
435 case lang_address_statement_enum:
436 case lang_fill_statement_enum:
446 lang_for_each_statement (func)
447 void (*func) PARAMS ((lang_statement_union_type *));
449 lang_for_each_statement_worker (func, statement_list.head);
452 /*----------------------------------------------------------------------*/
455 lang_list_init (list)
456 lang_statement_list_type *list;
458 list->head = (lang_statement_union_type *) NULL;
459 list->tail = &list->head;
462 /* Build a new statement node for the parse tree. */
464 static lang_statement_union_type *
465 new_statement (type, size, list)
466 enum statement_enum type;
468 lang_statement_list_type *list;
470 lang_statement_union_type *new = (lang_statement_union_type *)
473 new->header.type = type;
474 new->header.next = (lang_statement_union_type *) NULL;
475 lang_statement_append (list, new, &new->header.next);
479 /* Build a new input file node for the language. There are several
480 ways in which we treat an input file, eg, we only look at symbols,
481 or prefix it with a -l etc.
483 We can be supplied with requests for input files more than once;
484 they may, for example be split over serveral lines like foo.o(.text)
485 foo.o(.data) etc, so when asked for a file we check that we haven't
486 got it already so we don't duplicate the bfd. */
488 static lang_input_statement_type *
489 new_afile (name, file_type, target, add_to_list)
491 lang_input_file_enum_type file_type;
495 lang_input_statement_type *p;
498 p = new_stat (lang_input_statement, stat_ptr);
501 p = ((lang_input_statement_type *)
502 stat_alloc (sizeof (lang_input_statement_type)));
503 p->header.next = NULL;
506 lang_has_input_file = true;
510 case lang_input_file_is_symbols_only_enum:
512 p->is_archive = false;
514 p->local_sym_name = name;
515 p->just_syms_flag = true;
516 p->search_dirs_flag = false;
518 case lang_input_file_is_fake_enum:
520 p->is_archive = false;
522 p->local_sym_name = name;
523 p->just_syms_flag = false;
524 p->search_dirs_flag = false;
526 case lang_input_file_is_l_enum:
527 p->is_archive = true;
530 p->local_sym_name = concat ("-l", name, (const char *) NULL);
531 p->just_syms_flag = false;
532 p->search_dirs_flag = true;
534 case lang_input_file_is_marker_enum:
536 p->is_archive = false;
538 p->local_sym_name = name;
539 p->just_syms_flag = false;
540 p->search_dirs_flag = true;
542 case lang_input_file_is_search_file_enum:
544 p->is_archive = false;
546 p->local_sym_name = name;
547 p->just_syms_flag = false;
548 p->search_dirs_flag = true;
550 case lang_input_file_is_file_enum:
552 p->is_archive = false;
554 p->local_sym_name = name;
555 p->just_syms_flag = false;
556 p->search_dirs_flag = false;
561 p->the_bfd = (bfd *) NULL;
562 p->asymbols = (asymbol **) NULL;
563 p->next_real_file = (lang_statement_union_type *) NULL;
564 p->next = (lang_statement_union_type *) NULL;
566 p->dynamic = config.dynamic_link;
567 p->whole_archive = whole_archive;
569 lang_statement_append (&input_file_chain,
570 (lang_statement_union_type *) p,
575 lang_input_statement_type *
576 lang_add_input_file (name, file_type, target)
578 lang_input_file_enum_type file_type;
581 lang_has_input_file = true;
582 return new_afile (name, file_type, target, true);
585 /* Build enough state so that the parser can build its tree. */
590 obstack_begin (&stat_obstack, 1000);
592 stat_ptr = &statement_list;
594 lang_list_init (stat_ptr);
596 lang_list_init (&input_file_chain);
597 lang_list_init (&lang_output_section_statement);
598 lang_list_init (&file_chain);
599 first_file = lang_add_input_file ((char *) NULL,
600 lang_input_file_is_marker_enum,
603 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
605 abs_output_section->bfd_section = bfd_abs_section_ptr;
609 /*----------------------------------------------------------------------
610 A region is an area of memory declared with the
611 MEMORY { name:org=exp, len=exp ... }
614 We maintain a list of all the regions here.
616 If no regions are specified in the script, then the default is used
617 which is created when looked up to be the entire data space. */
619 static lang_memory_region_type *lang_memory_region_list;
620 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
622 lang_memory_region_type *
623 lang_memory_region_lookup (name)
624 const char *const name;
626 lang_memory_region_type *p;
628 /* NAME is NULL for LMA memspecs if no region was specified. */
632 for (p = lang_memory_region_list;
633 p != (lang_memory_region_type *) NULL;
636 if (strcmp (p->name, name) == 0)
643 /* This code used to always use the first region in the list as the
644 default region. I changed it to instead use a region
645 encompassing all of memory as the default region. This permits
646 NOLOAD sections to work reasonably without requiring a region.
647 People should specify what region they mean, if they really want
649 if (strcmp (name, "*default*") == 0)
651 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
653 return lang_memory_region_list;
659 lang_memory_region_type *new =
660 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
662 new->name = xstrdup (name);
663 new->next = (lang_memory_region_type *) NULL;
665 *lang_memory_region_list_tail = new;
666 lang_memory_region_list_tail = &new->next;
670 new->length = ~(bfd_size_type) 0;
672 new->had_full_message = false;
678 static lang_memory_region_type *
679 lang_memory_default (section)
682 lang_memory_region_type *p;
684 flagword sec_flags = section->flags;
686 /* Override SEC_DATA to mean a writable section. */
687 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
688 sec_flags |= SEC_DATA;
690 for (p = lang_memory_region_list;
691 p != (lang_memory_region_type *) NULL;
694 if ((p->flags & sec_flags) != 0
695 && (p->not_flags & sec_flags) == 0)
700 return lang_memory_region_lookup ("*default*");
703 lang_output_section_statement_type *
704 lang_output_section_find (name)
705 const char *const name;
707 lang_statement_union_type *u;
708 lang_output_section_statement_type *lookup;
710 for (u = lang_output_section_statement.head;
711 u != (lang_statement_union_type *) NULL;
714 lookup = &u->output_section_statement;
715 if (strcmp (name, lookup->name) == 0)
720 return (lang_output_section_statement_type *) NULL;
723 lang_output_section_statement_type *
724 lang_output_section_statement_lookup (name)
725 const char *const name;
727 lang_output_section_statement_type *lookup;
729 lookup = lang_output_section_find (name);
730 if (lookup == (lang_output_section_statement_type *) NULL)
733 lookup = (lang_output_section_statement_type *)
734 new_stat (lang_output_section_statement, stat_ptr);
735 lookup->region = (lang_memory_region_type *) NULL;
736 lookup->lma_region = (lang_memory_region_type *) NULL;
737 lookup->fill = (fill_type *) 0;
738 lookup->block_value = 1;
741 lookup->next = (lang_statement_union_type *) NULL;
742 lookup->bfd_section = (asection *) NULL;
743 lookup->processed = false;
744 lookup->sectype = normal_section;
745 lookup->addr_tree = (etree_type *) NULL;
746 lang_list_init (&lookup->children);
748 lookup->memspec = (const char *) NULL;
750 lookup->subsection_alignment = -1;
751 lookup->section_alignment = -1;
752 lookup->load_base = (union etree_union *) NULL;
753 lookup->update_dot_tree = NULL;
754 lookup->phdrs = NULL;
756 lang_statement_append (&lang_output_section_statement,
757 (lang_statement_union_type *) lookup,
764 lang_map_flags (flag)
767 if (flag & SEC_ALLOC)
773 if (flag & SEC_READONLY)
786 lang_memory_region_type *m;
788 minfo (_("\nMemory Configuration\n\n"));
789 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
790 _("Name"), _("Origin"), _("Length"), _("Attributes"));
792 for (m = lang_memory_region_list;
793 m != (lang_memory_region_type *) NULL;
799 fprintf (config.map_file, "%-16s ", m->name);
801 sprintf_vma (buf, m->origin);
802 minfo ("0x%s ", buf);
810 minfo ("0x%V", m->length);
811 if (m->flags || m->not_flags)
819 lang_map_flags (m->flags);
825 lang_map_flags (m->not_flags);
832 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
837 /* Initialize an output section. */
841 lang_output_section_statement_type *s;
843 section_userdata_type *new;
845 if (s->bfd_section != NULL)
848 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
849 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
851 new = ((section_userdata_type *)
852 stat_alloc (sizeof (section_userdata_type)));
854 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
855 if (s->bfd_section == (asection *) NULL)
856 s->bfd_section = bfd_make_section (output_bfd, s->name);
857 if (s->bfd_section == (asection *) NULL)
859 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
860 output_bfd->xvec->name, s->name);
862 s->bfd_section->output_section = s->bfd_section;
864 /* We initialize an output sections output offset to minus its own
865 vma to allow us to output a section through itself. */
866 s->bfd_section->output_offset = 0;
867 get_userdata (s->bfd_section) = (PTR) new;
869 /* If there is a base address, make sure that any sections it might
870 mention are initialized. */
871 if (s->addr_tree != NULL)
872 exp_init_os (s->addr_tree);
875 /* Make sure that all output sections mentioned in an expression are
882 switch (exp->type.node_class)
885 exp_init_os (exp->assign.src);
889 exp_init_os (exp->binary.lhs);
890 exp_init_os (exp->binary.rhs);
894 exp_init_os (exp->trinary.cond);
895 exp_init_os (exp->trinary.lhs);
896 exp_init_os (exp->trinary.rhs);
900 exp_init_os (exp->unary.child);
904 switch (exp->type.node_code)
910 lang_output_section_statement_type *os;
912 os = lang_output_section_find (exp->name.name);
913 if (os != NULL && os->bfd_section == NULL)
924 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
925 once into the output. This routine checks each section, and
926 arrange to discard it if a section of the same name has already
927 been linked. If the section has COMDAT information, then it uses
928 that to decide whether the section should be included. This code
929 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
930 that is, it does not depend solely upon the section name.
931 section_already_linked is called via bfd_map_over_sections. */
933 /* This is the shape of the elements inside the already_linked hash
934 table. It maps a name onto a list of already_linked elements with
935 the same name. It's possible to get more than one element in a
936 list if the COMDAT sections have different names. */
938 struct already_linked_hash_entry
940 struct bfd_hash_entry root;
941 struct already_linked *entry;
944 struct already_linked
946 struct already_linked *next;
950 /* The hash table. */
952 static struct bfd_hash_table already_linked_table;
955 section_already_linked (abfd, sec, data)
960 lang_input_statement_type *entry = (lang_input_statement_type *) data;
963 struct already_linked *l;
964 struct already_linked_hash_entry *already_linked_list;
966 /* If we are only reading symbols from this object, then we want to
967 discard all sections. */
968 if (entry->just_syms_flag)
970 bfd_link_just_syms (sec, &link_info);
974 flags = bfd_get_section_flags (abfd, sec);
976 if ((flags & SEC_LINK_ONCE) == 0)
979 /* FIXME: When doing a relocatable link, we may have trouble
980 copying relocations in other sections that refer to local symbols
981 in the section being discarded. Those relocations will have to
982 be converted somehow; as of this writing I'm not sure that any of
983 the backends handle that correctly.
985 It is tempting to instead not discard link once sections when
986 doing a relocatable link (technically, they should be discarded
987 whenever we are building constructors). However, that fails,
988 because the linker winds up combining all the link once sections
989 into a single large link once section, which defeats the purpose
990 of having link once sections in the first place.
992 Also, not merging link once sections in a relocatable link
993 causes trouble for MIPS ELF, which relies on link once semantics
994 to handle the .reginfo section correctly. */
996 name = bfd_get_section_name (abfd, sec);
998 already_linked_list =
999 ((struct already_linked_hash_entry *)
1000 bfd_hash_lookup (&already_linked_table, name, true, false));
1002 for (l = already_linked_list->entry; l != NULL; l = l->next)
1004 if (sec->comdat == NULL
1005 || l->sec->comdat == NULL
1006 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
1008 /* The section has already been linked. See if we should
1010 switch (flags & SEC_LINK_DUPLICATES)
1015 case SEC_LINK_DUPLICATES_DISCARD:
1018 case SEC_LINK_DUPLICATES_ONE_ONLY:
1019 if (sec->comdat == NULL)
1020 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1023 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1024 abfd, name, sec->comdat->name);
1027 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
1028 /* FIXME: We should really dig out the contents of both
1029 sections and memcmp them. The COFF/PE spec says that
1030 the Microsoft linker does not implement this
1031 correctly, so I'm not going to bother doing it
1034 case SEC_LINK_DUPLICATES_SAME_SIZE:
1035 if (bfd_section_size (abfd, sec)
1036 != bfd_section_size (l->sec->owner, l->sec))
1037 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1042 /* Set the output_section field so that lang_add_section
1043 does not create a lang_input_section structure for this
1045 sec->output_section = bfd_abs_section_ptr;
1047 if (flags & SEC_GROUP)
1048 bfd_discard_group (abfd, sec);
1054 /* This is the first section with this name. Record it. Allocate
1055 the memory from the same obstack as the hash table is kept in. */
1057 l = ((struct already_linked *)
1058 bfd_hash_allocate (&already_linked_table, sizeof *l));
1061 l->next = already_linked_list->entry;
1062 already_linked_list->entry = l;
1065 /* Support routines for the hash table used by section_already_linked,
1066 initialize the table, fill in an entry and remove the table. */
1068 static struct bfd_hash_entry *
1069 already_linked_newfunc (entry, table, string)
1070 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1071 struct bfd_hash_table *table;
1072 const char *string ATTRIBUTE_UNUSED;
1074 struct already_linked_hash_entry *ret =
1075 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1079 return (struct bfd_hash_entry *) ret;
1083 already_linked_table_init ()
1085 if (! bfd_hash_table_init_n (&already_linked_table,
1086 already_linked_newfunc,
1088 einfo (_("%P%F: Failed to create hash table\n"));
1092 already_linked_table_free ()
1094 bfd_hash_table_free (&already_linked_table);
1097 /* The wild routines.
1099 These expand statements like *(.text) and foo.o to a list of
1100 explicit actions, like foo.o(.text), bar.o(.text) and
1101 foo.o(.text, .data). */
1103 /* Return true if the PATTERN argument is a wildcard pattern.
1104 Although backslashes are treated specially if a pattern contains
1105 wildcards, we do not consider the mere presence of a backslash to
1106 be enough to cause the pattern to be treated as a wildcard.
1107 That lets us handle DOS filenames more naturally. */
1111 const char *pattern;
1115 for (s = pattern; *s != '\0'; ++s)
1123 /* Add SECTION to the output section OUTPUT. Do this by creating a
1124 lang_input_section statement which is placed at PTR. FILE is the
1125 input file which holds SECTION. */
1128 lang_add_section (ptr, section, output, file)
1129 lang_statement_list_type *ptr;
1131 lang_output_section_statement_type *output;
1132 lang_input_statement_type *file;
1137 flags = bfd_get_section_flags (section->owner, section);
1141 /* If we are doing a final link, discard sections marked with
1143 if (! link_info.relocateable
1144 && (flags & SEC_EXCLUDE) != 0)
1147 /* Discard input sections which are assigned to a section named
1148 DISCARD_SECTION_NAME. */
1149 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1152 /* Discard debugging sections if we are stripping debugging
1154 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1155 && (flags & SEC_DEBUGGING) != 0)
1160 if (section->output_section == NULL)
1162 /* This prevents future calls from assigning this section. */
1163 section->output_section = bfd_abs_section_ptr;
1168 if (section->output_section == NULL)
1171 lang_input_section_type *new;
1174 if (output->bfd_section == NULL)
1177 first = ! output->bfd_section->linker_has_input;
1178 output->bfd_section->linker_has_input = 1;
1180 /* Add a section reference to the list. */
1181 new = new_stat (lang_input_section, ptr);
1183 new->section = section;
1185 section->output_section = output->bfd_section;
1187 flags = section->flags;
1189 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1190 to an output section, because we want to be able to include a
1191 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1192 section (I don't know why we want to do this, but we do).
1193 build_link_order in ldwrite.c handles this case by turning
1194 the embedded SEC_NEVER_LOAD section into a fill. */
1196 flags &= ~ SEC_NEVER_LOAD;
1198 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1199 already been processed. One reason to do this is that on pe
1200 format targets, .text$foo sections go into .text and it's odd
1201 to see .text with SEC_LINK_ONCE set. */
1203 if (! link_info.relocateable)
1204 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1206 /* If this is not the first input section, and the SEC_READONLY
1207 flag is not currently set, then don't set it just because the
1208 input section has it set. */
1210 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1211 flags &= ~ SEC_READONLY;
1213 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1215 && ((section->output_section->flags & (SEC_MERGE | SEC_STRINGS))
1216 != (flags & (SEC_MERGE | SEC_STRINGS))
1217 || ((flags & SEC_MERGE)
1218 && section->output_section->entsize != section->entsize)))
1220 section->output_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1221 flags &= ~ (SEC_MERGE | SEC_STRINGS);
1224 /* For now make .tbss normal section. */
1225 if ((flags & SEC_THREAD_LOCAL) && ! link_info.relocateable)
1228 section->output_section->flags |= flags;
1230 if (flags & SEC_MERGE)
1231 section->output_section->entsize = section->entsize;
1233 /* If SEC_READONLY is not set in the input section, then clear
1234 it from the output section. */
1235 if ((section->flags & SEC_READONLY) == 0)
1236 section->output_section->flags &= ~SEC_READONLY;
1238 switch (output->sectype)
1240 case normal_section:
1245 case overlay_section:
1246 output->bfd_section->flags &= ~SEC_ALLOC;
1248 case noload_section:
1249 output->bfd_section->flags &= ~SEC_LOAD;
1250 output->bfd_section->flags |= SEC_NEVER_LOAD;
1254 /* Copy over SEC_SMALL_DATA. */
1255 if (section->flags & SEC_SMALL_DATA)
1256 section->output_section->flags |= SEC_SMALL_DATA;
1258 if (section->alignment_power > output->bfd_section->alignment_power)
1259 output->bfd_section->alignment_power = section->alignment_power;
1261 /* If supplied an aligment, then force it. */
1262 if (output->section_alignment != -1)
1263 output->bfd_section->alignment_power = output->section_alignment;
1265 if (section->flags & SEC_BLOCK)
1267 section->output_section->flags |= SEC_BLOCK;
1268 /* FIXME: This value should really be obtained from the bfd... */
1269 output->block_value = 128;
1274 /* Handle wildcard sorting. This returns the lang_input_section which
1275 should follow the one we are going to create for SECTION and FILE,
1276 based on the sorting requirements of WILD. It returns NULL if the
1277 new section should just go at the end of the current list. */
1279 static lang_statement_union_type *
1280 wild_sort (wild, sec, file, section)
1281 lang_wild_statement_type *wild;
1282 struct wildcard_list *sec;
1283 lang_input_statement_type *file;
1286 const char *section_name;
1287 lang_statement_union_type *l;
1289 if (!wild->filenames_sorted && (sec == NULL || !sec->spec.sorted))
1292 section_name = bfd_get_section_name (file->the_bfd, section);
1293 for (l = wild->children.head; l != NULL; l = l->header.next)
1295 lang_input_section_type *ls;
1297 if (l->header.type != lang_input_section_enum)
1299 ls = &l->input_section;
1301 /* Sorting by filename takes precedence over sorting by section
1304 if (wild->filenames_sorted)
1306 const char *fn, *ln;
1310 /* The PE support for the .idata section as generated by
1311 dlltool assumes that files will be sorted by the name of
1312 the archive and then the name of the file within the
1315 if (file->the_bfd != NULL
1316 && bfd_my_archive (file->the_bfd) != NULL)
1318 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1323 fn = file->filename;
1327 if (ls->ifile->the_bfd != NULL
1328 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1330 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1335 ln = ls->ifile->filename;
1339 i = strcmp (fn, ln);
1348 fn = file->filename;
1350 ln = ls->ifile->filename;
1352 i = strcmp (fn, ln);
1360 /* Here either the files are not sorted by name, or we are
1361 looking at the sections for this file. */
1363 if (sec != NULL && sec->spec.sorted)
1365 if (strcmp (section_name,
1366 bfd_get_section_name (ls->ifile->the_bfd,
1376 /* Expand a wild statement for a particular FILE. SECTION may be
1377 NULL, in which case it is a wild card. */
1380 output_section_callback (ptr, sec, section, file, output)
1381 lang_wild_statement_type *ptr;
1382 struct wildcard_list *sec;
1384 lang_input_statement_type *file;
1387 lang_statement_union_type *before;
1389 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1390 if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
1393 /* If the wild pattern was marked KEEP, the member sections
1394 should be as well. */
1395 if (ptr->keep_sections)
1396 section->flags |= SEC_KEEP;
1398 before = wild_sort (ptr, sec, file, section);
1400 /* Here BEFORE points to the lang_input_section which
1401 should follow the one we are about to add. If BEFORE
1402 is NULL, then the section should just go at the end
1403 of the current list. */
1406 lang_add_section (&ptr->children, section,
1407 (lang_output_section_statement_type *) output,
1411 lang_statement_list_type list;
1412 lang_statement_union_type **pp;
1414 lang_list_init (&list);
1415 lang_add_section (&list, section,
1416 (lang_output_section_statement_type *) output,
1419 /* If we are discarding the section, LIST.HEAD will
1421 if (list.head != NULL)
1423 ASSERT (list.head->header.next == NULL);
1425 for (pp = &ptr->children.head;
1427 pp = &(*pp)->header.next)
1428 ASSERT (*pp != NULL);
1430 list.head->header.next = *pp;
1436 /* This is passed a file name which must have been seen already and
1437 added to the statement tree. We will see if it has been opened
1438 already and had its symbols read. If not then we'll read it. */
1440 static lang_input_statement_type *
1444 lang_input_statement_type *search;
1446 for (search = (lang_input_statement_type *) input_file_chain.head;
1447 search != (lang_input_statement_type *) NULL;
1448 search = (lang_input_statement_type *) search->next_real_file)
1450 if (search->filename == (char *) NULL && name == (char *) NULL)
1452 if (search->filename != (char *) NULL
1453 && name != (char *) NULL
1454 && strcmp (search->filename, name) == 0)
1458 if (search == (lang_input_statement_type *) NULL)
1459 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1462 /* If we have already added this file, or this file is not real
1463 (FIXME: can that ever actually happen?) or the name is NULL
1464 (FIXME: can that ever actually happen?) don't add this file. */
1467 || search->filename == (const char *) NULL)
1470 if (! load_symbols (search, (lang_statement_list_type *) NULL))
1476 /* Get the symbols for an input file. */
1479 load_symbols (entry, place)
1480 lang_input_statement_type *entry;
1481 lang_statement_list_type *place;
1488 ldfile_open_file (entry);
1490 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1491 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1494 lang_statement_list_type *hold;
1495 boolean bad_load = true;
1497 err = bfd_get_error ();
1499 /* See if the emulation has some special knowledge. */
1500 if (ldemul_unrecognized_file (entry))
1503 if (err == bfd_error_file_ambiguously_recognized)
1507 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1508 einfo (_("%B: matching formats:"), entry->the_bfd);
1509 for (p = matching; *p != NULL; p++)
1513 else if (err != bfd_error_file_not_recognized
1515 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1519 bfd_close (entry->the_bfd);
1520 entry->the_bfd = NULL;
1522 /* Try to interpret the file as a linker script. */
1523 ldfile_open_command_file (entry->filename);
1528 ldfile_assumed_script = true;
1529 parser_input = input_script;
1531 ldfile_assumed_script = false;
1538 if (ldemul_recognized_file (entry))
1541 /* We don't call ldlang_add_file for an archive. Instead, the
1542 add_symbols entry point will call ldlang_add_file, via the
1543 add_archive_element callback, for each element of the archive
1545 switch (bfd_get_format (entry->the_bfd))
1551 ldlang_add_file (entry);
1552 if (trace_files || trace_file_tries)
1553 info_msg ("%I\n", entry);
1557 if (entry->whole_archive)
1560 boolean loaded = true;
1564 member = bfd_openr_next_archived_file (entry->the_bfd, member);
1569 if (! bfd_check_format (member, bfd_object))
1571 einfo (_("%F%B: member %B in archive is not an object\n"),
1572 entry->the_bfd, member);
1576 if (! ((*link_info.callbacks->add_archive_element)
1577 (&link_info, member, "--whole-archive")))
1580 if (! bfd_link_add_symbols (member, &link_info))
1582 einfo (_("%F%B: could not read symbols: %E\n"), member);
1587 entry->loaded = loaded;
1593 if (entry->just_syms_flag)
1594 entry->loaded = true;
1595 else if (bfd_link_add_symbols (entry->the_bfd, &link_info))
1596 entry->loaded = true;
1598 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1600 return entry->loaded;
1603 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1604 may be NULL, indicating that it is a wildcard. Separate
1605 lang_input_section statements are created for each part of the
1606 expansion; they are added after the wild statement S. OUTPUT is
1607 the output section. */
1610 wild (s, target, output)
1611 lang_wild_statement_type *s;
1612 const char *target ATTRIBUTE_UNUSED;
1613 lang_output_section_statement_type *output;
1615 struct wildcard_list *sec;
1617 walk_wild (s, output_section_callback, (PTR) output);
1619 for (sec = s->section_list; sec != NULL; sec = sec->next)
1621 if (default_common_section != NULL)
1623 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
1625 /* Remember the section that common is going to in case we
1626 later get something which doesn't know where to put it. */
1627 default_common_section = output;
1632 /* Return true iff target is the sought target. */
1635 get_target (target, data)
1636 const bfd_target *target;
1639 const char *sought = (const char *) data;
1641 return strcmp (target->name, sought) == 0;
1644 /* Like strcpy() but convert to lower case as well. */
1653 while ((c = *src++) != 0)
1654 *dest++ = TOLOWER (c);
1659 /* Remove the first occurance of needle (if any) in haystack
1663 strcut (haystack, needle)
1667 haystack = strstr (haystack, needle);
1673 for (src = haystack + strlen (needle); *src;)
1674 *haystack++ = *src++;
1680 /* Compare two target format name strings.
1681 Return a value indicating how "similar" they are. */
1684 name_compare (first, second)
1692 copy1 = xmalloc (strlen (first) + 1);
1693 copy2 = xmalloc (strlen (second) + 1);
1695 /* Convert the names to lower case. */
1696 stricpy (copy1, first);
1697 stricpy (copy2, second);
1699 /* Remove and endian strings from the name. */
1700 strcut (copy1, "big");
1701 strcut (copy1, "little");
1702 strcut (copy2, "big");
1703 strcut (copy2, "little");
1705 /* Return a value based on how many characters match,
1706 starting from the beginning. If both strings are
1707 the same then return 10 * their length. */
1708 for (result = 0; copy1[result] == copy2[result]; result++)
1709 if (copy1[result] == 0)
1721 /* Set by closest_target_match() below. */
1722 static const bfd_target *winner;
1724 /* Scan all the valid bfd targets looking for one that has the endianness
1725 requirement that was specified on the command line, and is the nearest
1726 match to the original output target. */
1729 closest_target_match (target, data)
1730 const bfd_target *target;
1733 const bfd_target *original = (const bfd_target *) data;
1735 if (command_line.endian == ENDIAN_BIG
1736 && target->byteorder != BFD_ENDIAN_BIG)
1739 if (command_line.endian == ENDIAN_LITTLE
1740 && target->byteorder != BFD_ENDIAN_LITTLE)
1743 /* Must be the same flavour. */
1744 if (target->flavour != original->flavour)
1747 /* If we have not found a potential winner yet, then record this one. */
1754 /* Oh dear, we now have two potential candidates for a successful match.
1755 Compare their names and choose the better one. */
1756 if (name_compare (target->name, original->name)
1757 > name_compare (winner->name, original->name))
1760 /* Keep on searching until wqe have checked them all. */
1764 /* Return the BFD target format of the first input file. */
1767 get_first_input_target ()
1769 char *target = NULL;
1771 LANG_FOR_EACH_INPUT_STATEMENT (s)
1773 if (s->header.type == lang_input_statement_enum
1776 ldfile_open_file (s);
1778 if (s->the_bfd != NULL
1779 && bfd_check_format (s->the_bfd, bfd_object))
1781 target = bfd_get_target (s->the_bfd);
1793 lang_get_output_target ()
1797 /* Has the user told us which output format to use? */
1798 if (output_target != (char *) NULL)
1799 return output_target;
1801 /* No - has the current target been set to something other than
1803 if (current_target != default_target)
1804 return current_target;
1806 /* No - can we determine the format of the first input file? */
1807 target = get_first_input_target ();
1811 /* Failed - use the default output target. */
1812 return default_target;
1815 /* Open the output file. */
1823 output_target = lang_get_output_target ();
1825 /* Has the user requested a particular endianness on the command
1827 if (command_line.endian != ENDIAN_UNSET)
1829 const bfd_target *target;
1830 enum bfd_endian desired_endian;
1832 /* Get the chosen target. */
1833 target = bfd_search_for_target (get_target, (PTR) output_target);
1835 /* If the target is not supported, we cannot do anything. */
1838 if (command_line.endian == ENDIAN_BIG)
1839 desired_endian = BFD_ENDIAN_BIG;
1841 desired_endian = BFD_ENDIAN_LITTLE;
1843 /* See if the target has the wrong endianness. This should
1844 not happen if the linker script has provided big and
1845 little endian alternatives, but some scrips don't do
1847 if (target->byteorder != desired_endian)
1849 /* If it does, then see if the target provides
1850 an alternative with the correct endianness. */
1851 if (target->alternative_target != NULL
1852 && (target->alternative_target->byteorder == desired_endian))
1853 output_target = target->alternative_target->name;
1856 /* Try to find a target as similar as possible to
1857 the default target, but which has the desired
1858 endian characteristic. */
1859 (void) bfd_search_for_target (closest_target_match,
1862 /* Oh dear - we could not find any targets that
1863 satisfy our requirements. */
1865 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1867 output_target = winner->name;
1873 output = bfd_openw (name, output_target);
1875 if (output == (bfd *) NULL)
1877 if (bfd_get_error () == bfd_error_invalid_target)
1878 einfo (_("%P%F: target %s not found\n"), output_target);
1880 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1883 delete_output_file_on_failure = true;
1886 output->flags |= D_PAGED;
1889 if (! bfd_set_format (output, bfd_object))
1890 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1891 if (! bfd_set_arch_mach (output,
1892 ldfile_output_architecture,
1893 ldfile_output_machine))
1894 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1896 link_info.hash = bfd_link_hash_table_create (output);
1897 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1898 einfo (_("%P%F: can not create link hash table: %E\n"));
1900 bfd_set_gp_size (output, g_switch_value);
1905 ldlang_open_output (statement)
1906 lang_statement_union_type *statement;
1908 switch (statement->header.type)
1910 case lang_output_statement_enum:
1911 ASSERT (output_bfd == (bfd *) NULL);
1912 output_bfd = open_output (statement->output_statement.name);
1913 ldemul_set_output_arch ();
1914 if (config.magic_demand_paged && !link_info.relocateable)
1915 output_bfd->flags |= D_PAGED;
1917 output_bfd->flags &= ~D_PAGED;
1918 if (config.text_read_only)
1919 output_bfd->flags |= WP_TEXT;
1921 output_bfd->flags &= ~WP_TEXT;
1922 if (link_info.traditional_format)
1923 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1925 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1928 case lang_target_statement_enum:
1929 current_target = statement->target_statement.target;
1936 /* Open all the input files. */
1939 open_input_bfds (s, force)
1940 lang_statement_union_type *s;
1943 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
1945 switch (s->header.type)
1947 case lang_constructors_statement_enum:
1948 open_input_bfds (constructor_list.head, force);
1950 case lang_output_section_statement_enum:
1951 open_input_bfds (s->output_section_statement.children.head, force);
1953 case lang_wild_statement_enum:
1954 /* Maybe we should load the file's symbols. */
1955 if (s->wild_statement.filename
1956 && ! wildcardp (s->wild_statement.filename))
1957 (void) lookup_name (s->wild_statement.filename);
1958 open_input_bfds (s->wild_statement.children.head, force);
1960 case lang_group_statement_enum:
1962 struct bfd_link_hash_entry *undefs;
1964 /* We must continually search the entries in the group
1965 until no new symbols are added to the list of undefined
1970 undefs = link_info.hash->undefs_tail;
1971 open_input_bfds (s->group_statement.children.head, true);
1973 while (undefs != link_info.hash->undefs_tail);
1976 case lang_target_statement_enum:
1977 current_target = s->target_statement.target;
1979 case lang_input_statement_enum:
1980 if (s->input_statement.real)
1982 lang_statement_list_type add;
1984 s->input_statement.target = current_target;
1986 /* If we are being called from within a group, and this
1987 is an archive which has already been searched, then
1988 force it to be researched unless the whole archive
1989 has been loaded already. */
1991 && !s->input_statement.whole_archive
1992 && s->input_statement.loaded
1993 && bfd_check_format (s->input_statement.the_bfd,
1995 s->input_statement.loaded = false;
1997 lang_list_init (&add);
1999 if (! load_symbols (&s->input_statement, &add))
2000 config.make_executable = false;
2002 if (add.head != NULL)
2004 *add.tail = s->header.next;
2005 s->header.next = add.head;
2015 /* If there are [COMMONS] statements, put a wild one into the bss
2019 lang_reasonable_defaults ()
2022 lang_output_section_statement_lookup (".text");
2023 lang_output_section_statement_lookup (".data");
2025 default_common_section = lang_output_section_statement_lookup (".bss");
2027 if (!placed_commons)
2029 lang_wild_statement_type *new =
2030 new_stat (lang_wild_statement,
2031 &default_common_section->children);
2033 new->section_name = "COMMON";
2034 new->filename = (char *) NULL;
2035 lang_list_init (&new->children);
2040 /* Add the supplied name to the symbol table as an undefined reference.
2041 This is a two step process as the symbol table doesn't even exist at
2042 the time the ld command line is processed. First we put the name
2043 on a list, then, once the output file has been opened, transfer the
2044 name to the symbol table. */
2046 typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
2048 #define ldlang_undef_chain_list_head entry_symbol.next
2051 ldlang_add_undef (name)
2052 const char *const name;
2054 ldlang_undef_chain_list_type *new =
2055 ((ldlang_undef_chain_list_type *)
2056 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
2058 new->next = ldlang_undef_chain_list_head;
2059 ldlang_undef_chain_list_head = new;
2061 new->name = xstrdup (name);
2063 if (output_bfd != NULL)
2064 insert_undefined (new->name);
2067 /* Insert NAME as undefined in the symbol table. */
2070 insert_undefined (name)
2073 struct bfd_link_hash_entry *h;
2075 h = bfd_link_hash_lookup (link_info.hash, name, true, false, true);
2076 if (h == (struct bfd_link_hash_entry *) NULL)
2077 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2078 if (h->type == bfd_link_hash_new)
2080 h->type = bfd_link_hash_undefined;
2081 h->u.undef.abfd = NULL;
2082 bfd_link_add_undef (link_info.hash, h);
2086 /* Run through the list of undefineds created above and place them
2087 into the linker hash table as undefined symbols belonging to the
2091 lang_place_undefineds ()
2093 ldlang_undef_chain_list_type *ptr;
2095 for (ptr = ldlang_undef_chain_list_head;
2096 ptr != (ldlang_undef_chain_list_type *) NULL;
2099 insert_undefined (ptr->name);
2103 /* Open input files and attatch to output sections. */
2106 map_input_to_output_sections (s, target, output_section_statement)
2107 lang_statement_union_type *s;
2109 lang_output_section_statement_type *output_section_statement;
2111 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2113 switch (s->header.type)
2115 case lang_wild_statement_enum:
2116 wild (&s->wild_statement, target, output_section_statement);
2118 case lang_constructors_statement_enum:
2119 map_input_to_output_sections (constructor_list.head,
2121 output_section_statement);
2123 case lang_output_section_statement_enum:
2124 map_input_to_output_sections (s->output_section_statement.children.head,
2126 &s->output_section_statement);
2128 case lang_output_statement_enum:
2130 case lang_target_statement_enum:
2131 target = s->target_statement.target;
2133 case lang_group_statement_enum:
2134 map_input_to_output_sections (s->group_statement.children.head,
2136 output_section_statement);
2138 case lang_fill_statement_enum:
2139 case lang_input_section_enum:
2140 case lang_object_symbols_statement_enum:
2141 case lang_data_statement_enum:
2142 case lang_reloc_statement_enum:
2143 case lang_padding_statement_enum:
2144 case lang_input_statement_enum:
2145 if (output_section_statement != NULL
2146 && output_section_statement->bfd_section == NULL)
2147 init_os (output_section_statement);
2149 case lang_assignment_statement_enum:
2150 if (output_section_statement != NULL
2151 && output_section_statement->bfd_section == NULL)
2152 init_os (output_section_statement);
2154 /* Make sure that any sections mentioned in the assignment
2156 exp_init_os (s->assignment_statement.exp);
2158 case lang_afile_asection_pair_statement_enum:
2161 case lang_address_statement_enum:
2162 /* Mark the specified section with the supplied address. */
2164 lang_output_section_statement_type *os =
2165 lang_output_section_statement_lookup
2166 (s->address_statement.section_name);
2168 if (os->bfd_section == NULL)
2170 os->addr_tree = s->address_statement.address;
2177 /* An output section might have been removed after its statement was
2178 added. For example, ldemul_before_allocation can remove dynamic
2179 sections if they turn out to be not needed. Clean them up here. */
2182 strip_excluded_output_sections ()
2184 lang_statement_union_type *u;
2186 for (u = lang_output_section_statement.head;
2188 u = u->output_section_statement.next)
2190 lang_output_section_statement_type *os;
2193 os = &u->output_section_statement;
2194 s = os->bfd_section;
2195 if (s != NULL && (s->flags & SEC_EXCLUDE) != 0)
2199 os->bfd_section = NULL;
2201 for (p = &output_bfd->sections; *p; p = &(*p)->next)
2204 bfd_section_list_remove (output_bfd, p);
2205 output_bfd->section_count--;
2213 print_output_section_statement (output_section_statement)
2214 lang_output_section_statement_type *output_section_statement;
2216 asection *section = output_section_statement->bfd_section;
2219 if (output_section_statement != abs_output_section)
2221 minfo ("\n%s", output_section_statement->name);
2223 if (section != NULL)
2225 print_dot = section->vma;
2227 len = strlen (output_section_statement->name);
2228 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2233 while (len < SECTION_NAME_MAP_LENGTH)
2239 minfo ("0x%V %W", section->vma, section->_raw_size);
2241 if (output_section_statement->load_base != NULL)
2245 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2246 "load base", lang_final_phase_enum);
2247 minfo (_(" load address 0x%V"), addr);
2254 print_statement_list (output_section_statement->children.head,
2255 output_section_statement);
2259 print_assignment (assignment, output_section)
2260 lang_assignment_statement_type *assignment;
2261 lang_output_section_statement_type *output_section;
2264 etree_value_type result;
2266 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2269 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2270 lang_final_phase_enum, print_dot, &print_dot);
2276 value = result.value + result.section->bfd_section->vma;
2277 dst = assignment->exp->assign.dst;
2279 minfo ("0x%V", value);
2280 if (dst[0] == '.' && dst[1] == 0)
2293 exp_print_tree (assignment->exp);
2299 print_input_statement (statm)
2300 lang_input_statement_type *statm;
2302 if (statm->filename != (char *) NULL)
2304 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2308 /* Print all symbols defined in a particular section. This is called
2309 via bfd_link_hash_traverse. */
2312 print_one_symbol (hash_entry, ptr)
2313 struct bfd_link_hash_entry *hash_entry;
2316 asection *sec = (asection *) ptr;
2318 if ((hash_entry->type == bfd_link_hash_defined
2319 || hash_entry->type == bfd_link_hash_defweak)
2320 && sec == hash_entry->u.def.section)
2324 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2327 (hash_entry->u.def.value
2328 + hash_entry->u.def.section->output_offset
2329 + hash_entry->u.def.section->output_section->vma));
2331 minfo (" %T\n", hash_entry->root.string);
2337 /* Print information about an input section to the map file. */
2340 print_input_section (in)
2341 lang_input_section_type *in;
2343 asection *i = in->section;
2344 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
2345 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2346 ldfile_output_machine);
2351 minfo ("%s", i->name);
2353 if (i->output_section != NULL)
2357 len = 1 + strlen (i->name);
2358 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2363 while (len < SECTION_NAME_MAP_LENGTH)
2369 minfo ("0x%V %W %B\n",
2370 i->output_section->vma + i->output_offset, size / opb,
2373 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2375 len = SECTION_NAME_MAP_LENGTH + 3;
2387 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2390 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2392 print_dot = i->output_section->vma + i->output_offset + size / opb;
2398 print_fill_statement (fill)
2399 lang_fill_statement_type *fill;
2403 fputs (" FILL mask 0x", config.map_file);
2404 for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
2405 fprintf (config.map_file, "%02x", *p);
2406 fputs ("\n", config.map_file);
2410 print_data_statement (data)
2411 lang_data_statement_type *data;
2417 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2418 ldfile_output_machine);
2420 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2423 addr = data->output_vma;
2424 if (data->output_section != NULL)
2425 addr += data->output_section->vma;
2453 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2455 if (data->exp->type.node_class != etree_value)
2458 exp_print_tree (data->exp);
2463 print_dot = addr + size / opb;
2467 /* Print an address statement. These are generated by options like
2471 print_address_statement (address)
2472 lang_address_statement_type *address;
2474 minfo (_("Address of section %s set to "), address->section_name);
2475 exp_print_tree (address->address);
2479 /* Print a reloc statement. */
2482 print_reloc_statement (reloc)
2483 lang_reloc_statement_type *reloc;
2488 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2489 ldfile_output_machine);
2491 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2494 addr = reloc->output_vma;
2495 if (reloc->output_section != NULL)
2496 addr += reloc->output_section->vma;
2498 size = bfd_get_reloc_size (reloc->howto);
2500 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2502 if (reloc->name != NULL)
2503 minfo ("%s+", reloc->name);
2505 minfo ("%s+", reloc->section->name);
2507 exp_print_tree (reloc->addend_exp);
2511 print_dot = addr + size / opb;
2515 print_padding_statement (s)
2516 lang_padding_statement_type *s;
2520 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2521 ldfile_output_machine);
2525 len = sizeof " *fill*" - 1;
2526 while (len < SECTION_NAME_MAP_LENGTH)
2532 addr = s->output_offset;
2533 if (s->output_section != NULL)
2534 addr += s->output_section->vma;
2535 minfo ("0x%V %W ", addr, s->size);
2537 if (s->fill->size != 0)
2541 for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
2542 fprintf (config.map_file, "%02x", *p);
2547 print_dot = addr + s->size / opb;
2551 print_wild_statement (w, os)
2552 lang_wild_statement_type *w;
2553 lang_output_section_statement_type *os;
2555 struct wildcard_list *sec;
2559 if (w->filenames_sorted)
2561 if (w->filename != NULL)
2562 minfo ("%s", w->filename);
2565 if (w->filenames_sorted)
2569 for (sec = w->section_list; sec; sec = sec->next)
2571 if (sec->spec.sorted)
2573 if (sec->spec.exclude_name_list != NULL)
2576 minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
2577 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
2578 minfo (" %s", tmp->name);
2581 if (sec->spec.name != NULL)
2582 minfo ("%s", sec->spec.name);
2585 if (sec->spec.sorted)
2594 print_statement_list (w->children.head, os);
2597 /* Print a group statement. */
2601 lang_group_statement_type *s;
2602 lang_output_section_statement_type *os;
2604 fprintf (config.map_file, "START GROUP\n");
2605 print_statement_list (s->children.head, os);
2606 fprintf (config.map_file, "END GROUP\n");
2609 /* Print the list of statements in S.
2610 This can be called for any statement type. */
2613 print_statement_list (s, os)
2614 lang_statement_union_type *s;
2615 lang_output_section_statement_type *os;
2619 print_statement (s, os);
2624 /* Print the first statement in statement list S.
2625 This can be called for any statement type. */
2628 print_statement (s, os)
2629 lang_statement_union_type *s;
2630 lang_output_section_statement_type *os;
2632 switch (s->header.type)
2635 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2638 case lang_constructors_statement_enum:
2639 if (constructor_list.head != NULL)
2641 if (constructors_sorted)
2642 minfo (" SORT (CONSTRUCTORS)\n");
2644 minfo (" CONSTRUCTORS\n");
2645 print_statement_list (constructor_list.head, os);
2648 case lang_wild_statement_enum:
2649 print_wild_statement (&s->wild_statement, os);
2651 case lang_address_statement_enum:
2652 print_address_statement (&s->address_statement);
2654 case lang_object_symbols_statement_enum:
2655 minfo (" CREATE_OBJECT_SYMBOLS\n");
2657 case lang_fill_statement_enum:
2658 print_fill_statement (&s->fill_statement);
2660 case lang_data_statement_enum:
2661 print_data_statement (&s->data_statement);
2663 case lang_reloc_statement_enum:
2664 print_reloc_statement (&s->reloc_statement);
2666 case lang_input_section_enum:
2667 print_input_section (&s->input_section);
2669 case lang_padding_statement_enum:
2670 print_padding_statement (&s->padding_statement);
2672 case lang_output_section_statement_enum:
2673 print_output_section_statement (&s->output_section_statement);
2675 case lang_assignment_statement_enum:
2676 print_assignment (&s->assignment_statement, os);
2678 case lang_target_statement_enum:
2679 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2681 case lang_output_statement_enum:
2682 minfo ("OUTPUT(%s", s->output_statement.name);
2683 if (output_target != NULL)
2684 minfo (" %s", output_target);
2687 case lang_input_statement_enum:
2688 print_input_statement (&s->input_statement);
2690 case lang_group_statement_enum:
2691 print_group (&s->group_statement, os);
2693 case lang_afile_asection_pair_statement_enum:
2702 print_statement_list (statement_list.head, abs_output_section);
2705 /* Print the first N statements in statement list S to STDERR.
2706 If N == 0, nothing is printed.
2707 If N < 0, the entire list is printed.
2708 Intended to be called from GDB. */
2711 dprint_statement (s, n)
2712 lang_statement_union_type *s;
2715 FILE *map_save = config.map_file;
2717 config.map_file = stderr;
2720 print_statement_list (s, abs_output_section);
2723 while (s && --n >= 0)
2725 print_statement (s, abs_output_section);
2730 config.map_file = map_save;
2734 insert_pad (ptr, fill, alignment_needed, output_section, dot)
2735 lang_statement_union_type **ptr;
2737 unsigned int alignment_needed;
2738 asection *output_section;
2741 static fill_type zero_fill = { 1, { 0 } };
2742 lang_statement_union_type *pad;
2744 pad = ((lang_statement_union_type *)
2745 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
2746 if (ptr != &statement_list.head
2747 && pad->header.type == lang_padding_statement_enum
2748 && pad->padding_statement.output_section == output_section)
2750 /* Use the existing pad statement. The above test on output
2751 section is probably redundant, but it doesn't hurt to check. */
2755 /* Make a new padding statement, linked into existing chain. */
2756 pad = ((lang_statement_union_type *)
2757 stat_alloc (sizeof (lang_padding_statement_type)));
2758 pad->header.next = *ptr;
2760 pad->header.type = lang_padding_statement_enum;
2761 pad->padding_statement.output_section = output_section;
2762 if (fill == (fill_type *) 0)
2764 pad->padding_statement.fill = fill;
2766 pad->padding_statement.output_offset = dot - output_section->vma;
2767 pad->padding_statement.size = alignment_needed;
2768 output_section->_raw_size += alignment_needed;
2771 /* Work out how much this section will move the dot point. */
2774 size_input_section (this_ptr, output_section_statement, fill, dot)
2775 lang_statement_union_type **this_ptr;
2776 lang_output_section_statement_type *output_section_statement;
2780 lang_input_section_type *is = &((*this_ptr)->input_section);
2781 asection *i = is->section;
2783 if (!is->ifile->just_syms_flag)
2785 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2786 ldfile_output_machine);
2787 unsigned int alignment_needed;
2790 /* Align this section first to the input sections requirement,
2791 then to the output section's requirement. If this alignment
2792 is greater than any seen before, then record it too. Perform
2793 the alignment by inserting a magic 'padding' statement. */
2795 if (output_section_statement->subsection_alignment != -1)
2796 i->alignment_power = output_section_statement->subsection_alignment;
2798 o = output_section_statement->bfd_section;
2799 if (o->alignment_power < i->alignment_power)
2800 o->alignment_power = i->alignment_power;
2802 alignment_needed = align_power (dot, i->alignment_power) - dot;
2804 if (alignment_needed != 0)
2806 insert_pad (this_ptr, fill, alignment_needed * opb, o, dot);
2807 dot += alignment_needed;
2810 /* Remember where in the output section this input section goes. */
2812 i->output_offset = dot - o->vma;
2814 /* Mark how big the output section must be to contain this now. */
2815 if (i->_cooked_size != 0)
2816 dot += i->_cooked_size / opb;
2818 dot += i->_raw_size / opb;
2819 o->_raw_size = (dot - o->vma) * opb;
2823 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2829 #define IGNORE_SECTION(bfd, s) \
2830 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2831 != (SEC_ALLOC | SEC_LOAD)) \
2832 || bfd_section_size (bfd, s) == 0)
2834 /* Check to see if any allocated sections overlap with other allocated
2835 sections. This can happen when the linker script specifically specifies
2836 the output section addresses of the two sections. */
2839 lang_check_section_addresses ()
2842 unsigned opb = bfd_octets_per_byte (output_bfd);
2844 /* Scan all sections in the output list. */
2845 for (s = output_bfd->sections; s != NULL; s = s->next)
2849 /* Ignore sections which are not loaded or which have no contents. */
2850 if (IGNORE_SECTION (output_bfd, s))
2853 /* Once we reach section 's' stop our seach. This prevents two
2854 warning messages from being produced, one for 'section A overlaps
2855 section B' and one for 'section B overlaps section A'. */
2856 for (os = output_bfd->sections; os != s; os = os->next)
2863 /* Only consider loadable sections with real contents. */
2864 if (IGNORE_SECTION (output_bfd, os))
2867 /* We must check the sections' LMA addresses not their
2868 VMA addresses because overlay sections can have
2869 overlapping VMAs but they must have distinct LMAs. */
2870 s_start = bfd_section_lma (output_bfd, s);
2871 os_start = bfd_section_lma (output_bfd, os);
2872 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2873 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
2875 /* Look for an overlap. */
2876 if ((s_end < os_start) || (s_start > os_end))
2880 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2881 s->name, s_start, s_end, os->name, os_start, os_end);
2883 /* Once we have found one overlap for this section,
2884 stop looking for others. */
2890 /* Make sure the new address is within the region. We explicitly permit the
2891 current address to be at the exact end of the region when the address is
2892 non-zero, in case the region is at the end of addressable memory and the
2893 calculation wraps around. */
2896 os_region_check (os, region, tree, base)
2897 lang_output_section_statement_type *os;
2898 struct memory_region_struct *region;
2902 if ((region->current < region->origin
2903 || (region->current - region->origin > region->length))
2904 && ((region->current != region->origin + region->length)
2907 if (tree != (etree_type *) NULL)
2909 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2911 os->bfd_section->owner,
2912 os->bfd_section->name,
2917 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2919 os->bfd_section->owner,
2920 os->bfd_section->name);
2922 /* Reset the region pointer. */
2923 region->current = region->origin;
2927 /* Set the sizes for all the output sections. */
2930 lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
2931 lang_statement_union_type *s;
2932 lang_output_section_statement_type *output_section_statement;
2933 lang_statement_union_type **prev;
2938 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2939 ldfile_output_machine);
2941 /* Size up the sections from their constituent parts. */
2942 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2944 switch (s->header.type)
2946 case lang_output_section_statement_enum:
2949 lang_output_section_statement_type *os;
2951 os = &s->output_section_statement;
2952 if (os->bfd_section == NULL)
2953 /* This section was never actually created. */
2956 /* If this is a COFF shared library section, use the size and
2957 address from the input section. FIXME: This is COFF
2958 specific; it would be cleaner if there were some other way
2959 to do this, but nothing simple comes to mind. */
2960 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2964 if (os->children.head == NULL
2965 || os->children.head->header.next != NULL
2966 || os->children.head->header.type != lang_input_section_enum)
2967 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2970 input = os->children.head->input_section.section;
2971 bfd_set_section_vma (os->bfd_section->owner,
2973 bfd_section_vma (input->owner, input));
2974 os->bfd_section->_raw_size = input->_raw_size;
2978 if (bfd_is_abs_section (os->bfd_section))
2980 /* No matter what happens, an abs section starts at zero. */
2981 ASSERT (os->bfd_section->vma == 0);
2985 if (os->addr_tree == (etree_type *) NULL)
2987 /* No address specified for this section, get one
2988 from the region specification. */
2989 if (os->region == (lang_memory_region_type *) NULL
2990 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2991 & (SEC_ALLOC | SEC_LOAD)) != 0)
2992 && os->region->name[0] == '*'
2993 && strcmp (os->region->name, "*default*") == 0))
2995 os->region = lang_memory_default (os->bfd_section);
2998 /* If a loadable section is using the default memory
2999 region, and some non default memory regions were
3000 defined, issue a warning. */
3001 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
3002 & (SEC_ALLOC | SEC_LOAD)) != 0
3003 && (bfd_get_section_flags (output_bfd, os->bfd_section)
3004 & SEC_NEVER_LOAD) == 0
3005 && ! link_info.relocateable
3006 && strcmp (os->region->name, "*default*") == 0
3007 && lang_memory_region_list != NULL
3008 && (strcmp (lang_memory_region_list->name,
3010 || lang_memory_region_list->next != NULL))
3011 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
3012 bfd_get_section_name (output_bfd,
3015 dot = os->region->current;
3017 if (os->section_alignment == -1)
3022 dot = align_power (dot,
3023 os->bfd_section->alignment_power);
3025 if (dot != olddot && config.warn_section_align)
3026 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
3027 os->name, (unsigned int) (dot - olddot));
3034 r = exp_fold_tree (os->addr_tree,
3036 lang_allocating_phase_enum,
3039 einfo (_("%F%S: non constant address expression for section %s\n"),
3042 dot = r.value + r.section->bfd_section->vma;
3045 /* The section starts here.
3046 First, align to what the section needs. */
3048 if (os->section_alignment != -1)
3049 dot = align_power (dot, os->section_alignment);
3051 bfd_set_section_vma (0, os->bfd_section, dot);
3053 os->bfd_section->output_offset = 0;
3056 lang_size_sections_1 (os->children.head, os, &os->children.head,
3057 os->fill, dot, relax);
3059 /* Put the section within the requested block size, or
3060 align at the block boundary. */
3061 after = align_n (os->bfd_section->vma
3062 + os->bfd_section->_raw_size / opb,
3063 (bfd_vma) os->block_value);
3065 if (bfd_is_abs_section (os->bfd_section))
3066 ASSERT (after == os->bfd_section->vma);
3067 else if ((os->bfd_section->flags & SEC_HAS_CONTENTS) == 0
3068 && (os->bfd_section->flags & SEC_THREAD_LOCAL)
3069 && ! link_info.relocateable)
3070 os->bfd_section->_raw_size = 0;
3072 os->bfd_section->_raw_size =
3073 (after - os->bfd_section->vma) * opb;
3075 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3076 os->processed = true;
3078 if (os->update_dot_tree != 0)
3079 exp_fold_tree (os->update_dot_tree, abs_output_section,
3080 lang_allocating_phase_enum, dot, &dot);
3082 /* Update dot in the region ?
3083 We only do this if the section is going to be allocated,
3084 since unallocated sections do not contribute to the region's
3085 overall size in memory.
3087 If the SEC_NEVER_LOAD bit is not set, it will affect the
3088 addresses of sections after it. We have to update
3090 if (os->region != (lang_memory_region_type *) NULL
3091 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
3092 & SEC_NEVER_LOAD) == 0
3093 || (bfd_get_section_flags (output_bfd, os->bfd_section)
3094 & (SEC_ALLOC | SEC_LOAD))))
3096 os->region->current = dot;
3098 /* Make sure the new address is within the region. */
3099 os_region_check (os, os->region, os->addr_tree,
3100 os->bfd_section->vma);
3102 /* If there's no load address specified, use the run
3103 region as the load region. */
3104 if (os->lma_region == NULL && os->load_base == NULL)
3105 os->lma_region = os->region;
3107 if (os->lma_region != NULL && os->lma_region != os->region)
3109 /* Set load_base, which will be handled later. */
3110 os->load_base = exp_intop (os->lma_region->current);
3111 os->lma_region->current +=
3112 os->bfd_section->_raw_size / opb;
3113 os_region_check (os, os->lma_region, NULL,
3114 os->bfd_section->lma);
3120 case lang_constructors_statement_enum:
3121 dot = lang_size_sections_1 (constructor_list.head,
3122 output_section_statement,
3123 &s->wild_statement.children.head,
3127 case lang_data_statement_enum:
3129 unsigned int size = 0;
3131 s->data_statement.output_vma =
3132 dot - output_section_statement->bfd_section->vma;
3133 s->data_statement.output_section =
3134 output_section_statement->bfd_section;
3136 switch (s->data_statement.type)
3157 output_section_statement->bfd_section->_raw_size += size;
3158 /* The output section gets contents, and then we inspect for
3159 any flags set in the input script which override any ALLOC. */
3160 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
3161 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
3163 output_section_statement->bfd_section->flags |=
3164 SEC_ALLOC | SEC_LOAD;
3169 case lang_reloc_statement_enum:
3173 s->reloc_statement.output_vma =
3174 dot - output_section_statement->bfd_section->vma;
3175 s->reloc_statement.output_section =
3176 output_section_statement->bfd_section;
3177 size = bfd_get_reloc_size (s->reloc_statement.howto);
3179 output_section_statement->bfd_section->_raw_size += size;
3183 case lang_wild_statement_enum:
3185 dot = lang_size_sections_1 (s->wild_statement.children.head,
3186 output_section_statement,
3187 &s->wild_statement.children.head,
3192 case lang_object_symbols_statement_enum:
3193 link_info.create_object_symbols_section =
3194 output_section_statement->bfd_section;
3196 case lang_output_statement_enum:
3197 case lang_target_statement_enum:
3199 case lang_input_section_enum:
3203 i = (*prev)->input_section.section;
3206 if (i->_cooked_size == 0)
3207 i->_cooked_size = i->_raw_size;
3213 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3214 einfo (_("%P%F: can't relax section: %E\n"));
3218 dot = size_input_section (prev, output_section_statement,
3219 output_section_statement->fill, dot);
3222 case lang_input_statement_enum:
3224 case lang_fill_statement_enum:
3225 s->fill_statement.output_section =
3226 output_section_statement->bfd_section;
3228 fill = s->fill_statement.fill;
3230 case lang_assignment_statement_enum:
3232 bfd_vma newdot = dot;
3234 exp_fold_tree (s->assignment_statement.exp,
3235 output_section_statement,
3236 lang_allocating_phase_enum,
3242 if (output_section_statement == abs_output_section)
3244 /* If we don't have an output section, then just adjust
3245 the default memory address. */
3246 lang_memory_region_lookup ("*default*")->current = newdot;
3250 /* Insert a pad after this statement. We can't
3251 put the pad before when relaxing, in case the
3252 assignment references dot. */
3253 insert_pad (&s->header.next, fill, (newdot - dot) * opb,
3254 output_section_statement->bfd_section, dot);
3256 /* Don't neuter the pad below when relaxing. */
3265 case lang_padding_statement_enum:
3266 /* If this is the first time lang_size_sections is called,
3267 we won't have any padding statements. If this is the
3268 second or later passes when relaxing, we should allow
3269 padding to shrink. If padding is needed on this pass, it
3270 will be added back in. */
3271 s->padding_statement.size = 0;
3273 /* Make sure output_offset is valid. If relaxation shrinks
3274 the section and this pad isn't needed, it's possible to
3275 have output_offset larger than the final size of the
3276 section. bfd_set_section_contents will complain even for
3277 a pad size of zero. */
3278 s->padding_statement.output_offset
3279 = dot - output_section_statement->bfd_section->vma;
3282 case lang_group_statement_enum:
3283 dot = lang_size_sections_1 (s->group_statement.children.head,
3284 output_section_statement,
3285 &s->group_statement.children.head,
3293 /* We can only get here when relaxing is turned on. */
3294 case lang_address_statement_enum:
3297 prev = &s->header.next;
3303 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
3304 lang_statement_union_type *s;
3305 lang_output_section_statement_type *output_section_statement;
3306 lang_statement_union_type **prev;
3313 exp_data_seg.phase = exp_dataseg_none;
3314 result = lang_size_sections_1 (s, output_section_statement, prev, fill,
3316 if (exp_data_seg.phase == exp_dataseg_end_seen)
3318 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3319 a page could be saved in the data segment. */
3320 bfd_vma first, last;
3322 first = -exp_data_seg.base & (exp_data_seg.pagesize - 1);
3323 last = exp_data_seg.end & (exp_data_seg.pagesize - 1);
3325 && ((exp_data_seg.base & ~(exp_data_seg.pagesize - 1))
3326 != (exp_data_seg.end & ~(exp_data_seg.pagesize - 1)))
3327 && first + last <= exp_data_seg.pagesize)
3329 exp_data_seg.phase = exp_dataseg_adjust;
3330 result = lang_size_sections_1 (s, output_section_statement, prev,
3339 lang_do_assignments (s, output_section_statement, fill, dot)
3340 lang_statement_union_type *s;
3341 lang_output_section_statement_type *output_section_statement;
3345 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3346 ldfile_output_machine);
3348 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3350 switch (s->header.type)
3352 case lang_constructors_statement_enum:
3353 dot = lang_do_assignments (constructor_list.head,
3354 output_section_statement,
3359 case lang_output_section_statement_enum:
3361 lang_output_section_statement_type *os;
3363 os = &(s->output_section_statement);
3364 if (os->bfd_section != NULL)
3366 dot = os->bfd_section->vma;
3367 (void) lang_do_assignments (os->children.head, os,
3369 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3374 /* If nothing has been placed into the output section then
3375 it won't have a bfd_section. */
3376 if (os->bfd_section)
3378 os->bfd_section->lma
3379 = exp_get_abs_int (os->load_base, 0, "load base",
3380 lang_final_phase_enum);
3385 case lang_wild_statement_enum:
3387 dot = lang_do_assignments (s->wild_statement.children.head,
3388 output_section_statement,
3393 case lang_object_symbols_statement_enum:
3394 case lang_output_statement_enum:
3395 case lang_target_statement_enum:
3397 case lang_common_statement_enum:
3400 case lang_data_statement_enum:
3402 etree_value_type value;
3404 value = exp_fold_tree (s->data_statement.exp,
3406 lang_final_phase_enum, dot, &dot);
3407 s->data_statement.value = value.value;
3409 einfo (_("%F%P: invalid data statement\n"));
3413 switch (s->data_statement.type)
3437 case lang_reloc_statement_enum:
3439 etree_value_type value;
3441 value = exp_fold_tree (s->reloc_statement.addend_exp,
3443 lang_final_phase_enum, dot, &dot);
3444 s->reloc_statement.addend_value = value.value;
3446 einfo (_("%F%P: invalid reloc statement\n"));
3448 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
3451 case lang_input_section_enum:
3453 asection *in = s->input_section.section;
3455 if (in->_cooked_size != 0)
3456 dot += in->_cooked_size / opb;
3458 dot += in->_raw_size / opb;
3462 case lang_input_statement_enum:
3464 case lang_fill_statement_enum:
3465 fill = s->fill_statement.fill;
3467 case lang_assignment_statement_enum:
3469 exp_fold_tree (s->assignment_statement.exp,
3470 output_section_statement,
3471 lang_final_phase_enum,
3477 case lang_padding_statement_enum:
3478 dot += s->padding_statement.size / opb;
3481 case lang_group_statement_enum:
3482 dot = lang_do_assignments (s->group_statement.children.head,
3483 output_section_statement,
3491 case lang_address_statement_enum:
3499 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3500 operator .startof. (section_name), it produces an undefined symbol
3501 .startof.section_name. Similarly, when it sees
3502 .sizeof. (section_name), it produces an undefined symbol
3503 .sizeof.section_name. For all the output sections, we look for
3504 such symbols, and set them to the correct value. */
3511 if (link_info.relocateable)
3514 for (s = output_bfd->sections; s != NULL; s = s->next)
3516 const char *secname;
3518 struct bfd_link_hash_entry *h;
3520 secname = bfd_get_section_name (output_bfd, s);
3521 buf = xmalloc (10 + strlen (secname));
3523 sprintf (buf, ".startof.%s", secname);
3524 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3525 if (h != NULL && h->type == bfd_link_hash_undefined)
3527 h->type = bfd_link_hash_defined;
3528 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3529 h->u.def.section = bfd_abs_section_ptr;
3532 sprintf (buf, ".sizeof.%s", secname);
3533 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3534 if (h != NULL && h->type == bfd_link_hash_undefined)
3538 opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3539 ldfile_output_machine);
3540 h->type = bfd_link_hash_defined;
3541 if (s->_cooked_size != 0)
3542 h->u.def.value = s->_cooked_size / opb;
3544 h->u.def.value = s->_raw_size / opb;
3545 h->u.def.section = bfd_abs_section_ptr;
3555 struct bfd_link_hash_entry *h;
3558 if (link_info.relocateable || link_info.shared)
3563 if (entry_symbol.name == (const char *) NULL)
3565 /* No entry has been specified. Look for start, but don't warn
3566 if we don't find it. */
3567 entry_symbol.name = "start";
3571 h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
3572 false, false, true);
3573 if (h != (struct bfd_link_hash_entry *) NULL
3574 && (h->type == bfd_link_hash_defined
3575 || h->type == bfd_link_hash_defweak)
3576 && h->u.def.section->output_section != NULL)
3580 val = (h->u.def.value
3581 + bfd_get_section_vma (output_bfd,
3582 h->u.def.section->output_section)
3583 + h->u.def.section->output_offset);
3584 if (! bfd_set_start_address (output_bfd, val))
3585 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
3592 /* We couldn't find the entry symbol. Try parsing it as a
3594 val = bfd_scan_vma (entry_symbol.name, &send, 0);
3597 if (! bfd_set_start_address (output_bfd, val))
3598 einfo (_("%P%F: can't set start address\n"));
3604 /* Can't find the entry symbol, and it's not a number. Use
3605 the first address in the text section. */
3606 ts = bfd_get_section_by_name (output_bfd, entry_section);
3607 if (ts != (asection *) NULL)
3610 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3612 bfd_get_section_vma (output_bfd, ts));
3613 if (! bfd_set_start_address (output_bfd,
3614 bfd_get_section_vma (output_bfd,
3616 einfo (_("%P%F: can't set start address\n"));
3621 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3628 /* This is a small function used when we want to ignore errors from
3632 #ifdef ANSI_PROTOTYPES
3633 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
3635 ignore_bfd_errors (s)
3636 const char *s ATTRIBUTE_UNUSED;
3639 /* Don't do anything. */
3642 /* Check that the architecture of all the input files is compatible
3643 with the output file. Also call the backend to let it do any
3644 other checking that is needed. */
3649 lang_statement_union_type *file;
3651 const bfd_arch_info_type *compatible;
3653 for (file = file_chain.head;
3654 file != (lang_statement_union_type *) NULL;
3655 file = file->input_statement.next)
3657 input_bfd = file->input_statement.the_bfd;
3658 compatible = bfd_arch_get_compatible (input_bfd, output_bfd);
3660 /* In general it is not possible to perform a relocatable
3661 link between differing object formats when the input
3662 file has relocations, because the relocations in the
3663 input format may not have equivalent representations in
3664 the output format (and besides BFD does not translate
3665 relocs for other link purposes than a final link). */
3666 if ((link_info.relocateable || link_info.emitrelocations)
3667 && (compatible == NULL
3668 || bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd))
3669 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
3671 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3672 bfd_get_target (input_bfd), input_bfd,
3673 bfd_get_target (output_bfd), output_bfd);
3674 /* einfo with %F exits. */
3677 if (compatible == NULL)
3679 if (command_line.warn_mismatch)
3680 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3681 bfd_printable_name (input_bfd), input_bfd,
3682 bfd_printable_name (output_bfd));
3684 else if (bfd_count_sections (input_bfd))
3686 /* If the input bfd has no contents, it shouldn't set the
3687 private data of the output bfd. */
3689 bfd_error_handler_type pfn = NULL;
3691 /* If we aren't supposed to warn about mismatched input
3692 files, temporarily set the BFD error handler to a
3693 function which will do nothing. We still want to call
3694 bfd_merge_private_bfd_data, since it may set up
3695 information which is needed in the output file. */
3696 if (! command_line.warn_mismatch)
3697 pfn = bfd_set_error_handler (ignore_bfd_errors);
3698 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3700 if (command_line.warn_mismatch)
3701 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3704 if (! command_line.warn_mismatch)
3705 bfd_set_error_handler (pfn);
3710 /* Look through all the global common symbols and attach them to the
3711 correct section. The -sort-common command line switch may be used
3712 to roughly sort the entries by size. */
3717 if (command_line.inhibit_common_definition)
3719 if (link_info.relocateable
3720 && ! command_line.force_common_definition)
3723 if (! config.sort_common)
3724 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3729 for (power = 4; power >= 0; power--)
3730 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3735 /* Place one common symbol in the correct section. */
3738 lang_one_common (h, info)
3739 struct bfd_link_hash_entry *h;
3742 unsigned int power_of_two;
3745 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3746 ldfile_output_machine);
3748 if (h->type != bfd_link_hash_common)
3752 power_of_two = h->u.c.p->alignment_power;
3754 if (config.sort_common
3755 && power_of_two < (unsigned int) *(int *) info)
3758 section = h->u.c.p->section;
3760 /* Increase the size of the section. */
3761 section->_cooked_size = align_n ((section->_cooked_size + opb - 1) / opb,
3762 (bfd_vma) 1 << power_of_two) * opb;
3764 /* Adjust the alignment if necessary. */
3765 if (power_of_two > section->alignment_power)
3766 section->alignment_power = power_of_two;
3768 /* Change the symbol from common to defined. */
3769 h->type = bfd_link_hash_defined;
3770 h->u.def.section = section;
3771 h->u.def.value = section->_cooked_size;
3773 /* Increase the size of the section. */
3774 section->_cooked_size += size;
3776 /* Make sure the section is allocated in memory, and make sure that
3777 it is no longer a common section. */
3778 section->flags |= SEC_ALLOC;
3779 section->flags &= ~SEC_IS_COMMON;
3781 if (config.map_file != NULL)
3783 static boolean header_printed;
3788 if (! header_printed)
3790 minfo (_("\nAllocating common symbols\n"));
3791 minfo (_("Common symbol size file\n\n"));
3792 header_printed = true;
3795 name = demangle (h->root.string);
3797 len = strlen (name);
3812 if (size <= 0xffffffff)
3813 sprintf (buf, "%lx", (unsigned long) size);
3815 sprintf_vma (buf, size);
3825 minfo ("%B\n", section->owner);
3831 /* Run through the input files and ensure that every input section has
3832 somewhere to go. If one is found without a destination then create
3833 an input request and place it into the statement tree. */
3836 lang_place_orphans ()
3838 LANG_FOR_EACH_INPUT_STATEMENT (file)
3842 for (s = file->the_bfd->sections;
3843 s != (asection *) NULL;
3846 if (s->output_section == (asection *) NULL)
3848 /* This section of the file is not attatched, root
3849 around for a sensible place for it to go. */
3851 if (file->just_syms_flag)
3855 else if (strcmp (s->name, "COMMON") == 0)
3857 /* This is a lonely common section which must have
3858 come from an archive. We attach to the section
3859 with the wildcard. */
3860 if (! link_info.relocateable
3861 || command_line.force_common_definition)
3863 if (default_common_section == NULL)
3866 /* This message happens when using the
3867 svr3.ifile linker script, so I have
3869 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3871 default_common_section =
3872 lang_output_section_statement_lookup (".bss");
3875 lang_add_section (&default_common_section->children, s,
3876 default_common_section, file);
3879 else if (ldemul_place_orphan (file, s))
3883 lang_output_section_statement_type *os;
3885 os = lang_output_section_statement_lookup (s->name);
3886 lang_add_section (&os->children, s, os, file);
3894 lang_set_flags (ptr, flags, invert)
3895 lang_memory_region_type *ptr;
3899 flagword *ptr_flags;
3901 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
3907 *ptr_flags |= SEC_ALLOC;
3911 *ptr_flags |= SEC_READONLY;
3915 *ptr_flags |= SEC_DATA;
3919 *ptr_flags |= SEC_CODE;
3924 *ptr_flags |= SEC_LOAD;
3928 einfo (_("%P%F: invalid syntax in flags\n"));
3935 /* Call a function on each input file. This function will be called
3936 on an archive, but not on the elements. */
3939 lang_for_each_input_file (func)
3940 void (*func) PARAMS ((lang_input_statement_type *));
3942 lang_input_statement_type *f;
3944 for (f = (lang_input_statement_type *) input_file_chain.head;
3946 f = (lang_input_statement_type *) f->next_real_file)
3950 /* Call a function on each file. The function will be called on all
3951 the elements of an archive which are included in the link, but will
3952 not be called on the archive file itself. */
3955 lang_for_each_file (func)
3956 void (*func) PARAMS ((lang_input_statement_type *));
3958 LANG_FOR_EACH_INPUT_STATEMENT (f)
3969 lang_for_each_input_section (func)
3970 void (*func) PARAMS ((bfd *ab, asection *as));
3972 LANG_FOR_EACH_INPUT_STATEMENT (f)
3976 for (s = f->the_bfd->sections;
3977 s != (asection *) NULL;
3980 func (f->the_bfd, s);
3988 ldlang_add_file (entry)
3989 lang_input_statement_type *entry;
3993 lang_statement_append (&file_chain,
3994 (lang_statement_union_type *) entry,
3997 /* The BFD linker needs to have a list of all input BFDs involved in
3999 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
4000 ASSERT (entry->the_bfd != output_bfd);
4001 for (pp = &link_info.input_bfds;
4002 *pp != (bfd *) NULL;
4003 pp = &(*pp)->link_next)
4005 *pp = entry->the_bfd;
4006 entry->the_bfd->usrdata = (PTR) entry;
4007 bfd_set_gp_size (entry->the_bfd, g_switch_value);
4009 /* Look through the sections and check for any which should not be
4010 included in the link. We need to do this now, so that we can
4011 notice when the backend linker tries to report multiple
4012 definition errors for symbols which are in sections we aren't
4013 going to link. FIXME: It might be better to entirely ignore
4014 symbols which are defined in sections which are going to be
4015 discarded. This would require modifying the backend linker for
4016 each backend which might set the SEC_LINK_ONCE flag. If we do
4017 this, we should probably handle SEC_EXCLUDE in the same way. */
4019 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
4023 lang_add_output (name, from_script)
4027 /* Make -o on command line override OUTPUT in script. */
4028 if (!had_output_filename || !from_script)
4030 output_filename = name;
4031 had_output_filename = true;
4035 static lang_output_section_statement_type *current_section;
4047 for (l = 0; l < 32; l++)
4049 if (i >= (unsigned int) x)
4057 lang_output_section_statement_type *
4058 lang_enter_output_section_statement (output_section_statement_name,
4059 address_exp, sectype, block_value,
4060 align, subalign, ebase)
4061 const char *output_section_statement_name;
4062 etree_type *address_exp;
4063 enum section_type sectype;
4064 bfd_vma block_value;
4066 etree_type *subalign;
4069 lang_output_section_statement_type *os;
4073 lang_output_section_statement_lookup (output_section_statement_name);
4075 /* Add this statement to tree. */
4077 add_statement (lang_output_section_statement_enum,
4078 output_section_statement);
4080 /* Make next things chain into subchain of this. */
4082 if (os->addr_tree == (etree_type *) NULL)
4084 os->addr_tree = address_exp;
4086 os->sectype = sectype;
4087 if (sectype != noload_section)
4088 os->flags = SEC_NO_FLAGS;
4090 os->flags = SEC_NEVER_LOAD;
4091 os->block_value = block_value ? block_value : 1;
4092 stat_ptr = &os->children;
4094 os->subsection_alignment =
4095 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
4096 os->section_alignment =
4097 topower (exp_get_value_int (align, -1, "section alignment", 0));
4099 os->load_base = ebase;
4106 lang_output_statement_type *new =
4107 new_stat (lang_output_statement, stat_ptr);
4109 new->name = output_filename;
4112 /* Reset the current counters in the regions. */
4115 lang_reset_memory_regions ()
4117 lang_memory_region_type *p = lang_memory_region_list;
4120 for (p = lang_memory_region_list;
4121 p != (lang_memory_region_type *) NULL;
4124 p->old_length = (bfd_size_type) (p->current - p->origin);
4125 p->current = p->origin;
4128 for (o = output_bfd->sections; o != NULL; o = o->next)
4132 /* If the wild pattern was marked KEEP, the member sections
4133 should be as well. */
4136 gc_section_callback (ptr, sec, section, file, data)
4137 lang_wild_statement_type *ptr;
4138 struct wildcard_list *sec ATTRIBUTE_UNUSED;
4140 lang_input_statement_type *file ATTRIBUTE_UNUSED;
4141 PTR data ATTRIBUTE_UNUSED;
4143 if (ptr->keep_sections)
4144 section->flags |= SEC_KEEP;
4147 /* Handle a wild statement, marking it against GC. */
4151 lang_wild_statement_type *s;
4153 walk_wild (s, gc_section_callback, NULL);
4156 /* Iterate over sections marking them against GC. */
4159 lang_gc_sections_1 (s)
4160 lang_statement_union_type *s;
4162 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
4164 switch (s->header.type)
4166 case lang_wild_statement_enum:
4167 lang_gc_wild (&s->wild_statement);
4169 case lang_constructors_statement_enum:
4170 lang_gc_sections_1 (constructor_list.head);
4172 case lang_output_section_statement_enum:
4173 lang_gc_sections_1 (s->output_section_statement.children.head);
4175 case lang_group_statement_enum:
4176 lang_gc_sections_1 (s->group_statement.children.head);
4187 struct bfd_link_hash_entry *h;
4188 ldlang_undef_chain_list_type *ulist;
4190 /* Keep all sections so marked in the link script. */
4192 lang_gc_sections_1 (statement_list.head);
4194 /* Keep all sections containing symbols undefined on the command-line,
4195 and the section containing the entry symbol. */
4197 for (ulist = link_info.gc_sym_list; ulist; ulist = ulist->next)
4199 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
4200 false, false, false);
4202 if (h != (struct bfd_link_hash_entry *) NULL
4203 && (h->type == bfd_link_hash_defined
4204 || h->type == bfd_link_hash_defweak)
4205 && ! bfd_is_abs_section (h->u.def.section))
4207 h->u.def.section->flags |= SEC_KEEP;
4211 bfd_gc_sections (output_bfd, &link_info);
4217 lang_reasonable_defaults ();
4218 current_target = default_target;
4220 /* Open the output file. */
4221 lang_for_each_statement (ldlang_open_output);
4223 ldemul_create_output_section_statements ();
4225 /* Add to the hash table all undefineds on the command line. */
4226 lang_place_undefineds ();
4228 already_linked_table_init ();
4230 /* Create a bfd for each input file. */
4231 current_target = default_target;
4232 open_input_bfds (statement_list.head, false);
4234 link_info.gc_sym_list = &entry_symbol;
4235 if (entry_symbol.name == NULL)
4236 link_info.gc_sym_list = ldlang_undef_chain_list_head;
4238 ldemul_after_open ();
4240 already_linked_table_free ();
4242 /* Make sure that we're not mixing architectures. We call this
4243 after all the input files have been opened, but before we do any
4244 other processing, so that any operations merge_private_bfd_data
4245 does on the output file will be known during the rest of the
4249 /* Handle .exports instead of a version script if we're told to do so. */
4250 if (command_line.version_exports_section)
4251 lang_do_version_exports_section ();
4253 /* Build all sets based on the information gathered from the input
4255 ldctor_build_sets ();
4257 /* Remove unreferenced sections if asked to. */
4258 if (command_line.gc_sections)
4259 lang_gc_sections ();
4261 /* If there were any SEC_MERGE sections, finish their merging, so that
4262 section sizes can be computed. This has to be done after GC of sections,
4263 so that GCed sections are not merged, but before assigning output
4264 sections, since removing whole input sections is hard then. */
4265 bfd_merge_sections (output_bfd, &link_info);
4267 /* Size up the common data. */
4270 /* Run through the contours of the script and attach input sections
4271 to the correct output sections. */
4272 map_input_to_output_sections (statement_list.head, (char *) NULL,
4273 (lang_output_section_statement_type *) NULL);
4275 /* Find any sections not attached explicitly and handle them. */
4276 lang_place_orphans ();
4278 if (! link_info.relocateable)
4280 /* Look for a text section and set the readonly attribute in it. */
4281 asection *found = bfd_get_section_by_name (output_bfd, ".text");
4283 if (found != (asection *) NULL)
4285 if (config.text_read_only)
4286 found->flags |= SEC_READONLY;
4288 found->flags &= ~SEC_READONLY;
4292 /* Do anything special before sizing sections. This is where ELF
4293 and other back-ends size dynamic sections. */
4294 ldemul_before_allocation ();
4296 if (!link_info.relocateable)
4297 strip_excluded_output_sections ();
4299 /* We must record the program headers before we try to fix the
4300 section positions, since they will affect SIZEOF_HEADERS. */
4301 lang_record_phdrs ();
4303 /* Size up the sections. */
4304 lang_size_sections (statement_list.head,
4306 &statement_list.head, 0, (bfd_vma) 0, NULL);
4308 /* Now run around and relax if we can. */
4309 if (command_line.relax)
4311 /* Keep relaxing until bfd_relax_section gives up. */
4312 boolean relax_again;
4316 lang_reset_memory_regions ();
4318 relax_again = false;
4320 /* Note: pe-dll.c does something like this also. If you find
4321 you need to change this code, you probably need to change
4322 pe-dll.c also. DJ */
4324 /* Do all the assignments with our current guesses as to
4326 lang_do_assignments (statement_list.head,
4328 (fill_type *) 0, (bfd_vma) 0);
4330 /* Perform another relax pass - this time we know where the
4331 globals are, so can make a better guess. */
4332 lang_size_sections (statement_list.head,
4334 &statement_list.head, 0, (bfd_vma) 0,
4337 while (relax_again);
4340 /* See if anything special should be done now we know how big
4342 ldemul_after_allocation ();
4344 /* Fix any .startof. or .sizeof. symbols. */
4345 lang_set_startof ();
4347 /* Do all the assignments, now that we know the final resting places
4348 of all the symbols. */
4350 lang_do_assignments (statement_list.head,
4352 (fill_type *) 0, (bfd_vma) 0);
4354 /* Make sure that the section addresses make sense. */
4355 if (! link_info.relocateable
4356 && command_line.check_section_addresses)
4357 lang_check_section_addresses ();
4365 /* EXPORTED TO YACC */
4368 lang_add_wild (filespec, section_list, keep_sections)
4369 struct wildcard_spec *filespec;
4370 struct wildcard_list *section_list;
4371 boolean keep_sections;
4373 struct wildcard_list *curr, *next;
4374 lang_wild_statement_type *new;
4376 /* Reverse the list as the parser puts it back to front. */
4377 for (curr = section_list, section_list = NULL;
4379 section_list = curr, curr = next)
4381 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
4382 placed_commons = true;
4385 curr->next = section_list;
4388 if (filespec != NULL && filespec->name != NULL)
4390 if (strcmp (filespec->name, "*") == 0)
4391 filespec->name = NULL;
4392 else if (! wildcardp (filespec->name))
4393 lang_has_input_file = true;
4396 new = new_stat (lang_wild_statement, stat_ptr);
4397 new->filename = NULL;
4398 new->filenames_sorted = false;
4399 if (filespec != NULL)
4401 new->filename = filespec->name;
4402 new->filenames_sorted = filespec->sorted;
4404 new->section_list = section_list;
4405 new->keep_sections = keep_sections;
4406 lang_list_init (&new->children);
4410 lang_section_start (name, address)
4412 etree_type *address;
4414 lang_address_statement_type *ad;
4416 ad = new_stat (lang_address_statement, stat_ptr);
4417 ad->section_name = name;
4418 ad->address = address;
4421 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4422 because of a -e argument on the command line, or zero if this is
4423 called by ENTRY in a linker script. Command line arguments take
4427 lang_add_entry (name, cmdline)
4431 if (entry_symbol.name == NULL
4433 || ! entry_from_cmdline)
4435 entry_symbol.name = name;
4436 entry_from_cmdline = cmdline;
4441 lang_add_target (name)
4444 lang_target_statement_type *new = new_stat (lang_target_statement,
4460 map_option_f = true;
4468 lang_add_fill (fill)
4471 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4478 lang_add_data (type, exp)
4480 union etree_union *exp;
4483 lang_data_statement_type *new = new_stat (lang_data_statement,
4491 /* Create a new reloc statement. RELOC is the BFD relocation type to
4492 generate. HOWTO is the corresponding howto structure (we could
4493 look this up, but the caller has already done so). SECTION is the
4494 section to generate a reloc against, or NAME is the name of the
4495 symbol to generate a reloc against. Exactly one of SECTION and
4496 NAME must be NULL. ADDEND is an expression for the addend. */
4499 lang_add_reloc (reloc, howto, section, name, addend)
4500 bfd_reloc_code_real_type reloc;
4501 reloc_howto_type *howto;
4504 union etree_union *addend;
4506 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
4510 p->section = section;
4512 p->addend_exp = addend;
4514 p->addend_value = 0;
4515 p->output_section = NULL;
4519 lang_assignment_statement_type *
4520 lang_add_assignment (exp)
4523 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4531 lang_add_attribute (attribute)
4532 enum statement_enum attribute;
4534 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4541 if (startup_file != (char *) NULL)
4543 einfo (_("%P%Fmultiple STARTUP files\n"));
4545 first_file->filename = name;
4546 first_file->local_sym_name = name;
4547 first_file->real = true;
4549 startup_file = name;
4556 lang_float_flag = maybe;
4560 /* Work out the load- and run-time regions from a script statement, and
4561 store them in *LMA_REGION and *REGION respectively.
4563 MEMSPEC is the name of the run-time region, or "*default*" if the
4564 statement didn't specify one. LMA_MEMSPEC is the name of the
4565 load-time region, or null if the statement didn't specify one.
4566 HAVE_LMA_P is true if the statement had an explicit load address.
4568 It is an error to specify both a load region and a load address. */
4571 lang_get_regions (region, lma_region, memspec, lma_memspec, have_lma_p)
4572 struct memory_region_struct **region, **lma_region;
4573 const char *memspec, *lma_memspec;
4576 *lma_region = lang_memory_region_lookup (lma_memspec);
4578 /* If no runtime region has been given, but the load region has
4579 been, use the load region. */
4580 if (lma_memspec != 0 && strcmp (memspec, "*default*") == 0)
4581 *region = *lma_region;
4583 *region = lang_memory_region_lookup (memspec);
4585 if (have_lma_p && lma_memspec != 0)
4586 einfo (_("%X%P:%S: section has both a load address and a load region\n"));
4590 lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
4592 const char *memspec;
4593 struct lang_output_section_phdr_list *phdrs;
4594 const char *lma_memspec;
4596 lang_get_regions (¤t_section->region,
4597 ¤t_section->lma_region,
4598 memspec, lma_memspec,
4599 current_section->load_base != 0);
4600 current_section->fill = fill;
4601 current_section->phdrs = phdrs;
4602 stat_ptr = &statement_list;
4605 /* Create an absolute symbol with the given name with the value of the
4606 address of first byte of the section named.
4608 If the symbol already exists, then do nothing. */
4611 lang_abs_symbol_at_beginning_of (secname, name)
4612 const char *secname;
4615 struct bfd_link_hash_entry *h;
4617 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4618 if (h == (struct bfd_link_hash_entry *) NULL)
4619 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4621 if (h->type == bfd_link_hash_new
4622 || h->type == bfd_link_hash_undefined)
4626 h->type = bfd_link_hash_defined;
4628 sec = bfd_get_section_by_name (output_bfd, secname);
4629 if (sec == (asection *) NULL)
4632 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4634 h->u.def.section = bfd_abs_section_ptr;
4638 /* Create an absolute symbol with the given name with the value of the
4639 address of the first byte after the end of the section named.
4641 If the symbol already exists, then do nothing. */
4644 lang_abs_symbol_at_end_of (secname, name)
4645 const char *secname;
4648 struct bfd_link_hash_entry *h;
4650 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4651 if (h == (struct bfd_link_hash_entry *) NULL)
4652 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4654 if (h->type == bfd_link_hash_new
4655 || h->type == bfd_link_hash_undefined)
4659 h->type = bfd_link_hash_defined;
4661 sec = bfd_get_section_by_name (output_bfd, secname);
4662 if (sec == (asection *) NULL)
4665 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4666 + bfd_section_size (output_bfd, sec) /
4667 bfd_octets_per_byte (output_bfd));
4669 h->u.def.section = bfd_abs_section_ptr;
4674 lang_statement_append (list, element, field)
4675 lang_statement_list_type *list;
4676 lang_statement_union_type *element;
4677 lang_statement_union_type **field;
4679 *(list->tail) = element;
4683 /* Set the output format type. -oformat overrides scripts. */
4686 lang_add_output_format (format, big, little, from_script)
4692 if (output_target == NULL || !from_script)
4694 if (command_line.endian == ENDIAN_BIG
4697 else if (command_line.endian == ENDIAN_LITTLE
4701 output_target = format;
4705 /* Enter a group. This creates a new lang_group_statement, and sets
4706 stat_ptr to build new statements within the group. */
4711 lang_group_statement_type *g;
4713 g = new_stat (lang_group_statement, stat_ptr);
4714 lang_list_init (&g->children);
4715 stat_ptr = &g->children;
4718 /* Leave a group. This just resets stat_ptr to start writing to the
4719 regular list of statements again. Note that this will not work if
4720 groups can occur inside anything else which can adjust stat_ptr,
4721 but currently they can't. */
4726 stat_ptr = &statement_list;
4729 /* Add a new program header. This is called for each entry in a PHDRS
4730 command in a linker script. */
4733 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4741 struct lang_phdr *n, **pp;
4743 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4746 n->type = exp_get_value_int (type, 0, "program header type",
4747 lang_final_phase_enum);
4748 n->filehdr = filehdr;
4753 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4758 /* Record the program header information in the output BFD. FIXME: We
4759 should not be calling an ELF specific function here. */
4762 lang_record_phdrs ()
4766 struct lang_output_section_phdr_list *last;
4767 struct lang_phdr *l;
4768 lang_statement_union_type *u;
4771 secs = (asection **) xmalloc (alc * sizeof (asection *));
4773 for (l = lang_phdr_list; l != NULL; l = l->next)
4780 for (u = lang_output_section_statement.head;
4782 u = u->output_section_statement.next)
4784 lang_output_section_statement_type *os;
4785 struct lang_output_section_phdr_list *pl;
4787 os = &u->output_section_statement;
4794 if (os->sectype == noload_section
4795 || os->bfd_section == NULL
4796 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4801 if (os->bfd_section == NULL)
4804 for (; pl != NULL; pl = pl->next)
4806 if (strcmp (pl->name, l->name) == 0)
4811 secs = ((asection **)
4812 xrealloc (secs, alc * sizeof (asection *)));
4814 secs[c] = os->bfd_section;
4821 if (l->flags == NULL)
4824 flags = exp_get_vma (l->flags, 0, "phdr flags",
4825 lang_final_phase_enum);
4830 at = exp_get_vma (l->at, 0, "phdr load address",
4831 lang_final_phase_enum);
4833 if (! bfd_record_phdr (output_bfd, l->type,
4834 l->flags != NULL, flags, l->at != NULL,
4835 at, l->filehdr, l->phdrs, c, secs))
4836 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4841 /* Make sure all the phdr assignments succeeded. */
4842 for (u = lang_output_section_statement.head;
4844 u = u->output_section_statement.next)
4846 struct lang_output_section_phdr_list *pl;
4848 if (u->output_section_statement.bfd_section == NULL)
4851 for (pl = u->output_section_statement.phdrs;
4854 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4855 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4856 u->output_section_statement.name, pl->name);
4860 /* Record a list of sections which may not be cross referenced. */
4863 lang_add_nocrossref (l)
4864 struct lang_nocrossref *l;
4866 struct lang_nocrossrefs *n;
4868 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4869 n->next = nocrossref_list;
4871 nocrossref_list = n;
4873 /* Set notice_all so that we get informed about all symbols. */
4874 link_info.notice_all = true;
4877 /* Overlay handling. We handle overlays with some static variables. */
4879 /* The overlay virtual address. */
4880 static etree_type *overlay_vma;
4882 /* An expression for the maximum section size seen so far. */
4883 static etree_type *overlay_max;
4885 /* A list of all the sections in this overlay. */
4887 struct overlay_list {
4888 struct overlay_list *next;
4889 lang_output_section_statement_type *os;
4892 static struct overlay_list *overlay_list;
4894 /* Start handling an overlay. */
4897 lang_enter_overlay (vma_expr)
4898 etree_type *vma_expr;
4900 /* The grammar should prevent nested overlays from occurring. */
4901 ASSERT (overlay_vma == NULL && overlay_max == NULL);
4903 overlay_vma = vma_expr;
4906 /* Start a section in an overlay. We handle this by calling
4907 lang_enter_output_section_statement with the correct VMA.
4908 lang_leave_overlay sets up the LMA and memory regions. */
4911 lang_enter_overlay_section (name)
4914 struct overlay_list *n;
4917 lang_enter_output_section_statement (name, overlay_vma, normal_section,
4920 /* If this is the first section, then base the VMA of future
4921 sections on this one. This will work correctly even if `.' is
4922 used in the addresses. */
4923 if (overlay_list == NULL)
4924 overlay_vma = exp_nameop (ADDR, name);
4926 /* Remember the section. */
4927 n = (struct overlay_list *) xmalloc (sizeof *n);
4928 n->os = current_section;
4929 n->next = overlay_list;
4932 size = exp_nameop (SIZEOF, name);
4934 /* Arrange to work out the maximum section end address. */
4935 if (overlay_max == NULL)
4938 overlay_max = exp_binop (MAX_K, overlay_max, size);
4941 /* Finish a section in an overlay. There isn't any special to do
4945 lang_leave_overlay_section (fill, phdrs)
4947 struct lang_output_section_phdr_list *phdrs;
4954 name = current_section->name;
4956 /* For now, assume that "*default*" is the run-time memory region and
4957 that no load-time region has been specified. It doesn't really
4958 matter what we say here, since lang_leave_overlay will override it. */
4959 lang_leave_output_section_statement (fill, "*default*", phdrs, 0);
4961 /* Define the magic symbols. */
4963 clean = xmalloc (strlen (name) + 1);
4965 for (s1 = name; *s1 != '\0'; s1++)
4966 if (ISALNUM (*s1) || *s1 == '_')
4970 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4971 sprintf (buf, "__load_start_%s", clean);
4972 lang_add_assignment (exp_assop ('=', buf,
4973 exp_nameop (LOADADDR, name)));
4975 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4976 sprintf (buf, "__load_stop_%s", clean);
4977 lang_add_assignment (exp_assop ('=', buf,
4979 exp_nameop (LOADADDR, name),
4980 exp_nameop (SIZEOF, name))));
4985 /* Finish an overlay. If there are any overlay wide settings, this
4986 looks through all the sections in the overlay and sets them. */
4989 lang_leave_overlay (lma_expr, nocrossrefs, fill, memspec, phdrs, lma_memspec)
4990 etree_type *lma_expr;
4993 const char *memspec;
4994 struct lang_output_section_phdr_list *phdrs;
4995 const char *lma_memspec;
4997 lang_memory_region_type *region;
4998 lang_memory_region_type *lma_region;
4999 struct overlay_list *l;
5000 struct lang_nocrossref *nocrossref;
5002 lang_get_regions (®ion, &lma_region,
5003 memspec, lma_memspec,
5008 /* After setting the size of the last section, set '.' to end of the
5010 if (overlay_list != NULL)
5011 overlay_list->os->update_dot_tree
5012 = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
5017 struct overlay_list *next;
5019 if (fill != (fill_type *) 0 && l->os->fill == (fill_type *) 0)
5022 l->os->region = region;
5023 l->os->lma_region = lma_region;
5025 /* The first section has the load address specified in the
5026 OVERLAY statement. The rest are worked out from that.
5027 The base address is not needed (and should be null) if
5028 an LMA region was specified. */
5030 l->os->load_base = lma_expr;
5031 else if (lma_region == 0)
5032 l->os->load_base = exp_binop ('+',
5033 exp_nameop (LOADADDR, l->next->os->name),
5034 exp_nameop (SIZEOF, l->next->os->name));
5036 if (phdrs != NULL && l->os->phdrs == NULL)
5037 l->os->phdrs = phdrs;
5041 struct lang_nocrossref *nc;
5043 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
5044 nc->name = l->os->name;
5045 nc->next = nocrossref;
5054 if (nocrossref != NULL)
5055 lang_add_nocrossref (nocrossref);
5058 overlay_list = NULL;
5062 /* Version handling. This is only useful for ELF. */
5064 /* This global variable holds the version tree that we build. */
5066 struct bfd_elf_version_tree *lang_elf_version_info;
5069 lang_vers_match_lang_c (expr, sym)
5070 struct bfd_elf_version_expr *expr;
5073 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5075 return fnmatch (expr->pattern, sym, 0) == 0;
5079 lang_vers_match_lang_cplusplus (expr, sym)
5080 struct bfd_elf_version_expr *expr;
5086 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5089 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
5092 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
5093 Should we early out false in this case? */
5094 result = fnmatch (expr->pattern, sym, 0) == 0;
5098 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5106 lang_vers_match_lang_java (expr, sym)
5107 struct bfd_elf_version_expr *expr;
5113 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5116 alt_sym = cplus_demangle (sym, DMGL_JAVA);
5119 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
5120 Should we early out false in this case? */
5121 result = fnmatch (expr->pattern, sym, 0) == 0;
5125 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5132 /* This is called for each variable name or match expression. */
5134 struct bfd_elf_version_expr *
5135 lang_new_vers_pattern (orig, new, lang)
5136 struct bfd_elf_version_expr *orig;
5140 struct bfd_elf_version_expr *ret;
5142 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
5148 if (lang == NULL || strcasecmp (lang, "C") == 0)
5149 ret->match = lang_vers_match_lang_c;
5150 else if (strcasecmp (lang, "C++") == 0)
5151 ret->match = lang_vers_match_lang_cplusplus;
5152 else if (strcasecmp (lang, "Java") == 0)
5153 ret->match = lang_vers_match_lang_java;
5156 einfo (_("%X%P: unknown language `%s' in version information\n"),
5158 ret->match = lang_vers_match_lang_c;
5161 return ldemul_new_vers_pattern (ret);
5164 /* This is called for each set of variable names and match
5167 struct bfd_elf_version_tree *
5168 lang_new_vers_node (globals, locals)
5169 struct bfd_elf_version_expr *globals;
5170 struct bfd_elf_version_expr *locals;
5172 struct bfd_elf_version_tree *ret;
5174 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
5178 ret->globals = globals;
5179 ret->locals = locals;
5181 ret->name_indx = (unsigned int) -1;
5186 /* This static variable keeps track of version indices. */
5188 static int version_index;
5190 /* This is called when we know the name and dependencies of the
5194 lang_register_vers_node (name, version, deps)
5196 struct bfd_elf_version_tree *version;
5197 struct bfd_elf_version_deps *deps;
5199 struct bfd_elf_version_tree *t, **pp;
5200 struct bfd_elf_version_expr *e1;
5205 if ((name[0] == '\0' && lang_elf_version_info != NULL)
5206 || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
5208 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5212 /* Make sure this node has a unique name. */
5213 for (t = lang_elf_version_info; t != NULL; t = t->next)
5214 if (strcmp (t->name, name) == 0)
5215 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
5217 /* Check the global and local match names, and make sure there
5218 aren't any duplicates. */
5220 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
5222 for (t = lang_elf_version_info; t != NULL; t = t->next)
5224 struct bfd_elf_version_expr *e2;
5226 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
5227 if (strcmp (e1->pattern, e2->pattern) == 0)
5228 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5233 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
5235 for (t = lang_elf_version_info; t != NULL; t = t->next)
5237 struct bfd_elf_version_expr *e2;
5239 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
5240 if (strcmp (e1->pattern, e2->pattern) == 0)
5241 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5246 version->deps = deps;
5247 version->name = name;
5248 if (name[0] != '\0')
5251 version->vernum = version_index;
5254 version->vernum = 0;
5256 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
5261 /* This is called when we see a version dependency. */
5263 struct bfd_elf_version_deps *
5264 lang_add_vers_depend (list, name)
5265 struct bfd_elf_version_deps *list;
5268 struct bfd_elf_version_deps *ret;
5269 struct bfd_elf_version_tree *t;
5271 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
5274 for (t = lang_elf_version_info; t != NULL; t = t->next)
5276 if (strcmp (t->name, name) == 0)
5278 ret->version_needed = t;
5283 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5289 lang_do_version_exports_section ()
5291 struct bfd_elf_version_expr *greg = NULL, *lreg;
5293 LANG_FOR_EACH_INPUT_STATEMENT (is)
5295 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5302 len = bfd_section_size (is->the_bfd, sec);
5303 contents = xmalloc (len);
5304 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
5305 einfo (_("%X%P: unable to read .exports section contents\n"), sec);
5308 while (p < contents + len)
5310 greg = lang_new_vers_pattern (greg, p, NULL);
5311 p = strchr (p, '\0') + 1;
5314 /* Do not free the contents, as we used them creating the regex. */
5316 /* Do not include this section in the link. */
5317 bfd_set_section_flags (is->the_bfd, sec,
5318 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5321 lreg = lang_new_vers_pattern (NULL, "*", NULL);
5322 lang_register_vers_node (command_line.version_exports_section,
5323 lang_new_vers_node (greg, lreg), NULL);
5327 lang_add_unique (name)
5330 struct unique_sections *ent;
5332 for (ent = unique_section_list; ent; ent = ent->next)
5333 if (strcmp (ent->name, name) == 0)
5336 ent = (struct unique_sections *) xmalloc (sizeof *ent);
5337 ent->name = xstrdup (name);
5338 ent->next = unique_section_list;
5339 unique_section_list = ent;