1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
6 This file is part of the GNU Binutils.
8 This program 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 3 of the License, or
11 (at your option) any later version.
13 This program 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 this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
25 #include "libiberty.h"
26 #include "safe-ctype.h"
46 #endif /* ENABLE_PLUGINS */
49 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
52 /* Locals variables. */
53 static struct obstack stat_obstack;
54 static struct obstack map_obstack;
56 #define obstack_chunk_alloc xmalloc
57 #define obstack_chunk_free free
58 static const char *startup_file;
59 static const char *entry_symbol_default = "start";
60 static bfd_boolean placed_commons = FALSE;
61 static bfd_boolean stripped_excluded_sections = FALSE;
62 static lang_output_section_statement_type *default_common_section;
63 static bfd_boolean map_option_f;
64 static bfd_vma print_dot;
65 static lang_input_statement_type *first_file;
66 static const char *current_target;
67 static lang_statement_list_type statement_list;
68 static struct bfd_hash_table lang_definedness_table;
69 static lang_statement_list_type *stat_save[10];
70 static lang_statement_list_type **stat_save_ptr = &stat_save[0];
71 static struct unique_sections *unique_section_list;
72 static bfd_boolean ldlang_sysrooted_script = FALSE;
74 /* Forward declarations. */
75 static void exp_init_os (etree_type *);
76 static void init_map_userdata (bfd *, asection *, void *);
77 static lang_input_statement_type *lookup_name (const char *);
78 static struct bfd_hash_entry *lang_definedness_newfunc
79 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
80 static void insert_undefined (const char *);
81 static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
82 static void print_statement (lang_statement_union_type *,
83 lang_output_section_statement_type *);
84 static void print_statement_list (lang_statement_union_type *,
85 lang_output_section_statement_type *);
86 static void print_statements (void);
87 static void print_input_section (asection *, bfd_boolean);
88 static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
89 static void lang_record_phdrs (void);
90 static void lang_do_version_exports_section (void);
91 static void lang_finalize_version_expr_head
92 (struct bfd_elf_version_expr_head *);
94 /* Exported variables. */
95 const char *output_target;
96 lang_output_section_statement_type *abs_output_section;
97 lang_statement_list_type lang_output_section_statement;
98 lang_statement_list_type *stat_ptr = &statement_list;
99 lang_statement_list_type file_chain = { NULL, NULL };
100 lang_statement_list_type input_file_chain;
101 struct bfd_sym_chain entry_symbol = { NULL, NULL };
102 const char *entry_section = ".text";
103 bfd_boolean entry_from_cmdline;
104 bfd_boolean undef_from_cmdline;
105 bfd_boolean lang_has_input_file = FALSE;
106 bfd_boolean had_output_filename = FALSE;
107 bfd_boolean lang_float_flag = FALSE;
108 bfd_boolean delete_output_file_on_failure = FALSE;
109 struct lang_phdr *lang_phdr_list;
110 struct lang_nocrossrefs *nocrossref_list;
111 bfd_boolean missing_file = FALSE;
113 /* Functions that traverse the linker script and might evaluate
114 DEFINED() need to increment this. */
115 int lang_statement_iteration = 0;
117 etree_type *base; /* Relocation base - or null */
119 /* Return TRUE if the PATTERN argument is a wildcard pattern.
120 Although backslashes are treated specially if a pattern contains
121 wildcards, we do not consider the mere presence of a backslash to
122 be enough to cause the pattern to be treated as a wildcard.
123 That lets us handle DOS filenames more naturally. */
124 #define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
126 #define new_stat(x, y) \
127 (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
129 #define outside_section_address(q) \
130 ((q)->output_offset + (q)->output_section->vma)
132 #define outside_symbol_address(q) \
133 ((q)->value + outside_section_address (q->section))
135 #define SECTION_NAME_MAP_LENGTH (16)
138 stat_alloc (size_t size)
140 return obstack_alloc (&stat_obstack, size);
144 name_match (const char *pattern, const char *name)
146 if (wildcardp (pattern))
147 return fnmatch (pattern, name, 0);
148 return strcmp (pattern, name);
151 /* If PATTERN is of the form archive:file, return a pointer to the
152 separator. If not, return NULL. */
155 archive_path (const char *pattern)
159 if (link_info.path_separator == 0)
162 p = strchr (pattern, link_info.path_separator);
163 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
164 if (p == NULL || link_info.path_separator != ':')
167 /* Assume a match on the second char is part of drive specifier,
168 as in "c:\silly.dos". */
169 if (p == pattern + 1 && ISALPHA (*pattern))
170 p = strchr (p + 1, link_info.path_separator);
175 /* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
176 return whether F matches FILE_SPEC. */
179 input_statement_is_archive_path (const char *file_spec, char *sep,
180 lang_input_statement_type *f)
182 bfd_boolean match = FALSE;
185 || name_match (sep + 1, f->filename) == 0)
186 && ((sep != file_spec)
187 == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
191 if (sep != file_spec)
193 const char *aname = f->the_bfd->my_archive->filename;
195 match = name_match (file_spec, aname) == 0;
196 *sep = link_info.path_separator;
203 unique_section_p (const asection *sec,
204 const lang_output_section_statement_type *os)
206 struct unique_sections *unam;
209 if (link_info.relocatable
210 && sec->owner != NULL
211 && bfd_is_group_section (sec->owner, sec))
213 && strcmp (os->name, DISCARD_SECTION_NAME) == 0);
216 for (unam = unique_section_list; unam; unam = unam->next)
217 if (name_match (unam->name, secnam) == 0)
223 /* Generic traversal routines for finding matching sections. */
225 /* Try processing a section against a wildcard. This just calls
226 the callback unless the filename exclusion list is present
227 and excludes the file. It's hardly ever present so this
228 function is very fast. */
231 walk_wild_consider_section (lang_wild_statement_type *ptr,
232 lang_input_statement_type *file,
234 struct wildcard_list *sec,
238 struct name_list *list_tmp;
240 /* Don't process sections from files which were excluded. */
241 for (list_tmp = sec->spec.exclude_name_list;
243 list_tmp = list_tmp->next)
245 char *p = archive_path (list_tmp->name);
249 if (input_statement_is_archive_path (list_tmp->name, p, file))
253 else if (name_match (list_tmp->name, file->filename) == 0)
256 /* FIXME: Perhaps remove the following at some stage? Matching
257 unadorned archives like this was never documented and has
258 been superceded by the archive:path syntax. */
259 else if (file->the_bfd != NULL
260 && file->the_bfd->my_archive != NULL
261 && name_match (list_tmp->name,
262 file->the_bfd->my_archive->filename) == 0)
266 (*callback) (ptr, sec, s, file, data);
269 /* Lowest common denominator routine that can handle everything correctly,
273 walk_wild_section_general (lang_wild_statement_type *ptr,
274 lang_input_statement_type *file,
279 struct wildcard_list *sec;
281 for (s = file->the_bfd->sections; s != NULL; s = s->next)
283 sec = ptr->section_list;
285 (*callback) (ptr, sec, s, file, data);
289 bfd_boolean skip = FALSE;
291 if (sec->spec.name != NULL)
293 const char *sname = bfd_get_section_name (file->the_bfd, s);
295 skip = name_match (sec->spec.name, sname) != 0;
299 walk_wild_consider_section (ptr, file, s, sec, callback, data);
306 /* Routines to find a single section given its name. If there's more
307 than one section with that name, we report that. */
311 asection *found_section;
312 bfd_boolean multiple_sections_found;
313 } section_iterator_callback_data;
316 section_iterator_callback (bfd *abfd ATTRIBUTE_UNUSED, asection *s, void *data)
318 section_iterator_callback_data *d = (section_iterator_callback_data *) data;
320 if (d->found_section != NULL)
322 d->multiple_sections_found = TRUE;
326 d->found_section = s;
331 find_section (lang_input_statement_type *file,
332 struct wildcard_list *sec,
333 bfd_boolean *multiple_sections_found)
335 section_iterator_callback_data cb_data = { NULL, FALSE };
337 bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
338 section_iterator_callback, &cb_data);
339 *multiple_sections_found = cb_data.multiple_sections_found;
340 return cb_data.found_section;
343 /* Code for handling simple wildcards without going through fnmatch,
344 which can be expensive because of charset translations etc. */
346 /* A simple wild is a literal string followed by a single '*',
347 where the literal part is at least 4 characters long. */
350 is_simple_wild (const char *name)
352 size_t len = strcspn (name, "*?[");
353 return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
357 match_simple_wild (const char *pattern, const char *name)
359 /* The first four characters of the pattern are guaranteed valid
360 non-wildcard characters. So we can go faster. */
361 if (pattern[0] != name[0] || pattern[1] != name[1]
362 || pattern[2] != name[2] || pattern[3] != name[3])
367 while (*pattern != '*')
368 if (*name++ != *pattern++)
374 /* Compare sections ASEC and BSEC according to SORT. */
377 compare_section (sort_type sort, asection *asec, asection *bsec)
386 case by_alignment_name:
387 ret = (bfd_section_alignment (bsec->owner, bsec)
388 - bfd_section_alignment (asec->owner, asec));
394 ret = strcmp (bfd_get_section_name (asec->owner, asec),
395 bfd_get_section_name (bsec->owner, bsec));
398 case by_name_alignment:
399 ret = strcmp (bfd_get_section_name (asec->owner, asec),
400 bfd_get_section_name (bsec->owner, bsec));
406 ret = (bfd_section_alignment (bsec->owner, bsec)
407 - bfd_section_alignment (asec->owner, asec));
414 /* Build a Binary Search Tree to sort sections, unlike insertion sort
415 used in wild_sort(). BST is considerably faster if the number of
416 of sections are large. */
418 static lang_section_bst_type **
419 wild_sort_fast (lang_wild_statement_type *wild,
420 struct wildcard_list *sec,
421 lang_input_statement_type *file ATTRIBUTE_UNUSED,
424 lang_section_bst_type **tree;
427 if (!wild->filenames_sorted
428 && (sec == NULL || sec->spec.sorted == none))
430 /* Append at the right end of tree. */
432 tree = &((*tree)->right);
438 /* Find the correct node to append this section. */
439 if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
440 tree = &((*tree)->left);
442 tree = &((*tree)->right);
448 /* Use wild_sort_fast to build a BST to sort sections. */
451 output_section_callback_fast (lang_wild_statement_type *ptr,
452 struct wildcard_list *sec,
454 lang_input_statement_type *file,
457 lang_section_bst_type *node;
458 lang_section_bst_type **tree;
459 lang_output_section_statement_type *os;
461 os = (lang_output_section_statement_type *) output;
463 if (unique_section_p (section, os))
466 node = (lang_section_bst_type *) xmalloc (sizeof (lang_section_bst_type));
469 node->section = section;
471 tree = wild_sort_fast (ptr, sec, file, section);
476 /* Convert a sorted sections' BST back to list form. */
479 output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
480 lang_section_bst_type *tree,
484 output_section_callback_tree_to_list (ptr, tree->left, output);
486 lang_add_section (&ptr->children, tree->section,
487 (lang_output_section_statement_type *) output);
490 output_section_callback_tree_to_list (ptr, tree->right, output);
495 /* Specialized, optimized routines for handling different kinds of
499 walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
500 lang_input_statement_type *file,
504 /* We can just do a hash lookup for the section with the right name.
505 But if that lookup discovers more than one section with the name
506 (should be rare), we fall back to the general algorithm because
507 we would otherwise have to sort the sections to make sure they
508 get processed in the bfd's order. */
509 bfd_boolean multiple_sections_found;
510 struct wildcard_list *sec0 = ptr->handler_data[0];
511 asection *s0 = find_section (file, sec0, &multiple_sections_found);
513 if (multiple_sections_found)
514 walk_wild_section_general (ptr, file, callback, data);
516 walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
520 walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
521 lang_input_statement_type *file,
526 struct wildcard_list *wildsec0 = ptr->handler_data[0];
528 for (s = file->the_bfd->sections; s != NULL; s = s->next)
530 const char *sname = bfd_get_section_name (file->the_bfd, s);
531 bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
534 walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
539 walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
540 lang_input_statement_type *file,
545 struct wildcard_list *sec0 = ptr->handler_data[0];
546 struct wildcard_list *wildsec1 = ptr->handler_data[1];
547 bfd_boolean multiple_sections_found;
548 asection *s0 = find_section (file, sec0, &multiple_sections_found);
550 if (multiple_sections_found)
552 walk_wild_section_general (ptr, file, callback, data);
556 /* Note that if the section was not found, s0 is NULL and
557 we'll simply never succeed the s == s0 test below. */
558 for (s = file->the_bfd->sections; s != NULL; s = s->next)
560 /* Recall that in this code path, a section cannot satisfy more
561 than one spec, so if s == s0 then it cannot match
564 walk_wild_consider_section (ptr, file, s, sec0, callback, data);
567 const char *sname = bfd_get_section_name (file->the_bfd, s);
568 bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
571 walk_wild_consider_section (ptr, file, s, wildsec1, callback,
578 walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
579 lang_input_statement_type *file,
584 struct wildcard_list *sec0 = ptr->handler_data[0];
585 struct wildcard_list *wildsec1 = ptr->handler_data[1];
586 struct wildcard_list *wildsec2 = ptr->handler_data[2];
587 bfd_boolean multiple_sections_found;
588 asection *s0 = find_section (file, sec0, &multiple_sections_found);
590 if (multiple_sections_found)
592 walk_wild_section_general (ptr, file, callback, data);
596 for (s = file->the_bfd->sections; s != NULL; s = s->next)
599 walk_wild_consider_section (ptr, file, s, sec0, callback, data);
602 const char *sname = bfd_get_section_name (file->the_bfd, s);
603 bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
606 walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
609 skip = !match_simple_wild (wildsec2->spec.name, sname);
611 walk_wild_consider_section (ptr, file, s, wildsec2, callback,
619 walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
620 lang_input_statement_type *file,
625 struct wildcard_list *sec0 = ptr->handler_data[0];
626 struct wildcard_list *sec1 = ptr->handler_data[1];
627 struct wildcard_list *wildsec2 = ptr->handler_data[2];
628 struct wildcard_list *wildsec3 = ptr->handler_data[3];
629 bfd_boolean multiple_sections_found;
630 asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
632 if (multiple_sections_found)
634 walk_wild_section_general (ptr, file, callback, data);
638 s1 = find_section (file, sec1, &multiple_sections_found);
639 if (multiple_sections_found)
641 walk_wild_section_general (ptr, file, callback, data);
645 for (s = file->the_bfd->sections; s != NULL; s = s->next)
648 walk_wild_consider_section (ptr, file, s, sec0, callback, data);
651 walk_wild_consider_section (ptr, file, s, sec1, callback, data);
654 const char *sname = bfd_get_section_name (file->the_bfd, s);
655 bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
659 walk_wild_consider_section (ptr, file, s, wildsec2, callback,
663 skip = !match_simple_wild (wildsec3->spec.name, sname);
665 walk_wild_consider_section (ptr, file, s, wildsec3,
673 walk_wild_section (lang_wild_statement_type *ptr,
674 lang_input_statement_type *file,
678 if (file->just_syms_flag)
681 (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
684 /* Returns TRUE when name1 is a wildcard spec that might match
685 something name2 can match. We're conservative: we return FALSE
686 only if the prefixes of name1 and name2 are different up to the
687 first wildcard character. */
690 wild_spec_can_overlap (const char *name1, const char *name2)
692 size_t prefix1_len = strcspn (name1, "?*[");
693 size_t prefix2_len = strcspn (name2, "?*[");
694 size_t min_prefix_len;
696 /* Note that if there is no wildcard character, then we treat the
697 terminating 0 as part of the prefix. Thus ".text" won't match
698 ".text." or ".text.*", for example. */
699 if (name1[prefix1_len] == '\0')
701 if (name2[prefix2_len] == '\0')
704 min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
706 return memcmp (name1, name2, min_prefix_len) == 0;
709 /* Select specialized code to handle various kinds of wildcard
713 analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
716 int wild_name_count = 0;
717 struct wildcard_list *sec;
721 ptr->walk_wild_section_handler = walk_wild_section_general;
722 ptr->handler_data[0] = NULL;
723 ptr->handler_data[1] = NULL;
724 ptr->handler_data[2] = NULL;
725 ptr->handler_data[3] = NULL;
728 /* Count how many wildcard_specs there are, and how many of those
729 actually use wildcards in the name. Also, bail out if any of the
730 wildcard names are NULL. (Can this actually happen?
731 walk_wild_section used to test for it.) And bail out if any
732 of the wildcards are more complex than a simple string
733 ending in a single '*'. */
734 for (sec = ptr->section_list; sec != NULL; sec = sec->next)
737 if (sec->spec.name == NULL)
739 if (wildcardp (sec->spec.name))
742 if (!is_simple_wild (sec->spec.name))
747 /* The zero-spec case would be easy to optimize but it doesn't
748 happen in practice. Likewise, more than 4 specs doesn't
749 happen in practice. */
750 if (sec_count == 0 || sec_count > 4)
753 /* Check that no two specs can match the same section. */
754 for (sec = ptr->section_list; sec != NULL; sec = sec->next)
756 struct wildcard_list *sec2;
757 for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
759 if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
764 signature = (sec_count << 8) + wild_name_count;
768 ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
771 ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
774 ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
777 ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
780 ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
786 /* Now fill the data array with pointers to the specs, first the
787 specs with non-wildcard names, then the specs with wildcard
788 names. It's OK to process the specs in different order from the
789 given order, because we've already determined that no section
790 will match more than one spec. */
792 for (sec = ptr->section_list; sec != NULL; sec = sec->next)
793 if (!wildcardp (sec->spec.name))
794 ptr->handler_data[data_counter++] = sec;
795 for (sec = ptr->section_list; sec != NULL; sec = sec->next)
796 if (wildcardp (sec->spec.name))
797 ptr->handler_data[data_counter++] = sec;
800 /* Handle a wild statement for a single file F. */
803 walk_wild_file (lang_wild_statement_type *s,
804 lang_input_statement_type *f,
808 if (f->the_bfd == NULL
809 || ! bfd_check_format (f->the_bfd, bfd_archive))
810 walk_wild_section (s, f, callback, data);
815 /* This is an archive file. We must map each member of the
816 archive separately. */
817 member = bfd_openr_next_archived_file (f->the_bfd, NULL);
818 while (member != NULL)
820 /* When lookup_name is called, it will call the add_symbols
821 entry point for the archive. For each element of the
822 archive which is included, BFD will call ldlang_add_file,
823 which will set the usrdata field of the member to the
824 lang_input_statement. */
825 if (member->usrdata != NULL)
827 walk_wild_section (s,
828 (lang_input_statement_type *) member->usrdata,
832 member = bfd_openr_next_archived_file (f->the_bfd, member);
838 walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
840 const char *file_spec = s->filename;
843 if (file_spec == NULL)
845 /* Perform the iteration over all files in the list. */
846 LANG_FOR_EACH_INPUT_STATEMENT (f)
848 walk_wild_file (s, f, callback, data);
851 else if ((p = archive_path (file_spec)) != NULL)
853 LANG_FOR_EACH_INPUT_STATEMENT (f)
855 if (input_statement_is_archive_path (file_spec, p, f))
856 walk_wild_file (s, f, callback, data);
859 else if (wildcardp (file_spec))
861 LANG_FOR_EACH_INPUT_STATEMENT (f)
863 if (fnmatch (file_spec, f->filename, 0) == 0)
864 walk_wild_file (s, f, callback, data);
869 lang_input_statement_type *f;
871 /* Perform the iteration over a single file. */
872 f = lookup_name (file_spec);
874 walk_wild_file (s, f, callback, data);
878 /* lang_for_each_statement walks the parse tree and calls the provided
879 function for each node, except those inside output section statements
880 with constraint set to -1. */
883 lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
884 lang_statement_union_type *s)
886 for (; s != NULL; s = s->header.next)
890 switch (s->header.type)
892 case lang_constructors_statement_enum:
893 lang_for_each_statement_worker (func, constructor_list.head);
895 case lang_output_section_statement_enum:
896 if (s->output_section_statement.constraint != -1)
897 lang_for_each_statement_worker
898 (func, s->output_section_statement.children.head);
900 case lang_wild_statement_enum:
901 lang_for_each_statement_worker (func,
902 s->wild_statement.children.head);
904 case lang_group_statement_enum:
905 lang_for_each_statement_worker (func,
906 s->group_statement.children.head);
908 case lang_data_statement_enum:
909 case lang_reloc_statement_enum:
910 case lang_object_symbols_statement_enum:
911 case lang_output_statement_enum:
912 case lang_target_statement_enum:
913 case lang_input_section_enum:
914 case lang_input_statement_enum:
915 case lang_assignment_statement_enum:
916 case lang_padding_statement_enum:
917 case lang_address_statement_enum:
918 case lang_fill_statement_enum:
919 case lang_insert_statement_enum:
929 lang_for_each_statement (void (*func) (lang_statement_union_type *))
931 lang_for_each_statement_worker (func, statement_list.head);
934 /*----------------------------------------------------------------------*/
937 lang_list_init (lang_statement_list_type *list)
940 list->tail = &list->head;
944 push_stat_ptr (lang_statement_list_type *new_ptr)
946 if (stat_save_ptr >= stat_save + sizeof (stat_save) / sizeof (stat_save[0]))
948 *stat_save_ptr++ = stat_ptr;
955 if (stat_save_ptr <= stat_save)
957 stat_ptr = *--stat_save_ptr;
960 /* Build a new statement node for the parse tree. */
962 static lang_statement_union_type *
963 new_statement (enum statement_enum type,
965 lang_statement_list_type *list)
967 lang_statement_union_type *new_stmt;
969 new_stmt = (lang_statement_union_type *) stat_alloc (size);
970 new_stmt->header.type = type;
971 new_stmt->header.next = NULL;
972 lang_statement_append (list, new_stmt, &new_stmt->header.next);
976 /* Build a new input file node for the language. There are several
977 ways in which we treat an input file, eg, we only look at symbols,
978 or prefix it with a -l etc.
980 We can be supplied with requests for input files more than once;
981 they may, for example be split over several lines like foo.o(.text)
982 foo.o(.data) etc, so when asked for a file we check that we haven't
983 got it already so we don't duplicate the bfd. */
985 static lang_input_statement_type *
986 new_afile (const char *name,
987 lang_input_file_enum_type file_type,
989 bfd_boolean add_to_list)
991 lang_input_statement_type *p;
994 p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
997 p = (lang_input_statement_type *)
998 stat_alloc (sizeof (lang_input_statement_type));
999 p->header.type = lang_input_statement_enum;
1000 p->header.next = NULL;
1003 lang_has_input_file = TRUE;
1005 p->sysrooted = FALSE;
1007 if (file_type == lang_input_file_is_l_enum
1008 && name[0] == ':' && name[1] != '\0')
1010 file_type = lang_input_file_is_search_file_enum;
1016 case lang_input_file_is_symbols_only_enum:
1018 p->maybe_archive = FALSE;
1020 p->local_sym_name = name;
1021 p->just_syms_flag = TRUE;
1022 p->search_dirs_flag = FALSE;
1024 case lang_input_file_is_fake_enum:
1026 p->maybe_archive = FALSE;
1028 p->local_sym_name = name;
1029 p->just_syms_flag = FALSE;
1030 p->search_dirs_flag = FALSE;
1032 case lang_input_file_is_l_enum:
1033 p->maybe_archive = TRUE;
1036 p->local_sym_name = concat ("-l", name, (const char *) NULL);
1037 p->just_syms_flag = FALSE;
1038 p->search_dirs_flag = TRUE;
1040 case lang_input_file_is_marker_enum:
1042 p->maybe_archive = FALSE;
1044 p->local_sym_name = name;
1045 p->just_syms_flag = FALSE;
1046 p->search_dirs_flag = TRUE;
1048 case lang_input_file_is_search_file_enum:
1049 p->sysrooted = ldlang_sysrooted_script;
1051 p->maybe_archive = FALSE;
1053 p->local_sym_name = name;
1054 p->just_syms_flag = FALSE;
1055 p->search_dirs_flag = TRUE;
1057 case lang_input_file_is_file_enum:
1059 p->maybe_archive = FALSE;
1061 p->local_sym_name = name;
1062 p->just_syms_flag = FALSE;
1063 p->search_dirs_flag = FALSE;
1069 p->next_real_file = NULL;
1071 p->dynamic = config.dynamic_link;
1072 p->add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
1073 p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
1074 p->whole_archive = whole_archive;
1076 p->missing_file = FALSE;
1078 lang_statement_append (&input_file_chain,
1079 (lang_statement_union_type *) p,
1080 &p->next_real_file);
1084 lang_input_statement_type *
1085 lang_add_input_file (const char *name,
1086 lang_input_file_enum_type file_type,
1089 return new_afile (name, file_type, target, TRUE);
1092 struct out_section_hash_entry
1094 struct bfd_hash_entry root;
1095 lang_statement_union_type s;
1098 /* The hash table. */
1100 static struct bfd_hash_table output_section_statement_table;
1102 /* Support routines for the hash table used by lang_output_section_find,
1103 initialize the table, fill in an entry and remove the table. */
1105 static struct bfd_hash_entry *
1106 output_section_statement_newfunc (struct bfd_hash_entry *entry,
1107 struct bfd_hash_table *table,
1110 lang_output_section_statement_type **nextp;
1111 struct out_section_hash_entry *ret;
1115 entry = (struct bfd_hash_entry *) bfd_hash_allocate (table,
1121 entry = bfd_hash_newfunc (entry, table, string);
1125 ret = (struct out_section_hash_entry *) entry;
1126 memset (&ret->s, 0, sizeof (ret->s));
1127 ret->s.header.type = lang_output_section_statement_enum;
1128 ret->s.output_section_statement.subsection_alignment = -1;
1129 ret->s.output_section_statement.section_alignment = -1;
1130 ret->s.output_section_statement.block_value = 1;
1131 lang_list_init (&ret->s.output_section_statement.children);
1132 lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
1134 /* For every output section statement added to the list, except the
1135 first one, lang_output_section_statement.tail points to the "next"
1136 field of the last element of the list. */
1137 if (lang_output_section_statement.head != NULL)
1138 ret->s.output_section_statement.prev
1139 = ((lang_output_section_statement_type *)
1140 ((char *) lang_output_section_statement.tail
1141 - offsetof (lang_output_section_statement_type, next)));
1143 /* GCC's strict aliasing rules prevent us from just casting the
1144 address, so we store the pointer in a variable and cast that
1146 nextp = &ret->s.output_section_statement.next;
1147 lang_statement_append (&lang_output_section_statement,
1149 (lang_statement_union_type **) nextp);
1154 output_section_statement_table_init (void)
1156 if (!bfd_hash_table_init_n (&output_section_statement_table,
1157 output_section_statement_newfunc,
1158 sizeof (struct out_section_hash_entry),
1160 einfo (_("%P%F: can not create hash table: %E\n"));
1164 output_section_statement_table_free (void)
1166 bfd_hash_table_free (&output_section_statement_table);
1169 /* Build enough state so that the parser can build its tree. */
1174 obstack_begin (&stat_obstack, 1000);
1176 stat_ptr = &statement_list;
1178 output_section_statement_table_init ();
1180 lang_list_init (stat_ptr);
1182 lang_list_init (&input_file_chain);
1183 lang_list_init (&lang_output_section_statement);
1184 lang_list_init (&file_chain);
1185 first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
1187 abs_output_section =
1188 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
1190 abs_output_section->bfd_section = bfd_abs_section_ptr;
1192 /* The value "3" is ad-hoc, somewhat related to the expected number of
1193 DEFINED expressions in a linker script. For most default linker
1194 scripts, there are none. Why a hash table then? Well, it's somewhat
1195 simpler to re-use working machinery than using a linked list in terms
1196 of code-complexity here in ld, besides the initialization which just
1197 looks like other code here. */
1198 if (!bfd_hash_table_init_n (&lang_definedness_table,
1199 lang_definedness_newfunc,
1200 sizeof (struct lang_definedness_hash_entry),
1202 einfo (_("%P%F: can not create hash table: %E\n"));
1208 output_section_statement_table_free ();
1211 /*----------------------------------------------------------------------
1212 A region is an area of memory declared with the
1213 MEMORY { name:org=exp, len=exp ... }
1216 We maintain a list of all the regions here.
1218 If no regions are specified in the script, then the default is used
1219 which is created when looked up to be the entire data space.
1221 If create is true we are creating a region inside a MEMORY block.
1222 In this case it is probably an error to create a region that has
1223 already been created. If we are not inside a MEMORY block it is
1224 dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
1225 and so we issue a warning.
1227 Each region has at least one name. The first name is either
1228 DEFAULT_MEMORY_REGION or the name given in the MEMORY block. You can add
1229 alias names to an existing region within a script with
1230 REGION_ALIAS (alias, region_name). Each name corresponds to at most one
1233 static lang_memory_region_type *lang_memory_region_list;
1234 static lang_memory_region_type **lang_memory_region_list_tail
1235 = &lang_memory_region_list;
1237 lang_memory_region_type *
1238 lang_memory_region_lookup (const char *const name, bfd_boolean create)
1240 lang_memory_region_name *n;
1241 lang_memory_region_type *r;
1242 lang_memory_region_type *new_region;
1244 /* NAME is NULL for LMA memspecs if no region was specified. */
1248 for (r = lang_memory_region_list; r != NULL; r = r->next)
1249 for (n = &r->name_list; n != NULL; n = n->next)
1250 if (strcmp (n->name, name) == 0)
1253 einfo (_("%P:%S: warning: redeclaration of memory region `%s'\n"),
1258 if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
1259 einfo (_("%P:%S: warning: memory region `%s' not declared\n"), name);
1261 new_region = (lang_memory_region_type *)
1262 stat_alloc (sizeof (lang_memory_region_type));
1264 new_region->name_list.name = xstrdup (name);
1265 new_region->name_list.next = NULL;
1266 new_region->next = NULL;
1267 new_region->origin = 0;
1268 new_region->length = ~(bfd_size_type) 0;
1269 new_region->current = 0;
1270 new_region->last_os = NULL;
1271 new_region->flags = 0;
1272 new_region->not_flags = 0;
1273 new_region->had_full_message = FALSE;
1275 *lang_memory_region_list_tail = new_region;
1276 lang_memory_region_list_tail = &new_region->next;
1282 lang_memory_region_alias (const char * alias, const char * region_name)
1284 lang_memory_region_name * n;
1285 lang_memory_region_type * r;
1286 lang_memory_region_type * region;
1288 /* The default region must be unique. This ensures that it is not necessary
1289 to iterate through the name list if someone wants the check if a region is
1290 the default memory region. */
1291 if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0
1292 || strcmp (alias, DEFAULT_MEMORY_REGION) == 0)
1293 einfo (_("%F%P:%S: error: alias for default memory region\n"));
1295 /* Look for the target region and check if the alias is not already
1298 for (r = lang_memory_region_list; r != NULL; r = r->next)
1299 for (n = &r->name_list; n != NULL; n = n->next)
1301 if (region == NULL && strcmp (n->name, region_name) == 0)
1303 if (strcmp (n->name, alias) == 0)
1304 einfo (_("%F%P:%S: error: redefinition of memory region "
1309 /* Check if the target region exists. */
1311 einfo (_("%F%P:%S: error: memory region `%s' "
1312 "for alias `%s' does not exist\n"),
1316 /* Add alias to region name list. */
1317 n = (lang_memory_region_name *) stat_alloc (sizeof (lang_memory_region_name));
1318 n->name = xstrdup (alias);
1319 n->next = region->name_list.next;
1320 region->name_list.next = n;
1323 static lang_memory_region_type *
1324 lang_memory_default (asection * section)
1326 lang_memory_region_type *p;
1328 flagword sec_flags = section->flags;
1330 /* Override SEC_DATA to mean a writable section. */
1331 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
1332 sec_flags |= SEC_DATA;
1334 for (p = lang_memory_region_list; p != NULL; p = p->next)
1336 if ((p->flags & sec_flags) != 0
1337 && (p->not_flags & sec_flags) == 0)
1342 return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
1345 /* Find or create an output_section_statement with the given NAME.
1346 If CONSTRAINT is non-zero match one with that constraint, otherwise
1347 match any non-negative constraint. If CREATE, always make a
1348 new output_section_statement for SPECIAL CONSTRAINT. */
1350 lang_output_section_statement_type *
1351 lang_output_section_statement_lookup (const char *name,
1355 struct out_section_hash_entry *entry;
1357 entry = ((struct out_section_hash_entry *)
1358 bfd_hash_lookup (&output_section_statement_table, name,
1363 einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1367 if (entry->s.output_section_statement.name != NULL)
1369 /* We have a section of this name, but it might not have the correct
1371 struct out_section_hash_entry *last_ent;
1373 name = entry->s.output_section_statement.name;
1374 if (create && constraint == SPECIAL)
1375 /* Not traversing to the end reverses the order of the second
1376 and subsequent SPECIAL sections in the hash table chain,
1377 but that shouldn't matter. */
1382 if (constraint == entry->s.output_section_statement.constraint
1384 && entry->s.output_section_statement.constraint >= 0))
1385 return &entry->s.output_section_statement;
1387 entry = (struct out_section_hash_entry *) entry->root.next;
1389 while (entry != NULL
1390 && name == entry->s.output_section_statement.name);
1396 = ((struct out_section_hash_entry *)
1397 output_section_statement_newfunc (NULL,
1398 &output_section_statement_table,
1402 einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1405 entry->root = last_ent->root;
1406 last_ent->root.next = &entry->root;
1409 entry->s.output_section_statement.name = name;
1410 entry->s.output_section_statement.constraint = constraint;
1411 return &entry->s.output_section_statement;
1414 /* Find the next output_section_statement with the same name as OS.
1415 If CONSTRAINT is non-zero, find one with that constraint otherwise
1416 match any non-negative constraint. */
1418 lang_output_section_statement_type *
1419 next_matching_output_section_statement (lang_output_section_statement_type *os,
1422 /* All output_section_statements are actually part of a
1423 struct out_section_hash_entry. */
1424 struct out_section_hash_entry *entry = (struct out_section_hash_entry *)
1426 - offsetof (struct out_section_hash_entry, s.output_section_statement));
1427 const char *name = os->name;
1429 ASSERT (name == entry->root.string);
1432 entry = (struct out_section_hash_entry *) entry->root.next;
1434 || name != entry->s.output_section_statement.name)
1437 while (constraint != entry->s.output_section_statement.constraint
1439 || entry->s.output_section_statement.constraint < 0));
1441 return &entry->s.output_section_statement;
1444 /* A variant of lang_output_section_find used by place_orphan.
1445 Returns the output statement that should precede a new output
1446 statement for SEC. If an exact match is found on certain flags,
1449 lang_output_section_statement_type *
1450 lang_output_section_find_by_flags (const asection *sec,
1451 lang_output_section_statement_type **exact,
1452 lang_match_sec_type_func match_type)
1454 lang_output_section_statement_type *first, *look, *found;
1457 /* We know the first statement on this list is *ABS*. May as well
1459 first = &lang_output_section_statement.head->output_section_statement;
1460 first = first->next;
1462 /* First try for an exact match. */
1464 for (look = first; look; look = look->next)
1466 flags = look->flags;
1467 if (look->bfd_section != NULL)
1469 flags = look->bfd_section->flags;
1470 if (match_type && !match_type (link_info.output_bfd,
1475 flags ^= sec->flags;
1476 if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1477 | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1487 if ((sec->flags & SEC_CODE) != 0
1488 && (sec->flags & SEC_ALLOC) != 0)
1490 /* Try for a rw code section. */
1491 for (look = first; look; look = look->next)
1493 flags = look->flags;
1494 if (look->bfd_section != NULL)
1496 flags = look->bfd_section->flags;
1497 if (match_type && !match_type (link_info.output_bfd,
1502 flags ^= sec->flags;
1503 if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1504 | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1508 else if ((sec->flags & (SEC_READONLY | SEC_THREAD_LOCAL)) != 0
1509 && (sec->flags & SEC_ALLOC) != 0)
1511 /* .rodata can go after .text, .sdata2 after .rodata. */
1512 for (look = first; look; look = look->next)
1514 flags = look->flags;
1515 if (look->bfd_section != NULL)
1517 flags = look->bfd_section->flags;
1518 if (match_type && !match_type (link_info.output_bfd,
1523 flags ^= sec->flags;
1524 if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1526 && !(look->flags & (SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1530 else if ((sec->flags & SEC_SMALL_DATA) != 0
1531 && (sec->flags & SEC_ALLOC) != 0)
1533 /* .sdata goes after .data, .sbss after .sdata. */
1534 for (look = first; look; look = look->next)
1536 flags = look->flags;
1537 if (look->bfd_section != NULL)
1539 flags = look->bfd_section->flags;
1540 if (match_type && !match_type (link_info.output_bfd,
1545 flags ^= sec->flags;
1546 if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1547 | SEC_THREAD_LOCAL))
1548 || ((look->flags & SEC_SMALL_DATA)
1549 && !(sec->flags & SEC_HAS_CONTENTS)))
1553 else if ((sec->flags & SEC_HAS_CONTENTS) != 0
1554 && (sec->flags & SEC_ALLOC) != 0)
1556 /* .data goes after .rodata. */
1557 for (look = first; look; look = look->next)
1559 flags = look->flags;
1560 if (look->bfd_section != NULL)
1562 flags = look->bfd_section->flags;
1563 if (match_type && !match_type (link_info.output_bfd,
1568 flags ^= sec->flags;
1569 if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1570 | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1574 else if ((sec->flags & SEC_ALLOC) != 0)
1576 /* .bss goes after any other alloc section. */
1577 for (look = first; look; look = look->next)
1579 flags = look->flags;
1580 if (look->bfd_section != NULL)
1582 flags = look->bfd_section->flags;
1583 if (match_type && !match_type (link_info.output_bfd,
1588 flags ^= sec->flags;
1589 if (!(flags & SEC_ALLOC))
1595 /* non-alloc go last. */
1596 for (look = first; look; look = look->next)
1598 flags = look->flags;
1599 if (look->bfd_section != NULL)
1600 flags = look->bfd_section->flags;
1601 flags ^= sec->flags;
1602 if (!(flags & SEC_DEBUGGING))
1608 if (found || !match_type)
1611 return lang_output_section_find_by_flags (sec, NULL, NULL);
1614 /* Find the last output section before given output statement.
1615 Used by place_orphan. */
1618 output_prev_sec_find (lang_output_section_statement_type *os)
1620 lang_output_section_statement_type *lookup;
1622 for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
1624 if (lookup->constraint < 0)
1627 if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1628 return lookup->bfd_section;
1634 /* Look for a suitable place for a new output section statement. The
1635 idea is to skip over anything that might be inside a SECTIONS {}
1636 statement in a script, before we find another output section
1637 statement. Assignments to "dot" before an output section statement
1638 are assumed to belong to it, except in two cases; The first
1639 assignment to dot, and assignments before non-alloc sections.
1640 Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
1641 similar assignments that set the initial address, or we might
1642 insert non-alloc note sections among assignments setting end of
1645 static lang_statement_union_type **
1646 insert_os_after (lang_output_section_statement_type *after)
1648 lang_statement_union_type **where;
1649 lang_statement_union_type **assign = NULL;
1650 bfd_boolean ignore_first;
1653 = after == &lang_output_section_statement.head->output_section_statement;
1655 for (where = &after->header.next;
1657 where = &(*where)->header.next)
1659 switch ((*where)->header.type)
1661 case lang_assignment_statement_enum:
1664 lang_assignment_statement_type *ass;
1666 ass = &(*where)->assignment_statement;
1667 if (ass->exp->type.node_class != etree_assert
1668 && ass->exp->assign.dst[0] == '.'
1669 && ass->exp->assign.dst[1] == 0
1673 ignore_first = FALSE;
1675 case lang_wild_statement_enum:
1676 case lang_input_section_enum:
1677 case lang_object_symbols_statement_enum:
1678 case lang_fill_statement_enum:
1679 case lang_data_statement_enum:
1680 case lang_reloc_statement_enum:
1681 case lang_padding_statement_enum:
1682 case lang_constructors_statement_enum:
1685 case lang_output_section_statement_enum:
1688 asection *s = (*where)->output_section_statement.bfd_section;
1691 || s->map_head.s == NULL
1692 || (s->flags & SEC_ALLOC) != 0)
1696 case lang_input_statement_enum:
1697 case lang_address_statement_enum:
1698 case lang_target_statement_enum:
1699 case lang_output_statement_enum:
1700 case lang_group_statement_enum:
1701 case lang_insert_statement_enum:
1710 lang_output_section_statement_type *
1711 lang_insert_orphan (asection *s,
1712 const char *secname,
1714 lang_output_section_statement_type *after,
1715 struct orphan_save *place,
1716 etree_type *address,
1717 lang_statement_list_type *add_child)
1719 lang_statement_list_type add;
1721 lang_output_section_statement_type *os;
1722 lang_output_section_statement_type **os_tail;
1724 /* If we have found an appropriate place for the output section
1725 statements for this orphan, add them to our own private list,
1726 inserting them later into the global statement list. */
1729 lang_list_init (&add);
1730 push_stat_ptr (&add);
1733 if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1734 address = exp_intop (0);
1736 os_tail = ((lang_output_section_statement_type **)
1737 lang_output_section_statement.tail);
1738 os = lang_enter_output_section_statement (secname, address, normal_section,
1739 NULL, NULL, NULL, constraint);
1742 if (config.build_constructors && *os_tail == os)
1744 /* If the name of the section is representable in C, then create
1745 symbols to mark the start and the end of the section. */
1746 for (ps = secname; *ps != '\0'; ps++)
1747 if (! ISALNUM ((unsigned char) *ps) && *ps != '_')
1752 etree_type *e_align;
1754 symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1755 symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1756 sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1757 e_align = exp_unop (ALIGN_K,
1758 exp_intop ((bfd_vma) 1 << s->alignment_power));
1759 lang_add_assignment (exp_assign (".", e_align));
1760 if (link_info.shared)
1761 lang_add_assignment (exp_assign (symname,
1763 exp_nameop (NAME, "."))));
1765 lang_add_assignment (exp_provide (symname,
1767 exp_nameop (NAME, ".")),
1772 if (add_child == NULL)
1773 add_child = &os->children;
1774 lang_add_section (add_child, s, os);
1776 if (after && (s->flags & (SEC_LOAD | SEC_ALLOC)) != 0)
1778 const char *region = (after->region
1779 ? after->region->name_list.name
1780 : DEFAULT_MEMORY_REGION);
1781 const char *lma_region = (after->lma_region
1782 ? after->lma_region->name_list.name
1784 lang_leave_output_section_statement (NULL, region, after->phdrs,
1788 lang_leave_output_section_statement (NULL, DEFAULT_MEMORY_REGION, NULL,
1791 if (ps != NULL && *ps == '\0')
1795 symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
1796 symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1797 sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
1798 if (link_info.shared)
1799 lang_add_assignment (exp_assign (symname,
1800 exp_nameop (NAME, ".")));
1802 lang_add_assignment (exp_provide (symname,
1803 exp_nameop (NAME, "."),
1807 /* Restore the global list pointer. */
1811 if (after != NULL && os->bfd_section != NULL)
1813 asection *snew, *as;
1815 snew = os->bfd_section;
1817 /* Shuffle the bfd section list to make the output file look
1818 neater. This is really only cosmetic. */
1819 if (place->section == NULL
1820 && after != (&lang_output_section_statement.head
1821 ->output_section_statement))
1823 asection *bfd_section = after->bfd_section;
1825 /* If the output statement hasn't been used to place any input
1826 sections (and thus doesn't have an output bfd_section),
1827 look for the closest prior output statement having an
1829 if (bfd_section == NULL)
1830 bfd_section = output_prev_sec_find (after);
1832 if (bfd_section != NULL && bfd_section != snew)
1833 place->section = &bfd_section->next;
1836 if (place->section == NULL)
1837 place->section = &link_info.output_bfd->sections;
1839 as = *place->section;
1843 /* Put the section at the end of the list. */
1845 /* Unlink the section. */
1846 bfd_section_list_remove (link_info.output_bfd, snew);
1848 /* Now tack it back on in the right place. */
1849 bfd_section_list_append (link_info.output_bfd, snew);
1851 else if (as != snew && as->prev != snew)
1853 /* Unlink the section. */
1854 bfd_section_list_remove (link_info.output_bfd, snew);
1856 /* Now tack it back on in the right place. */
1857 bfd_section_list_insert_before (link_info.output_bfd, as, snew);
1860 /* Save the end of this list. Further ophans of this type will
1861 follow the one we've just added. */
1862 place->section = &snew->next;
1864 /* The following is non-cosmetic. We try to put the output
1865 statements in some sort of reasonable order here, because they
1866 determine the final load addresses of the orphan sections.
1867 In addition, placing output statements in the wrong order may
1868 require extra segments. For instance, given a typical
1869 situation of all read-only sections placed in one segment and
1870 following that a segment containing all the read-write
1871 sections, we wouldn't want to place an orphan read/write
1872 section before or amongst the read-only ones. */
1873 if (add.head != NULL)
1875 lang_output_section_statement_type *newly_added_os;
1877 if (place->stmt == NULL)
1879 lang_statement_union_type **where = insert_os_after (after);
1884 place->os_tail = &after->next;
1888 /* Put it after the last orphan statement we added. */
1889 *add.tail = *place->stmt;
1890 *place->stmt = add.head;
1893 /* Fix the global list pointer if we happened to tack our
1894 new list at the tail. */
1895 if (*stat_ptr->tail == add.head)
1896 stat_ptr->tail = add.tail;
1898 /* Save the end of this list. */
1899 place->stmt = add.tail;
1901 /* Do the same for the list of output section statements. */
1902 newly_added_os = *os_tail;
1904 newly_added_os->prev = (lang_output_section_statement_type *)
1905 ((char *) place->os_tail
1906 - offsetof (lang_output_section_statement_type, next));
1907 newly_added_os->next = *place->os_tail;
1908 if (newly_added_os->next != NULL)
1909 newly_added_os->next->prev = newly_added_os;
1910 *place->os_tail = newly_added_os;
1911 place->os_tail = &newly_added_os->next;
1913 /* Fixing the global list pointer here is a little different.
1914 We added to the list in lang_enter_output_section_statement,
1915 trimmed off the new output_section_statment above when
1916 assigning *os_tail = NULL, but possibly added it back in
1917 the same place when assigning *place->os_tail. */
1918 if (*os_tail == NULL)
1919 lang_output_section_statement.tail
1920 = (lang_statement_union_type **) os_tail;
1927 lang_map_flags (flagword flag)
1929 if (flag & SEC_ALLOC)
1932 if (flag & SEC_CODE)
1935 if (flag & SEC_READONLY)
1938 if (flag & SEC_DATA)
1941 if (flag & SEC_LOAD)
1948 lang_memory_region_type *m;
1949 bfd_boolean dis_header_printed = FALSE;
1952 LANG_FOR_EACH_INPUT_STATEMENT (file)
1956 if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
1957 || file->just_syms_flag)
1960 for (s = file->the_bfd->sections; s != NULL; s = s->next)
1961 if ((s->output_section == NULL
1962 || s->output_section->owner != link_info.output_bfd)
1963 && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
1965 if (! dis_header_printed)
1967 fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
1968 dis_header_printed = TRUE;
1971 print_input_section (s, TRUE);
1975 minfo (_("\nMemory Configuration\n\n"));
1976 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
1977 _("Name"), _("Origin"), _("Length"), _("Attributes"));
1979 for (m = lang_memory_region_list; m != NULL; m = m->next)
1984 fprintf (config.map_file, "%-16s ", m->name_list.name);
1986 sprintf_vma (buf, m->origin);
1987 minfo ("0x%s ", buf);
1995 minfo ("0x%V", m->length);
1996 if (m->flags || m->not_flags)
2004 lang_map_flags (m->flags);
2010 lang_map_flags (m->not_flags);
2017 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
2019 if (! link_info.reduce_memory_overheads)
2021 obstack_begin (&map_obstack, 1000);
2022 for (p = link_info.input_bfds; p != (bfd *) NULL; p = p->link_next)
2023 bfd_map_over_sections (p, init_map_userdata, 0);
2024 bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
2026 lang_statement_iteration ++;
2027 print_statements ();
2031 init_map_userdata (bfd *abfd ATTRIBUTE_UNUSED,
2033 void *data ATTRIBUTE_UNUSED)
2035 fat_section_userdata_type *new_data
2036 = ((fat_section_userdata_type *) (stat_alloc
2037 (sizeof (fat_section_userdata_type))));
2039 ASSERT (get_userdata (sec) == NULL);
2040 get_userdata (sec) = new_data;
2041 new_data->map_symbol_def_tail = &new_data->map_symbol_def_head;
2042 new_data->map_symbol_def_count = 0;
2046 sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
2047 void *info ATTRIBUTE_UNUSED)
2049 if (hash_entry->type == bfd_link_hash_warning)
2050 hash_entry = (struct bfd_link_hash_entry *) hash_entry->u.i.link;
2052 if (hash_entry->type == bfd_link_hash_defined
2053 || hash_entry->type == bfd_link_hash_defweak)
2055 struct fat_user_section_struct *ud;
2056 struct map_symbol_def *def;
2058 ud = (struct fat_user_section_struct *)
2059 get_userdata (hash_entry->u.def.section);
2062 /* ??? What do we have to do to initialize this beforehand? */
2063 /* The first time we get here is bfd_abs_section... */
2064 init_map_userdata (0, hash_entry->u.def.section, 0);
2065 ud = (struct fat_user_section_struct *)
2066 get_userdata (hash_entry->u.def.section);
2068 else if (!ud->map_symbol_def_tail)
2069 ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2071 def = (struct map_symbol_def *) obstack_alloc (&map_obstack, sizeof *def);
2072 def->entry = hash_entry;
2073 *(ud->map_symbol_def_tail) = def;
2074 ud->map_symbol_def_tail = &def->next;
2075 ud->map_symbol_def_count++;
2080 /* Initialize an output section. */
2083 init_os (lang_output_section_statement_type *s, flagword flags)
2085 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
2086 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
2088 if (s->constraint != SPECIAL)
2089 s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
2090 if (s->bfd_section == NULL)
2091 s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
2093 if (s->bfd_section == NULL)
2095 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
2096 link_info.output_bfd->xvec->name, s->name);
2098 s->bfd_section->output_section = s->bfd_section;
2099 s->bfd_section->output_offset = 0;
2101 if (!link_info.reduce_memory_overheads)
2103 fat_section_userdata_type *new_userdata = (fat_section_userdata_type *)
2104 stat_alloc (sizeof (fat_section_userdata_type));
2105 memset (new_userdata, 0, sizeof (fat_section_userdata_type));
2106 get_userdata (s->bfd_section) = new_userdata;
2109 /* If there is a base address, make sure that any sections it might
2110 mention are initialized. */
2111 if (s->addr_tree != NULL)
2112 exp_init_os (s->addr_tree);
2114 if (s->load_base != NULL)
2115 exp_init_os (s->load_base);
2117 /* If supplied an alignment, set it. */
2118 if (s->section_alignment != -1)
2119 s->bfd_section->alignment_power = s->section_alignment;
2122 /* Make sure that all output sections mentioned in an expression are
2126 exp_init_os (etree_type *exp)
2128 switch (exp->type.node_class)
2132 exp_init_os (exp->assign.src);
2136 exp_init_os (exp->binary.lhs);
2137 exp_init_os (exp->binary.rhs);
2141 exp_init_os (exp->trinary.cond);
2142 exp_init_os (exp->trinary.lhs);
2143 exp_init_os (exp->trinary.rhs);
2147 exp_init_os (exp->assert_s.child);
2151 exp_init_os (exp->unary.child);
2155 switch (exp->type.node_code)
2161 lang_output_section_statement_type *os;
2163 os = lang_output_section_find (exp->name.name);
2164 if (os != NULL && os->bfd_section == NULL)
2176 section_already_linked (bfd *abfd, asection *sec, void *data)
2178 lang_input_statement_type *entry = (lang_input_statement_type *) data;
2180 /* If we are only reading symbols from this object, then we want to
2181 discard all sections. */
2182 if (entry->just_syms_flag)
2184 bfd_link_just_syms (abfd, sec, &link_info);
2188 if (!(abfd->flags & DYNAMIC))
2189 bfd_section_already_linked (abfd, sec, &link_info);
2192 /* The wild routines.
2194 These expand statements like *(.text) and foo.o to a list of
2195 explicit actions, like foo.o(.text), bar.o(.text) and
2196 foo.o(.text, .data). */
2198 /* Add SECTION to the output section OUTPUT. Do this by creating a
2199 lang_input_section statement which is placed at PTR. FILE is the
2200 input file which holds SECTION. */
2203 lang_add_section (lang_statement_list_type *ptr,
2205 lang_output_section_statement_type *output)
2207 flagword flags = section->flags;
2208 bfd_boolean discard;
2209 lang_input_section_type *new_section;
2211 /* Discard sections marked with SEC_EXCLUDE. */
2212 discard = (flags & SEC_EXCLUDE) != 0;
2214 /* Discard input sections which are assigned to a section named
2215 DISCARD_SECTION_NAME. */
2216 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
2219 /* Discard debugging sections if we are stripping debugging
2221 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
2222 && (flags & SEC_DEBUGGING) != 0)
2227 if (section->output_section == NULL)
2229 /* This prevents future calls from assigning this section. */
2230 section->output_section = bfd_abs_section_ptr;
2235 if (section->output_section != NULL)
2238 /* We don't copy the SEC_NEVER_LOAD flag from an input section
2239 to an output section, because we want to be able to include a
2240 SEC_NEVER_LOAD section in the middle of an otherwise loaded
2241 section (I don't know why we want to do this, but we do).
2242 build_link_order in ldwrite.c handles this case by turning
2243 the embedded SEC_NEVER_LOAD section into a fill. */
2244 flags &= ~ SEC_NEVER_LOAD;
2246 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
2247 already been processed. One reason to do this is that on pe
2248 format targets, .text$foo sections go into .text and it's odd
2249 to see .text with SEC_LINK_ONCE set. */
2251 if (!link_info.relocatable)
2252 flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC);
2254 switch (output->sectype)
2256 case normal_section:
2257 case overlay_section:
2259 case noalloc_section:
2260 flags &= ~SEC_ALLOC;
2262 case noload_section:
2264 flags |= SEC_NEVER_LOAD;
2265 /* Unfortunately GNU ld has managed to evolve two different
2266 meanings to NOLOAD in scripts. ELF gets a .bss style noload,
2267 alloc, no contents section. All others get a noload, noalloc
2269 if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
2270 flags &= ~SEC_HAS_CONTENTS;
2272 flags &= ~SEC_ALLOC;
2276 if (output->bfd_section == NULL)
2277 init_os (output, flags);
2279 /* If SEC_READONLY is not set in the input section, then clear
2280 it from the output section. */
2281 output->bfd_section->flags &= flags | ~SEC_READONLY;
2283 if (output->bfd_section->linker_has_input)
2285 /* Only set SEC_READONLY flag on the first input section. */
2286 flags &= ~ SEC_READONLY;
2288 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
2289 if ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
2290 != (flags & (SEC_MERGE | SEC_STRINGS))
2291 || ((flags & SEC_MERGE) != 0
2292 && output->bfd_section->entsize != section->entsize))
2294 output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
2295 flags &= ~ (SEC_MERGE | SEC_STRINGS);
2298 output->bfd_section->flags |= flags;
2300 if (!output->bfd_section->linker_has_input)
2302 output->bfd_section->linker_has_input = 1;
2303 /* This must happen after flags have been updated. The output
2304 section may have been created before we saw its first input
2305 section, eg. for a data statement. */
2306 bfd_init_private_section_data (section->owner, section,
2307 link_info.output_bfd,
2308 output->bfd_section,
2310 if ((flags & SEC_MERGE) != 0)
2311 output->bfd_section->entsize = section->entsize;
2314 if ((flags & SEC_TIC54X_BLOCK) != 0
2315 && bfd_get_arch (section->owner) == bfd_arch_tic54x)
2317 /* FIXME: This value should really be obtained from the bfd... */
2318 output->block_value = 128;
2321 if (section->alignment_power > output->bfd_section->alignment_power)
2322 output->bfd_section->alignment_power = section->alignment_power;
2324 section->output_section = output->bfd_section;
2326 if (!link_info.relocatable
2327 && !stripped_excluded_sections)
2329 asection *s = output->bfd_section->map_tail.s;
2330 output->bfd_section->map_tail.s = section;
2331 section->map_head.s = NULL;
2332 section->map_tail.s = s;
2334 s->map_head.s = section;
2336 output->bfd_section->map_head.s = section;
2339 /* Add a section reference to the list. */
2340 new_section = new_stat (lang_input_section, ptr);
2341 new_section->section = section;
2344 /* Handle wildcard sorting. This returns the lang_input_section which
2345 should follow the one we are going to create for SECTION and FILE,
2346 based on the sorting requirements of WILD. It returns NULL if the
2347 new section should just go at the end of the current list. */
2349 static lang_statement_union_type *
2350 wild_sort (lang_wild_statement_type *wild,
2351 struct wildcard_list *sec,
2352 lang_input_statement_type *file,
2355 lang_statement_union_type *l;
2357 if (!wild->filenames_sorted
2358 && (sec == NULL || sec->spec.sorted == none))
2361 for (l = wild->children.head; l != NULL; l = l->header.next)
2363 lang_input_section_type *ls;
2365 if (l->header.type != lang_input_section_enum)
2367 ls = &l->input_section;
2369 /* Sorting by filename takes precedence over sorting by section
2372 if (wild->filenames_sorted)
2374 const char *fn, *ln;
2378 /* The PE support for the .idata section as generated by
2379 dlltool assumes that files will be sorted by the name of
2380 the archive and then the name of the file within the
2383 if (file->the_bfd != NULL
2384 && bfd_my_archive (file->the_bfd) != NULL)
2386 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
2391 fn = file->filename;
2395 if (bfd_my_archive (ls->section->owner) != NULL)
2397 ln = bfd_get_filename (bfd_my_archive (ls->section->owner));
2402 ln = ls->section->owner->filename;
2406 i = strcmp (fn, ln);
2415 fn = file->filename;
2417 ln = ls->section->owner->filename;
2419 i = strcmp (fn, ln);
2427 /* Here either the files are not sorted by name, or we are
2428 looking at the sections for this file. */
2430 if (sec != NULL && sec->spec.sorted != none)
2431 if (compare_section (sec->spec.sorted, section, ls->section) < 0)
2438 /* Expand a wild statement for a particular FILE. SECTION may be
2439 NULL, in which case it is a wild card. */
2442 output_section_callback (lang_wild_statement_type *ptr,
2443 struct wildcard_list *sec,
2445 lang_input_statement_type *file,
2448 lang_statement_union_type *before;
2449 lang_output_section_statement_type *os;
2451 os = (lang_output_section_statement_type *) output;
2453 /* Exclude sections that match UNIQUE_SECTION_LIST. */
2454 if (unique_section_p (section, os))
2457 before = wild_sort (ptr, sec, file, section);
2459 /* Here BEFORE points to the lang_input_section which
2460 should follow the one we are about to add. If BEFORE
2461 is NULL, then the section should just go at the end
2462 of the current list. */
2465 lang_add_section (&ptr->children, section, os);
2468 lang_statement_list_type list;
2469 lang_statement_union_type **pp;
2471 lang_list_init (&list);
2472 lang_add_section (&list, section, os);
2474 /* If we are discarding the section, LIST.HEAD will
2476 if (list.head != NULL)
2478 ASSERT (list.head->header.next == NULL);
2480 for (pp = &ptr->children.head;
2482 pp = &(*pp)->header.next)
2483 ASSERT (*pp != NULL);
2485 list.head->header.next = *pp;
2491 /* Check if all sections in a wild statement for a particular FILE
2495 check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2496 struct wildcard_list *sec ATTRIBUTE_UNUSED,
2498 lang_input_statement_type *file ATTRIBUTE_UNUSED,
2501 lang_output_section_statement_type *os;
2503 os = (lang_output_section_statement_type *) output;
2505 /* Exclude sections that match UNIQUE_SECTION_LIST. */
2506 if (unique_section_p (section, os))
2509 if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2510 os->all_input_readonly = FALSE;
2513 /* This is passed a file name which must have been seen already and
2514 added to the statement tree. We will see if it has been opened
2515 already and had its symbols read. If not then we'll read it. */
2517 static lang_input_statement_type *
2518 lookup_name (const char *name)
2520 lang_input_statement_type *search;
2522 for (search = (lang_input_statement_type *) input_file_chain.head;
2524 search = (lang_input_statement_type *) search->next_real_file)
2526 /* Use the local_sym_name as the name of the file that has
2527 already been loaded as filename might have been transformed
2528 via the search directory lookup mechanism. */
2529 const char *filename = search->local_sym_name;
2531 if (filename != NULL
2532 && strcmp (filename, name) == 0)
2537 search = new_afile (name, lang_input_file_is_search_file_enum,
2538 default_target, FALSE);
2540 /* If we have already added this file, or this file is not real
2541 don't add this file. */
2542 if (search->loaded || !search->real)
2545 if (! load_symbols (search, NULL))
2551 /* Save LIST as a list of libraries whose symbols should not be exported. */
2556 struct excluded_lib *next;
2558 static struct excluded_lib *excluded_libs;
2561 add_excluded_libs (const char *list)
2563 const char *p = list, *end;
2567 struct excluded_lib *entry;
2568 end = strpbrk (p, ",:");
2570 end = p + strlen (p);
2571 entry = (struct excluded_lib *) xmalloc (sizeof (*entry));
2572 entry->next = excluded_libs;
2573 entry->name = (char *) xmalloc (end - p + 1);
2574 memcpy (entry->name, p, end - p);
2575 entry->name[end - p] = '\0';
2576 excluded_libs = entry;
2584 check_excluded_libs (bfd *abfd)
2586 struct excluded_lib *lib = excluded_libs;
2590 int len = strlen (lib->name);
2591 const char *filename = lbasename (abfd->filename);
2593 if (strcmp (lib->name, "ALL") == 0)
2595 abfd->no_export = TRUE;
2599 if (strncmp (lib->name, filename, len) == 0
2600 && (filename[len] == '\0'
2601 || (filename[len] == '.' && filename[len + 1] == 'a'
2602 && filename[len + 2] == '\0')))
2604 abfd->no_export = TRUE;
2612 /* Get the symbols for an input file. */
2615 load_symbols (lang_input_statement_type *entry,
2616 lang_statement_list_type *place)
2623 ldfile_open_file (entry);
2625 /* Do not process further if the file was missing. */
2626 if (entry->missing_file)
2629 if (! bfd_check_format (entry->the_bfd, bfd_archive)
2630 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2633 bfd_boolean save_ldlang_sysrooted_script;
2634 bfd_boolean save_add_DT_NEEDED_for_regular;
2635 bfd_boolean save_add_DT_NEEDED_for_dynamic;
2636 bfd_boolean save_whole_archive;
2638 err = bfd_get_error ();
2640 /* See if the emulation has some special knowledge. */
2641 if (ldemul_unrecognized_file (entry))
2644 if (err == bfd_error_file_ambiguously_recognized)
2648 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2649 einfo (_("%B: matching formats:"), entry->the_bfd);
2650 for (p = matching; *p != NULL; p++)
2654 else if (err != bfd_error_file_not_recognized
2656 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2658 bfd_close (entry->the_bfd);
2659 entry->the_bfd = NULL;
2661 /* Try to interpret the file as a linker script. */
2662 ldfile_open_command_file (entry->filename);
2664 push_stat_ptr (place);
2665 save_ldlang_sysrooted_script = ldlang_sysrooted_script;
2666 ldlang_sysrooted_script = entry->sysrooted;
2667 save_add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
2668 add_DT_NEEDED_for_regular = entry->add_DT_NEEDED_for_regular;
2669 save_add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
2670 add_DT_NEEDED_for_dynamic = entry->add_DT_NEEDED_for_dynamic;
2671 save_whole_archive = whole_archive;
2672 whole_archive = entry->whole_archive;
2674 ldfile_assumed_script = TRUE;
2675 parser_input = input_script;
2676 /* We want to use the same -Bdynamic/-Bstatic as the one for
2678 config.dynamic_link = entry->dynamic;
2680 ldfile_assumed_script = FALSE;
2682 ldlang_sysrooted_script = save_ldlang_sysrooted_script;
2683 add_DT_NEEDED_for_regular = save_add_DT_NEEDED_for_regular;
2684 add_DT_NEEDED_for_dynamic = save_add_DT_NEEDED_for_dynamic;
2685 whole_archive = save_whole_archive;
2691 if (ldemul_recognized_file (entry))
2694 /* We don't call ldlang_add_file for an archive. Instead, the
2695 add_symbols entry point will call ldlang_add_file, via the
2696 add_archive_element callback, for each element of the archive
2698 switch (bfd_get_format (entry->the_bfd))
2704 ldlang_add_file (entry);
2705 if (trace_files || trace_file_tries)
2706 info_msg ("%I\n", entry);
2710 check_excluded_libs (entry->the_bfd);
2712 if (entry->whole_archive)
2715 bfd_boolean loaded = TRUE;
2720 member = bfd_openr_next_archived_file (entry->the_bfd, member);
2725 if (! bfd_check_format (member, bfd_object))
2727 einfo (_("%F%B: member %B in archive is not an object\n"),
2728 entry->the_bfd, member);
2733 if (!(*link_info.callbacks
2734 ->add_archive_element) (&link_info, member,
2735 "--whole-archive", &subsbfd))
2738 /* Potentially, the add_archive_element hook may have set a
2739 substitute BFD for us. */
2740 if (!bfd_link_add_symbols (subsbfd, &link_info))
2742 einfo (_("%F%B: could not read symbols: %E\n"), member);
2747 entry->loaded = loaded;
2753 if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2754 entry->loaded = TRUE;
2756 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
2758 return entry->loaded;
2761 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
2762 may be NULL, indicating that it is a wildcard. Separate
2763 lang_input_section statements are created for each part of the
2764 expansion; they are added after the wild statement S. OUTPUT is
2765 the output section. */
2768 wild (lang_wild_statement_type *s,
2769 const char *target ATTRIBUTE_UNUSED,
2770 lang_output_section_statement_type *output)
2772 struct wildcard_list *sec;
2774 if (s->handler_data[0]
2775 && s->handler_data[0]->spec.sorted == by_name
2776 && !s->filenames_sorted)
2778 lang_section_bst_type *tree;
2780 walk_wild (s, output_section_callback_fast, output);
2785 output_section_callback_tree_to_list (s, tree, output);
2790 walk_wild (s, output_section_callback, output);
2792 if (default_common_section == NULL)
2793 for (sec = s->section_list; sec != NULL; sec = sec->next)
2794 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2796 /* Remember the section that common is going to in case we
2797 later get something which doesn't know where to put it. */
2798 default_common_section = output;
2803 /* Return TRUE iff target is the sought target. */
2806 get_target (const bfd_target *target, void *data)
2808 const char *sought = (const char *) data;
2810 return strcmp (target->name, sought) == 0;
2813 /* Like strcpy() but convert to lower case as well. */
2816 stricpy (char *dest, char *src)
2820 while ((c = *src++) != 0)
2821 *dest++ = TOLOWER (c);
2826 /* Remove the first occurrence of needle (if any) in haystack
2830 strcut (char *haystack, char *needle)
2832 haystack = strstr (haystack, needle);
2838 for (src = haystack + strlen (needle); *src;)
2839 *haystack++ = *src++;
2845 /* Compare two target format name strings.
2846 Return a value indicating how "similar" they are. */
2849 name_compare (char *first, char *second)
2855 copy1 = (char *) xmalloc (strlen (first) + 1);
2856 copy2 = (char *) xmalloc (strlen (second) + 1);
2858 /* Convert the names to lower case. */
2859 stricpy (copy1, first);
2860 stricpy (copy2, second);
2862 /* Remove size and endian strings from the name. */
2863 strcut (copy1, "big");
2864 strcut (copy1, "little");
2865 strcut (copy2, "big");
2866 strcut (copy2, "little");
2868 /* Return a value based on how many characters match,
2869 starting from the beginning. If both strings are
2870 the same then return 10 * their length. */
2871 for (result = 0; copy1[result] == copy2[result]; result++)
2872 if (copy1[result] == 0)
2884 /* Set by closest_target_match() below. */
2885 static const bfd_target *winner;
2887 /* Scan all the valid bfd targets looking for one that has the endianness
2888 requirement that was specified on the command line, and is the nearest
2889 match to the original output target. */
2892 closest_target_match (const bfd_target *target, void *data)
2894 const bfd_target *original = (const bfd_target *) data;
2896 if (command_line.endian == ENDIAN_BIG
2897 && target->byteorder != BFD_ENDIAN_BIG)
2900 if (command_line.endian == ENDIAN_LITTLE
2901 && target->byteorder != BFD_ENDIAN_LITTLE)
2904 /* Must be the same flavour. */
2905 if (target->flavour != original->flavour)
2908 /* Ignore generic big and little endian elf vectors. */
2909 if (strcmp (target->name, "elf32-big") == 0
2910 || strcmp (target->name, "elf64-big") == 0
2911 || strcmp (target->name, "elf32-little") == 0
2912 || strcmp (target->name, "elf64-little") == 0)
2915 /* If we have not found a potential winner yet, then record this one. */
2922 /* Oh dear, we now have two potential candidates for a successful match.
2923 Compare their names and choose the better one. */
2924 if (name_compare (target->name, original->name)
2925 > name_compare (winner->name, original->name))
2928 /* Keep on searching until wqe have checked them all. */
2932 /* Return the BFD target format of the first input file. */
2935 get_first_input_target (void)
2937 char *target = NULL;
2939 LANG_FOR_EACH_INPUT_STATEMENT (s)
2941 if (s->header.type == lang_input_statement_enum
2944 ldfile_open_file (s);
2946 if (s->the_bfd != NULL
2947 && bfd_check_format (s->the_bfd, bfd_object))
2949 target = bfd_get_target (s->the_bfd);
2961 lang_get_output_target (void)
2965 /* Has the user told us which output format to use? */
2966 if (output_target != NULL)
2967 return output_target;
2969 /* No - has the current target been set to something other than
2971 if (current_target != default_target)
2972 return current_target;
2974 /* No - can we determine the format of the first input file? */
2975 target = get_first_input_target ();
2979 /* Failed - use the default output target. */
2980 return default_target;
2983 /* Open the output file. */
2986 open_output (const char *name)
2988 output_target = lang_get_output_target ();
2990 /* Has the user requested a particular endianness on the command
2992 if (command_line.endian != ENDIAN_UNSET)
2994 const bfd_target *target;
2995 enum bfd_endian desired_endian;
2997 /* Get the chosen target. */
2998 target = bfd_search_for_target (get_target, (void *) output_target);
3000 /* If the target is not supported, we cannot do anything. */
3003 if (command_line.endian == ENDIAN_BIG)
3004 desired_endian = BFD_ENDIAN_BIG;
3006 desired_endian = BFD_ENDIAN_LITTLE;
3008 /* See if the target has the wrong endianness. This should
3009 not happen if the linker script has provided big and
3010 little endian alternatives, but some scrips don't do
3012 if (target->byteorder != desired_endian)
3014 /* If it does, then see if the target provides
3015 an alternative with the correct endianness. */
3016 if (target->alternative_target != NULL
3017 && (target->alternative_target->byteorder == desired_endian))
3018 output_target = target->alternative_target->name;
3021 /* Try to find a target as similar as possible to
3022 the default target, but which has the desired
3023 endian characteristic. */
3024 bfd_search_for_target (closest_target_match,
3027 /* Oh dear - we could not find any targets that
3028 satisfy our requirements. */
3030 einfo (_("%P: warning: could not find any targets"
3031 " that match endianness requirement\n"));
3033 output_target = winner->name;
3039 link_info.output_bfd = bfd_openw (name, output_target);
3041 if (link_info.output_bfd == NULL)
3043 if (bfd_get_error () == bfd_error_invalid_target)
3044 einfo (_("%P%F: target %s not found\n"), output_target);
3046 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
3049 delete_output_file_on_failure = TRUE;
3051 if (! bfd_set_format (link_info.output_bfd, bfd_object))
3052 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
3053 if (! bfd_set_arch_mach (link_info.output_bfd,
3054 ldfile_output_architecture,
3055 ldfile_output_machine))
3056 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
3058 link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
3059 if (link_info.hash == NULL)
3060 einfo (_("%P%F: can not create hash table: %E\n"));
3062 bfd_set_gp_size (link_info.output_bfd, g_switch_value);
3066 ldlang_open_output (lang_statement_union_type *statement)
3068 switch (statement->header.type)
3070 case lang_output_statement_enum:
3071 ASSERT (link_info.output_bfd == NULL);
3072 open_output (statement->output_statement.name);
3073 ldemul_set_output_arch ();
3074 if (config.magic_demand_paged && !link_info.relocatable)
3075 link_info.output_bfd->flags |= D_PAGED;
3077 link_info.output_bfd->flags &= ~D_PAGED;
3078 if (config.text_read_only)
3079 link_info.output_bfd->flags |= WP_TEXT;
3081 link_info.output_bfd->flags &= ~WP_TEXT;
3082 if (link_info.traditional_format)
3083 link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
3085 link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
3088 case lang_target_statement_enum:
3089 current_target = statement->target_statement.target;
3096 /* Convert between addresses in bytes and sizes in octets.
3097 For currently supported targets, octets_per_byte is always a power
3098 of two, so we can use shifts. */
3099 #define TO_ADDR(X) ((X) >> opb_shift)
3100 #define TO_SIZE(X) ((X) << opb_shift)
3102 /* Support the above. */
3103 static unsigned int opb_shift = 0;
3108 unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3109 ldfile_output_machine);
3112 while ((x & 1) == 0)
3120 /* Open all the input files. */
3123 open_input_bfds (lang_statement_union_type *s, bfd_boolean force)
3125 for (; s != NULL; s = s->header.next)
3127 switch (s->header.type)
3129 case lang_constructors_statement_enum:
3130 open_input_bfds (constructor_list.head, force);
3132 case lang_output_section_statement_enum:
3133 open_input_bfds (s->output_section_statement.children.head, force);
3135 case lang_wild_statement_enum:
3136 /* Maybe we should load the file's symbols. */
3137 if (s->wild_statement.filename
3138 && !wildcardp (s->wild_statement.filename)
3139 && !archive_path (s->wild_statement.filename))
3140 lookup_name (s->wild_statement.filename);
3141 open_input_bfds (s->wild_statement.children.head, force);
3143 case lang_group_statement_enum:
3145 struct bfd_link_hash_entry *undefs;
3147 /* We must continually search the entries in the group
3148 until no new symbols are added to the list of undefined
3153 undefs = link_info.hash->undefs_tail;
3154 open_input_bfds (s->group_statement.children.head, TRUE);
3156 while (undefs != link_info.hash->undefs_tail);
3159 case lang_target_statement_enum:
3160 current_target = s->target_statement.target;
3162 case lang_input_statement_enum:
3163 if (s->input_statement.real)
3165 lang_statement_union_type **os_tail;
3166 lang_statement_list_type add;
3168 s->input_statement.target = current_target;
3170 /* If we are being called from within a group, and this
3171 is an archive which has already been searched, then
3172 force it to be researched unless the whole archive
3173 has been loaded already. */
3175 && !s->input_statement.whole_archive
3176 && s->input_statement.loaded
3177 && bfd_check_format (s->input_statement.the_bfd,
3179 s->input_statement.loaded = FALSE;
3181 os_tail = lang_output_section_statement.tail;
3182 lang_list_init (&add);
3184 if (! load_symbols (&s->input_statement, &add))
3185 config.make_executable = FALSE;
3187 if (add.head != NULL)
3189 /* If this was a script with output sections then
3190 tack any added statements on to the end of the
3191 list. This avoids having to reorder the output
3192 section statement list. Very likely the user
3193 forgot -T, and whatever we do here will not meet
3194 naive user expectations. */
3195 if (os_tail != lang_output_section_statement.tail)
3197 einfo (_("%P: warning: %s contains output sections;"
3198 " did you forget -T?\n"),
3199 s->input_statement.filename);
3200 *stat_ptr->tail = add.head;
3201 stat_ptr->tail = add.tail;
3205 *add.tail = s->header.next;
3206 s->header.next = add.head;
3211 case lang_assignment_statement_enum:
3212 if (s->assignment_statement.exp->assign.hidden)
3213 /* This is from a --defsym on the command line. */
3214 exp_fold_tree_no_dot (s->assignment_statement.exp);
3221 /* Exit if any of the files were missing. */
3226 /* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions. */
3229 lang_track_definedness (const char *name)
3231 if (bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE) == NULL)
3232 einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
3235 /* New-function for the definedness hash table. */
3237 static struct bfd_hash_entry *
3238 lang_definedness_newfunc (struct bfd_hash_entry *entry,
3239 struct bfd_hash_table *table ATTRIBUTE_UNUSED,
3240 const char *name ATTRIBUTE_UNUSED)
3242 struct lang_definedness_hash_entry *ret
3243 = (struct lang_definedness_hash_entry *) entry;
3246 ret = (struct lang_definedness_hash_entry *)
3247 bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
3250 einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
3252 ret->iteration = -1;
3256 /* Return the iteration when the definition of NAME was last updated. A
3257 value of -1 means that the symbol is not defined in the linker script
3258 or the command line, but may be defined in the linker symbol table. */
3261 lang_symbol_definition_iteration (const char *name)
3263 struct lang_definedness_hash_entry *defentry
3264 = (struct lang_definedness_hash_entry *)
3265 bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3267 /* We've already created this one on the presence of DEFINED in the
3268 script, so it can't be NULL unless something is borked elsewhere in
3270 if (defentry == NULL)
3273 return defentry->iteration;
3276 /* Update the definedness state of NAME. */
3279 lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
3281 struct lang_definedness_hash_entry *defentry
3282 = (struct lang_definedness_hash_entry *)
3283 bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3285 /* We don't keep track of symbols not tested with DEFINED. */
3286 if (defentry == NULL)
3289 /* If the symbol was already defined, and not from an earlier statement
3290 iteration, don't update the definedness iteration, because that'd
3291 make the symbol seem defined in the linker script at this point, and
3292 it wasn't; it was defined in some object. If we do anyway, DEFINED
3293 would start to yield false before this point and the construct "sym =
3294 DEFINED (sym) ? sym : X;" would change sym to X despite being defined
3296 if (h->type != bfd_link_hash_undefined
3297 && h->type != bfd_link_hash_common
3298 && h->type != bfd_link_hash_new
3299 && defentry->iteration == -1)
3302 defentry->iteration = lang_statement_iteration;
3305 /* Add the supplied name to the symbol table as an undefined reference.
3306 This is a two step process as the symbol table doesn't even exist at
3307 the time the ld command line is processed. First we put the name
3308 on a list, then, once the output file has been opened, transfer the
3309 name to the symbol table. */
3311 typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
3313 #define ldlang_undef_chain_list_head entry_symbol.next
3316 ldlang_add_undef (const char *const name, bfd_boolean cmdline)
3318 ldlang_undef_chain_list_type *new_undef;
3320 undef_from_cmdline = undef_from_cmdline || cmdline;
3321 new_undef = (ldlang_undef_chain_list_type *) stat_alloc (sizeof (*new_undef));
3322 new_undef->next = ldlang_undef_chain_list_head;
3323 ldlang_undef_chain_list_head = new_undef;
3325 new_undef->name = xstrdup (name);
3327 if (link_info.output_bfd != NULL)
3328 insert_undefined (new_undef->name);
3331 /* Insert NAME as undefined in the symbol table. */
3334 insert_undefined (const char *name)
3336 struct bfd_link_hash_entry *h;
3338 h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
3340 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3341 if (h->type == bfd_link_hash_new)
3343 h->type = bfd_link_hash_undefined;
3344 h->u.undef.abfd = NULL;
3345 bfd_link_add_undef (link_info.hash, h);
3349 /* Run through the list of undefineds created above and place them
3350 into the linker hash table as undefined symbols belonging to the
3354 lang_place_undefineds (void)
3356 ldlang_undef_chain_list_type *ptr;
3358 for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
3359 insert_undefined (ptr->name);
3362 /* Check for all readonly or some readwrite sections. */
3365 check_input_sections
3366 (lang_statement_union_type *s,
3367 lang_output_section_statement_type *output_section_statement)
3369 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3371 switch (s->header.type)
3373 case lang_wild_statement_enum:
3374 walk_wild (&s->wild_statement, check_section_callback,
3375 output_section_statement);
3376 if (! output_section_statement->all_input_readonly)
3379 case lang_constructors_statement_enum:
3380 check_input_sections (constructor_list.head,
3381 output_section_statement);
3382 if (! output_section_statement->all_input_readonly)
3385 case lang_group_statement_enum:
3386 check_input_sections (s->group_statement.children.head,
3387 output_section_statement);
3388 if (! output_section_statement->all_input_readonly)
3397 /* Update wildcard statements if needed. */
3400 update_wild_statements (lang_statement_union_type *s)
3402 struct wildcard_list *sec;
3404 switch (sort_section)
3414 for (; s != NULL; s = s->header.next)
3416 switch (s->header.type)
3421 case lang_wild_statement_enum:
3422 sec = s->wild_statement.section_list;
3423 for (sec = s->wild_statement.section_list; sec != NULL;
3426 switch (sec->spec.sorted)
3429 sec->spec.sorted = sort_section;
3432 if (sort_section == by_alignment)
3433 sec->spec.sorted = by_name_alignment;
3436 if (sort_section == by_name)
3437 sec->spec.sorted = by_alignment_name;
3445 case lang_constructors_statement_enum:
3446 update_wild_statements (constructor_list.head);
3449 case lang_output_section_statement_enum:
3450 update_wild_statements
3451 (s->output_section_statement.children.head);
3454 case lang_group_statement_enum:
3455 update_wild_statements (s->group_statement.children.head);
3463 /* Open input files and attach to output sections. */
3466 map_input_to_output_sections
3467 (lang_statement_union_type *s, const char *target,
3468 lang_output_section_statement_type *os)
3470 for (; s != NULL; s = s->header.next)
3472 lang_output_section_statement_type *tos;
3475 switch (s->header.type)
3477 case lang_wild_statement_enum:
3478 wild (&s->wild_statement, target, os);
3480 case lang_constructors_statement_enum:
3481 map_input_to_output_sections (constructor_list.head,
3485 case lang_output_section_statement_enum:
3486 tos = &s->output_section_statement;
3487 if (tos->constraint != 0)
3489 if (tos->constraint != ONLY_IF_RW
3490 && tos->constraint != ONLY_IF_RO)
3492 tos->all_input_readonly = TRUE;
3493 check_input_sections (tos->children.head, tos);
3494 if (tos->all_input_readonly != (tos->constraint == ONLY_IF_RO))
3496 tos->constraint = -1;
3500 map_input_to_output_sections (tos->children.head,
3504 case lang_output_statement_enum:
3506 case lang_target_statement_enum:
3507 target = s->target_statement.target;
3509 case lang_group_statement_enum:
3510 map_input_to_output_sections (s->group_statement.children.head,
3514 case lang_data_statement_enum:
3515 /* Make sure that any sections mentioned in the expression
3517 exp_init_os (s->data_statement.exp);
3518 /* The output section gets CONTENTS, ALLOC and LOAD, but
3519 these may be overridden by the script. */
3520 flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
3521 switch (os->sectype)
3523 case normal_section:
3524 case overlay_section:
3526 case noalloc_section:
3527 flags = SEC_HAS_CONTENTS;
3529 case noload_section:
3530 if (bfd_get_flavour (link_info.output_bfd)
3531 == bfd_target_elf_flavour)
3532 flags = SEC_NEVER_LOAD | SEC_ALLOC;
3534 flags = SEC_NEVER_LOAD | SEC_HAS_CONTENTS;
3537 if (os->bfd_section == NULL)
3538 init_os (os, flags);
3540 os->bfd_section->flags |= flags;
3542 case lang_input_section_enum:
3544 case lang_fill_statement_enum:
3545 case lang_object_symbols_statement_enum:
3546 case lang_reloc_statement_enum:
3547 case lang_padding_statement_enum:
3548 case lang_input_statement_enum:
3549 if (os != NULL && os->bfd_section == NULL)
3552 case lang_assignment_statement_enum:
3553 if (os != NULL && os->bfd_section == NULL)
3556 /* Make sure that any sections mentioned in the assignment
3558 exp_init_os (s->assignment_statement.exp);
3560 case lang_address_statement_enum:
3561 /* Mark the specified section with the supplied address.
3562 If this section was actually a segment marker, then the
3563 directive is ignored if the linker script explicitly
3564 processed the segment marker. Originally, the linker
3565 treated segment directives (like -Ttext on the
3566 command-line) as section directives. We honor the
3567 section directive semantics for backwards compatibilty;
3568 linker scripts that do not specifically check for
3569 SEGMENT_START automatically get the old semantics. */
3570 if (!s->address_statement.segment
3571 || !s->address_statement.segment->used)
3573 const char *name = s->address_statement.section_name;
3575 /* Create the output section statement here so that
3576 orphans with a set address will be placed after other
3577 script sections. If we let the orphan placement code
3578 place them in amongst other sections then the address
3579 will affect following script sections, which is
3580 likely to surprise naive users. */
3581 tos = lang_output_section_statement_lookup (name, 0, TRUE);
3582 tos->addr_tree = s->address_statement.address;
3583 if (tos->bfd_section == NULL)
3587 case lang_insert_statement_enum:
3593 /* An insert statement snips out all the linker statements from the
3594 start of the list and places them after the output section
3595 statement specified by the insert. This operation is complicated
3596 by the fact that we keep a doubly linked list of output section
3597 statements as well as the singly linked list of all statements. */
3600 process_insert_statements (void)
3602 lang_statement_union_type **s;
3603 lang_output_section_statement_type *first_os = NULL;
3604 lang_output_section_statement_type *last_os = NULL;
3605 lang_output_section_statement_type *os;
3607 /* "start of list" is actually the statement immediately after
3608 the special abs_section output statement, so that it isn't
3610 s = &lang_output_section_statement.head;
3611 while (*(s = &(*s)->header.next) != NULL)
3613 if ((*s)->header.type == lang_output_section_statement_enum)
3615 /* Keep pointers to the first and last output section
3616 statement in the sequence we may be about to move. */
3617 os = &(*s)->output_section_statement;
3619 ASSERT (last_os == NULL || last_os->next == os);
3622 /* Set constraint negative so that lang_output_section_find
3623 won't match this output section statement. At this
3624 stage in linking constraint has values in the range
3625 [-1, ONLY_IN_RW]. */
3626 last_os->constraint = -2 - last_os->constraint;
3627 if (first_os == NULL)
3630 else if ((*s)->header.type == lang_insert_statement_enum)
3632 lang_insert_statement_type *i = &(*s)->insert_statement;
3633 lang_output_section_statement_type *where;
3634 lang_statement_union_type **ptr;
3635 lang_statement_union_type *first;
3637 where = lang_output_section_find (i->where);
3638 if (where != NULL && i->is_before)
3641 where = where->prev;
3642 while (where != NULL && where->constraint < 0);
3646 einfo (_("%F%P: %s not found for insert\n"), i->where);
3650 /* Deal with reordering the output section statement list. */
3651 if (last_os != NULL)
3653 asection *first_sec, *last_sec;
3654 struct lang_output_section_statement_struct **next;
3656 /* Snip out the output sections we are moving. */
3657 first_os->prev->next = last_os->next;
3658 if (last_os->next == NULL)
3660 next = &first_os->prev->next;
3661 lang_output_section_statement.tail
3662 = (lang_statement_union_type **) next;
3665 last_os->next->prev = first_os->prev;
3666 /* Add them in at the new position. */
3667 last_os->next = where->next;
3668 if (where->next == NULL)
3670 next = &last_os->next;
3671 lang_output_section_statement.tail
3672 = (lang_statement_union_type **) next;
3675 where->next->prev = last_os;
3676 first_os->prev = where;
3677 where->next = first_os;
3679 /* Move the bfd sections in the same way. */
3682 for (os = first_os; os != NULL; os = os->next)
3684 os->constraint = -2 - os->constraint;
3685 if (os->bfd_section != NULL
3686 && os->bfd_section->owner != NULL)
3688 last_sec = os->bfd_section;
3689 if (first_sec == NULL)
3690 first_sec = last_sec;
3695 if (last_sec != NULL)
3697 asection *sec = where->bfd_section;
3699 sec = output_prev_sec_find (where);
3701 /* The place we want to insert must come after the
3702 sections we are moving. So if we find no
3703 section or if the section is the same as our
3704 last section, then no move is needed. */
3705 if (sec != NULL && sec != last_sec)
3707 /* Trim them off. */
3708 if (first_sec->prev != NULL)
3709 first_sec->prev->next = last_sec->next;
3711 link_info.output_bfd->sections = last_sec->next;
3712 if (last_sec->next != NULL)
3713 last_sec->next->prev = first_sec->prev;
3715 link_info.output_bfd->section_last = first_sec->prev;
3717 last_sec->next = sec->next;
3718 if (sec->next != NULL)
3719 sec->next->prev = last_sec;
3721 link_info.output_bfd->section_last = last_sec;
3722 first_sec->prev = sec;
3723 sec->next = first_sec;
3731 ptr = insert_os_after (where);
3732 /* Snip everything after the abs_section output statement we
3733 know is at the start of the list, up to and including
3734 the insert statement we are currently processing. */
3735 first = lang_output_section_statement.head->header.next;
3736 lang_output_section_statement.head->header.next = (*s)->header.next;
3737 /* Add them back where they belong. */
3740 statement_list.tail = s;
3742 s = &lang_output_section_statement.head;
3746 /* Undo constraint twiddling. */
3747 for (os = first_os; os != NULL; os = os->next)
3749 os->constraint = -2 - os->constraint;
3755 /* An output section might have been removed after its statement was
3756 added. For example, ldemul_before_allocation can remove dynamic
3757 sections if they turn out to be not needed. Clean them up here. */
3760 strip_excluded_output_sections (void)
3762 lang_output_section_statement_type *os;
3764 /* Run lang_size_sections (if not already done). */
3765 if (expld.phase != lang_mark_phase_enum)
3767 expld.phase = lang_mark_phase_enum;
3768 expld.dataseg.phase = exp_dataseg_none;
3769 one_lang_size_sections_pass (NULL, FALSE);
3770 lang_reset_memory_regions ();
3773 for (os = &lang_output_section_statement.head->output_section_statement;
3777 asection *output_section;
3778 bfd_boolean exclude;
3780 if (os->constraint < 0)
3783 output_section = os->bfd_section;
3784 if (output_section == NULL)
3787 exclude = (output_section->rawsize == 0
3788 && (output_section->flags & SEC_KEEP) == 0
3789 && !bfd_section_removed_from_list (link_info.output_bfd,
3792 /* Some sections have not yet been sized, notably .gnu.version,
3793 .dynsym, .dynstr and .hash. These all have SEC_LINKER_CREATED
3794 input sections, so don't drop output sections that have such
3795 input sections unless they are also marked SEC_EXCLUDE. */
3796 if (exclude && output_section->map_head.s != NULL)
3800 for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
3801 if ((s->flags & SEC_LINKER_CREATED) != 0
3802 && (s->flags & SEC_EXCLUDE) == 0)
3809 /* TODO: Don't just junk map_head.s, turn them into link_orders. */
3810 output_section->map_head.link_order = NULL;
3811 output_section->map_tail.link_order = NULL;
3815 /* We don't set bfd_section to NULL since bfd_section of the
3816 removed output section statement may still be used. */
3817 if (!os->section_relative_symbol
3818 && !os->update_dot_tree)
3820 output_section->flags |= SEC_EXCLUDE;
3821 bfd_section_list_remove (link_info.output_bfd, output_section);
3822 link_info.output_bfd->section_count--;
3826 /* Stop future calls to lang_add_section from messing with map_head
3827 and map_tail link_order fields. */
3828 stripped_excluded_sections = TRUE;
3832 print_output_section_statement
3833 (lang_output_section_statement_type *output_section_statement)
3835 asection *section = output_section_statement->bfd_section;
3838 if (output_section_statement != abs_output_section)
3840 minfo ("\n%s", output_section_statement->name);
3842 if (section != NULL)
3844 print_dot = section->vma;
3846 len = strlen (output_section_statement->name);
3847 if (len >= SECTION_NAME_MAP_LENGTH - 1)
3852 while (len < SECTION_NAME_MAP_LENGTH)
3858 minfo ("0x%V %W", section->vma, section->size);
3860 if (section->vma != section->lma)
3861 minfo (_(" load address 0x%V"), section->lma);
3863 if (output_section_statement->update_dot_tree != NULL)
3864 exp_fold_tree (output_section_statement->update_dot_tree,
3865 bfd_abs_section_ptr, &print_dot);
3871 print_statement_list (output_section_statement->children.head,
3872 output_section_statement);
3875 /* Scan for the use of the destination in the right hand side
3876 of an expression. In such cases we will not compute the
3877 correct expression, since the value of DST that is used on
3878 the right hand side will be its final value, not its value
3879 just before this expression is evaluated. */
3882 scan_for_self_assignment (const char * dst, etree_type * rhs)
3884 if (rhs == NULL || dst == NULL)
3887 switch (rhs->type.node_class)
3890 return (scan_for_self_assignment (dst, rhs->binary.lhs)
3891 || scan_for_self_assignment (dst, rhs->binary.rhs));
3894 return (scan_for_self_assignment (dst, rhs->trinary.lhs)
3895 || scan_for_self_assignment (dst, rhs->trinary.rhs));
3898 case etree_provided:
3900 if (strcmp (dst, rhs->assign.dst) == 0)
3902 return scan_for_self_assignment (dst, rhs->assign.src);
3905 return scan_for_self_assignment (dst, rhs->unary.child);
3909 return strcmp (dst, rhs->value.str) == 0;
3914 return strcmp (dst, rhs->name.name) == 0;
3926 print_assignment (lang_assignment_statement_type *assignment,
3927 lang_output_section_statement_type *output_section)
3931 bfd_boolean computation_is_valid = TRUE;
3935 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3938 if (assignment->exp->type.node_class == etree_assert)
3941 tree = assignment->exp->assert_s.child;
3942 computation_is_valid = TRUE;
3946 const char *dst = assignment->exp->assign.dst;
3948 is_dot = (dst[0] == '.' && dst[1] == 0);
3949 tree = assignment->exp->assign.src;
3950 computation_is_valid = is_dot || !scan_for_self_assignment (dst, tree);
3953 osec = output_section->bfd_section;
3955 osec = bfd_abs_section_ptr;
3956 exp_fold_tree (tree, osec, &print_dot);
3957 if (expld.result.valid_p)
3961 if (computation_is_valid)
3963 value = expld.result.value;
3965 if (expld.result.section != NULL)
3966 value += expld.result.section->vma;
3968 minfo ("0x%V", value);
3974 struct bfd_link_hash_entry *h;
3976 h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
3977 FALSE, FALSE, TRUE);
3980 value = h->u.def.value;
3982 if (expld.result.section != NULL)
3983 value += expld.result.section->vma;
3985 minfo ("[0x%V]", value);
3988 minfo ("[unresolved]");
4000 exp_print_tree (assignment->exp);
4005 print_input_statement (lang_input_statement_type *statm)
4007 if (statm->filename != NULL
4008 && (statm->the_bfd == NULL
4009 || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4010 fprintf (config.map_file, "LOAD %s\n", statm->filename);
4013 /* Print all symbols defined in a particular section. This is called
4014 via bfd_link_hash_traverse, or by print_all_symbols. */
4017 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4019 asection *sec = (asection *) ptr;
4021 if ((hash_entry->type == bfd_link_hash_defined
4022 || hash_entry->type == bfd_link_hash_defweak)
4023 && sec == hash_entry->u.def.section)
4027 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4030 (hash_entry->u.def.value
4031 + hash_entry->u.def.section->output_offset
4032 + hash_entry->u.def.section->output_section->vma));
4034 minfo (" %T\n", hash_entry->root.string);
4041 hash_entry_addr_cmp (const void *a, const void *b)
4043 const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4044 const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4046 if (l->u.def.value < r->u.def.value)
4048 else if (l->u.def.value > r->u.def.value)
4055 print_all_symbols (asection *sec)
4057 struct fat_user_section_struct *ud =
4058 (struct fat_user_section_struct *) get_userdata (sec);
4059 struct map_symbol_def *def;
4060 struct bfd_link_hash_entry **entries;
4066 *ud->map_symbol_def_tail = 0;
4068 /* Sort the symbols by address. */
4069 entries = (struct bfd_link_hash_entry **)
4070 obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
4072 for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4073 entries[i] = def->entry;
4075 qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4076 hash_entry_addr_cmp);
4078 /* Print the symbols. */
4079 for (i = 0; i < ud->map_symbol_def_count; i++)
4080 print_one_symbol (entries[i], sec);
4082 obstack_free (&map_obstack, entries);
4085 /* Print information about an input section to the map file. */
4088 print_input_section (asection *i, bfd_boolean is_discarded)
4090 bfd_size_type size = i->size;
4097 minfo ("%s", i->name);
4099 len = 1 + strlen (i->name);
4100 if (len >= SECTION_NAME_MAP_LENGTH - 1)
4105 while (len < SECTION_NAME_MAP_LENGTH)
4111 if (i->output_section != NULL
4112 && i->output_section->owner == link_info.output_bfd)
4113 addr = i->output_section->vma + i->output_offset;
4121 minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
4123 if (size != i->rawsize && i->rawsize != 0)
4125 len = SECTION_NAME_MAP_LENGTH + 3;
4137 minfo (_("%W (size before relaxing)\n"), i->rawsize);
4140 if (i->output_section != NULL
4141 && i->output_section->owner == link_info.output_bfd)
4143 if (link_info.reduce_memory_overheads)
4144 bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4146 print_all_symbols (i);
4148 /* Update print_dot, but make sure that we do not move it
4149 backwards - this could happen if we have overlays and a
4150 later overlay is shorter than an earier one. */
4151 if (addr + TO_ADDR (size) > print_dot)
4152 print_dot = addr + TO_ADDR (size);
4157 print_fill_statement (lang_fill_statement_type *fill)
4161 fputs (" FILL mask 0x", config.map_file);
4162 for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4163 fprintf (config.map_file, "%02x", *p);
4164 fputs ("\n", config.map_file);
4168 print_data_statement (lang_data_statement_type *data)
4176 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4179 addr = data->output_offset;
4180 if (data->output_section != NULL)
4181 addr += data->output_section->vma;
4209 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
4211 if (data->exp->type.node_class != etree_value)
4214 exp_print_tree (data->exp);
4219 print_dot = addr + TO_ADDR (size);
4222 /* Print an address statement. These are generated by options like
4226 print_address_statement (lang_address_statement_type *address)
4228 minfo (_("Address of section %s set to "), address->section_name);
4229 exp_print_tree (address->address);
4233 /* Print a reloc statement. */
4236 print_reloc_statement (lang_reloc_statement_type *reloc)
4243 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4246 addr = reloc->output_offset;
4247 if (reloc->output_section != NULL)
4248 addr += reloc->output_section->vma;
4250 size = bfd_get_reloc_size (reloc->howto);
4252 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
4254 if (reloc->name != NULL)
4255 minfo ("%s+", reloc->name);
4257 minfo ("%s+", reloc->section->name);
4259 exp_print_tree (reloc->addend_exp);
4263 print_dot = addr + TO_ADDR (size);
4267 print_padding_statement (lang_padding_statement_type *s)
4275 len = sizeof " *fill*" - 1;
4276 while (len < SECTION_NAME_MAP_LENGTH)
4282 addr = s->output_offset;
4283 if (s->output_section != NULL)
4284 addr += s->output_section->vma;
4285 minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4287 if (s->fill->size != 0)
4291 for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4292 fprintf (config.map_file, "%02x", *p);
4297 print_dot = addr + TO_ADDR (s->size);
4301 print_wild_statement (lang_wild_statement_type *w,
4302 lang_output_section_statement_type *os)
4304 struct wildcard_list *sec;
4308 if (w->filenames_sorted)
4310 if (w->filename != NULL)
4311 minfo ("%s", w->filename);
4314 if (w->filenames_sorted)
4318 for (sec = w->section_list; sec; sec = sec->next)
4320 if (sec->spec.sorted)
4322 if (sec->spec.exclude_name_list != NULL)
4325 minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4326 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4327 minfo (" %s", tmp->name);
4330 if (sec->spec.name != NULL)
4331 minfo ("%s", sec->spec.name);
4334 if (sec->spec.sorted)
4343 print_statement_list (w->children.head, os);
4346 /* Print a group statement. */
4349 print_group (lang_group_statement_type *s,
4350 lang_output_section_statement_type *os)
4352 fprintf (config.map_file, "START GROUP\n");
4353 print_statement_list (s->children.head, os);
4354 fprintf (config.map_file, "END GROUP\n");
4357 /* Print the list of statements in S.
4358 This can be called for any statement type. */
4361 print_statement_list (lang_statement_union_type *s,
4362 lang_output_section_statement_type *os)
4366 print_statement (s, os);
4371 /* Print the first statement in statement list S.
4372 This can be called for any statement type. */
4375 print_statement (lang_statement_union_type *s,
4376 lang_output_section_statement_type *os)
4378 switch (s->header.type)
4381 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4384 case lang_constructors_statement_enum:
4385 if (constructor_list.head != NULL)
4387 if (constructors_sorted)
4388 minfo (" SORT (CONSTRUCTORS)\n");
4390 minfo (" CONSTRUCTORS\n");
4391 print_statement_list (constructor_list.head, os);
4394 case lang_wild_statement_enum:
4395 print_wild_statement (&s->wild_statement, os);
4397 case lang_address_statement_enum:
4398 print_address_statement (&s->address_statement);
4400 case lang_object_symbols_statement_enum:
4401 minfo (" CREATE_OBJECT_SYMBOLS\n");
4403 case lang_fill_statement_enum:
4404 print_fill_statement (&s->fill_statement);
4406 case lang_data_statement_enum:
4407 print_data_statement (&s->data_statement);
4409 case lang_reloc_statement_enum:
4410 print_reloc_statement (&s->reloc_statement);
4412 case lang_input_section_enum:
4413 print_input_section (s->input_section.section, FALSE);
4415 case lang_padding_statement_enum:
4416 print_padding_statement (&s->padding_statement);
4418 case lang_output_section_statement_enum:
4419 print_output_section_statement (&s->output_section_statement);
4421 case lang_assignment_statement_enum:
4422 print_assignment (&s->assignment_statement, os);
4424 case lang_target_statement_enum:
4425 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4427 case lang_output_statement_enum:
4428 minfo ("OUTPUT(%s", s->output_statement.name);
4429 if (output_target != NULL)
4430 minfo (" %s", output_target);
4433 case lang_input_statement_enum:
4434 print_input_statement (&s->input_statement);
4436 case lang_group_statement_enum:
4437 print_group (&s->group_statement, os);
4439 case lang_insert_statement_enum:
4440 minfo ("INSERT %s %s\n",
4441 s->insert_statement.is_before ? "BEFORE" : "AFTER",
4442 s->insert_statement.where);
4448 print_statements (void)
4450 print_statement_list (statement_list.head, abs_output_section);
4453 /* Print the first N statements in statement list S to STDERR.
4454 If N == 0, nothing is printed.
4455 If N < 0, the entire list is printed.
4456 Intended to be called from GDB. */
4459 dprint_statement (lang_statement_union_type *s, int n)
4461 FILE *map_save = config.map_file;
4463 config.map_file = stderr;
4466 print_statement_list (s, abs_output_section);
4469 while (s && --n >= 0)
4471 print_statement (s, abs_output_section);
4476 config.map_file = map_save;
4480 insert_pad (lang_statement_union_type **ptr,
4482 unsigned int alignment_needed,
4483 asection *output_section,
4486 static fill_type zero_fill = { 1, { 0 } };
4487 lang_statement_union_type *pad = NULL;
4489 if (ptr != &statement_list.head)
4490 pad = ((lang_statement_union_type *)
4491 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4493 && pad->header.type == lang_padding_statement_enum
4494 && pad->padding_statement.output_section == output_section)
4496 /* Use the existing pad statement. */
4498 else if ((pad = *ptr) != NULL
4499 && pad->header.type == lang_padding_statement_enum
4500 && pad->padding_statement.output_section == output_section)
4502 /* Use the existing pad statement. */
4506 /* Make a new padding statement, linked into existing chain. */
4507 pad = (lang_statement_union_type *)
4508 stat_alloc (sizeof (lang_padding_statement_type));
4509 pad->header.next = *ptr;
4511 pad->header.type = lang_padding_statement_enum;
4512 pad->padding_statement.output_section = output_section;
4515 pad->padding_statement.fill = fill;
4517 pad->padding_statement.output_offset = dot - output_section->vma;
4518 pad->padding_statement.size = alignment_needed;
4519 output_section->size += alignment_needed;
4522 /* Work out how much this section will move the dot point. */
4526 (lang_statement_union_type **this_ptr,
4527 lang_output_section_statement_type *output_section_statement,
4531 lang_input_section_type *is = &((*this_ptr)->input_section);
4532 asection *i = is->section;
4534 if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
4535 && (i->flags & SEC_EXCLUDE) == 0)
4537 unsigned int alignment_needed;
4540 /* Align this section first to the input sections requirement,
4541 then to the output section's requirement. If this alignment
4542 is greater than any seen before, then record it too. Perform
4543 the alignment by inserting a magic 'padding' statement. */
4545 if (output_section_statement->subsection_alignment != -1)
4546 i->alignment_power = output_section_statement->subsection_alignment;
4548 o = output_section_statement->bfd_section;
4549 if (o->alignment_power < i->alignment_power)
4550 o->alignment_power = i->alignment_power;
4552 alignment_needed = align_power (dot, i->alignment_power) - dot;
4554 if (alignment_needed != 0)
4556 insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4557 dot += alignment_needed;
4560 /* Remember where in the output section this input section goes. */
4562 i->output_offset = dot - o->vma;
4564 /* Mark how big the output section must be to contain this now. */
4565 dot += TO_ADDR (i->size);
4566 o->size = TO_SIZE (dot - o->vma);
4570 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
4577 sort_sections_by_lma (const void *arg1, const void *arg2)
4579 const asection *sec1 = *(const asection **) arg1;
4580 const asection *sec2 = *(const asection **) arg2;
4582 if (bfd_section_lma (sec1->owner, sec1)
4583 < bfd_section_lma (sec2->owner, sec2))
4585 else if (bfd_section_lma (sec1->owner, sec1)
4586 > bfd_section_lma (sec2->owner, sec2))
4588 else if (sec1->id < sec2->id)
4590 else if (sec1->id > sec2->id)
4596 #define IGNORE_SECTION(s) \
4597 ((s->flags & SEC_ALLOC) == 0 \
4598 || ((s->flags & SEC_THREAD_LOCAL) != 0 \
4599 && (s->flags & SEC_LOAD) == 0))
4601 /* Check to see if any allocated sections overlap with other allocated
4602 sections. This can happen if a linker script specifies the output
4603 section addresses of the two sections. Also check whether any memory
4604 region has overflowed. */
4607 lang_check_section_addresses (void)
4610 asection **sections, **spp;
4617 lang_memory_region_type *m;
4619 if (bfd_count_sections (link_info.output_bfd) <= 1)
4622 amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4623 sections = (asection **) xmalloc (amt);
4625 /* Scan all sections in the output list. */
4627 for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4629 /* Only consider loadable sections with real contents. */
4630 if (!(s->flags & SEC_LOAD)
4631 || !(s->flags & SEC_ALLOC)
4635 sections[count] = s;
4642 qsort (sections, (size_t) count, sizeof (asection *),
4643 sort_sections_by_lma);
4648 s_end = s_start + TO_ADDR (s->size) - 1;
4649 for (count--; count; count--)
4651 /* We must check the sections' LMA addresses not their VMA
4652 addresses because overlay sections can have overlapping VMAs
4653 but they must have distinct LMAs. */
4659 s_end = s_start + TO_ADDR (s->size) - 1;
4661 /* Look for an overlap. We have sorted sections by lma, so we
4662 know that s_start >= p_start. Besides the obvious case of
4663 overlap when the current section starts before the previous
4664 one ends, we also must have overlap if the previous section
4665 wraps around the address space. */
4666 if (s_start <= p_end
4668 einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
4669 s->name, s_start, s_end, p->name, p_start, p_end);
4674 /* If any memory region has overflowed, report by how much.
4675 We do not issue this diagnostic for regions that had sections
4676 explicitly placed outside their bounds; os_region_check's
4677 diagnostics are adequate for that case.
4679 FIXME: It is conceivable that m->current - (m->origin + m->length)
4680 might overflow a 32-bit integer. There is, alas, no way to print
4681 a bfd_vma quantity in decimal. */
4682 for (m = lang_memory_region_list; m; m = m->next)
4683 if (m->had_full_message)
4684 einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4685 m->name_list.name, (long)(m->current - (m->origin + m->length)));
4689 /* Make sure the new address is within the region. We explicitly permit the
4690 current address to be at the exact end of the region when the address is
4691 non-zero, in case the region is at the end of addressable memory and the
4692 calculation wraps around. */
4695 os_region_check (lang_output_section_statement_type *os,
4696 lang_memory_region_type *region,
4700 if ((region->current < region->origin
4701 || (region->current - region->origin > region->length))
4702 && ((region->current != region->origin + region->length)
4707 einfo (_("%X%P: address 0x%v of %B section `%s'"
4708 " is not within region `%s'\n"),
4710 os->bfd_section->owner,
4711 os->bfd_section->name,
4712 region->name_list.name);
4714 else if (!region->had_full_message)
4716 region->had_full_message = TRUE;
4718 einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4719 os->bfd_section->owner,
4720 os->bfd_section->name,
4721 region->name_list.name);
4726 /* Set the sizes for all the output sections. */
4729 lang_size_sections_1
4730 (lang_statement_union_type **prev,
4731 lang_output_section_statement_type *output_section_statement,
4735 bfd_boolean check_regions)
4737 lang_statement_union_type *s;
4739 /* Size up the sections from their constituent parts. */
4740 for (s = *prev; s != NULL; s = s->header.next)
4742 switch (s->header.type)
4744 case lang_output_section_statement_enum:
4746 bfd_vma newdot, after;
4747 lang_output_section_statement_type *os;
4748 lang_memory_region_type *r;
4749 int section_alignment = 0;
4751 os = &s->output_section_statement;
4752 if (os->constraint == -1)
4755 /* FIXME: We shouldn't need to zero section vmas for ld -r
4756 here, in lang_insert_orphan, or in the default linker scripts.
4757 This is covering for coff backend linker bugs. See PR6945. */
4758 if (os->addr_tree == NULL
4759 && link_info.relocatable
4760 && (bfd_get_flavour (link_info.output_bfd)
4761 == bfd_target_coff_flavour))
4762 os->addr_tree = exp_intop (0);
4763 if (os->addr_tree != NULL)
4765 os->processed_vma = FALSE;
4766 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4768 if (expld.result.valid_p)
4770 dot = expld.result.value;
4771 if (expld.result.section != NULL)
4772 dot += expld.result.section->vma;
4774 else if (expld.phase != lang_mark_phase_enum)
4775 einfo (_("%F%S: non constant or forward reference"
4776 " address expression for section %s\n"),
4780 if (os->bfd_section == NULL)
4781 /* This section was removed or never actually created. */
4784 /* If this is a COFF shared library section, use the size and
4785 address from the input section. FIXME: This is COFF
4786 specific; it would be cleaner if there were some other way
4787 to do this, but nothing simple comes to mind. */
4788 if (((bfd_get_flavour (link_info.output_bfd)
4789 == bfd_target_ecoff_flavour)
4790 || (bfd_get_flavour (link_info.output_bfd)
4791 == bfd_target_coff_flavour))
4792 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4796 if (os->children.head == NULL
4797 || os->children.head->header.next != NULL
4798 || (os->children.head->header.type
4799 != lang_input_section_enum))
4800 einfo (_("%P%X: Internal error on COFF shared library"
4801 " section %s\n"), os->name);
4803 input = os->children.head->input_section.section;
4804 bfd_set_section_vma (os->bfd_section->owner,
4806 bfd_section_vma (input->owner, input));
4807 os->bfd_section->size = input->size;
4812 if (bfd_is_abs_section (os->bfd_section))
4814 /* No matter what happens, an abs section starts at zero. */
4815 ASSERT (os->bfd_section->vma == 0);
4819 if (os->addr_tree == NULL)
4821 /* No address specified for this section, get one
4822 from the region specification. */
4823 if (os->region == NULL
4824 || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4825 && os->region->name_list.name[0] == '*'
4826 && strcmp (os->region->name_list.name,
4827 DEFAULT_MEMORY_REGION) == 0))
4829 os->region = lang_memory_default (os->bfd_section);
4832 /* If a loadable section is using the default memory
4833 region, and some non default memory regions were
4834 defined, issue an error message. */
4836 && !IGNORE_SECTION (os->bfd_section)
4837 && ! link_info.relocatable
4839 && strcmp (os->region->name_list.name,
4840 DEFAULT_MEMORY_REGION) == 0
4841 && lang_memory_region_list != NULL
4842 && (strcmp (lang_memory_region_list->name_list.name,
4843 DEFAULT_MEMORY_REGION) != 0
4844 || lang_memory_region_list->next != NULL)
4845 && expld.phase != lang_mark_phase_enum)
4847 /* By default this is an error rather than just a
4848 warning because if we allocate the section to the
4849 default memory region we can end up creating an
4850 excessively large binary, or even seg faulting when
4851 attempting to perform a negative seek. See
4852 sources.redhat.com/ml/binutils/2003-04/msg00423.html
4853 for an example of this. This behaviour can be
4854 overridden by the using the --no-check-sections
4856 if (command_line.check_section_addresses)
4857 einfo (_("%P%F: error: no memory region specified"
4858 " for loadable section `%s'\n"),
4859 bfd_get_section_name (link_info.output_bfd,
4862 einfo (_("%P: warning: no memory region specified"
4863 " for loadable section `%s'\n"),
4864 bfd_get_section_name (link_info.output_bfd,
4868 newdot = os->region->current;
4869 section_alignment = os->bfd_section->alignment_power;
4872 section_alignment = os->section_alignment;
4874 /* Align to what the section needs. */
4875 if (section_alignment > 0)
4877 bfd_vma savedot = newdot;
4878 newdot = align_power (newdot, section_alignment);
4880 if (newdot != savedot
4881 && (config.warn_section_align
4882 || os->addr_tree != NULL)
4883 && expld.phase != lang_mark_phase_enum)
4884 einfo (_("%P: warning: changing start of section"
4885 " %s by %lu bytes\n"),
4886 os->name, (unsigned long) (newdot - savedot));
4889 bfd_set_section_vma (0, os->bfd_section, newdot);
4891 os->bfd_section->output_offset = 0;
4894 lang_size_sections_1 (&os->children.head, os,
4895 os->fill, newdot, relax, check_regions);
4897 os->processed_vma = TRUE;
4899 if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4900 /* Except for some special linker created sections,
4901 no output section should change from zero size
4902 after strip_excluded_output_sections. A non-zero
4903 size on an ignored section indicates that some
4904 input section was not sized early enough. */
4905 ASSERT (os->bfd_section->size == 0);
4908 dot = os->bfd_section->vma;
4910 /* Put the section within the requested block size, or
4911 align at the block boundary. */
4913 + TO_ADDR (os->bfd_section->size)
4914 + os->block_value - 1)
4915 & - (bfd_vma) os->block_value);
4917 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4920 /* Set section lma. */
4923 r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4927 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4928 os->bfd_section->lma = lma;
4930 else if (os->lma_region != NULL)
4932 bfd_vma lma = os->lma_region->current;
4934 if (section_alignment > 0)
4935 lma = align_power (lma, section_alignment);
4936 os->bfd_section->lma = lma;
4938 else if (r->last_os != NULL
4939 && (os->bfd_section->flags & SEC_ALLOC) != 0)
4944 last = r->last_os->output_section_statement.bfd_section;
4946 /* A backwards move of dot should be accompanied by
4947 an explicit assignment to the section LMA (ie.
4948 os->load_base set) because backwards moves can
4949 create overlapping LMAs. */
4951 && os->bfd_section->size != 0
4952 && dot + os->bfd_section->size <= last->vma)
4954 /* If dot moved backwards then leave lma equal to
4955 vma. This is the old default lma, which might
4956 just happen to work when the backwards move is
4957 sufficiently large. Nag if this changes anything,
4958 so people can fix their linker scripts. */
4960 if (last->vma != last->lma)
4961 einfo (_("%P: warning: dot moved backwards before `%s'\n"),
4966 /* If this is an overlay, set the current lma to that
4967 at the end of the previous section. */
4968 if (os->sectype == overlay_section)
4969 lma = last->lma + last->size;
4971 /* Otherwise, keep the same lma to vma relationship
4972 as the previous section. */
4974 lma = dot + last->lma - last->vma;
4976 if (section_alignment > 0)
4977 lma = align_power (lma, section_alignment);
4978 os->bfd_section->lma = lma;
4981 os->processed_lma = TRUE;
4983 if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4986 /* Keep track of normal sections using the default
4987 lma region. We use this to set the lma for
4988 following sections. Overlays or other linker
4989 script assignment to lma might mean that the
4990 default lma == vma is incorrect.
4991 To avoid warnings about dot moving backwards when using
4992 -Ttext, don't start tracking sections until we find one
4993 of non-zero size or with lma set differently to vma. */
4994 if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4995 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
4996 && (os->bfd_section->flags & SEC_ALLOC) != 0
4997 && (os->bfd_section->size != 0
4998 || (r->last_os == NULL
4999 && os->bfd_section->vma != os->bfd_section->lma)
5000 || (r->last_os != NULL
5001 && dot >= (r->last_os->output_section_statement
5002 .bfd_section->vma)))
5003 && os->lma_region == NULL
5004 && !link_info.relocatable)
5007 /* .tbss sections effectively have zero size. */
5008 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5009 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5010 || link_info.relocatable)
5011 dot += TO_ADDR (os->bfd_section->size);
5013 if (os->update_dot_tree != 0)
5014 exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5016 /* Update dot in the region ?
5017 We only do this if the section is going to be allocated,
5018 since unallocated sections do not contribute to the region's
5019 overall size in memory. */
5020 if (os->region != NULL
5021 && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5023 os->region->current = dot;
5026 /* Make sure the new address is within the region. */
5027 os_region_check (os, os->region, os->addr_tree,
5028 os->bfd_section->vma);
5030 if (os->lma_region != NULL && os->lma_region != os->region
5031 && (os->bfd_section->flags & SEC_LOAD))
5033 os->lma_region->current
5034 = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
5037 os_region_check (os, os->lma_region, NULL,
5038 os->bfd_section->lma);
5044 case lang_constructors_statement_enum:
5045 dot = lang_size_sections_1 (&constructor_list.head,
5046 output_section_statement,
5047 fill, dot, relax, check_regions);
5050 case lang_data_statement_enum:
5052 unsigned int size = 0;
5054 s->data_statement.output_offset =
5055 dot - output_section_statement->bfd_section->vma;
5056 s->data_statement.output_section =
5057 output_section_statement->bfd_section;
5059 /* We might refer to provided symbols in the expression, and
5060 need to mark them as needed. */
5061 exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5063 switch (s->data_statement.type)
5081 if (size < TO_SIZE ((unsigned) 1))
5082 size = TO_SIZE ((unsigned) 1);
5083 dot += TO_ADDR (size);
5084 output_section_statement->bfd_section->size += size;
5088 case lang_reloc_statement_enum:
5092 s->reloc_statement.output_offset =
5093 dot - output_section_statement->bfd_section->vma;
5094 s->reloc_statement.output_section =
5095 output_section_statement->bfd_section;
5096 size = bfd_get_reloc_size (s->reloc_statement.howto);
5097 dot += TO_ADDR (size);
5098 output_section_statement->bfd_section->size += size;
5102 case lang_wild_statement_enum:
5103 dot = lang_size_sections_1 (&s->wild_statement.children.head,
5104 output_section_statement,
5105 fill, dot, relax, check_regions);
5108 case lang_object_symbols_statement_enum:
5109 link_info.create_object_symbols_section =
5110 output_section_statement->bfd_section;
5113 case lang_output_statement_enum:
5114 case lang_target_statement_enum:
5117 case lang_input_section_enum:
5121 i = s->input_section.section;
5126 if (! bfd_relax_section (i->owner, i, &link_info, &again))
5127 einfo (_("%P%F: can't relax section: %E\n"));
5131 dot = size_input_section (prev, output_section_statement,
5132 output_section_statement->fill, dot);
5136 case lang_input_statement_enum:
5139 case lang_fill_statement_enum:
5140 s->fill_statement.output_section =
5141 output_section_statement->bfd_section;
5143 fill = s->fill_statement.fill;
5146 case lang_assignment_statement_enum:
5148 bfd_vma newdot = dot;
5149 etree_type *tree = s->assignment_statement.exp;
5151 expld.dataseg.relro = exp_dataseg_relro_none;
5153 exp_fold_tree (tree,
5154 output_section_statement->bfd_section,
5157 if (expld.dataseg.relro == exp_dataseg_relro_start)
5159 if (!expld.dataseg.relro_start_stat)
5160 expld.dataseg.relro_start_stat = s;
5163 ASSERT (expld.dataseg.relro_start_stat == s);
5166 else if (expld.dataseg.relro == exp_dataseg_relro_end)
5168 if (!expld.dataseg.relro_end_stat)
5169 expld.dataseg.relro_end_stat = s;
5172 ASSERT (expld.dataseg.relro_end_stat == s);
5175 expld.dataseg.relro = exp_dataseg_relro_none;
5177 /* This symbol is relative to this section. */
5178 if ((tree->type.node_class == etree_provided
5179 || tree->type.node_class == etree_assign)
5180 && (tree->assign.dst [0] != '.'
5181 || tree->assign.dst [1] != '\0'))
5182 output_section_statement->section_relative_symbol = 1;
5184 if (!output_section_statement->ignored)
5186 if (output_section_statement == abs_output_section)
5188 /* If we don't have an output section, then just adjust
5189 the default memory address. */
5190 lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5191 FALSE)->current = newdot;
5193 else if (newdot != dot)
5195 /* Insert a pad after this statement. We can't
5196 put the pad before when relaxing, in case the
5197 assignment references dot. */
5198 insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5199 output_section_statement->bfd_section, dot);
5201 /* Don't neuter the pad below when relaxing. */
5204 /* If dot is advanced, this implies that the section
5205 should have space allocated to it, unless the
5206 user has explicitly stated that the section
5207 should not be allocated. */
5208 if (output_section_statement->sectype != noalloc_section
5209 && (output_section_statement->sectype != noload_section
5210 || (bfd_get_flavour (link_info.output_bfd)
5211 == bfd_target_elf_flavour)))
5212 output_section_statement->bfd_section->flags |= SEC_ALLOC;
5219 case lang_padding_statement_enum:
5220 /* If this is the first time lang_size_sections is called,
5221 we won't have any padding statements. If this is the
5222 second or later passes when relaxing, we should allow
5223 padding to shrink. If padding is needed on this pass, it
5224 will be added back in. */
5225 s->padding_statement.size = 0;
5227 /* Make sure output_offset is valid. If relaxation shrinks
5228 the section and this pad isn't needed, it's possible to
5229 have output_offset larger than the final size of the
5230 section. bfd_set_section_contents will complain even for
5231 a pad size of zero. */
5232 s->padding_statement.output_offset
5233 = dot - output_section_statement->bfd_section->vma;
5236 case lang_group_statement_enum:
5237 dot = lang_size_sections_1 (&s->group_statement.children.head,
5238 output_section_statement,
5239 fill, dot, relax, check_regions);
5242 case lang_insert_statement_enum:
5245 /* We can only get here when relaxing is turned on. */
5246 case lang_address_statement_enum:
5253 prev = &s->header.next;
5258 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5259 The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5260 CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5261 segments. We are allowed an opportunity to override this decision. */
5264 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5265 bfd * abfd ATTRIBUTE_UNUSED,
5266 asection * current_section,
5267 asection * previous_section,
5268 bfd_boolean new_segment)
5270 lang_output_section_statement_type * cur;
5271 lang_output_section_statement_type * prev;
5273 /* The checks below are only necessary when the BFD library has decided
5274 that the two sections ought to be placed into the same segment. */
5278 /* Paranoia checks. */
5279 if (current_section == NULL || previous_section == NULL)
5282 /* Find the memory regions associated with the two sections.
5283 We call lang_output_section_find() here rather than scanning the list
5284 of output sections looking for a matching section pointer because if
5285 we have a large number of sections then a hash lookup is faster. */
5286 cur = lang_output_section_find (current_section->name);
5287 prev = lang_output_section_find (previous_section->name);
5289 /* More paranoia. */
5290 if (cur == NULL || prev == NULL)
5293 /* If the regions are different then force the sections to live in
5294 different segments. See the email thread starting at the following
5295 URL for the reasons why this is necessary:
5296 http://sourceware.org/ml/binutils/2007-02/msg00216.html */
5297 return cur->region != prev->region;
5301 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5303 lang_statement_iteration++;
5304 lang_size_sections_1 (&statement_list.head, abs_output_section,
5305 0, 0, relax, check_regions);
5309 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5311 expld.phase = lang_allocating_phase_enum;
5312 expld.dataseg.phase = exp_dataseg_none;
5314 one_lang_size_sections_pass (relax, check_regions);
5315 if (expld.dataseg.phase == exp_dataseg_end_seen
5316 && link_info.relro && expld.dataseg.relro_end)
5318 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5319 to put expld.dataseg.relro on a (common) page boundary. */
5320 bfd_vma min_base, old_base, relro_end, maxpage;
5322 expld.dataseg.phase = exp_dataseg_relro_adjust;
5323 maxpage = expld.dataseg.maxpagesize;
5324 /* MIN_BASE is the absolute minimum address we are allowed to start the
5325 read-write segment (byte before will be mapped read-only). */
5326 min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5327 /* OLD_BASE is the address for a feasible minimum address which will
5328 still not cause a data overlap inside MAXPAGE causing file offset skip
5330 old_base = expld.dataseg.base;
5331 expld.dataseg.base += (-expld.dataseg.relro_end
5332 & (expld.dataseg.pagesize - 1));
5333 /* Compute the expected PT_GNU_RELRO segment end. */
5334 relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5335 & ~(expld.dataseg.pagesize - 1));
5336 if (min_base + maxpage < expld.dataseg.base)
5338 expld.dataseg.base -= maxpage;
5339 relro_end -= maxpage;
5341 lang_reset_memory_regions ();
5342 one_lang_size_sections_pass (relax, check_regions);
5343 if (expld.dataseg.relro_end > relro_end)
5345 /* The alignment of sections between DATA_SEGMENT_ALIGN
5346 and DATA_SEGMENT_RELRO_END caused huge padding to be
5347 inserted at DATA_SEGMENT_RELRO_END. Try to start a bit lower so
5348 that the section alignments will fit in. */
5350 unsigned int max_alignment_power = 0;
5352 /* Find maximum alignment power of sections between
5353 DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END. */
5354 for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5355 if (sec->vma >= expld.dataseg.base
5356 && sec->vma < expld.dataseg.relro_end
5357 && sec->alignment_power > max_alignment_power)
5358 max_alignment_power = sec->alignment_power;
5360 if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5362 if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
5363 expld.dataseg.base += expld.dataseg.pagesize;
5364 expld.dataseg.base -= (1 << max_alignment_power);
5365 lang_reset_memory_regions ();
5366 one_lang_size_sections_pass (relax, check_regions);
5369 link_info.relro_start = expld.dataseg.base;
5370 link_info.relro_end = expld.dataseg.relro_end;
5372 else if (expld.dataseg.phase == exp_dataseg_end_seen)
5374 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5375 a page could be saved in the data segment. */
5376 bfd_vma first, last;
5378 first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5379 last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5381 && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5382 != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5383 && first + last <= expld.dataseg.pagesize)
5385 expld.dataseg.phase = exp_dataseg_adjust;
5386 lang_reset_memory_regions ();
5387 one_lang_size_sections_pass (relax, check_regions);
5390 expld.dataseg.phase = exp_dataseg_done;
5393 expld.dataseg.phase = exp_dataseg_done;
5396 /* Worker function for lang_do_assignments. Recursiveness goes here. */
5399 lang_do_assignments_1 (lang_statement_union_type *s,
5400 lang_output_section_statement_type *current_os,
5404 for (; s != NULL; s = s->header.next)
5406 switch (s->header.type)
5408 case lang_constructors_statement_enum:
5409 dot = lang_do_assignments_1 (constructor_list.head,
5410 current_os, fill, dot);
5413 case lang_output_section_statement_enum:
5415 lang_output_section_statement_type *os;
5417 os = &(s->output_section_statement);
5418 if (os->bfd_section != NULL && !os->ignored)
5420 dot = os->bfd_section->vma;
5422 lang_do_assignments_1 (os->children.head, os, os->fill, dot);
5424 /* .tbss sections effectively have zero size. */
5425 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5426 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5427 || link_info.relocatable)
5428 dot += TO_ADDR (os->bfd_section->size);
5430 if (os->update_dot_tree != NULL)
5431 exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5436 case lang_wild_statement_enum:
5438 dot = lang_do_assignments_1 (s->wild_statement.children.head,
5439 current_os, fill, dot);
5442 case lang_object_symbols_statement_enum:
5443 case lang_output_statement_enum:
5444 case lang_target_statement_enum:
5447 case lang_data_statement_enum:
5448 exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5449 if (expld.result.valid_p)
5451 s->data_statement.value = expld.result.value;
5452 if (expld.result.section != NULL)
5453 s->data_statement.value += expld.result.section->vma;
5456 einfo (_("%F%P: invalid data statement\n"));
5459 switch (s->data_statement.type)
5477 if (size < TO_SIZE ((unsigned) 1))
5478 size = TO_SIZE ((unsigned) 1);
5479 dot += TO_ADDR (size);
5483 case lang_reloc_statement_enum:
5484 exp_fold_tree (s->reloc_statement.addend_exp,
5485 bfd_abs_section_ptr, &dot);
5486 if (expld.result.valid_p)
5487 s->reloc_statement.addend_value = expld.result.value;
5489 einfo (_("%F%P: invalid reloc statement\n"));
5490 dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5493 case lang_input_section_enum:
5495 asection *in = s->input_section.section;
5497 if ((in->flags & SEC_EXCLUDE) == 0)
5498 dot += TO_ADDR (in->size);
5502 case lang_input_statement_enum:
5505 case lang_fill_statement_enum:
5506 fill = s->fill_statement.fill;
5509 case lang_assignment_statement_enum:
5510 exp_fold_tree (s->assignment_statement.exp,
5511 current_os->bfd_section,
5515 case lang_padding_statement_enum:
5516 dot += TO_ADDR (s->padding_statement.size);
5519 case lang_group_statement_enum:
5520 dot = lang_do_assignments_1 (s->group_statement.children.head,
5521 current_os, fill, dot);
5524 case lang_insert_statement_enum:
5527 case lang_address_statement_enum:
5539 lang_do_assignments (void)
5541 lang_statement_iteration++;
5542 lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
5545 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
5546 operator .startof. (section_name), it produces an undefined symbol
5547 .startof.section_name. Similarly, when it sees
5548 .sizeof. (section_name), it produces an undefined symbol
5549 .sizeof.section_name. For all the output sections, we look for
5550 such symbols, and set them to the correct value. */
5553 lang_set_startof (void)
5557 if (link_info.relocatable)
5560 for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5562 const char *secname;
5564 struct bfd_link_hash_entry *h;
5566 secname = bfd_get_section_name (link_info.output_bfd, s);
5567 buf = (char *) xmalloc (10 + strlen (secname));
5569 sprintf (buf, ".startof.%s", secname);
5570 h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5571 if (h != NULL && h->type == bfd_link_hash_undefined)
5573 h->type = bfd_link_hash_defined;
5574 h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5575 h->u.def.section = bfd_abs_section_ptr;
5578 sprintf (buf, ".sizeof.%s", secname);
5579 h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5580 if (h != NULL && h->type == bfd_link_hash_undefined)
5582 h->type = bfd_link_hash_defined;
5583 h->u.def.value = TO_ADDR (s->size);
5584 h->u.def.section = bfd_abs_section_ptr;
5594 struct bfd_link_hash_entry *h;
5597 if ((link_info.relocatable && !link_info.gc_sections)
5598 || (link_info.shared && !link_info.executable))
5599 warn = entry_from_cmdline;
5603 /* Force the user to specify a root when generating a relocatable with
5605 if (link_info.gc_sections && link_info.relocatable
5606 && !(entry_from_cmdline || undef_from_cmdline))
5607 einfo (_("%P%F: gc-sections requires either an entry or "
5608 "an undefined symbol\n"));
5610 if (entry_symbol.name == NULL)
5612 /* No entry has been specified. Look for the default entry, but
5613 don't warn if we don't find it. */
5614 entry_symbol.name = entry_symbol_default;
5618 h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5619 FALSE, FALSE, TRUE);
5621 && (h->type == bfd_link_hash_defined
5622 || h->type == bfd_link_hash_defweak)
5623 && h->u.def.section->output_section != NULL)
5627 val = (h->u.def.value
5628 + bfd_get_section_vma (link_info.output_bfd,
5629 h->u.def.section->output_section)
5630 + h->u.def.section->output_offset);
5631 if (! bfd_set_start_address (link_info.output_bfd, val))
5632 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5639 /* We couldn't find the entry symbol. Try parsing it as a
5641 val = bfd_scan_vma (entry_symbol.name, &send, 0);
5644 if (! bfd_set_start_address (link_info.output_bfd, val))
5645 einfo (_("%P%F: can't set start address\n"));
5651 /* Can't find the entry symbol, and it's not a number. Use
5652 the first address in the text section. */
5653 ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5657 einfo (_("%P: warning: cannot find entry symbol %s;"
5658 " defaulting to %V\n"),
5660 bfd_get_section_vma (link_info.output_bfd, ts));
5661 if (!(bfd_set_start_address
5662 (link_info.output_bfd,
5663 bfd_get_section_vma (link_info.output_bfd, ts))))
5664 einfo (_("%P%F: can't set start address\n"));
5669 einfo (_("%P: warning: cannot find entry symbol %s;"
5670 " not setting start address\n"),
5676 /* Don't bfd_hash_table_free (&lang_definedness_table);
5677 map file output may result in a call of lang_track_definedness. */
5680 /* This is a small function used when we want to ignore errors from
5684 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5686 /* Don't do anything. */
5689 /* Check that the architecture of all the input files is compatible
5690 with the output file. Also call the backend to let it do any
5691 other checking that is needed. */
5696 lang_statement_union_type *file;
5698 const bfd_arch_info_type *compatible;
5700 for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5702 input_bfd = file->input_statement.the_bfd;
5704 = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5705 command_line.accept_unknown_input_arch);
5707 /* In general it is not possible to perform a relocatable
5708 link between differing object formats when the input
5709 file has relocations, because the relocations in the
5710 input format may not have equivalent representations in
5711 the output format (and besides BFD does not translate
5712 relocs for other link purposes than a final link). */
5713 if ((link_info.relocatable || link_info.emitrelocations)
5714 && (compatible == NULL
5715 || (bfd_get_flavour (input_bfd)
5716 != bfd_get_flavour (link_info.output_bfd)))
5717 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5719 einfo (_("%P%F: Relocatable linking with relocations from"
5720 " format %s (%B) to format %s (%B) is not supported\n"),
5721 bfd_get_target (input_bfd), input_bfd,
5722 bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5723 /* einfo with %F exits. */
5726 if (compatible == NULL)
5728 if (command_line.warn_mismatch)
5729 einfo (_("%P%X: %s architecture of input file `%B'"
5730 " is incompatible with %s output\n"),
5731 bfd_printable_name (input_bfd), input_bfd,
5732 bfd_printable_name (link_info.output_bfd));
5734 else if (bfd_count_sections (input_bfd))
5736 /* If the input bfd has no contents, it shouldn't set the
5737 private data of the output bfd. */
5739 bfd_error_handler_type pfn = NULL;
5741 /* If we aren't supposed to warn about mismatched input
5742 files, temporarily set the BFD error handler to a
5743 function which will do nothing. We still want to call
5744 bfd_merge_private_bfd_data, since it may set up
5745 information which is needed in the output file. */
5746 if (! command_line.warn_mismatch)
5747 pfn = bfd_set_error_handler (ignore_bfd_errors);
5748 if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5750 if (command_line.warn_mismatch)
5751 einfo (_("%P%X: failed to merge target specific data"
5752 " of file %B\n"), input_bfd);
5754 if (! command_line.warn_mismatch)
5755 bfd_set_error_handler (pfn);
5760 /* Look through all the global common symbols and attach them to the
5761 correct section. The -sort-common command line switch may be used
5762 to roughly sort the entries by alignment. */
5767 if (command_line.inhibit_common_definition)
5769 if (link_info.relocatable
5770 && ! command_line.force_common_definition)
5773 if (! config.sort_common)
5774 bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5779 if (config.sort_common == sort_descending)
5781 for (power = 4; power > 0; power--)
5782 bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5785 bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5789 for (power = 0; power <= 4; power++)
5790 bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5793 bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5798 /* Place one common symbol in the correct section. */
5801 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5803 unsigned int power_of_two;
5807 if (h->type != bfd_link_hash_common)
5811 power_of_two = h->u.c.p->alignment_power;
5813 if (config.sort_common == sort_descending
5814 && power_of_two < *(unsigned int *) info)
5816 else if (config.sort_common == sort_ascending
5817 && power_of_two > *(unsigned int *) info)
5820 section = h->u.c.p->section;
5821 if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5822 einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5825 if (config.map_file != NULL)
5827 static bfd_boolean header_printed;
5832 if (! header_printed)
5834 minfo (_("\nAllocating common symbols\n"));
5835 minfo (_("Common symbol size file\n\n"));
5836 header_printed = TRUE;
5839 name = bfd_demangle (link_info.output_bfd, h->root.string,
5840 DMGL_ANSI | DMGL_PARAMS);
5843 minfo ("%s", h->root.string);
5844 len = strlen (h->root.string);
5849 len = strlen (name);
5865 if (size <= 0xffffffff)
5866 sprintf (buf, "%lx", (unsigned long) size);
5868 sprintf_vma (buf, size);
5878 minfo ("%B\n", section->owner);
5884 /* Run through the input files and ensure that every input section has
5885 somewhere to go. If one is found without a destination then create
5886 an input request and place it into the statement tree. */
5889 lang_place_orphans (void)
5891 LANG_FOR_EACH_INPUT_STATEMENT (file)
5895 for (s = file->the_bfd->sections; s != NULL; s = s->next)
5897 if (s->output_section == NULL)
5899 /* This section of the file is not attached, root
5900 around for a sensible place for it to go. */
5902 if (file->just_syms_flag)
5903 bfd_link_just_syms (file->the_bfd, s, &link_info);
5904 else if ((s->flags & SEC_EXCLUDE) != 0)
5905 s->output_section = bfd_abs_section_ptr;
5906 else if (strcmp (s->name, "COMMON") == 0)
5908 /* This is a lonely common section which must have
5909 come from an archive. We attach to the section
5910 with the wildcard. */
5911 if (! link_info.relocatable
5912 || command_line.force_common_definition)
5914 if (default_common_section == NULL)
5915 default_common_section
5916 = lang_output_section_statement_lookup (".bss", 0,
5918 lang_add_section (&default_common_section->children, s,
5919 default_common_section);
5924 const char *name = s->name;
5927 if (config.unique_orphan_sections
5928 || unique_section_p (s, NULL))
5929 constraint = SPECIAL;
5931 if (!ldemul_place_orphan (s, name, constraint))
5933 lang_output_section_statement_type *os;
5934 os = lang_output_section_statement_lookup (name,
5937 if (os->addr_tree == NULL
5938 && (link_info.relocatable
5939 || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
5940 os->addr_tree = exp_intop (0);
5941 lang_add_section (&os->children, s, os);
5950 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
5952 flagword *ptr_flags;
5954 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
5960 *ptr_flags |= SEC_ALLOC;
5964 *ptr_flags |= SEC_READONLY;
5968 *ptr_flags |= SEC_DATA;
5972 *ptr_flags |= SEC_CODE;
5977 *ptr_flags |= SEC_LOAD;
5981 einfo (_("%P%F: invalid syntax in flags\n"));
5988 /* Call a function on each input file. This function will be called
5989 on an archive, but not on the elements. */
5992 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
5994 lang_input_statement_type *f;
5996 for (f = (lang_input_statement_type *) input_file_chain.head;
5998 f = (lang_input_statement_type *) f->next_real_file)
6002 /* Call a function on each file. The function will be called on all
6003 the elements of an archive which are included in the link, but will
6004 not be called on the archive file itself. */
6007 lang_for_each_file (void (*func) (lang_input_statement_type *))
6009 LANG_FOR_EACH_INPUT_STATEMENT (f)
6016 ldlang_add_file (lang_input_statement_type *entry)
6018 lang_statement_append (&file_chain,
6019 (lang_statement_union_type *) entry,
6022 /* The BFD linker needs to have a list of all input BFDs involved in
6024 ASSERT (entry->the_bfd->link_next == NULL);
6025 ASSERT (entry->the_bfd != link_info.output_bfd);
6027 *link_info.input_bfds_tail = entry->the_bfd;
6028 link_info.input_bfds_tail = &entry->the_bfd->link_next;
6029 entry->the_bfd->usrdata = entry;
6030 bfd_set_gp_size (entry->the_bfd, g_switch_value);
6032 /* Look through the sections and check for any which should not be
6033 included in the link. We need to do this now, so that we can
6034 notice when the backend linker tries to report multiple
6035 definition errors for symbols which are in sections we aren't
6036 going to link. FIXME: It might be better to entirely ignore
6037 symbols which are defined in sections which are going to be
6038 discarded. This would require modifying the backend linker for
6039 each backend which might set the SEC_LINK_ONCE flag. If we do
6040 this, we should probably handle SEC_EXCLUDE in the same way. */
6042 bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6046 lang_add_output (const char *name, int from_script)
6048 /* Make -o on command line override OUTPUT in script. */
6049 if (!had_output_filename || !from_script)
6051 output_filename = name;
6052 had_output_filename = TRUE;
6056 static lang_output_section_statement_type *current_section;
6067 for (l = 0; l < 32; l++)
6069 if (i >= (unsigned int) x)
6077 lang_output_section_statement_type *
6078 lang_enter_output_section_statement (const char *output_section_statement_name,
6079 etree_type *address_exp,
6080 enum section_type sectype,
6082 etree_type *subalign,
6086 lang_output_section_statement_type *os;
6088 os = lang_output_section_statement_lookup (output_section_statement_name,
6090 current_section = os;
6092 if (os->addr_tree == NULL)
6094 os->addr_tree = address_exp;
6096 os->sectype = sectype;
6097 if (sectype != noload_section)
6098 os->flags = SEC_NO_FLAGS;
6100 os->flags = SEC_NEVER_LOAD;
6101 os->block_value = 1;
6103 /* Make next things chain into subchain of this. */
6104 push_stat_ptr (&os->children);
6106 os->subsection_alignment =
6107 topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6108 os->section_alignment =
6109 topower (exp_get_value_int (align, -1, "section alignment"));
6111 os->load_base = ebase;
6118 lang_output_statement_type *new_stmt;
6120 new_stmt = new_stat (lang_output_statement, stat_ptr);
6121 new_stmt->name = output_filename;
6125 /* Reset the current counters in the regions. */
6128 lang_reset_memory_regions (void)
6130 lang_memory_region_type *p = lang_memory_region_list;
6132 lang_output_section_statement_type *os;
6134 for (p = lang_memory_region_list; p != NULL; p = p->next)
6136 p->current = p->origin;
6140 for (os = &lang_output_section_statement.head->output_section_statement;
6144 os->processed_vma = FALSE;
6145 os->processed_lma = FALSE;
6148 for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6150 /* Save the last size for possible use by bfd_relax_section. */
6151 o->rawsize = o->size;
6156 /* Worker for lang_gc_sections_1. */
6159 gc_section_callback (lang_wild_statement_type *ptr,
6160 struct wildcard_list *sec ATTRIBUTE_UNUSED,
6162 lang_input_statement_type *file ATTRIBUTE_UNUSED,
6163 void *data ATTRIBUTE_UNUSED)
6165 /* If the wild pattern was marked KEEP, the member sections
6166 should be as well. */
6167 if (ptr->keep_sections)
6168 section->flags |= SEC_KEEP;
6171 /* Iterate over sections marking them against GC. */
6174 lang_gc_sections_1 (lang_statement_union_type *s)
6176 for (; s != NULL; s = s->header.next)
6178 switch (s->header.type)
6180 case lang_wild_statement_enum:
6181 walk_wild (&s->wild_statement, gc_section_callback, NULL);
6183 case lang_constructors_statement_enum:
6184 lang_gc_sections_1 (constructor_list.head);
6186 case lang_output_section_statement_enum:
6187 lang_gc_sections_1 (s->output_section_statement.children.head);
6189 case lang_group_statement_enum:
6190 lang_gc_sections_1 (s->group_statement.children.head);
6199 lang_gc_sections (void)
6201 /* Keep all sections so marked in the link script. */
6203 lang_gc_sections_1 (statement_list.head);
6205 /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6206 the special case of debug info. (See bfd/stabs.c)
6207 Twiddle the flag here, to simplify later linker code. */
6208 if (link_info.relocatable)
6210 LANG_FOR_EACH_INPUT_STATEMENT (f)
6213 for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6214 if ((sec->flags & SEC_DEBUGGING) == 0)
6215 sec->flags &= ~SEC_EXCLUDE;
6219 if (link_info.gc_sections)
6220 bfd_gc_sections (link_info.output_bfd, &link_info);
6223 /* Worker for lang_find_relro_sections_1. */
6226 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6227 struct wildcard_list *sec ATTRIBUTE_UNUSED,
6229 lang_input_statement_type *file ATTRIBUTE_UNUSED,
6232 /* Discarded, excluded and ignored sections effectively have zero
6234 if (section->output_section != NULL
6235 && section->output_section->owner == link_info.output_bfd
6236 && (section->output_section->flags & SEC_EXCLUDE) == 0
6237 && !IGNORE_SECTION (section)
6238 && section->size != 0)
6240 bfd_boolean *has_relro_section = (bfd_boolean *) data;
6241 *has_relro_section = TRUE;
6245 /* Iterate over sections for relro sections. */
6248 lang_find_relro_sections_1 (lang_statement_union_type *s,
6249 bfd_boolean *has_relro_section)
6251 if (*has_relro_section)
6254 for (; s != NULL; s = s->header.next)
6256 if (s == expld.dataseg.relro_end_stat)
6259 switch (s->header.type)
6261 case lang_wild_statement_enum:
6262 walk_wild (&s->wild_statement,
6263 find_relro_section_callback,
6266 case lang_constructors_statement_enum:
6267 lang_find_relro_sections_1 (constructor_list.head,
6270 case lang_output_section_statement_enum:
6271 lang_find_relro_sections_1 (s->output_section_statement.children.head,
6274 case lang_group_statement_enum:
6275 lang_find_relro_sections_1 (s->group_statement.children.head,
6285 lang_find_relro_sections (void)
6287 bfd_boolean has_relro_section = FALSE;
6289 /* Check all sections in the link script. */
6291 lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6292 &has_relro_section);
6294 if (!has_relro_section)
6295 link_info.relro = FALSE;
6298 /* Relax all sections until bfd_relax_section gives up. */
6301 lang_relax_sections (bfd_boolean need_layout)
6303 if (RELAXATION_ENABLED)
6305 /* We may need more than one relaxation pass. */
6306 int i = link_info.relax_pass;
6308 /* The backend can use it to determine the current pass. */
6309 link_info.relax_pass = 0;
6313 /* Keep relaxing until bfd_relax_section gives up. */
6314 bfd_boolean relax_again;
6316 link_info.relax_trip = -1;
6319 link_info.relax_trip++;
6321 /* Note: pe-dll.c does something like this also. If you find
6322 you need to change this code, you probably need to change
6323 pe-dll.c also. DJ */
6325 /* Do all the assignments with our current guesses as to
6327 lang_do_assignments ();
6329 /* We must do this after lang_do_assignments, because it uses
6331 lang_reset_memory_regions ();
6333 /* Perform another relax pass - this time we know where the
6334 globals are, so can make a better guess. */
6335 relax_again = FALSE;
6336 lang_size_sections (&relax_again, FALSE);
6338 while (relax_again);
6340 link_info.relax_pass++;
6347 /* Final extra sizing to report errors. */
6348 lang_do_assignments ();
6349 lang_reset_memory_regions ();
6350 lang_size_sections (NULL, TRUE);
6357 /* Finalize dynamic list. */
6358 if (link_info.dynamic_list)
6359 lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6361 current_target = default_target;
6363 /* Open the output file. */
6364 lang_for_each_statement (ldlang_open_output);
6367 ldemul_create_output_section_statements ();
6369 /* Add to the hash table all undefineds on the command line. */
6370 lang_place_undefineds ();
6372 if (!bfd_section_already_linked_table_init ())
6373 einfo (_("%P%F: Failed to create hash table\n"));
6375 /* Create a bfd for each input file. */
6376 current_target = default_target;
6377 open_input_bfds (statement_list.head, FALSE);
6379 #ifdef ENABLE_PLUGINS
6381 union lang_statement_union **listend;
6382 /* Now all files are read, let the plugin(s) decide if there
6383 are any more to be added to the link before we call the
6384 emulation's after_open hook. */
6385 listend = statement_list.tail;
6387 if (plugin_call_all_symbols_read ())
6388 einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6389 plugin_error_plugin ());
6390 /* If any new files were added, they will be on the end of the
6391 statement list, and we can open them now by getting open_input_bfds
6392 to carry on from where it ended last time. */
6394 open_input_bfds (*listend, FALSE);
6396 #endif /* ENABLE_PLUGINS */
6398 link_info.gc_sym_list = &entry_symbol;
6399 if (entry_symbol.name == NULL)
6400 link_info.gc_sym_list = ldlang_undef_chain_list_head;
6402 ldemul_after_open ();
6404 bfd_section_already_linked_table_free ();
6406 /* Make sure that we're not mixing architectures. We call this
6407 after all the input files have been opened, but before we do any
6408 other processing, so that any operations merge_private_bfd_data
6409 does on the output file will be known during the rest of the
6413 /* Handle .exports instead of a version script if we're told to do so. */
6414 if (command_line.version_exports_section)
6415 lang_do_version_exports_section ();
6417 /* Build all sets based on the information gathered from the input
6419 ldctor_build_sets ();
6421 /* Remove unreferenced sections if asked to. */
6422 lang_gc_sections ();
6424 /* Size up the common data. */
6427 /* Update wild statements. */
6428 update_wild_statements (statement_list.head);
6430 /* Run through the contours of the script and attach input sections
6431 to the correct output sections. */
6432 lang_statement_iteration++;
6433 map_input_to_output_sections (statement_list.head, NULL, NULL);
6435 process_insert_statements ();
6437 /* Find any sections not attached explicitly and handle them. */
6438 lang_place_orphans ();
6440 if (! link_info.relocatable)
6444 /* Merge SEC_MERGE sections. This has to be done after GC of
6445 sections, so that GCed sections are not merged, but before
6446 assigning dynamic symbols, since removing whole input sections
6448 bfd_merge_sections (link_info.output_bfd, &link_info);
6450 /* Look for a text section and set the readonly attribute in it. */
6451 found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6455 if (config.text_read_only)
6456 found->flags |= SEC_READONLY;
6458 found->flags &= ~SEC_READONLY;
6462 /* Do anything special before sizing sections. This is where ELF
6463 and other back-ends size dynamic sections. */
6464 ldemul_before_allocation ();
6466 /* We must record the program headers before we try to fix the
6467 section positions, since they will affect SIZEOF_HEADERS. */
6468 lang_record_phdrs ();
6470 /* Check relro sections. */
6471 if (link_info.relro && ! link_info.relocatable)
6472 lang_find_relro_sections ();
6474 /* Size up the sections. */
6475 lang_size_sections (NULL, ! RELAXATION_ENABLED);
6477 /* See if anything special should be done now we know how big
6478 everything is. This is where relaxation is done. */
6479 ldemul_after_allocation ();
6481 /* Fix any .startof. or .sizeof. symbols. */
6482 lang_set_startof ();
6484 /* Do all the assignments, now that we know the final resting places
6485 of all the symbols. */
6486 expld.phase = lang_final_phase_enum;
6487 lang_do_assignments ();
6491 /* Make sure that the section addresses make sense. */
6492 if (command_line.check_section_addresses)
6493 lang_check_section_addresses ();
6498 /* EXPORTED TO YACC */
6501 lang_add_wild (struct wildcard_spec *filespec,
6502 struct wildcard_list *section_list,
6503 bfd_boolean keep_sections)
6505 struct wildcard_list *curr, *next;
6506 lang_wild_statement_type *new_stmt;
6508 /* Reverse the list as the parser puts it back to front. */
6509 for (curr = section_list, section_list = NULL;
6511 section_list = curr, curr = next)
6513 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6514 placed_commons = TRUE;
6517 curr->next = section_list;
6520 if (filespec != NULL && filespec->name != NULL)
6522 if (strcmp (filespec->name, "*") == 0)
6523 filespec->name = NULL;
6524 else if (! wildcardp (filespec->name))
6525 lang_has_input_file = TRUE;
6528 new_stmt = new_stat (lang_wild_statement, stat_ptr);
6529 new_stmt->filename = NULL;
6530 new_stmt->filenames_sorted = FALSE;
6531 if (filespec != NULL)
6533 new_stmt->filename = filespec->name;
6534 new_stmt->filenames_sorted = filespec->sorted == by_name;
6536 new_stmt->section_list = section_list;
6537 new_stmt->keep_sections = keep_sections;
6538 lang_list_init (&new_stmt->children);
6539 analyze_walk_wild_section_handler (new_stmt);
6543 lang_section_start (const char *name, etree_type *address,
6544 const segment_type *segment)
6546 lang_address_statement_type *ad;
6548 ad = new_stat (lang_address_statement, stat_ptr);
6549 ad->section_name = name;
6550 ad->address = address;
6551 ad->segment = segment;
6554 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
6555 because of a -e argument on the command line, or zero if this is
6556 called by ENTRY in a linker script. Command line arguments take
6560 lang_add_entry (const char *name, bfd_boolean cmdline)
6562 if (entry_symbol.name == NULL
6564 || ! entry_from_cmdline)
6566 entry_symbol.name = name;
6567 entry_from_cmdline = cmdline;
6571 /* Set the default start symbol to NAME. .em files should use this,
6572 not lang_add_entry, to override the use of "start" if neither the
6573 linker script nor the command line specifies an entry point. NAME
6574 must be permanently allocated. */
6576 lang_default_entry (const char *name)
6578 entry_symbol_default = name;
6582 lang_add_target (const char *name)
6584 lang_target_statement_type *new_stmt;
6586 new_stmt = new_stat (lang_target_statement, stat_ptr);
6587 new_stmt->target = name;
6591 lang_add_map (const char *name)
6598 map_option_f = TRUE;
6606 lang_add_fill (fill_type *fill)
6608 lang_fill_statement_type *new_stmt;
6610 new_stmt = new_stat (lang_fill_statement, stat_ptr);
6611 new_stmt->fill = fill;
6615 lang_add_data (int type, union etree_union *exp)
6617 lang_data_statement_type *new_stmt;
6619 new_stmt = new_stat (lang_data_statement, stat_ptr);
6620 new_stmt->exp = exp;
6621 new_stmt->type = type;
6624 /* Create a new reloc statement. RELOC is the BFD relocation type to
6625 generate. HOWTO is the corresponding howto structure (we could
6626 look this up, but the caller has already done so). SECTION is the
6627 section to generate a reloc against, or NAME is the name of the
6628 symbol to generate a reloc against. Exactly one of SECTION and
6629 NAME must be NULL. ADDEND is an expression for the addend. */
6632 lang_add_reloc (bfd_reloc_code_real_type reloc,
6633 reloc_howto_type *howto,
6636 union etree_union *addend)
6638 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6642 p->section = section;
6644 p->addend_exp = addend;
6646 p->addend_value = 0;
6647 p->output_section = NULL;
6648 p->output_offset = 0;
6651 lang_assignment_statement_type *
6652 lang_add_assignment (etree_type *exp)
6654 lang_assignment_statement_type *new_stmt;
6656 new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6657 new_stmt->exp = exp;
6662 lang_add_attribute (enum statement_enum attribute)
6664 new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6668 lang_startup (const char *name)
6670 if (startup_file != NULL)
6672 einfo (_("%P%F: multiple STARTUP files\n"));
6674 first_file->filename = name;
6675 first_file->local_sym_name = name;
6676 first_file->real = TRUE;
6678 startup_file = name;
6682 lang_float (bfd_boolean maybe)
6684 lang_float_flag = maybe;
6688 /* Work out the load- and run-time regions from a script statement, and
6689 store them in *LMA_REGION and *REGION respectively.
6691 MEMSPEC is the name of the run-time region, or the value of
6692 DEFAULT_MEMORY_REGION if the statement didn't specify one.
6693 LMA_MEMSPEC is the name of the load-time region, or null if the
6694 statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6695 had an explicit load address.
6697 It is an error to specify both a load region and a load address. */
6700 lang_get_regions (lang_memory_region_type **region,
6701 lang_memory_region_type **lma_region,
6702 const char *memspec,
6703 const char *lma_memspec,
6704 bfd_boolean have_lma,
6705 bfd_boolean have_vma)
6707 *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6709 /* If no runtime region or VMA has been specified, but the load region
6710 has been specified, then use the load region for the runtime region
6712 if (lma_memspec != NULL
6714 && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6715 *region = *lma_region;
6717 *region = lang_memory_region_lookup (memspec, FALSE);
6719 if (have_lma && lma_memspec != 0)
6720 einfo (_("%X%P:%S: section has both a load address and a load region\n"));
6724 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6725 lang_output_section_phdr_list *phdrs,
6726 const char *lma_memspec)
6728 lang_get_regions (¤t_section->region,
6729 ¤t_section->lma_region,
6730 memspec, lma_memspec,
6731 current_section->load_base != NULL,
6732 current_section->addr_tree != NULL);
6734 /* If this section has no load region or base, but has the same
6735 region as the previous section, then propagate the previous
6736 section's load region. */
6738 if (!current_section->lma_region && !current_section->load_base
6739 && current_section->region == current_section->prev->region)
6740 current_section->lma_region = current_section->prev->lma_region;
6742 current_section->fill = fill;
6743 current_section->phdrs = phdrs;
6747 /* Create an absolute symbol with the given name with the value of the
6748 address of first byte of the section named.
6750 If the symbol already exists, then do nothing. */
6753 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
6755 struct bfd_link_hash_entry *h;
6757 h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6759 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6761 if (h->type == bfd_link_hash_new
6762 || h->type == bfd_link_hash_undefined)
6766 h->type = bfd_link_hash_defined;
6768 sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6772 h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
6774 h->u.def.section = bfd_abs_section_ptr;
6778 /* Create an absolute symbol with the given name with the value of the
6779 address of the first byte after the end of the section named.
6781 If the symbol already exists, then do nothing. */
6784 lang_abs_symbol_at_end_of (const char *secname, const char *name)
6786 struct bfd_link_hash_entry *h;
6788 h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6790 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6792 if (h->type == bfd_link_hash_new
6793 || h->type == bfd_link_hash_undefined)
6797 h->type = bfd_link_hash_defined;
6799 sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6803 h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
6804 + TO_ADDR (sec->size));
6806 h->u.def.section = bfd_abs_section_ptr;
6811 lang_statement_append (lang_statement_list_type *list,
6812 lang_statement_union_type *element,
6813 lang_statement_union_type **field)
6815 *(list->tail) = element;
6819 /* Set the output format type. -oformat overrides scripts. */
6822 lang_add_output_format (const char *format,
6827 if (output_target == NULL || !from_script)
6829 if (command_line.endian == ENDIAN_BIG
6832 else if (command_line.endian == ENDIAN_LITTLE
6836 output_target = format;
6841 lang_add_insert (const char *where, int is_before)
6843 lang_insert_statement_type *new_stmt;
6845 new_stmt = new_stat (lang_insert_statement, stat_ptr);
6846 new_stmt->where = where;
6847 new_stmt->is_before = is_before;
6848 saved_script_handle = previous_script_handle;