1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 #include "libiberty.h"
26 #include "safe-ctype.h"
44 static lang_statement_union_type *new_statement
45 PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
48 static struct obstack stat_obstack;
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52 static const char *startup_file;
53 static lang_statement_list_type input_file_chain;
54 static boolean placed_commons = false;
55 static lang_output_section_statement_type *default_common_section;
56 static boolean map_option_f;
57 static bfd_vma print_dot;
58 static lang_input_statement_type *first_file;
59 static const char *current_target;
60 static const char *output_target;
61 static lang_statement_list_type statement_list;
62 static struct lang_phdr *lang_phdr_list;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*) (lang_statement_union_type *),
66 lang_statement_union_type *));
67 static lang_input_statement_type *new_afile
68 PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
69 static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
70 static void lang_map_flags PARAMS ((flagword));
71 static void init_os PARAMS ((lang_output_section_statement_type *));
72 static void exp_init_os PARAMS ((etree_type *));
73 static void section_already_linked PARAMS ((bfd *, asection *, PTR));
74 static struct bfd_hash_entry *already_linked_newfunc
75 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
76 static void already_linked_table_init PARAMS ((void));
77 static void already_linked_table_free PARAMS ((void));
78 static boolean wildcardp PARAMS ((const char *));
79 static lang_statement_union_type *wild_sort
80 PARAMS ((lang_wild_statement_type *, struct wildcard_list *,
81 lang_input_statement_type *, asection *));
82 static void output_section_callback
83 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
84 lang_input_statement_type *, PTR));
85 static lang_input_statement_type *lookup_name PARAMS ((const char *));
86 static boolean load_symbols
87 PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
89 PARAMS ((lang_wild_statement_type *,
90 const char *, lang_output_section_statement_type *));
91 static bfd *open_output PARAMS ((const char *));
92 static void ldlang_open_output PARAMS ((lang_statement_union_type *));
93 static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
94 static void lang_reasonable_defaults PARAMS ((void));
95 static void insert_undefined PARAMS ((const char *));
96 static void lang_place_undefineds PARAMS ((void));
97 static void map_input_to_output_sections
98 PARAMS ((lang_statement_union_type *, const char *,
99 lang_output_section_statement_type *));
100 static void print_output_section_statement
101 PARAMS ((lang_output_section_statement_type *));
102 static void print_assignment
103 PARAMS ((lang_assignment_statement_type *,
104 lang_output_section_statement_type *));
105 static void print_input_statement PARAMS ((lang_input_statement_type *));
106 static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
107 static void print_input_section PARAMS ((lang_input_section_type *));
108 static void print_fill_statement PARAMS ((lang_fill_statement_type *));
109 static void print_data_statement PARAMS ((lang_data_statement_type *));
110 static void print_address_statement PARAMS ((lang_address_statement_type *));
111 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
112 static void print_padding_statement PARAMS ((lang_padding_statement_type *));
113 static void print_wild_statement
114 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
115 static void print_group
116 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
117 static void print_statement
118 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
119 static void print_statement_list
120 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
121 static void print_statements PARAMS ((void));
122 static void insert_pad
123 PARAMS ((lang_statement_union_type **, fill_type *,
124 unsigned int, asection *, bfd_vma));
125 static bfd_vma size_input_section
126 PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
127 fill_type *, bfd_vma));
128 static void lang_finish PARAMS ((void));
129 static void ignore_bfd_errors PARAMS ((const char *, ...));
130 static void lang_check PARAMS ((void));
131 static void lang_common PARAMS ((void));
132 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
133 static void lang_place_orphans PARAMS ((void));
134 static int topower PARAMS ((int));
135 static void lang_set_startof PARAMS ((void));
136 static void gc_section_callback
137 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
138 lang_input_statement_type *, PTR));
139 static void lang_get_regions PARAMS ((struct memory_region_struct **,
140 struct memory_region_struct **,
141 const char *, const char *, int));
142 static void lang_record_phdrs PARAMS ((void));
143 static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
144 static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
145 static void lang_gc_sections PARAMS ((void));
146 static int lang_vers_match_lang_c
147 PARAMS ((struct bfd_elf_version_expr *, const char *));
148 static int lang_vers_match_lang_cplusplus
149 PARAMS ((struct bfd_elf_version_expr *, const char *));
150 static int lang_vers_match_lang_java
151 PARAMS ((struct bfd_elf_version_expr *, const char *));
152 static void lang_do_version_exports_section PARAMS ((void));
153 static void lang_check_section_addresses PARAMS ((void));
154 static void os_region_check
155 PARAMS ((lang_output_section_statement_type *,
156 struct memory_region_struct *, etree_type *, bfd_vma));
157 static bfd_vma lang_size_sections_1
158 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *,
159 lang_statement_union_type **, fill_type *, bfd_vma, boolean *));
161 typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
162 struct wildcard_list *,
164 lang_input_statement_type *,
166 static void walk_wild
167 PARAMS ((lang_wild_statement_type *, callback_t, PTR));
168 static void walk_wild_section
169 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
171 static void walk_wild_file
172 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
175 static int get_target PARAMS ((const bfd_target *, PTR));
176 static void stricpy PARAMS ((char *, char *));
177 static void strcut PARAMS ((char *, char *));
178 static int name_compare PARAMS ((char *, char *));
179 static int closest_target_match PARAMS ((const bfd_target *, PTR));
180 static char * get_first_input_target PARAMS ((void));
183 lang_output_section_statement_type *abs_output_section;
184 lang_statement_list_type lang_output_section_statement;
185 lang_statement_list_type *stat_ptr = &statement_list;
186 lang_statement_list_type file_chain = { NULL, NULL };
187 const char *entry_symbol = NULL;
188 const char *entry_section = ".text";
189 boolean entry_from_cmdline;
190 boolean lang_has_input_file = false;
191 boolean had_output_filename = false;
192 boolean lang_float_flag = false;
193 boolean delete_output_file_on_failure = false;
194 struct lang_nocrossrefs *nocrossref_list;
195 struct unique_sections *unique_section_list;
197 etree_type *base; /* Relocation base - or null */
199 #if defined (__STDC__) || defined (ALMOST_STDC)
200 #define cat(a,b) a##b
202 #define cat(a,b) a/**/b
205 /* Don't beautify the line below with "innocent" whitespace, it breaks
206 the K&R C preprocessor! */
207 #define new_stat(x, y) \
208 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
210 #define outside_section_address(q) \
211 ((q)->output_offset + (q)->output_section->vma)
213 #define outside_symbol_address(q) \
214 ((q)->value + outside_section_address (q->section))
216 #define SECTION_NAME_MAP_LENGTH (16)
222 return obstack_alloc (&stat_obstack, size);
226 unique_section_p (secnam)
229 struct unique_sections *unam;
231 for (unam = unique_section_list; unam; unam = unam->next)
232 if (wildcardp (unam->name)
233 ? fnmatch (unam->name, secnam, 0) == 0
234 : strcmp (unam->name, secnam) == 0)
242 /* Generic traversal routines for finding matching sections. */
245 walk_wild_section (ptr, file, callback, data)
246 lang_wild_statement_type *ptr;
247 lang_input_statement_type *file;
253 if (file->just_syms_flag)
256 for (s = file->the_bfd->sections; s != NULL; s = s->next)
258 struct wildcard_list *sec;
260 sec = ptr->section_list;
262 (*callback) (ptr, sec, s, file, data);
266 boolean skip = false;
267 struct name_list *list_tmp;
269 /* Don't process sections from files which were
271 for (list_tmp = sec->spec.exclude_name_list;
273 list_tmp = list_tmp->next)
275 if (wildcardp (list_tmp->name))
276 skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
278 skip = strcmp (list_tmp->name, file->filename) == 0;
280 /* If this file is part of an archive, and the archive is
281 excluded, exclude this file. */
282 if (! skip && file->the_bfd != NULL
283 && file->the_bfd->my_archive != NULL
284 && file->the_bfd->my_archive->filename != NULL)
286 if (wildcardp (list_tmp->name))
287 skip = fnmatch (list_tmp->name,
288 file->the_bfd->my_archive->filename,
291 skip = strcmp (list_tmp->name,
292 file->the_bfd->my_archive->filename) == 0;
299 if (!skip && sec->spec.name != NULL)
301 const char *sname = bfd_get_section_name (file->the_bfd, s);
303 if (wildcardp (sec->spec.name))
304 skip = fnmatch (sec->spec.name, sname, 0) != 0;
306 skip = strcmp (sec->spec.name, sname) != 0;
310 (*callback) (ptr, sec, s, file, data);
317 /* Handle a wild statement for a single file F. */
320 walk_wild_file (s, f, callback, data)
321 lang_wild_statement_type *s;
322 lang_input_statement_type *f;
326 if (f->the_bfd == NULL
327 || ! bfd_check_format (f->the_bfd, bfd_archive))
328 walk_wild_section (s, f, callback, data);
333 /* This is an archive file. We must map each member of the
334 archive separately. */
335 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
336 while (member != NULL)
338 /* When lookup_name is called, it will call the add_symbols
339 entry point for the archive. For each element of the
340 archive which is included, BFD will call ldlang_add_file,
341 which will set the usrdata field of the member to the
342 lang_input_statement. */
343 if (member->usrdata != NULL)
345 walk_wild_section (s,
346 (lang_input_statement_type *) member->usrdata,
350 member = bfd_openr_next_archived_file (f->the_bfd, member);
356 walk_wild (s, callback, data)
357 lang_wild_statement_type *s;
361 const char *file_spec = s->filename;
363 if (file_spec == NULL)
365 /* Perform the iteration over all files in the list. */
366 LANG_FOR_EACH_INPUT_STATEMENT (f)
368 walk_wild_file (s, f, callback, data);
371 else if (wildcardp (file_spec))
373 LANG_FOR_EACH_INPUT_STATEMENT (f)
375 if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
376 walk_wild_file (s, f, callback, data);
381 lang_input_statement_type *f;
383 /* Perform the iteration over a single file. */
384 f = lookup_name (file_spec);
386 walk_wild_file (s, f, callback, data);
390 /* lang_for_each_statement walks the parse tree and calls the provided
391 function for each node. */
394 lang_for_each_statement_worker (func, s)
395 void (*func) PARAMS ((lang_statement_union_type *));
396 lang_statement_union_type *s;
398 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
402 switch (s->header.type)
404 case lang_constructors_statement_enum:
405 lang_for_each_statement_worker (func, constructor_list.head);
407 case lang_output_section_statement_enum:
408 lang_for_each_statement_worker
410 s->output_section_statement.children.head);
412 case lang_wild_statement_enum:
413 lang_for_each_statement_worker
415 s->wild_statement.children.head);
417 case lang_group_statement_enum:
418 lang_for_each_statement_worker (func,
419 s->group_statement.children.head);
421 case lang_data_statement_enum:
422 case lang_reloc_statement_enum:
423 case lang_object_symbols_statement_enum:
424 case lang_output_statement_enum:
425 case lang_target_statement_enum:
426 case lang_input_section_enum:
427 case lang_input_statement_enum:
428 case lang_assignment_statement_enum:
429 case lang_padding_statement_enum:
430 case lang_address_statement_enum:
431 case lang_fill_statement_enum:
441 lang_for_each_statement (func)
442 void (*func) PARAMS ((lang_statement_union_type *));
444 lang_for_each_statement_worker (func, statement_list.head);
447 /*----------------------------------------------------------------------*/
450 lang_list_init (list)
451 lang_statement_list_type *list;
453 list->head = (lang_statement_union_type *) NULL;
454 list->tail = &list->head;
457 /* Build a new statement node for the parse tree. */
459 static lang_statement_union_type *
460 new_statement (type, size, list)
461 enum statement_enum type;
463 lang_statement_list_type *list;
465 lang_statement_union_type *new = (lang_statement_union_type *)
468 new->header.type = type;
469 new->header.next = (lang_statement_union_type *) NULL;
470 lang_statement_append (list, new, &new->header.next);
474 /* Build a new input file node for the language. There are several
475 ways in which we treat an input file, eg, we only look at symbols,
476 or prefix it with a -l etc.
478 We can be supplied with requests for input files more than once;
479 they may, for example be split over serveral lines like foo.o(.text)
480 foo.o(.data) etc, so when asked for a file we check that we haven't
481 got it already so we don't duplicate the bfd. */
483 static lang_input_statement_type *
484 new_afile (name, file_type, target, add_to_list)
486 lang_input_file_enum_type file_type;
490 lang_input_statement_type *p;
493 p = new_stat (lang_input_statement, stat_ptr);
496 p = ((lang_input_statement_type *)
497 stat_alloc (sizeof (lang_input_statement_type)));
498 p->header.next = NULL;
501 lang_has_input_file = true;
505 case lang_input_file_is_symbols_only_enum:
507 p->is_archive = false;
509 p->local_sym_name = name;
510 p->just_syms_flag = true;
511 p->search_dirs_flag = false;
513 case lang_input_file_is_fake_enum:
515 p->is_archive = false;
517 p->local_sym_name = name;
518 p->just_syms_flag = false;
519 p->search_dirs_flag = false;
521 case lang_input_file_is_l_enum:
522 p->is_archive = true;
525 p->local_sym_name = concat ("-l", name, (const char *) NULL);
526 p->just_syms_flag = false;
527 p->search_dirs_flag = true;
529 case lang_input_file_is_marker_enum:
531 p->is_archive = false;
533 p->local_sym_name = name;
534 p->just_syms_flag = false;
535 p->search_dirs_flag = true;
537 case lang_input_file_is_search_file_enum:
539 p->is_archive = false;
541 p->local_sym_name = name;
542 p->just_syms_flag = false;
543 p->search_dirs_flag = true;
545 case lang_input_file_is_file_enum:
547 p->is_archive = false;
549 p->local_sym_name = name;
550 p->just_syms_flag = false;
551 p->search_dirs_flag = false;
556 p->the_bfd = (bfd *) NULL;
557 p->asymbols = (asymbol **) NULL;
558 p->next_real_file = (lang_statement_union_type *) NULL;
559 p->next = (lang_statement_union_type *) NULL;
561 p->dynamic = config.dynamic_link;
562 p->whole_archive = whole_archive;
564 lang_statement_append (&input_file_chain,
565 (lang_statement_union_type *) p,
570 lang_input_statement_type *
571 lang_add_input_file (name, file_type, target)
573 lang_input_file_enum_type file_type;
576 lang_has_input_file = true;
577 return new_afile (name, file_type, target, true);
580 /* Build enough state so that the parser can build its tree. */
585 obstack_begin (&stat_obstack, 1000);
587 stat_ptr = &statement_list;
589 lang_list_init (stat_ptr);
591 lang_list_init (&input_file_chain);
592 lang_list_init (&lang_output_section_statement);
593 lang_list_init (&file_chain);
594 first_file = lang_add_input_file ((char *) NULL,
595 lang_input_file_is_marker_enum,
598 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
600 abs_output_section->bfd_section = bfd_abs_section_ptr;
604 /*----------------------------------------------------------------------
605 A region is an area of memory declared with the
606 MEMORY { name:org=exp, len=exp ... }
609 We maintain a list of all the regions here.
611 If no regions are specified in the script, then the default is used
612 which is created when looked up to be the entire data space. */
614 static lang_memory_region_type *lang_memory_region_list;
615 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
617 lang_memory_region_type *
618 lang_memory_region_lookup (name)
619 const char *const name;
621 lang_memory_region_type *p;
623 /* NAME is NULL for LMA memspecs if no region was specified. */
627 for (p = lang_memory_region_list;
628 p != (lang_memory_region_type *) NULL;
631 if (strcmp (p->name, name) == 0)
638 /* This code used to always use the first region in the list as the
639 default region. I changed it to instead use a region
640 encompassing all of memory as the default region. This permits
641 NOLOAD sections to work reasonably without requiring a region.
642 People should specify what region they mean, if they really want
644 if (strcmp (name, "*default*") == 0)
646 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
648 return lang_memory_region_list;
654 lang_memory_region_type *new =
655 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
657 new->name = xstrdup (name);
658 new->next = (lang_memory_region_type *) NULL;
660 *lang_memory_region_list_tail = new;
661 lang_memory_region_list_tail = &new->next;
665 new->length = ~(bfd_size_type) 0;
667 new->had_full_message = false;
673 static lang_memory_region_type *
674 lang_memory_default (section)
677 lang_memory_region_type *p;
679 flagword sec_flags = section->flags;
681 /* Override SEC_DATA to mean a writable section. */
682 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
683 sec_flags |= SEC_DATA;
685 for (p = lang_memory_region_list;
686 p != (lang_memory_region_type *) NULL;
689 if ((p->flags & sec_flags) != 0
690 && (p->not_flags & sec_flags) == 0)
695 return lang_memory_region_lookup ("*default*");
698 lang_output_section_statement_type *
699 lang_output_section_find (name)
700 const char *const name;
702 lang_statement_union_type *u;
703 lang_output_section_statement_type *lookup;
705 for (u = lang_output_section_statement.head;
706 u != (lang_statement_union_type *) NULL;
709 lookup = &u->output_section_statement;
710 if (strcmp (name, lookup->name) == 0)
715 return (lang_output_section_statement_type *) NULL;
718 lang_output_section_statement_type *
719 lang_output_section_statement_lookup (name)
720 const char *const name;
722 lang_output_section_statement_type *lookup;
724 lookup = lang_output_section_find (name);
725 if (lookup == (lang_output_section_statement_type *) NULL)
728 lookup = (lang_output_section_statement_type *)
729 new_stat (lang_output_section_statement, stat_ptr);
730 lookup->region = (lang_memory_region_type *) NULL;
731 lookup->lma_region = (lang_memory_region_type *) NULL;
732 lookup->fill = (fill_type *) 0;
733 lookup->block_value = 1;
736 lookup->next = (lang_statement_union_type *) NULL;
737 lookup->bfd_section = (asection *) NULL;
738 lookup->processed = false;
739 lookup->sectype = normal_section;
740 lookup->addr_tree = (etree_type *) NULL;
741 lang_list_init (&lookup->children);
743 lookup->memspec = (const char *) NULL;
745 lookup->subsection_alignment = -1;
746 lookup->section_alignment = -1;
747 lookup->load_base = (union etree_union *) NULL;
748 lookup->update_dot_tree = NULL;
749 lookup->phdrs = NULL;
751 lang_statement_append (&lang_output_section_statement,
752 (lang_statement_union_type *) lookup,
759 lang_map_flags (flag)
762 if (flag & SEC_ALLOC)
768 if (flag & SEC_READONLY)
781 lang_memory_region_type *m;
783 minfo (_("\nMemory Configuration\n\n"));
784 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
785 _("Name"), _("Origin"), _("Length"), _("Attributes"));
787 for (m = lang_memory_region_list;
788 m != (lang_memory_region_type *) NULL;
794 fprintf (config.map_file, "%-16s ", m->name);
796 sprintf_vma (buf, m->origin);
797 minfo ("0x%s ", buf);
805 minfo ("0x%V", m->length);
806 if (m->flags || m->not_flags)
814 lang_map_flags (m->flags);
820 lang_map_flags (m->not_flags);
827 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
832 /* Initialize an output section. */
836 lang_output_section_statement_type *s;
838 section_userdata_type *new;
840 if (s->bfd_section != NULL)
843 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
844 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
846 new = ((section_userdata_type *)
847 stat_alloc (sizeof (section_userdata_type)));
849 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
850 if (s->bfd_section == (asection *) NULL)
851 s->bfd_section = bfd_make_section (output_bfd, s->name);
852 if (s->bfd_section == (asection *) NULL)
854 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
855 output_bfd->xvec->name, s->name);
857 s->bfd_section->output_section = s->bfd_section;
859 /* We initialize an output sections output offset to minus its own
860 vma to allow us to output a section through itself. */
861 s->bfd_section->output_offset = 0;
862 get_userdata (s->bfd_section) = (PTR) new;
864 /* If there is a base address, make sure that any sections it might
865 mention are initialized. */
866 if (s->addr_tree != NULL)
867 exp_init_os (s->addr_tree);
870 /* Make sure that all output sections mentioned in an expression are
877 switch (exp->type.node_class)
880 exp_init_os (exp->assign.src);
884 exp_init_os (exp->binary.lhs);
885 exp_init_os (exp->binary.rhs);
889 exp_init_os (exp->trinary.cond);
890 exp_init_os (exp->trinary.lhs);
891 exp_init_os (exp->trinary.rhs);
895 exp_init_os (exp->unary.child);
899 switch (exp->type.node_code)
905 lang_output_section_statement_type *os;
907 os = lang_output_section_find (exp->name.name);
908 if (os != NULL && os->bfd_section == NULL)
919 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
920 once into the output. This routine checks each section, and
921 arrange to discard it if a section of the same name has already
922 been linked. If the section has COMDAT information, then it uses
923 that to decide whether the section should be included. This code
924 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
925 that is, it does not depend solely upon the section name.
926 section_already_linked is called via bfd_map_over_sections. */
928 /* This is the shape of the elements inside the already_linked hash
929 table. It maps a name onto a list of already_linked elements with
930 the same name. It's possible to get more than one element in a
931 list if the COMDAT sections have different names. */
933 struct already_linked_hash_entry
935 struct bfd_hash_entry root;
936 struct already_linked *entry;
939 struct already_linked
941 struct already_linked *next;
945 /* The hash table. */
947 static struct bfd_hash_table already_linked_table;
950 section_already_linked (abfd, sec, data)
955 lang_input_statement_type *entry = (lang_input_statement_type *) data;
958 struct already_linked *l;
959 struct already_linked_hash_entry *already_linked_list;
961 /* If we are only reading symbols from this object, then we want to
962 discard all sections. */
963 if (entry->just_syms_flag)
965 bfd_link_just_syms (sec, &link_info);
969 flags = bfd_get_section_flags (abfd, sec);
971 if ((flags & SEC_LINK_ONCE) == 0)
974 /* FIXME: When doing a relocatable link, we may have trouble
975 copying relocations in other sections that refer to local symbols
976 in the section being discarded. Those relocations will have to
977 be converted somehow; as of this writing I'm not sure that any of
978 the backends handle that correctly.
980 It is tempting to instead not discard link once sections when
981 doing a relocatable link (technically, they should be discarded
982 whenever we are building constructors). However, that fails,
983 because the linker winds up combining all the link once sections
984 into a single large link once section, which defeats the purpose
985 of having link once sections in the first place.
987 Also, not merging link once sections in a relocatable link
988 causes trouble for MIPS ELF, which relies in link once semantics
989 to handle the .reginfo section correctly. */
991 name = bfd_get_section_name (abfd, sec);
993 already_linked_list =
994 ((struct already_linked_hash_entry *)
995 bfd_hash_lookup (&already_linked_table, name, true, false));
997 for (l = already_linked_list->entry; l != NULL; l = l->next)
999 if (sec->comdat == NULL
1000 || l->sec->comdat == NULL
1001 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
1003 /* The section has already been linked. See if we should
1005 switch (flags & SEC_LINK_DUPLICATES)
1010 case SEC_LINK_DUPLICATES_DISCARD:
1013 case SEC_LINK_DUPLICATES_ONE_ONLY:
1014 if (sec->comdat == NULL)
1015 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1018 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1019 abfd, name, sec->comdat->name);
1022 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
1023 /* FIXME: We should really dig out the contents of both
1024 sections and memcmp them. The COFF/PE spec says that
1025 the Microsoft linker does not implement this
1026 correctly, so I'm not going to bother doing it
1029 case SEC_LINK_DUPLICATES_SAME_SIZE:
1030 if (bfd_section_size (abfd, sec)
1031 != bfd_section_size (l->sec->owner, l->sec))
1032 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1037 /* Set the output_section field so that lang_add_section
1038 does not create a lang_input_section structure for this
1040 sec->output_section = bfd_abs_section_ptr;
1046 /* This is the first section with this name. Record it. Allocate
1047 the memory from the same obstack as the hash table is kept in. */
1049 l = ((struct already_linked *)
1050 bfd_hash_allocate (&already_linked_table, sizeof *l));
1053 l->next = already_linked_list->entry;
1054 already_linked_list->entry = l;
1057 /* Support routines for the hash table used by section_already_linked,
1058 initialize the table, fill in an entry and remove the table. */
1060 static struct bfd_hash_entry *
1061 already_linked_newfunc (entry, table, string)
1062 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1063 struct bfd_hash_table *table;
1064 const char *string ATTRIBUTE_UNUSED;
1066 struct already_linked_hash_entry *ret =
1067 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1071 return (struct bfd_hash_entry *) ret;
1075 already_linked_table_init ()
1077 if (! bfd_hash_table_init_n (&already_linked_table,
1078 already_linked_newfunc,
1080 einfo (_("%P%F: Failed to create hash table\n"));
1084 already_linked_table_free ()
1086 bfd_hash_table_free (&already_linked_table);
1089 /* The wild routines.
1091 These expand statements like *(.text) and foo.o to a list of
1092 explicit actions, like foo.o(.text), bar.o(.text) and
1093 foo.o(.text, .data). */
1095 /* Return true if the PATTERN argument is a wildcard pattern.
1096 Although backslashes are treated specially if a pattern contains
1097 wildcards, we do not consider the mere presence of a backslash to
1098 be enough to cause the pattern to be treated as a wildcard.
1099 That lets us handle DOS filenames more naturally. */
1103 const char *pattern;
1107 for (s = pattern; *s != '\0'; ++s)
1115 /* Add SECTION to the output section OUTPUT. Do this by creating a
1116 lang_input_section statement which is placed at PTR. FILE is the
1117 input file which holds SECTION. */
1120 lang_add_section (ptr, section, output, file)
1121 lang_statement_list_type *ptr;
1123 lang_output_section_statement_type *output;
1124 lang_input_statement_type *file;
1129 flags = bfd_get_section_flags (section->owner, section);
1133 /* If we are doing a final link, discard sections marked with
1135 if (! link_info.relocateable
1136 && (flags & SEC_EXCLUDE) != 0)
1139 /* Discard input sections which are assigned to a section named
1140 DISCARD_SECTION_NAME. */
1141 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1144 /* Discard debugging sections if we are stripping debugging
1146 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1147 && (flags & SEC_DEBUGGING) != 0)
1152 if (section->output_section == NULL)
1154 /* This prevents future calls from assigning this section. */
1155 section->output_section = bfd_abs_section_ptr;
1160 if (section->output_section == NULL)
1163 lang_input_section_type *new;
1166 if (output->bfd_section == NULL)
1169 first = ! output->bfd_section->linker_has_input;
1170 output->bfd_section->linker_has_input = 1;
1172 /* Add a section reference to the list. */
1173 new = new_stat (lang_input_section, ptr);
1175 new->section = section;
1177 section->output_section = output->bfd_section;
1179 flags = section->flags;
1181 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1182 to an output section, because we want to be able to include a
1183 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1184 section (I don't know why we want to do this, but we do).
1185 build_link_order in ldwrite.c handles this case by turning
1186 the embedded SEC_NEVER_LOAD section into a fill. */
1188 flags &= ~ SEC_NEVER_LOAD;
1190 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1191 already been processed. One reason to do this is that on pe
1192 format targets, .text$foo sections go into .text and it's odd
1193 to see .text with SEC_LINK_ONCE set. */
1195 if (! link_info.relocateable)
1196 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1198 /* If this is not the first input section, and the SEC_READONLY
1199 flag is not currently set, then don't set it just because the
1200 input section has it set. */
1202 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1203 flags &= ~ SEC_READONLY;
1205 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1207 && ((section->output_section->flags & (SEC_MERGE | SEC_STRINGS))
1208 != (flags & (SEC_MERGE | SEC_STRINGS))
1209 || ((flags & SEC_MERGE)
1210 && section->output_section->entsize != section->entsize)))
1212 section->output_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1213 flags &= ~ (SEC_MERGE | SEC_STRINGS);
1216 /* For now make .tbss normal section. */
1217 if (flags & SEC_THREAD_LOCAL)
1220 section->output_section->flags |= flags;
1222 if (flags & SEC_MERGE)
1223 section->output_section->entsize = section->entsize;
1225 /* If SEC_READONLY is not set in the input section, then clear
1226 it from the output section. */
1227 if ((section->flags & SEC_READONLY) == 0)
1228 section->output_section->flags &= ~SEC_READONLY;
1230 switch (output->sectype)
1232 case normal_section:
1237 case overlay_section:
1238 output->bfd_section->flags &= ~SEC_ALLOC;
1240 case noload_section:
1241 output->bfd_section->flags &= ~SEC_LOAD;
1242 output->bfd_section->flags |= SEC_NEVER_LOAD;
1246 /* Copy over SEC_SMALL_DATA. */
1247 if (section->flags & SEC_SMALL_DATA)
1248 section->output_section->flags |= SEC_SMALL_DATA;
1250 if (section->alignment_power > output->bfd_section->alignment_power)
1251 output->bfd_section->alignment_power = section->alignment_power;
1253 /* If supplied an aligment, then force it. */
1254 if (output->section_alignment != -1)
1255 output->bfd_section->alignment_power = output->section_alignment;
1257 if (section->flags & SEC_BLOCK)
1259 section->output_section->flags |= SEC_BLOCK;
1260 /* FIXME: This value should really be obtained from the bfd... */
1261 output->block_value = 128;
1266 /* Handle wildcard sorting. This returns the lang_input_section which
1267 should follow the one we are going to create for SECTION and FILE,
1268 based on the sorting requirements of WILD. It returns NULL if the
1269 new section should just go at the end of the current list. */
1271 static lang_statement_union_type *
1272 wild_sort (wild, sec, file, section)
1273 lang_wild_statement_type *wild;
1274 struct wildcard_list *sec;
1275 lang_input_statement_type *file;
1278 const char *section_name;
1279 lang_statement_union_type *l;
1281 if (!wild->filenames_sorted && (sec == NULL || !sec->spec.sorted))
1284 section_name = bfd_get_section_name (file->the_bfd, section);
1285 for (l = wild->children.head; l != NULL; l = l->header.next)
1287 lang_input_section_type *ls;
1289 if (l->header.type != lang_input_section_enum)
1291 ls = &l->input_section;
1293 /* Sorting by filename takes precedence over sorting by section
1296 if (wild->filenames_sorted)
1298 const char *fn, *ln;
1302 /* The PE support for the .idata section as generated by
1303 dlltool assumes that files will be sorted by the name of
1304 the archive and then the name of the file within the
1307 if (file->the_bfd != NULL
1308 && bfd_my_archive (file->the_bfd) != NULL)
1310 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1315 fn = file->filename;
1319 if (ls->ifile->the_bfd != NULL
1320 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1322 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1327 ln = ls->ifile->filename;
1331 i = strcmp (fn, ln);
1340 fn = file->filename;
1342 ln = ls->ifile->filename;
1344 i = strcmp (fn, ln);
1352 /* Here either the files are not sorted by name, or we are
1353 looking at the sections for this file. */
1355 if (sec != NULL && sec->spec.sorted)
1357 if (strcmp (section_name,
1358 bfd_get_section_name (ls->ifile->the_bfd,
1368 /* Expand a wild statement for a particular FILE. SECTION may be
1369 NULL, in which case it is a wild card. */
1372 output_section_callback (ptr, sec, section, file, output)
1373 lang_wild_statement_type *ptr;
1374 struct wildcard_list *sec;
1376 lang_input_statement_type *file;
1379 lang_statement_union_type *before;
1381 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1382 if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
1385 /* If the wild pattern was marked KEEP, the member sections
1386 should be as well. */
1387 if (ptr->keep_sections)
1388 section->flags |= SEC_KEEP;
1390 before = wild_sort (ptr, sec, file, section);
1392 /* Here BEFORE points to the lang_input_section which
1393 should follow the one we are about to add. If BEFORE
1394 is NULL, then the section should just go at the end
1395 of the current list. */
1398 lang_add_section (&ptr->children, section,
1399 (lang_output_section_statement_type *) output,
1403 lang_statement_list_type list;
1404 lang_statement_union_type **pp;
1406 lang_list_init (&list);
1407 lang_add_section (&list, section,
1408 (lang_output_section_statement_type *) output,
1411 /* If we are discarding the section, LIST.HEAD will
1413 if (list.head != NULL)
1415 ASSERT (list.head->header.next == NULL);
1417 for (pp = &ptr->children.head;
1419 pp = &(*pp)->header.next)
1420 ASSERT (*pp != NULL);
1422 list.head->header.next = *pp;
1428 /* This is passed a file name which must have been seen already and
1429 added to the statement tree. We will see if it has been opened
1430 already and had its symbols read. If not then we'll read it. */
1432 static lang_input_statement_type *
1436 lang_input_statement_type *search;
1438 for (search = (lang_input_statement_type *) input_file_chain.head;
1439 search != (lang_input_statement_type *) NULL;
1440 search = (lang_input_statement_type *) search->next_real_file)
1442 if (search->filename == (char *) NULL && name == (char *) NULL)
1444 if (search->filename != (char *) NULL
1445 && name != (char *) NULL
1446 && strcmp (search->filename, name) == 0)
1450 if (search == (lang_input_statement_type *) NULL)
1451 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1454 /* If we have already added this file, or this file is not real
1455 (FIXME: can that ever actually happen?) or the name is NULL
1456 (FIXME: can that ever actually happen?) don't add this file. */
1459 || search->filename == (const char *) NULL)
1462 if (! load_symbols (search, (lang_statement_list_type *) NULL))
1468 /* Get the symbols for an input file. */
1471 load_symbols (entry, place)
1472 lang_input_statement_type *entry;
1473 lang_statement_list_type *place;
1480 ldfile_open_file (entry);
1482 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1483 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1486 lang_statement_list_type *hold;
1487 boolean bad_load = true;
1489 err = bfd_get_error ();
1491 /* See if the emulation has some special knowledge. */
1492 if (ldemul_unrecognized_file (entry))
1495 if (err == bfd_error_file_ambiguously_recognized)
1499 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1500 einfo (_("%B: matching formats:"), entry->the_bfd);
1501 for (p = matching; *p != NULL; p++)
1505 else if (err != bfd_error_file_not_recognized
1507 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1511 bfd_close (entry->the_bfd);
1512 entry->the_bfd = NULL;
1514 /* Try to interpret the file as a linker script. */
1515 ldfile_open_command_file (entry->filename);
1520 ldfile_assumed_script = true;
1521 parser_input = input_script;
1523 ldfile_assumed_script = false;
1530 if (ldemul_recognized_file (entry))
1533 /* We don't call ldlang_add_file for an archive. Instead, the
1534 add_symbols entry point will call ldlang_add_file, via the
1535 add_archive_element callback, for each element of the archive
1537 switch (bfd_get_format (entry->the_bfd))
1543 ldlang_add_file (entry);
1544 if (trace_files || trace_file_tries)
1545 info_msg ("%I\n", entry);
1549 if (entry->whole_archive)
1552 boolean loaded = true;
1556 member = bfd_openr_next_archived_file (entry->the_bfd, member);
1561 if (! bfd_check_format (member, bfd_object))
1563 einfo (_("%F%B: member %B in archive is not an object\n"),
1564 entry->the_bfd, member);
1568 if (! ((*link_info.callbacks->add_archive_element)
1569 (&link_info, member, "--whole-archive")))
1572 if (! bfd_link_add_symbols (member, &link_info))
1574 einfo (_("%F%B: could not read symbols: %E\n"), member);
1579 entry->loaded = loaded;
1585 if (bfd_link_add_symbols (entry->the_bfd, &link_info))
1586 entry->loaded = true;
1588 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1590 return entry->loaded;
1593 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1594 may be NULL, indicating that it is a wildcard. Separate
1595 lang_input_section statements are created for each part of the
1596 expansion; they are added after the wild statement S. OUTPUT is
1597 the output section. */
1600 wild (s, target, output)
1601 lang_wild_statement_type *s;
1602 const char *target ATTRIBUTE_UNUSED;
1603 lang_output_section_statement_type *output;
1605 struct wildcard_list *sec;
1607 walk_wild (s, output_section_callback, (PTR) output);
1609 for (sec = s->section_list; sec != NULL; sec = sec->next)
1611 if (default_common_section != NULL)
1613 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
1615 /* Remember the section that common is going to in case we
1616 later get something which doesn't know where to put it. */
1617 default_common_section = output;
1622 /* Return true iff target is the sought target. */
1625 get_target (target, data)
1626 const bfd_target *target;
1629 const char *sought = (const char *) data;
1631 return strcmp (target->name, sought) == 0;
1634 /* Like strcpy() but convert to lower case as well. */
1643 while ((c = *src++) != 0)
1644 *dest++ = TOLOWER (c);
1649 /* Remove the first occurance of needle (if any) in haystack
1653 strcut (haystack, needle)
1657 haystack = strstr (haystack, needle);
1663 for (src = haystack + strlen (needle); *src;)
1664 *haystack++ = *src++;
1670 /* Compare two target format name strings.
1671 Return a value indicating how "similar" they are. */
1674 name_compare (first, second)
1682 copy1 = xmalloc (strlen (first) + 1);
1683 copy2 = xmalloc (strlen (second) + 1);
1685 /* Convert the names to lower case. */
1686 stricpy (copy1, first);
1687 stricpy (copy2, second);
1689 /* Remove and endian strings from the name. */
1690 strcut (copy1, "big");
1691 strcut (copy1, "little");
1692 strcut (copy2, "big");
1693 strcut (copy2, "little");
1695 /* Return a value based on how many characters match,
1696 starting from the beginning. If both strings are
1697 the same then return 10 * their length. */
1698 for (result = 0; copy1[result] == copy2[result]; result++)
1699 if (copy1[result] == 0)
1711 /* Set by closest_target_match() below. */
1712 static const bfd_target *winner;
1714 /* Scan all the valid bfd targets looking for one that has the endianness
1715 requirement that was specified on the command line, and is the nearest
1716 match to the original output target. */
1719 closest_target_match (target, data)
1720 const bfd_target *target;
1723 const bfd_target *original = (const bfd_target *) data;
1725 if (command_line.endian == ENDIAN_BIG
1726 && target->byteorder != BFD_ENDIAN_BIG)
1729 if (command_line.endian == ENDIAN_LITTLE
1730 && target->byteorder != BFD_ENDIAN_LITTLE)
1733 /* Must be the same flavour. */
1734 if (target->flavour != original->flavour)
1737 /* If we have not found a potential winner yet, then record this one. */
1744 /* Oh dear, we now have two potential candidates for a successful match.
1745 Compare their names and choose the better one. */
1746 if (name_compare (target->name, original->name)
1747 > name_compare (winner->name, original->name))
1750 /* Keep on searching until wqe have checked them all. */
1754 /* Return the BFD target format of the first input file. */
1757 get_first_input_target ()
1759 char *target = NULL;
1761 LANG_FOR_EACH_INPUT_STATEMENT (s)
1763 if (s->header.type == lang_input_statement_enum
1766 ldfile_open_file (s);
1768 if (s->the_bfd != NULL
1769 && bfd_check_format (s->the_bfd, bfd_object))
1771 target = bfd_get_target (s->the_bfd);
1782 /* Open the output file. */
1790 /* Has the user told us which output format to use? */
1791 if (output_target == (char *) NULL)
1793 /* No - has the current target been set to something other than
1795 if (current_target != default_target)
1796 output_target = current_target;
1798 /* No - can we determine the format of the first input file? */
1801 output_target = get_first_input_target ();
1803 /* Failed - use the default output target. */
1804 if (output_target == NULL)
1805 output_target = default_target;
1809 /* Has the user requested a particular endianness on the command
1811 if (command_line.endian != ENDIAN_UNSET)
1813 const bfd_target *target;
1814 enum bfd_endian desired_endian;
1816 /* Get the chosen target. */
1817 target = bfd_search_for_target (get_target, (PTR) output_target);
1819 /* If the target is not supported, we cannot do anything. */
1822 if (command_line.endian == ENDIAN_BIG)
1823 desired_endian = BFD_ENDIAN_BIG;
1825 desired_endian = BFD_ENDIAN_LITTLE;
1827 /* See if the target has the wrong endianness. This should
1828 not happen if the linker script has provided big and
1829 little endian alternatives, but some scrips don't do
1831 if (target->byteorder != desired_endian)
1833 /* If it does, then see if the target provides
1834 an alternative with the correct endianness. */
1835 if (target->alternative_target != NULL
1836 && (target->alternative_target->byteorder == desired_endian))
1837 output_target = target->alternative_target->name;
1840 /* Try to find a target as similar as possible to
1841 the default target, but which has the desired
1842 endian characteristic. */
1843 (void) bfd_search_for_target (closest_target_match,
1846 /* Oh dear - we could not find any targets that
1847 satisfy our requirements. */
1849 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1851 output_target = winner->name;
1857 output = bfd_openw (name, output_target);
1859 if (output == (bfd *) NULL)
1861 if (bfd_get_error () == bfd_error_invalid_target)
1862 einfo (_("%P%F: target %s not found\n"), output_target);
1864 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1867 delete_output_file_on_failure = true;
1870 output->flags |= D_PAGED;
1873 if (! bfd_set_format (output, bfd_object))
1874 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1875 if (! bfd_set_arch_mach (output,
1876 ldfile_output_architecture,
1877 ldfile_output_machine))
1878 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1880 link_info.hash = bfd_link_hash_table_create (output);
1881 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1882 einfo (_("%P%F: can not create link hash table: %E\n"));
1884 bfd_set_gp_size (output, g_switch_value);
1889 ldlang_open_output (statement)
1890 lang_statement_union_type *statement;
1892 switch (statement->header.type)
1894 case lang_output_statement_enum:
1895 ASSERT (output_bfd == (bfd *) NULL);
1896 output_bfd = open_output (statement->output_statement.name);
1897 ldemul_set_output_arch ();
1898 if (config.magic_demand_paged && !link_info.relocateable)
1899 output_bfd->flags |= D_PAGED;
1901 output_bfd->flags &= ~D_PAGED;
1902 if (config.text_read_only)
1903 output_bfd->flags |= WP_TEXT;
1905 output_bfd->flags &= ~WP_TEXT;
1906 if (link_info.traditional_format)
1907 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1909 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1912 case lang_target_statement_enum:
1913 current_target = statement->target_statement.target;
1920 /* Open all the input files. */
1923 open_input_bfds (s, force)
1924 lang_statement_union_type *s;
1927 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
1929 switch (s->header.type)
1931 case lang_constructors_statement_enum:
1932 open_input_bfds (constructor_list.head, force);
1934 case lang_output_section_statement_enum:
1935 open_input_bfds (s->output_section_statement.children.head, force);
1937 case lang_wild_statement_enum:
1938 /* Maybe we should load the file's symbols. */
1939 if (s->wild_statement.filename
1940 && ! wildcardp (s->wild_statement.filename))
1941 (void) lookup_name (s->wild_statement.filename);
1942 open_input_bfds (s->wild_statement.children.head, force);
1944 case lang_group_statement_enum:
1946 struct bfd_link_hash_entry *undefs;
1948 /* We must continually search the entries in the group
1949 until no new symbols are added to the list of undefined
1954 undefs = link_info.hash->undefs_tail;
1955 open_input_bfds (s->group_statement.children.head, true);
1957 while (undefs != link_info.hash->undefs_tail);
1960 case lang_target_statement_enum:
1961 current_target = s->target_statement.target;
1963 case lang_input_statement_enum:
1964 if (s->input_statement.real)
1966 lang_statement_list_type add;
1968 s->input_statement.target = current_target;
1970 /* If we are being called from within a group, and this
1971 is an archive which has already been searched, then
1972 force it to be researched unless the whole archive
1973 has been loaded already. */
1975 && !s->input_statement.whole_archive
1976 && s->input_statement.loaded
1977 && bfd_check_format (s->input_statement.the_bfd,
1979 s->input_statement.loaded = false;
1981 lang_list_init (&add);
1983 if (! load_symbols (&s->input_statement, &add))
1984 config.make_executable = false;
1986 if (add.head != NULL)
1988 *add.tail = s->header.next;
1989 s->header.next = add.head;
1999 /* If there are [COMMONS] statements, put a wild one into the bss
2003 lang_reasonable_defaults ()
2006 lang_output_section_statement_lookup (".text");
2007 lang_output_section_statement_lookup (".data");
2009 default_common_section = lang_output_section_statement_lookup (".bss");
2011 if (placed_commons == false)
2013 lang_wild_statement_type *new =
2014 new_stat (lang_wild_statement,
2015 &default_common_section->children);
2017 new->section_name = "COMMON";
2018 new->filename = (char *) NULL;
2019 lang_list_init (&new->children);
2024 /* Add the supplied name to the symbol table as an undefined reference.
2025 This is a two step process as the symbol table doesn't even exist at
2026 the time the ld command line is processed. First we put the name
2027 on a list, then, once the output file has been opened, transfer the
2028 name to the symbol table. */
2030 typedef struct ldlang_undef_chain_list
2032 struct ldlang_undef_chain_list *next;
2034 } ldlang_undef_chain_list_type;
2036 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
2039 ldlang_add_undef (name)
2040 const char *const name;
2042 ldlang_undef_chain_list_type *new =
2043 ((ldlang_undef_chain_list_type *)
2044 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
2046 new->next = ldlang_undef_chain_list_head;
2047 ldlang_undef_chain_list_head = new;
2049 new->name = xstrdup (name);
2051 if (output_bfd != NULL)
2052 insert_undefined (new->name);
2055 /* Insert NAME as undefined in the symbol table. */
2058 insert_undefined (name)
2061 struct bfd_link_hash_entry *h;
2063 h = bfd_link_hash_lookup (link_info.hash, name, true, false, true);
2064 if (h == (struct bfd_link_hash_entry *) NULL)
2065 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2066 if (h->type == bfd_link_hash_new)
2068 h->type = bfd_link_hash_undefined;
2069 h->u.undef.abfd = NULL;
2070 bfd_link_add_undef (link_info.hash, h);
2074 /* Run through the list of undefineds created above and place them
2075 into the linker hash table as undefined symbols belonging to the
2079 lang_place_undefineds ()
2081 ldlang_undef_chain_list_type *ptr;
2083 for (ptr = ldlang_undef_chain_list_head;
2084 ptr != (ldlang_undef_chain_list_type *) NULL;
2087 insert_undefined (ptr->name);
2091 /* Open input files and attatch to output sections. */
2094 map_input_to_output_sections (s, target, output_section_statement)
2095 lang_statement_union_type *s;
2097 lang_output_section_statement_type *output_section_statement;
2099 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2101 switch (s->header.type)
2103 case lang_wild_statement_enum:
2104 wild (&s->wild_statement, target, output_section_statement);
2106 case lang_constructors_statement_enum:
2107 map_input_to_output_sections (constructor_list.head,
2109 output_section_statement);
2111 case lang_output_section_statement_enum:
2112 map_input_to_output_sections (s->output_section_statement.children.head,
2114 &s->output_section_statement);
2116 case lang_output_statement_enum:
2118 case lang_target_statement_enum:
2119 target = s->target_statement.target;
2121 case lang_group_statement_enum:
2122 map_input_to_output_sections (s->group_statement.children.head,
2124 output_section_statement);
2126 case lang_fill_statement_enum:
2127 case lang_input_section_enum:
2128 case lang_object_symbols_statement_enum:
2129 case lang_data_statement_enum:
2130 case lang_reloc_statement_enum:
2131 case lang_padding_statement_enum:
2132 case lang_input_statement_enum:
2133 if (output_section_statement != NULL
2134 && output_section_statement->bfd_section == NULL)
2135 init_os (output_section_statement);
2137 case lang_assignment_statement_enum:
2138 if (output_section_statement != NULL
2139 && output_section_statement->bfd_section == NULL)
2140 init_os (output_section_statement);
2142 /* Make sure that any sections mentioned in the assignment
2144 exp_init_os (s->assignment_statement.exp);
2146 case lang_afile_asection_pair_statement_enum:
2149 case lang_address_statement_enum:
2150 /* Mark the specified section with the supplied address. */
2152 lang_output_section_statement_type *os =
2153 lang_output_section_statement_lookup
2154 (s->address_statement.section_name);
2156 if (os->bfd_section == NULL)
2158 os->addr_tree = s->address_statement.address;
2166 print_output_section_statement (output_section_statement)
2167 lang_output_section_statement_type *output_section_statement;
2169 asection *section = output_section_statement->bfd_section;
2172 if (output_section_statement != abs_output_section)
2174 minfo ("\n%s", output_section_statement->name);
2176 if (section != NULL)
2178 print_dot = section->vma;
2180 len = strlen (output_section_statement->name);
2181 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2186 while (len < SECTION_NAME_MAP_LENGTH)
2192 minfo ("0x%V %W", section->vma, section->_raw_size);
2194 if (output_section_statement->load_base != NULL)
2198 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2199 "load base", lang_final_phase_enum);
2200 minfo (_(" load address 0x%V"), addr);
2207 print_statement_list (output_section_statement->children.head,
2208 output_section_statement);
2212 print_assignment (assignment, output_section)
2213 lang_assignment_statement_type *assignment;
2214 lang_output_section_statement_type *output_section;
2217 etree_value_type result;
2219 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2222 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2223 lang_final_phase_enum, print_dot, &print_dot);
2229 value = result.value + result.section->bfd_section->vma;
2230 dst = assignment->exp->assign.dst;
2232 minfo ("0x%V", value);
2233 if (dst[0] == '.' && dst[1] == 0)
2246 exp_print_tree (assignment->exp);
2252 print_input_statement (statm)
2253 lang_input_statement_type *statm;
2255 if (statm->filename != (char *) NULL)
2257 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2261 /* Print all symbols defined in a particular section. This is called
2262 via bfd_link_hash_traverse. */
2265 print_one_symbol (hash_entry, ptr)
2266 struct bfd_link_hash_entry *hash_entry;
2269 asection *sec = (asection *) ptr;
2271 if ((hash_entry->type == bfd_link_hash_defined
2272 || hash_entry->type == bfd_link_hash_defweak)
2273 && sec == hash_entry->u.def.section)
2277 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2280 (hash_entry->u.def.value
2281 + hash_entry->u.def.section->output_offset
2282 + hash_entry->u.def.section->output_section->vma));
2284 minfo (" %T\n", hash_entry->root.string);
2290 /* Print information about an input section to the map file. */
2293 print_input_section (in)
2294 lang_input_section_type *in;
2296 asection *i = in->section;
2297 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
2298 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2299 ldfile_output_machine);
2304 minfo ("%s", i->name);
2306 if (i->output_section != NULL)
2310 len = 1 + strlen (i->name);
2311 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2316 while (len < SECTION_NAME_MAP_LENGTH)
2322 minfo ("0x%V %W %B\n",
2323 i->output_section->vma + i->output_offset, size / opb,
2326 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2328 len = SECTION_NAME_MAP_LENGTH + 3;
2340 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2343 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2345 print_dot = i->output_section->vma + i->output_offset + size / opb;
2351 print_fill_statement (fill)
2352 lang_fill_statement_type *fill;
2356 fputs (" FILL mask 0x", config.map_file);
2357 for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
2358 fprintf (config.map_file, "%02x", *p);
2359 fputs ("\n", config.map_file);
2363 print_data_statement (data)
2364 lang_data_statement_type *data;
2370 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2371 ldfile_output_machine);
2373 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2376 addr = data->output_vma;
2377 if (data->output_section != NULL)
2378 addr += data->output_section->vma;
2406 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2408 if (data->exp->type.node_class != etree_value)
2411 exp_print_tree (data->exp);
2416 print_dot = addr + size / opb;
2420 /* Print an address statement. These are generated by options like
2424 print_address_statement (address)
2425 lang_address_statement_type *address;
2427 minfo (_("Address of section %s set to "), address->section_name);
2428 exp_print_tree (address->address);
2432 /* Print a reloc statement. */
2435 print_reloc_statement (reloc)
2436 lang_reloc_statement_type *reloc;
2441 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2442 ldfile_output_machine);
2444 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2447 addr = reloc->output_vma;
2448 if (reloc->output_section != NULL)
2449 addr += reloc->output_section->vma;
2451 size = bfd_get_reloc_size (reloc->howto);
2453 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2455 if (reloc->name != NULL)
2456 minfo ("%s+", reloc->name);
2458 minfo ("%s+", reloc->section->name);
2460 exp_print_tree (reloc->addend_exp);
2464 print_dot = addr + size / opb;
2468 print_padding_statement (s)
2469 lang_padding_statement_type *s;
2473 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2474 ldfile_output_machine);
2478 len = sizeof " *fill*" - 1;
2479 while (len < SECTION_NAME_MAP_LENGTH)
2485 addr = s->output_offset;
2486 if (s->output_section != NULL)
2487 addr += s->output_section->vma;
2488 minfo ("0x%V %W ", addr, s->size);
2490 if (s->fill->size != 0)
2494 for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
2495 fprintf (config.map_file, "%02x", *p);
2500 print_dot = addr + s->size / opb;
2504 print_wild_statement (w, os)
2505 lang_wild_statement_type *w;
2506 lang_output_section_statement_type *os;
2508 struct wildcard_list *sec;
2512 if (w->filenames_sorted)
2514 if (w->filename != NULL)
2515 minfo ("%s", w->filename);
2518 if (w->filenames_sorted)
2522 for (sec = w->section_list; sec; sec = sec->next)
2524 if (sec->spec.sorted)
2526 if (sec->spec.exclude_name_list != NULL)
2529 minfo ("EXCLUDE_FILE ( %s", sec->spec.exclude_name_list->name);
2530 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
2531 minfo (", %s", tmp->name);
2534 if (sec->spec.name != NULL)
2535 minfo ("%s", sec->spec.name);
2538 if (sec->spec.sorted)
2545 print_statement_list (w->children.head, os);
2548 /* Print a group statement. */
2552 lang_group_statement_type *s;
2553 lang_output_section_statement_type *os;
2555 fprintf (config.map_file, "START GROUP\n");
2556 print_statement_list (s->children.head, os);
2557 fprintf (config.map_file, "END GROUP\n");
2560 /* Print the list of statements in S.
2561 This can be called for any statement type. */
2564 print_statement_list (s, os)
2565 lang_statement_union_type *s;
2566 lang_output_section_statement_type *os;
2570 print_statement (s, os);
2575 /* Print the first statement in statement list S.
2576 This can be called for any statement type. */
2579 print_statement (s, os)
2580 lang_statement_union_type *s;
2581 lang_output_section_statement_type *os;
2583 switch (s->header.type)
2586 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2589 case lang_constructors_statement_enum:
2590 if (constructor_list.head != NULL)
2592 if (constructors_sorted)
2593 minfo (" SORT (CONSTRUCTORS)\n");
2595 minfo (" CONSTRUCTORS\n");
2596 print_statement_list (constructor_list.head, os);
2599 case lang_wild_statement_enum:
2600 print_wild_statement (&s->wild_statement, os);
2602 case lang_address_statement_enum:
2603 print_address_statement (&s->address_statement);
2605 case lang_object_symbols_statement_enum:
2606 minfo (" CREATE_OBJECT_SYMBOLS\n");
2608 case lang_fill_statement_enum:
2609 print_fill_statement (&s->fill_statement);
2611 case lang_data_statement_enum:
2612 print_data_statement (&s->data_statement);
2614 case lang_reloc_statement_enum:
2615 print_reloc_statement (&s->reloc_statement);
2617 case lang_input_section_enum:
2618 print_input_section (&s->input_section);
2620 case lang_padding_statement_enum:
2621 print_padding_statement (&s->padding_statement);
2623 case lang_output_section_statement_enum:
2624 print_output_section_statement (&s->output_section_statement);
2626 case lang_assignment_statement_enum:
2627 print_assignment (&s->assignment_statement, os);
2629 case lang_target_statement_enum:
2630 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2632 case lang_output_statement_enum:
2633 minfo ("OUTPUT(%s", s->output_statement.name);
2634 if (output_target != NULL)
2635 minfo (" %s", output_target);
2638 case lang_input_statement_enum:
2639 print_input_statement (&s->input_statement);
2641 case lang_group_statement_enum:
2642 print_group (&s->group_statement, os);
2644 case lang_afile_asection_pair_statement_enum:
2653 print_statement_list (statement_list.head, abs_output_section);
2656 /* Print the first N statements in statement list S to STDERR.
2657 If N == 0, nothing is printed.
2658 If N < 0, the entire list is printed.
2659 Intended to be called from GDB. */
2662 dprint_statement (s, n)
2663 lang_statement_union_type *s;
2666 FILE *map_save = config.map_file;
2668 config.map_file = stderr;
2671 print_statement_list (s, abs_output_section);
2674 while (s && --n >= 0)
2676 print_statement (s, abs_output_section);
2681 config.map_file = map_save;
2685 insert_pad (ptr, fill, alignment_needed, output_section, dot)
2686 lang_statement_union_type **ptr;
2688 unsigned int alignment_needed;
2689 asection *output_section;
2692 static fill_type zero_fill = { 1, { 0 } };
2693 lang_statement_union_type *pad;
2695 pad = ((lang_statement_union_type *)
2696 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
2697 if (ptr != &statement_list.head
2698 && pad->header.type == lang_padding_statement_enum
2699 && pad->padding_statement.output_section == output_section)
2701 /* Use the existing pad statement. The above test on output
2702 section is probably redundant, but it doesn't hurt to check. */
2706 /* Make a new padding statement, linked into existing chain. */
2707 pad = ((lang_statement_union_type *)
2708 stat_alloc (sizeof (lang_padding_statement_type)));
2709 pad->header.next = *ptr;
2711 pad->header.type = lang_padding_statement_enum;
2712 pad->padding_statement.output_section = output_section;
2713 if (fill == (fill_type *) 0)
2715 pad->padding_statement.fill = fill;
2717 pad->padding_statement.output_offset = dot - output_section->vma;
2718 pad->padding_statement.size = alignment_needed;
2719 output_section->_raw_size += alignment_needed;
2722 /* Work out how much this section will move the dot point. */
2725 size_input_section (this_ptr, output_section_statement, fill, dot)
2726 lang_statement_union_type **this_ptr;
2727 lang_output_section_statement_type *output_section_statement;
2731 lang_input_section_type *is = &((*this_ptr)->input_section);
2732 asection *i = is->section;
2734 if (is->ifile->just_syms_flag == false)
2736 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2737 ldfile_output_machine);
2738 unsigned int alignment_needed;
2741 /* Align this section first to the input sections requirement,
2742 then to the output section's requirement. If this alignment
2743 is greater than any seen before, then record it too. Perform
2744 the alignment by inserting a magic 'padding' statement. */
2746 if (output_section_statement->subsection_alignment != -1)
2747 i->alignment_power = output_section_statement->subsection_alignment;
2749 o = output_section_statement->bfd_section;
2750 if (o->alignment_power < i->alignment_power)
2751 o->alignment_power = i->alignment_power;
2753 alignment_needed = align_power (dot, i->alignment_power) - dot;
2755 if (alignment_needed != 0)
2757 insert_pad (this_ptr, fill, alignment_needed * opb, o, dot);
2758 dot += alignment_needed;
2761 /* Remember where in the output section this input section goes. */
2763 i->output_offset = dot - o->vma;
2765 /* Mark how big the output section must be to contain this now. */
2766 if (i->_cooked_size != 0)
2767 dot += i->_cooked_size / opb;
2769 dot += i->_raw_size / opb;
2770 o->_raw_size = (dot - o->vma) * opb;
2774 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2780 #define IGNORE_SECTION(bfd, s) \
2781 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2782 != (SEC_ALLOC | SEC_LOAD)) \
2783 || bfd_section_size (bfd, s) == 0)
2785 /* Check to see if any allocated sections overlap with other allocated
2786 sections. This can happen when the linker script specifically specifies
2787 the output section addresses of the two sections. */
2790 lang_check_section_addresses ()
2793 unsigned opb = bfd_octets_per_byte (output_bfd);
2795 /* Scan all sections in the output list. */
2796 for (s = output_bfd->sections; s != NULL; s = s->next)
2800 /* Ignore sections which are not loaded or which have no contents. */
2801 if (IGNORE_SECTION (output_bfd, s))
2804 /* Once we reach section 's' stop our seach. This prevents two
2805 warning messages from being produced, one for 'section A overlaps
2806 section B' and one for 'section B overlaps section A'. */
2807 for (os = output_bfd->sections; os != s; os = os->next)
2814 /* Only consider loadable sections with real contents. */
2815 if (IGNORE_SECTION (output_bfd, os))
2818 /* We must check the sections' LMA addresses not their
2819 VMA addresses because overlay sections can have
2820 overlapping VMAs but they must have distinct LMAs. */
2821 s_start = bfd_section_lma (output_bfd, s);
2822 os_start = bfd_section_lma (output_bfd, os);
2823 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2824 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
2826 /* Look for an overlap. */
2827 if ((s_end < os_start) || (s_start > os_end))
2831 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2832 s->name, s_start, s_end, os->name, os_start, os_end);
2834 /* Once we have found one overlap for this section,
2835 stop looking for others. */
2841 /* Make sure the new address is within the region. We explicitly permit the
2842 current address to be at the exact end of the region when the address is
2843 non-zero, in case the region is at the end of addressable memory and the
2844 calculation wraps around. */
2847 os_region_check (os, region, tree, base)
2848 lang_output_section_statement_type *os;
2849 struct memory_region_struct *region;
2853 if ((region->current < region->origin
2854 || (region->current - region->origin > region->length))
2855 && ((region->current != region->origin + region->length)
2858 if (tree != (etree_type *) NULL)
2860 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2862 os->bfd_section->owner,
2863 os->bfd_section->name,
2868 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2870 os->bfd_section->owner,
2871 os->bfd_section->name);
2873 /* Reset the region pointer. */
2874 region->current = region->origin;
2878 /* Set the sizes for all the output sections. */
2881 lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
2882 lang_statement_union_type *s;
2883 lang_output_section_statement_type *output_section_statement;
2884 lang_statement_union_type **prev;
2889 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2890 ldfile_output_machine);
2892 /* Size up the sections from their constituent parts. */
2893 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2895 switch (s->header.type)
2897 case lang_output_section_statement_enum:
2900 lang_output_section_statement_type *os;
2902 os = &s->output_section_statement;
2903 if (os->bfd_section == NULL)
2904 /* This section was never actually created. */
2907 /* If this is a COFF shared library section, use the size and
2908 address from the input section. FIXME: This is COFF
2909 specific; it would be cleaner if there were some other way
2910 to do this, but nothing simple comes to mind. */
2911 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2915 if (os->children.head == NULL
2916 || os->children.head->header.next != NULL
2917 || os->children.head->header.type != lang_input_section_enum)
2918 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2921 input = os->children.head->input_section.section;
2922 bfd_set_section_vma (os->bfd_section->owner,
2924 bfd_section_vma (input->owner, input));
2925 os->bfd_section->_raw_size = input->_raw_size;
2929 if (bfd_is_abs_section (os->bfd_section))
2931 /* No matter what happens, an abs section starts at zero. */
2932 ASSERT (os->bfd_section->vma == 0);
2936 if (os->addr_tree == (etree_type *) NULL)
2938 /* No address specified for this section, get one
2939 from the region specification. */
2940 if (os->region == (lang_memory_region_type *) NULL
2941 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2942 & (SEC_ALLOC | SEC_LOAD)) != 0)
2943 && os->region->name[0] == '*'
2944 && strcmp (os->region->name, "*default*") == 0))
2946 os->region = lang_memory_default (os->bfd_section);
2949 /* If a loadable section is using the default memory
2950 region, and some non default memory regions were
2951 defined, issue a warning. */
2952 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
2953 & (SEC_ALLOC | SEC_LOAD)) != 0
2954 && (bfd_get_section_flags (output_bfd, os->bfd_section)
2955 & SEC_NEVER_LOAD) == 0
2956 && ! link_info.relocateable
2957 && strcmp (os->region->name, "*default*") == 0
2958 && lang_memory_region_list != NULL
2959 && (strcmp (lang_memory_region_list->name,
2961 || lang_memory_region_list->next != NULL))
2962 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2963 bfd_get_section_name (output_bfd,
2966 dot = os->region->current;
2968 if (os->section_alignment == -1)
2973 dot = align_power (dot,
2974 os->bfd_section->alignment_power);
2976 if (dot != olddot && config.warn_section_align)
2977 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2978 os->name, (unsigned int) (dot - olddot));
2985 r = exp_fold_tree (os->addr_tree,
2987 lang_allocating_phase_enum,
2989 if (r.valid_p == false)
2991 einfo (_("%F%S: non constant address expression for section %s\n"),
2994 dot = r.value + r.section->bfd_section->vma;
2997 /* The section starts here.
2998 First, align to what the section needs. */
3000 if (os->section_alignment != -1)
3001 dot = align_power (dot, os->section_alignment);
3003 bfd_set_section_vma (0, os->bfd_section, dot);
3005 os->bfd_section->output_offset = 0;
3008 lang_size_sections_1 (os->children.head, os, &os->children.head,
3009 os->fill, dot, relax);
3011 /* Put the section within the requested block size, or
3012 align at the block boundary. */
3013 after = ALIGN_N (os->bfd_section->vma
3014 + os->bfd_section->_raw_size / opb,
3015 /* The coercion here is important, see ld.h. */
3016 (bfd_vma) os->block_value);
3018 if (bfd_is_abs_section (os->bfd_section))
3019 ASSERT (after == os->bfd_section->vma);
3020 else if ((os->bfd_section->flags & SEC_HAS_CONTENTS) == 0
3021 && (os->bfd_section->flags & SEC_THREAD_LOCAL))
3022 os->bfd_section->_raw_size = 0;
3024 os->bfd_section->_raw_size =
3025 (after - os->bfd_section->vma) * opb;
3027 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3028 os->processed = true;
3030 if (os->update_dot_tree != 0)
3031 exp_fold_tree (os->update_dot_tree, abs_output_section,
3032 lang_allocating_phase_enum, dot, &dot);
3034 /* Update dot in the region ?
3035 We only do this if the section is going to be allocated,
3036 since unallocated sections do not contribute to the region's
3037 overall size in memory.
3039 If the SEC_NEVER_LOAD bit is not set, it will affect the
3040 addresses of sections after it. We have to update
3042 if (os->region != (lang_memory_region_type *) NULL
3043 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
3044 & SEC_NEVER_LOAD) == 0
3045 || (bfd_get_section_flags (output_bfd, os->bfd_section)
3046 & (SEC_ALLOC | SEC_LOAD))))
3048 os->region->current = dot;
3050 /* Make sure the new address is within the region. */
3051 os_region_check (os, os->region, os->addr_tree,
3052 os->bfd_section->vma);
3054 /* If there's no load address specified, use the run
3055 region as the load region. */
3056 if (os->lma_region == NULL && os->load_base == NULL)
3057 os->lma_region = os->region;
3059 if (os->lma_region != NULL && os->lma_region != os->region)
3061 /* Set load_base, which will be handled later. */
3062 os->load_base = exp_intop (os->lma_region->current);
3063 os->lma_region->current +=
3064 os->bfd_section->_raw_size / opb;
3065 os_region_check (os, os->lma_region, NULL,
3066 os->bfd_section->lma);
3072 case lang_constructors_statement_enum:
3073 dot = lang_size_sections_1 (constructor_list.head,
3074 output_section_statement,
3075 &s->wild_statement.children.head,
3079 case lang_data_statement_enum:
3081 unsigned int size = 0;
3083 s->data_statement.output_vma =
3084 dot - output_section_statement->bfd_section->vma;
3085 s->data_statement.output_section =
3086 output_section_statement->bfd_section;
3088 switch (s->data_statement.type)
3109 output_section_statement->bfd_section->_raw_size += size;
3110 /* The output section gets contents, and then we inspect for
3111 any flags set in the input script which override any ALLOC. */
3112 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
3113 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
3115 output_section_statement->bfd_section->flags |=
3116 SEC_ALLOC | SEC_LOAD;
3121 case lang_reloc_statement_enum:
3125 s->reloc_statement.output_vma =
3126 dot - output_section_statement->bfd_section->vma;
3127 s->reloc_statement.output_section =
3128 output_section_statement->bfd_section;
3129 size = bfd_get_reloc_size (s->reloc_statement.howto);
3131 output_section_statement->bfd_section->_raw_size += size;
3135 case lang_wild_statement_enum:
3137 dot = lang_size_sections_1 (s->wild_statement.children.head,
3138 output_section_statement,
3139 &s->wild_statement.children.head,
3144 case lang_object_symbols_statement_enum:
3145 link_info.create_object_symbols_section =
3146 output_section_statement->bfd_section;
3148 case lang_output_statement_enum:
3149 case lang_target_statement_enum:
3151 case lang_input_section_enum:
3155 i = (*prev)->input_section.section;
3158 if (i->_cooked_size == 0)
3159 i->_cooked_size = i->_raw_size;
3165 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3166 einfo (_("%P%F: can't relax section: %E\n"));
3170 dot = size_input_section (prev, output_section_statement,
3171 output_section_statement->fill, dot);
3174 case lang_input_statement_enum:
3176 case lang_fill_statement_enum:
3177 s->fill_statement.output_section =
3178 output_section_statement->bfd_section;
3180 fill = s->fill_statement.fill;
3182 case lang_assignment_statement_enum:
3184 bfd_vma newdot = dot;
3186 exp_fold_tree (s->assignment_statement.exp,
3187 output_section_statement,
3188 lang_allocating_phase_enum,
3194 if (output_section_statement == abs_output_section)
3196 /* If we don't have an output section, then just adjust
3197 the default memory address. */
3198 lang_memory_region_lookup ("*default*")->current = newdot;
3202 /* Insert a pad after this statement. We can't
3203 put the pad before when relaxing, in case the
3204 assignment references dot. */
3205 insert_pad (&s->header.next, fill, (newdot - dot) * opb,
3206 output_section_statement->bfd_section, dot);
3208 /* Don't neuter the pad below when relaxing. */
3217 case lang_padding_statement_enum:
3218 /* If this is the first time lang_size_sections is called,
3219 we won't have any padding statements. If this is the
3220 second or later passes when relaxing, we should allow
3221 padding to shrink. If padding is needed on this pass, it
3222 will be added back in. */
3223 s->padding_statement.size = 0;
3225 /* Make sure output_offset is valid. If relaxation shrinks
3226 the section and this pad isn't needed, it's possible to
3227 have output_offset larger than the final size of the
3228 section. bfd_set_section_contents will complain even for
3229 a pad size of zero. */
3230 s->padding_statement.output_offset
3231 = dot - output_section_statement->bfd_section->vma;
3234 case lang_group_statement_enum:
3235 dot = lang_size_sections_1 (s->group_statement.children.head,
3236 output_section_statement,
3237 &s->group_statement.children.head,
3245 /* We can only get here when relaxing is turned on. */
3246 case lang_address_statement_enum:
3249 prev = &s->header.next;
3255 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
3256 lang_statement_union_type *s;
3257 lang_output_section_statement_type *output_section_statement;
3258 lang_statement_union_type **prev;
3265 exp_data_seg.phase = exp_dataseg_none;
3266 result = lang_size_sections_1 (s, output_section_statement, prev, fill,
3268 if (exp_data_seg.phase == exp_dataseg_end_seen)
3270 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3271 a page could be saved in the data segment. */
3272 bfd_vma first, last;
3274 first = -exp_data_seg.base & (exp_data_seg.pagesize - 1);
3275 last = exp_data_seg.end & (exp_data_seg.pagesize - 1);
3277 && ((exp_data_seg.base & ~(exp_data_seg.pagesize - 1))
3278 != (exp_data_seg.end & ~(exp_data_seg.pagesize - 1)))
3279 && first + last <= exp_data_seg.pagesize)
3281 exp_data_seg.phase = exp_dataseg_adjust;
3282 result = lang_size_sections_1 (s, output_section_statement, prev,
3291 lang_do_assignments (s, output_section_statement, fill, dot)
3292 lang_statement_union_type *s;
3293 lang_output_section_statement_type *output_section_statement;
3297 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3298 ldfile_output_machine);
3300 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3302 switch (s->header.type)
3304 case lang_constructors_statement_enum:
3305 dot = lang_do_assignments (constructor_list.head,
3306 output_section_statement,
3311 case lang_output_section_statement_enum:
3313 lang_output_section_statement_type *os;
3315 os = &(s->output_section_statement);
3316 if (os->bfd_section != NULL)
3318 dot = os->bfd_section->vma;
3319 (void) lang_do_assignments (os->children.head, os,
3321 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3326 /* If nothing has been placed into the output section then
3327 it won't have a bfd_section. */
3328 if (os->bfd_section)
3330 os->bfd_section->lma
3331 = exp_get_abs_int (os->load_base, 0, "load base",
3332 lang_final_phase_enum);
3337 case lang_wild_statement_enum:
3339 dot = lang_do_assignments (s->wild_statement.children.head,
3340 output_section_statement,
3345 case lang_object_symbols_statement_enum:
3346 case lang_output_statement_enum:
3347 case lang_target_statement_enum:
3349 case lang_common_statement_enum:
3352 case lang_data_statement_enum:
3354 etree_value_type value;
3356 value = exp_fold_tree (s->data_statement.exp,
3358 lang_final_phase_enum, dot, &dot);
3359 s->data_statement.value = value.value;
3360 if (value.valid_p == false)
3361 einfo (_("%F%P: invalid data statement\n"));
3365 switch (s->data_statement.type)
3389 case lang_reloc_statement_enum:
3391 etree_value_type value;
3393 value = exp_fold_tree (s->reloc_statement.addend_exp,
3395 lang_final_phase_enum, dot, &dot);
3396 s->reloc_statement.addend_value = value.value;
3397 if (value.valid_p == false)
3398 einfo (_("%F%P: invalid reloc statement\n"));
3400 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
3403 case lang_input_section_enum:
3405 asection *in = s->input_section.section;
3407 if (in->_cooked_size != 0)
3408 dot += in->_cooked_size / opb;
3410 dot += in->_raw_size / opb;
3414 case lang_input_statement_enum:
3416 case lang_fill_statement_enum:
3417 fill = s->fill_statement.fill;
3419 case lang_assignment_statement_enum:
3421 exp_fold_tree (s->assignment_statement.exp,
3422 output_section_statement,
3423 lang_final_phase_enum,
3429 case lang_padding_statement_enum:
3430 dot += s->padding_statement.size / opb;
3433 case lang_group_statement_enum:
3434 dot = lang_do_assignments (s->group_statement.children.head,
3435 output_section_statement,
3443 case lang_address_statement_enum:
3451 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3452 operator .startof. (section_name), it produces an undefined symbol
3453 .startof.section_name. Similarly, when it sees
3454 .sizeof. (section_name), it produces an undefined symbol
3455 .sizeof.section_name. For all the output sections, we look for
3456 such symbols, and set them to the correct value. */
3463 if (link_info.relocateable)
3466 for (s = output_bfd->sections; s != NULL; s = s->next)
3468 const char *secname;
3470 struct bfd_link_hash_entry *h;
3472 secname = bfd_get_section_name (output_bfd, s);
3473 buf = xmalloc (10 + strlen (secname));
3475 sprintf (buf, ".startof.%s", secname);
3476 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3477 if (h != NULL && h->type == bfd_link_hash_undefined)
3479 h->type = bfd_link_hash_defined;
3480 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3481 h->u.def.section = bfd_abs_section_ptr;
3484 sprintf (buf, ".sizeof.%s", secname);
3485 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3486 if (h != NULL && h->type == bfd_link_hash_undefined)
3490 opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3491 ldfile_output_machine);
3492 h->type = bfd_link_hash_defined;
3493 if (s->_cooked_size != 0)
3494 h->u.def.value = s->_cooked_size / opb;
3496 h->u.def.value = s->_raw_size / opb;
3497 h->u.def.section = bfd_abs_section_ptr;
3507 struct bfd_link_hash_entry *h;
3510 if (link_info.relocateable || link_info.shared)
3515 if (entry_symbol == (char *) NULL)
3517 /* No entry has been specified. Look for start, but don't warn
3518 if we don't find it. */
3519 entry_symbol = "start";
3523 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
3524 if (h != (struct bfd_link_hash_entry *) NULL
3525 && (h->type == bfd_link_hash_defined
3526 || h->type == bfd_link_hash_defweak)
3527 && h->u.def.section->output_section != NULL)
3531 val = (h->u.def.value
3532 + bfd_get_section_vma (output_bfd,
3533 h->u.def.section->output_section)
3534 + h->u.def.section->output_offset);
3535 if (! bfd_set_start_address (output_bfd, val))
3536 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol);
3543 /* We couldn't find the entry symbol. Try parsing it as a
3545 val = bfd_scan_vma (entry_symbol, &send, 0);
3548 if (! bfd_set_start_address (output_bfd, val))
3549 einfo (_("%P%F: can't set start address\n"));
3555 /* Can't find the entry symbol, and it's not a number. Use
3556 the first address in the text section. */
3557 ts = bfd_get_section_by_name (output_bfd, entry_section);
3558 if (ts != (asection *) NULL)
3561 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3562 entry_symbol, bfd_get_section_vma (output_bfd, ts));
3563 if (! bfd_set_start_address (output_bfd,
3564 bfd_get_section_vma (output_bfd,
3566 einfo (_("%P%F: can't set start address\n"));
3571 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3578 /* This is a small function used when we want to ignore errors from
3582 #ifdef ANSI_PROTOTYPES
3583 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
3585 ignore_bfd_errors (s)
3586 const char *s ATTRIBUTE_UNUSED;
3589 /* Don't do anything. */
3592 /* Check that the architecture of all the input files is compatible
3593 with the output file. Also call the backend to let it do any
3594 other checking that is needed. */
3599 lang_statement_union_type *file;
3601 const bfd_arch_info_type *compatible;
3603 for (file = file_chain.head;
3604 file != (lang_statement_union_type *) NULL;
3605 file = file->input_statement.next)
3607 input_bfd = file->input_statement.the_bfd;
3608 compatible = bfd_arch_get_compatible (input_bfd, output_bfd);
3610 /* In general it is not possible to perform a relocatable
3611 link between differing object formats when the input
3612 file has relocations, because the relocations in the
3613 input format may not have equivalent representations in
3614 the output format (and besides BFD does not translate
3615 relocs for other link purposes than a final link). */
3616 if ((link_info.relocateable || link_info.emitrelocations)
3617 && (compatible == NULL
3618 || bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd))
3619 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
3621 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3622 bfd_get_target (input_bfd), input_bfd,
3623 bfd_get_target (output_bfd), output_bfd);
3624 /* einfo with %F exits. */
3627 if (compatible == NULL)
3629 if (command_line.warn_mismatch)
3630 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3631 bfd_printable_name (input_bfd), input_bfd,
3632 bfd_printable_name (output_bfd));
3634 else if (bfd_count_sections (input_bfd))
3636 /* If the input bfd has no contents, it shouldn't set the
3637 private data of the output bfd. */
3639 bfd_error_handler_type pfn = NULL;
3641 /* If we aren't supposed to warn about mismatched input
3642 files, temporarily set the BFD error handler to a
3643 function which will do nothing. We still want to call
3644 bfd_merge_private_bfd_data, since it may set up
3645 information which is needed in the output file. */
3646 if (! command_line.warn_mismatch)
3647 pfn = bfd_set_error_handler (ignore_bfd_errors);
3648 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3650 if (command_line.warn_mismatch)
3651 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3654 if (! command_line.warn_mismatch)
3655 bfd_set_error_handler (pfn);
3660 /* Look through all the global common symbols and attach them to the
3661 correct section. The -sort-common command line switch may be used
3662 to roughly sort the entries by size. */
3667 if (command_line.inhibit_common_definition)
3669 if (link_info.relocateable
3670 && ! command_line.force_common_definition)
3673 if (! config.sort_common)
3674 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3679 for (power = 4; power >= 0; power--)
3680 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3685 /* Place one common symbol in the correct section. */
3688 lang_one_common (h, info)
3689 struct bfd_link_hash_entry *h;
3692 unsigned int power_of_two;
3695 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3696 ldfile_output_machine);
3698 if (h->type != bfd_link_hash_common)
3702 power_of_two = h->u.c.p->alignment_power;
3704 if (config.sort_common
3705 && power_of_two < (unsigned int) *(int *) info)
3708 section = h->u.c.p->section;
3710 /* Increase the size of the section. */
3711 section->_cooked_size = ALIGN_N ((section->_cooked_size + opb - 1) / opb,
3712 (bfd_size_type) (1 << power_of_two)) * opb;
3714 /* Adjust the alignment if necessary. */
3715 if (power_of_two > section->alignment_power)
3716 section->alignment_power = power_of_two;
3718 /* Change the symbol from common to defined. */
3719 h->type = bfd_link_hash_defined;
3720 h->u.def.section = section;
3721 h->u.def.value = section->_cooked_size;
3723 /* Increase the size of the section. */
3724 section->_cooked_size += size;
3726 /* Make sure the section is allocated in memory, and make sure that
3727 it is no longer a common section. */
3728 section->flags |= SEC_ALLOC;
3729 section->flags &= ~SEC_IS_COMMON;
3731 if (config.map_file != NULL)
3733 static boolean header_printed;
3738 if (! header_printed)
3740 minfo (_("\nAllocating common symbols\n"));
3741 minfo (_("Common symbol size file\n\n"));
3742 header_printed = true;
3745 name = demangle (h->root.string);
3747 len = strlen (name);
3762 if (size <= 0xffffffff)
3763 sprintf (buf, "%lx", (unsigned long) size);
3765 sprintf_vma (buf, size);
3775 minfo ("%B\n", section->owner);
3781 /* Run through the input files and ensure that every input section has
3782 somewhere to go. If one is found without a destination then create
3783 an input request and place it into the statement tree. */
3786 lang_place_orphans ()
3788 LANG_FOR_EACH_INPUT_STATEMENT (file)
3792 for (s = file->the_bfd->sections;
3793 s != (asection *) NULL;
3796 if (s->output_section == (asection *) NULL)
3798 /* This section of the file is not attatched, root
3799 around for a sensible place for it to go. */
3801 if (file->just_syms_flag)
3805 else if (strcmp (s->name, "COMMON") == 0)
3807 /* This is a lonely common section which must have
3808 come from an archive. We attach to the section
3809 with the wildcard. */
3810 if (! link_info.relocateable
3811 || command_line.force_common_definition)
3813 if (default_common_section == NULL)
3816 /* This message happens when using the
3817 svr3.ifile linker script, so I have
3819 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3821 default_common_section =
3822 lang_output_section_statement_lookup (".bss");
3825 lang_add_section (&default_common_section->children, s,
3826 default_common_section, file);
3829 else if (ldemul_place_orphan (file, s))
3833 lang_output_section_statement_type *os;
3835 os = lang_output_section_statement_lookup (s->name);
3836 lang_add_section (&os->children, s, os, file);
3844 lang_set_flags (ptr, flags, invert)
3845 lang_memory_region_type *ptr;
3849 flagword *ptr_flags;
3851 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
3857 *ptr_flags |= SEC_ALLOC;
3861 *ptr_flags |= SEC_READONLY;
3865 *ptr_flags |= SEC_DATA;
3869 *ptr_flags |= SEC_CODE;
3874 *ptr_flags |= SEC_LOAD;
3878 einfo (_("%P%F: invalid syntax in flags\n"));
3885 /* Call a function on each input file. This function will be called
3886 on an archive, but not on the elements. */
3889 lang_for_each_input_file (func)
3890 void (*func) PARAMS ((lang_input_statement_type *));
3892 lang_input_statement_type *f;
3894 for (f = (lang_input_statement_type *) input_file_chain.head;
3896 f = (lang_input_statement_type *) f->next_real_file)
3900 /* Call a function on each file. The function will be called on all
3901 the elements of an archive which are included in the link, but will
3902 not be called on the archive file itself. */
3905 lang_for_each_file (func)
3906 void (*func) PARAMS ((lang_input_statement_type *));
3908 LANG_FOR_EACH_INPUT_STATEMENT (f)
3919 lang_for_each_input_section (func)
3920 void (*func) PARAMS ((bfd *ab, asection *as));
3922 LANG_FOR_EACH_INPUT_STATEMENT (f)
3926 for (s = f->the_bfd->sections;
3927 s != (asection *) NULL;
3930 func (f->the_bfd, s);
3938 ldlang_add_file (entry)
3939 lang_input_statement_type *entry;
3943 lang_statement_append (&file_chain,
3944 (lang_statement_union_type *) entry,
3947 /* The BFD linker needs to have a list of all input BFDs involved in
3949 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
3950 ASSERT (entry->the_bfd != output_bfd);
3951 for (pp = &link_info.input_bfds;
3952 *pp != (bfd *) NULL;
3953 pp = &(*pp)->link_next)
3955 *pp = entry->the_bfd;
3956 entry->the_bfd->usrdata = (PTR) entry;
3957 bfd_set_gp_size (entry->the_bfd, g_switch_value);
3959 /* Look through the sections and check for any which should not be
3960 included in the link. We need to do this now, so that we can
3961 notice when the backend linker tries to report multiple
3962 definition errors for symbols which are in sections we aren't
3963 going to link. FIXME: It might be better to entirely ignore
3964 symbols which are defined in sections which are going to be
3965 discarded. This would require modifying the backend linker for
3966 each backend which might set the SEC_LINK_ONCE flag. If we do
3967 this, we should probably handle SEC_EXCLUDE in the same way. */
3969 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
3973 lang_add_output (name, from_script)
3977 /* Make -o on command line override OUTPUT in script. */
3978 if (had_output_filename == false || !from_script)
3980 output_filename = name;
3981 had_output_filename = true;
3985 static lang_output_section_statement_type *current_section;
3997 for (l = 0; l < 32; l++)
3999 if (i >= (unsigned int) x)
4007 lang_output_section_statement_type *
4008 lang_enter_output_section_statement (output_section_statement_name,
4009 address_exp, sectype, block_value,
4010 align, subalign, ebase)
4011 const char *output_section_statement_name;
4012 etree_type *address_exp;
4013 enum section_type sectype;
4014 bfd_vma block_value;
4016 etree_type *subalign;
4019 lang_output_section_statement_type *os;
4023 lang_output_section_statement_lookup (output_section_statement_name);
4025 /* Add this statement to tree. */
4027 add_statement (lang_output_section_statement_enum,
4028 output_section_statement);
4030 /* Make next things chain into subchain of this. */
4032 if (os->addr_tree == (etree_type *) NULL)
4034 os->addr_tree = address_exp;
4036 os->sectype = sectype;
4037 if (sectype != noload_section)
4038 os->flags = SEC_NO_FLAGS;
4040 os->flags = SEC_NEVER_LOAD;
4041 os->block_value = block_value ? block_value : 1;
4042 stat_ptr = &os->children;
4044 os->subsection_alignment =
4045 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
4046 os->section_alignment =
4047 topower (exp_get_value_int (align, -1, "section alignment", 0));
4049 os->load_base = ebase;
4056 lang_output_statement_type *new =
4057 new_stat (lang_output_statement, stat_ptr);
4059 new->name = output_filename;
4062 /* Reset the current counters in the regions. */
4065 lang_reset_memory_regions ()
4067 lang_memory_region_type *p = lang_memory_region_list;
4070 for (p = lang_memory_region_list;
4071 p != (lang_memory_region_type *) NULL;
4074 p->old_length = (bfd_size_type) (p->current - p->origin);
4075 p->current = p->origin;
4078 for (o = output_bfd->sections; o != NULL; o = o->next)
4082 /* If the wild pattern was marked KEEP, the member sections
4083 should be as well. */
4086 gc_section_callback (ptr, sec, section, file, data)
4087 lang_wild_statement_type *ptr;
4088 struct wildcard_list *sec ATTRIBUTE_UNUSED;
4090 lang_input_statement_type *file ATTRIBUTE_UNUSED;
4091 PTR data ATTRIBUTE_UNUSED;
4093 if (ptr->keep_sections)
4094 section->flags |= SEC_KEEP;
4097 /* Handle a wild statement, marking it against GC. */
4101 lang_wild_statement_type *s;
4103 walk_wild (s, gc_section_callback, NULL);
4106 /* Iterate over sections marking them against GC. */
4109 lang_gc_sections_1 (s)
4110 lang_statement_union_type *s;
4112 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
4114 switch (s->header.type)
4116 case lang_wild_statement_enum:
4117 lang_gc_wild (&s->wild_statement);
4119 case lang_constructors_statement_enum:
4120 lang_gc_sections_1 (constructor_list.head);
4122 case lang_output_section_statement_enum:
4123 lang_gc_sections_1 (s->output_section_statement.children.head);
4125 case lang_group_statement_enum:
4126 lang_gc_sections_1 (s->group_statement.children.head);
4137 struct bfd_link_hash_entry *h;
4138 ldlang_undef_chain_list_type *ulist, fake_list_start;
4140 /* Keep all sections so marked in the link script. */
4142 lang_gc_sections_1 (statement_list.head);
4144 /* Keep all sections containing symbols undefined on the command-line.
4145 Handle the entry symbol at the same time. */
4147 if (entry_symbol != NULL)
4149 fake_list_start.next = ldlang_undef_chain_list_head;
4150 fake_list_start.name = (char *) entry_symbol;
4151 ulist = &fake_list_start;
4154 ulist = ldlang_undef_chain_list_head;
4156 for (; ulist; ulist = ulist->next)
4158 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
4159 false, false, false);
4161 if (h != (struct bfd_link_hash_entry *) NULL
4162 && (h->type == bfd_link_hash_defined
4163 || h->type == bfd_link_hash_defweak)
4164 && ! bfd_is_abs_section (h->u.def.section))
4166 h->u.def.section->flags |= SEC_KEEP;
4170 bfd_gc_sections (output_bfd, &link_info);
4176 lang_reasonable_defaults ();
4177 current_target = default_target;
4179 /* Open the output file. */
4180 lang_for_each_statement (ldlang_open_output);
4182 ldemul_create_output_section_statements ();
4184 /* Add to the hash table all undefineds on the command line. */
4185 lang_place_undefineds ();
4187 already_linked_table_init ();
4189 /* Create a bfd for each input file. */
4190 current_target = default_target;
4191 open_input_bfds (statement_list.head, false);
4193 ldemul_after_open ();
4195 already_linked_table_free ();
4197 /* Make sure that we're not mixing architectures. We call this
4198 after all the input files have been opened, but before we do any
4199 other processing, so that any operations merge_private_bfd_data
4200 does on the output file will be known during the rest of the
4204 /* Handle .exports instead of a version script if we're told to do so. */
4205 if (command_line.version_exports_section)
4206 lang_do_version_exports_section ();
4208 /* Build all sets based on the information gathered from the input
4210 ldctor_build_sets ();
4212 /* Remove unreferenced sections if asked to. */
4213 if (command_line.gc_sections)
4214 lang_gc_sections ();
4216 /* If there were any SEC_MERGE sections, finish their merging, so that
4217 section sizes can be computed. This has to be done after GC of sections,
4218 so that GCed sections are not merged, but before assigning output
4219 sections, since removing whole input sections is hard then. */
4220 bfd_merge_sections (output_bfd, &link_info);
4222 /* Size up the common data. */
4225 /* Run through the contours of the script and attach input sections
4226 to the correct output sections. */
4227 map_input_to_output_sections (statement_list.head, (char *) NULL,
4228 (lang_output_section_statement_type *) NULL);
4230 /* Find any sections not attached explicitly and handle them. */
4231 lang_place_orphans ();
4233 if (! link_info.relocateable)
4235 /* Look for a text section and set the readonly attribute in it. */
4236 asection *found = bfd_get_section_by_name (output_bfd, ".text");
4238 if (found != (asection *) NULL)
4240 if (config.text_read_only)
4241 found->flags |= SEC_READONLY;
4243 found->flags &= ~SEC_READONLY;
4247 /* Do anything special before sizing sections. This is where ELF
4248 and other back-ends size dynamic sections. */
4249 ldemul_before_allocation ();
4251 /* We must record the program headers before we try to fix the
4252 section positions, since they will affect SIZEOF_HEADERS. */
4253 lang_record_phdrs ();
4255 /* Size up the sections. */
4256 lang_size_sections (statement_list.head,
4258 &statement_list.head, 0, (bfd_vma) 0, NULL);
4260 /* Now run around and relax if we can. */
4261 if (command_line.relax)
4263 /* Keep relaxing until bfd_relax_section gives up. */
4264 boolean relax_again;
4268 lang_reset_memory_regions ();
4270 relax_again = false;
4272 /* Note: pe-dll.c does something like this also. If you find
4273 you need to change this code, you probably need to change
4274 pe-dll.c also. DJ */
4276 /* Do all the assignments with our current guesses as to
4278 lang_do_assignments (statement_list.head,
4280 (fill_type *) 0, (bfd_vma) 0);
4282 /* Perform another relax pass - this time we know where the
4283 globals are, so can make a better guess. */
4284 lang_size_sections (statement_list.head,
4286 &statement_list.head, 0, (bfd_vma) 0,
4289 while (relax_again);
4292 /* See if anything special should be done now we know how big
4294 ldemul_after_allocation ();
4296 /* Fix any .startof. or .sizeof. symbols. */
4297 lang_set_startof ();
4299 /* Do all the assignments, now that we know the final resting places
4300 of all the symbols. */
4302 lang_do_assignments (statement_list.head,
4304 (fill_type *) 0, (bfd_vma) 0);
4306 /* Make sure that the section addresses make sense. */
4307 if (! link_info.relocateable
4308 && command_line.check_section_addresses)
4309 lang_check_section_addresses ();
4317 /* EXPORTED TO YACC */
4320 lang_add_wild (filespec, section_list, keep_sections)
4321 struct wildcard_spec *filespec;
4322 struct wildcard_list *section_list;
4323 boolean keep_sections;
4325 struct wildcard_list *curr, *next;
4326 lang_wild_statement_type *new;
4328 /* Reverse the list as the parser puts it back to front. */
4329 for (curr = section_list, section_list = NULL;
4331 section_list = curr, curr = next)
4333 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
4334 placed_commons = true;
4337 curr->next = section_list;
4340 if (filespec != NULL && filespec->name != NULL)
4342 if (strcmp (filespec->name, "*") == 0)
4343 filespec->name = NULL;
4344 else if (! wildcardp (filespec->name))
4345 lang_has_input_file = true;
4348 new = new_stat (lang_wild_statement, stat_ptr);
4349 new->filename = NULL;
4350 new->filenames_sorted = false;
4351 if (filespec != NULL)
4353 new->filename = filespec->name;
4354 new->filenames_sorted = filespec->sorted;
4356 new->section_list = section_list;
4357 new->keep_sections = keep_sections;
4358 lang_list_init (&new->children);
4362 lang_section_start (name, address)
4364 etree_type *address;
4366 lang_address_statement_type *ad;
4368 ad = new_stat (lang_address_statement, stat_ptr);
4369 ad->section_name = name;
4370 ad->address = address;
4373 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4374 because of a -e argument on the command line, or zero if this is
4375 called by ENTRY in a linker script. Command line arguments take
4379 lang_add_entry (name, cmdline)
4383 if (entry_symbol == NULL
4385 || ! entry_from_cmdline)
4387 entry_symbol = name;
4388 entry_from_cmdline = cmdline;
4393 lang_add_target (name)
4396 lang_target_statement_type *new = new_stat (lang_target_statement,
4412 map_option_f = true;
4420 lang_add_fill (fill)
4423 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4430 lang_add_data (type, exp)
4432 union etree_union *exp;
4435 lang_data_statement_type *new = new_stat (lang_data_statement,
4443 /* Create a new reloc statement. RELOC is the BFD relocation type to
4444 generate. HOWTO is the corresponding howto structure (we could
4445 look this up, but the caller has already done so). SECTION is the
4446 section to generate a reloc against, or NAME is the name of the
4447 symbol to generate a reloc against. Exactly one of SECTION and
4448 NAME must be NULL. ADDEND is an expression for the addend. */
4451 lang_add_reloc (reloc, howto, section, name, addend)
4452 bfd_reloc_code_real_type reloc;
4453 reloc_howto_type *howto;
4456 union etree_union *addend;
4458 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
4462 p->section = section;
4464 p->addend_exp = addend;
4466 p->addend_value = 0;
4467 p->output_section = NULL;
4471 lang_assignment_statement_type *
4472 lang_add_assignment (exp)
4475 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4483 lang_add_attribute (attribute)
4484 enum statement_enum attribute;
4486 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4493 if (startup_file != (char *) NULL)
4495 einfo (_("%P%Fmultiple STARTUP files\n"));
4497 first_file->filename = name;
4498 first_file->local_sym_name = name;
4499 first_file->real = true;
4501 startup_file = name;
4508 lang_float_flag = maybe;
4512 /* Work out the load- and run-time regions from a script statement, and
4513 store them in *LMA_REGION and *REGION respectively.
4515 MEMSPEC is the name of the run-time region, or "*default*" if the
4516 statement didn't specify one. LMA_MEMSPEC is the name of the
4517 load-time region, or null if the statement didn't specify one.
4518 HAVE_LMA_P is true if the statement had an explicit load address.
4520 It is an error to specify both a load region and a load address. */
4523 lang_get_regions (region, lma_region, memspec, lma_memspec, have_lma_p)
4524 struct memory_region_struct **region, **lma_region;
4525 const char *memspec, *lma_memspec;
4528 *lma_region = lang_memory_region_lookup (lma_memspec);
4530 /* If no runtime region has been given, but the load region has
4531 been, use the load region. */
4532 if (lma_memspec != 0 && strcmp (memspec, "*default*") == 0)
4533 *region = *lma_region;
4535 *region = lang_memory_region_lookup (memspec);
4537 if (have_lma_p && lma_memspec != 0)
4538 einfo (_("%X%P:%S: section has both a load address and a load region\n"));
4542 lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
4544 const char *memspec;
4545 struct lang_output_section_phdr_list *phdrs;
4546 const char *lma_memspec;
4548 lang_get_regions (¤t_section->region,
4549 ¤t_section->lma_region,
4550 memspec, lma_memspec,
4551 current_section->load_base != 0);
4552 current_section->fill = fill;
4553 current_section->phdrs = phdrs;
4554 stat_ptr = &statement_list;
4557 /* Create an absolute symbol with the given name with the value of the
4558 address of first byte of the section named.
4560 If the symbol already exists, then do nothing. */
4563 lang_abs_symbol_at_beginning_of (secname, name)
4564 const char *secname;
4567 struct bfd_link_hash_entry *h;
4569 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4570 if (h == (struct bfd_link_hash_entry *) NULL)
4571 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4573 if (h->type == bfd_link_hash_new
4574 || h->type == bfd_link_hash_undefined)
4578 h->type = bfd_link_hash_defined;
4580 sec = bfd_get_section_by_name (output_bfd, secname);
4581 if (sec == (asection *) NULL)
4584 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4586 h->u.def.section = bfd_abs_section_ptr;
4590 /* Create an absolute symbol with the given name with the value of the
4591 address of the first byte after the end of the section named.
4593 If the symbol already exists, then do nothing. */
4596 lang_abs_symbol_at_end_of (secname, name)
4597 const char *secname;
4600 struct bfd_link_hash_entry *h;
4602 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4603 if (h == (struct bfd_link_hash_entry *) NULL)
4604 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4606 if (h->type == bfd_link_hash_new
4607 || h->type == bfd_link_hash_undefined)
4611 h->type = bfd_link_hash_defined;
4613 sec = bfd_get_section_by_name (output_bfd, secname);
4614 if (sec == (asection *) NULL)
4617 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4618 + bfd_section_size (output_bfd, sec) /
4619 bfd_octets_per_byte (output_bfd));
4621 h->u.def.section = bfd_abs_section_ptr;
4626 lang_statement_append (list, element, field)
4627 lang_statement_list_type *list;
4628 lang_statement_union_type *element;
4629 lang_statement_union_type **field;
4631 *(list->tail) = element;
4635 /* Set the output format type. -oformat overrides scripts. */
4638 lang_add_output_format (format, big, little, from_script)
4644 if (output_target == NULL || !from_script)
4646 if (command_line.endian == ENDIAN_BIG
4649 else if (command_line.endian == ENDIAN_LITTLE
4653 output_target = format;
4657 /* Enter a group. This creates a new lang_group_statement, and sets
4658 stat_ptr to build new statements within the group. */
4663 lang_group_statement_type *g;
4665 g = new_stat (lang_group_statement, stat_ptr);
4666 lang_list_init (&g->children);
4667 stat_ptr = &g->children;
4670 /* Leave a group. This just resets stat_ptr to start writing to the
4671 regular list of statements again. Note that this will not work if
4672 groups can occur inside anything else which can adjust stat_ptr,
4673 but currently they can't. */
4678 stat_ptr = &statement_list;
4681 /* Add a new program header. This is called for each entry in a PHDRS
4682 command in a linker script. */
4685 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4693 struct lang_phdr *n, **pp;
4695 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4698 n->type = exp_get_value_int (type, 0, "program header type",
4699 lang_final_phase_enum);
4700 n->filehdr = filehdr;
4705 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4710 /* Record the program header information in the output BFD. FIXME: We
4711 should not be calling an ELF specific function here. */
4714 lang_record_phdrs ()
4718 struct lang_output_section_phdr_list *last;
4719 struct lang_phdr *l;
4720 lang_statement_union_type *u;
4723 secs = (asection **) xmalloc (alc * sizeof (asection *));
4725 for (l = lang_phdr_list; l != NULL; l = l->next)
4732 for (u = lang_output_section_statement.head;
4734 u = u->output_section_statement.next)
4736 lang_output_section_statement_type *os;
4737 struct lang_output_section_phdr_list *pl;
4739 os = &u->output_section_statement;
4746 if (os->sectype == noload_section
4747 || os->bfd_section == NULL
4748 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4753 if (os->bfd_section == NULL)
4756 for (; pl != NULL; pl = pl->next)
4758 if (strcmp (pl->name, l->name) == 0)
4763 secs = ((asection **)
4764 xrealloc (secs, alc * sizeof (asection *)));
4766 secs[c] = os->bfd_section;
4773 if (l->flags == NULL)
4776 flags = exp_get_vma (l->flags, 0, "phdr flags",
4777 lang_final_phase_enum);
4782 at = exp_get_vma (l->at, 0, "phdr load address",
4783 lang_final_phase_enum);
4785 if (! bfd_record_phdr (output_bfd, l->type,
4786 l->flags != NULL, flags, l->at != NULL,
4787 at, l->filehdr, l->phdrs, c, secs))
4788 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4793 /* Make sure all the phdr assignments succeeded. */
4794 for (u = lang_output_section_statement.head;
4796 u = u->output_section_statement.next)
4798 struct lang_output_section_phdr_list *pl;
4800 if (u->output_section_statement.bfd_section == NULL)
4803 for (pl = u->output_section_statement.phdrs;
4806 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4807 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4808 u->output_section_statement.name, pl->name);
4812 /* Record a list of sections which may not be cross referenced. */
4815 lang_add_nocrossref (l)
4816 struct lang_nocrossref *l;
4818 struct lang_nocrossrefs *n;
4820 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4821 n->next = nocrossref_list;
4823 nocrossref_list = n;
4825 /* Set notice_all so that we get informed about all symbols. */
4826 link_info.notice_all = true;
4829 /* Overlay handling. We handle overlays with some static variables. */
4831 /* The overlay virtual address. */
4832 static etree_type *overlay_vma;
4834 /* An expression for the maximum section size seen so far. */
4835 static etree_type *overlay_max;
4837 /* A list of all the sections in this overlay. */
4839 struct overlay_list {
4840 struct overlay_list *next;
4841 lang_output_section_statement_type *os;
4844 static struct overlay_list *overlay_list;
4846 /* Start handling an overlay. */
4849 lang_enter_overlay (vma_expr)
4850 etree_type *vma_expr;
4852 /* The grammar should prevent nested overlays from occurring. */
4853 ASSERT (overlay_vma == NULL && overlay_max == NULL);
4855 overlay_vma = vma_expr;
4858 /* Start a section in an overlay. We handle this by calling
4859 lang_enter_output_section_statement with the correct VMA.
4860 lang_leave_overlay sets up the LMA and memory regions. */
4863 lang_enter_overlay_section (name)
4866 struct overlay_list *n;
4869 lang_enter_output_section_statement (name, overlay_vma, normal_section,
4872 /* If this is the first section, then base the VMA of future
4873 sections on this one. This will work correctly even if `.' is
4874 used in the addresses. */
4875 if (overlay_list == NULL)
4876 overlay_vma = exp_nameop (ADDR, name);
4878 /* Remember the section. */
4879 n = (struct overlay_list *) xmalloc (sizeof *n);
4880 n->os = current_section;
4881 n->next = overlay_list;
4884 size = exp_nameop (SIZEOF, name);
4886 /* Arrange to work out the maximum section end address. */
4887 if (overlay_max == NULL)
4890 overlay_max = exp_binop (MAX_K, overlay_max, size);
4893 /* Finish a section in an overlay. There isn't any special to do
4897 lang_leave_overlay_section (fill, phdrs)
4899 struct lang_output_section_phdr_list *phdrs;
4906 name = current_section->name;
4908 /* For now, assume that "*default*" is the run-time memory region and
4909 that no load-time region has been specified. It doesn't really
4910 matter what we say here, since lang_leave_overlay will override it. */
4911 lang_leave_output_section_statement (fill, "*default*", phdrs, 0);
4913 /* Define the magic symbols. */
4915 clean = xmalloc (strlen (name) + 1);
4917 for (s1 = name; *s1 != '\0'; s1++)
4918 if (ISALNUM (*s1) || *s1 == '_')
4922 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4923 sprintf (buf, "__load_start_%s", clean);
4924 lang_add_assignment (exp_assop ('=', buf,
4925 exp_nameop (LOADADDR, name)));
4927 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4928 sprintf (buf, "__load_stop_%s", clean);
4929 lang_add_assignment (exp_assop ('=', buf,
4931 exp_nameop (LOADADDR, name),
4932 exp_nameop (SIZEOF, name))));
4937 /* Finish an overlay. If there are any overlay wide settings, this
4938 looks through all the sections in the overlay and sets them. */
4941 lang_leave_overlay (lma_expr, nocrossrefs, fill, memspec, phdrs, lma_memspec)
4942 etree_type *lma_expr;
4945 const char *memspec;
4946 struct lang_output_section_phdr_list *phdrs;
4947 const char *lma_memspec;
4949 lang_memory_region_type *region;
4950 lang_memory_region_type *lma_region;
4951 struct overlay_list *l;
4952 struct lang_nocrossref *nocrossref;
4954 lang_get_regions (®ion, &lma_region,
4955 memspec, lma_memspec,
4960 /* After setting the size of the last section, set '.' to end of the
4962 if (overlay_list != NULL)
4963 overlay_list->os->update_dot_tree
4964 = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
4969 struct overlay_list *next;
4971 if (fill != (fill_type *) 0 && l->os->fill == (fill_type *) 0)
4974 l->os->region = region;
4975 l->os->lma_region = lma_region;
4977 /* The first section has the load address specified in the
4978 OVERLAY statement. The rest are worked out from that.
4979 The base address is not needed (and should be null) if
4980 an LMA region was specified. */
4982 l->os->load_base = lma_expr;
4983 else if (lma_region == 0)
4984 l->os->load_base = exp_binop ('+',
4985 exp_nameop (LOADADDR, l->next->os->name),
4986 exp_nameop (SIZEOF, l->next->os->name));
4988 if (phdrs != NULL && l->os->phdrs == NULL)
4989 l->os->phdrs = phdrs;
4993 struct lang_nocrossref *nc;
4995 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
4996 nc->name = l->os->name;
4997 nc->next = nocrossref;
5006 if (nocrossref != NULL)
5007 lang_add_nocrossref (nocrossref);
5010 overlay_list = NULL;
5014 /* Version handling. This is only useful for ELF. */
5016 /* This global variable holds the version tree that we build. */
5018 struct bfd_elf_version_tree *lang_elf_version_info;
5021 lang_vers_match_lang_c (expr, sym)
5022 struct bfd_elf_version_expr *expr;
5025 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5027 return fnmatch (expr->pattern, sym, 0) == 0;
5031 lang_vers_match_lang_cplusplus (expr, sym)
5032 struct bfd_elf_version_expr *expr;
5038 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5041 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
5044 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
5045 Should we early out false in this case? */
5046 result = fnmatch (expr->pattern, sym, 0) == 0;
5050 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5058 lang_vers_match_lang_java (expr, sym)
5059 struct bfd_elf_version_expr *expr;
5065 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5068 alt_sym = cplus_demangle (sym, DMGL_JAVA);
5071 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
5072 Should we early out false in this case? */
5073 result = fnmatch (expr->pattern, sym, 0) == 0;
5077 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5084 /* This is called for each variable name or match expression. */
5086 struct bfd_elf_version_expr *
5087 lang_new_vers_pattern (orig, new, lang)
5088 struct bfd_elf_version_expr *orig;
5092 struct bfd_elf_version_expr *ret;
5094 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
5098 if (lang == NULL || strcasecmp (lang, "C") == 0)
5099 ret->match = lang_vers_match_lang_c;
5100 else if (strcasecmp (lang, "C++") == 0)
5101 ret->match = lang_vers_match_lang_cplusplus;
5102 else if (strcasecmp (lang, "Java") == 0)
5103 ret->match = lang_vers_match_lang_java;
5106 einfo (_("%X%P: unknown language `%s' in version information\n"),
5108 ret->match = lang_vers_match_lang_c;
5111 return ldemul_new_vers_pattern (ret);
5114 /* This is called for each set of variable names and match
5117 struct bfd_elf_version_tree *
5118 lang_new_vers_node (globals, locals)
5119 struct bfd_elf_version_expr *globals;
5120 struct bfd_elf_version_expr *locals;
5122 struct bfd_elf_version_tree *ret;
5124 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
5128 ret->globals = globals;
5129 ret->locals = locals;
5131 ret->name_indx = (unsigned int) -1;
5136 /* This static variable keeps track of version indices. */
5138 static int version_index;
5140 /* This is called when we know the name and dependencies of the
5144 lang_register_vers_node (name, version, deps)
5146 struct bfd_elf_version_tree *version;
5147 struct bfd_elf_version_deps *deps;
5149 struct bfd_elf_version_tree *t, **pp;
5150 struct bfd_elf_version_expr *e1;
5155 if ((name[0] == '\0' && lang_elf_version_info != NULL)
5156 || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
5158 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5162 /* Make sure this node has a unique name. */
5163 for (t = lang_elf_version_info; t != NULL; t = t->next)
5164 if (strcmp (t->name, name) == 0)
5165 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
5167 /* Check the global and local match names, and make sure there
5168 aren't any duplicates. */
5170 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
5172 for (t = lang_elf_version_info; t != NULL; t = t->next)
5174 struct bfd_elf_version_expr *e2;
5176 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
5177 if (strcmp (e1->pattern, e2->pattern) == 0)
5178 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5183 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
5185 for (t = lang_elf_version_info; t != NULL; t = t->next)
5187 struct bfd_elf_version_expr *e2;
5189 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
5190 if (strcmp (e1->pattern, e2->pattern) == 0)
5191 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5196 version->deps = deps;
5197 version->name = name;
5198 if (name[0] != '\0')
5201 version->vernum = version_index;
5204 version->vernum = 0;
5206 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
5211 /* This is called when we see a version dependency. */
5213 struct bfd_elf_version_deps *
5214 lang_add_vers_depend (list, name)
5215 struct bfd_elf_version_deps *list;
5218 struct bfd_elf_version_deps *ret;
5219 struct bfd_elf_version_tree *t;
5221 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
5224 for (t = lang_elf_version_info; t != NULL; t = t->next)
5226 if (strcmp (t->name, name) == 0)
5228 ret->version_needed = t;
5233 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5239 lang_do_version_exports_section ()
5241 struct bfd_elf_version_expr *greg = NULL, *lreg;
5243 LANG_FOR_EACH_INPUT_STATEMENT (is)
5245 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5252 len = bfd_section_size (is->the_bfd, sec);
5253 contents = xmalloc (len);
5254 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
5255 einfo (_("%X%P: unable to read .exports section contents\n"), sec);
5258 while (p < contents + len)
5260 greg = lang_new_vers_pattern (greg, p, NULL);
5261 p = strchr (p, '\0') + 1;
5264 /* Do not free the contents, as we used them creating the regex. */
5266 /* Do not include this section in the link. */
5267 bfd_set_section_flags (is->the_bfd, sec,
5268 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5271 lreg = lang_new_vers_pattern (NULL, "*", NULL);
5272 lang_register_vers_node (command_line.version_exports_section,
5273 lang_new_vers_node (greg, lreg), NULL);
5277 lang_add_unique (name)
5280 struct unique_sections *ent;
5282 for (ent = unique_section_list; ent; ent = ent->next)
5283 if (strcmp (ent->name, name) == 0)
5286 ent = (struct unique_sections *) xmalloc (sizeof *ent);
5287 ent->name = xstrdup (name);
5288 ent->next = unique_section_list;
5289 unique_section_list = ent;