29084490e7be6ffad779e8d12d35c2483026e867
[external/binutils.git] / ld / ldlang.c
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
4    Free Software Foundation, Inc.
5
6    This file is part of the GNU Binutils.
7
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.
12
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.
17
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.  */
22
23 #include <limits.h>
24
25 #include "sysdep.h"
26 #include "bfd.h"
27 #include "libiberty.h"
28 #include "safe-ctype.h"
29 #include "obstack.h"
30 #include "bfdlink.h"
31
32 #include "ld.h"
33 #include "ldmain.h"
34 #include "ldexp.h"
35 #include "ldlang.h"
36 #include <ldgram.h>
37 #include "ldlex.h"
38 #include "ldmisc.h"
39 #include "ldctor.h"
40 #include "ldfile.h"
41 #include "ldemul.h"
42 #include "fnmatch.h"
43 #include "demangle.h"
44 #include "hashtab.h"
45
46 #ifndef offsetof
47 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
48 #endif
49
50 /* Locals variables.  */
51 static struct obstack stat_obstack;
52 static struct obstack map_obstack;
53
54 #define obstack_chunk_alloc xmalloc
55 #define obstack_chunk_free free
56 static const char *startup_file;
57 static bfd_boolean placed_commons = FALSE;
58 static bfd_boolean stripped_excluded_sections = FALSE;
59 static lang_output_section_statement_type *default_common_section;
60 static bfd_boolean map_option_f;
61 static bfd_vma print_dot;
62 static lang_input_statement_type *first_file;
63 static const char *current_target;
64 static const char *output_target;
65 static lang_statement_list_type statement_list;
66 static struct bfd_hash_table lang_definedness_table;
67
68 /* Forward declarations.  */
69 static void exp_init_os (etree_type *);
70 static void init_map_userdata (bfd *, asection *, void *);
71 static lang_input_statement_type *lookup_name (const char *);
72 static struct bfd_hash_entry *lang_definedness_newfunc
73  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
74 static void insert_undefined (const char *);
75 static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
76 static void print_statement (lang_statement_union_type *,
77                              lang_output_section_statement_type *);
78 static void print_statement_list (lang_statement_union_type *,
79                                   lang_output_section_statement_type *);
80 static void print_statements (void);
81 static void print_input_section (asection *);
82 static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
83 static void lang_record_phdrs (void);
84 static void lang_do_version_exports_section (void);
85 static void lang_finalize_version_expr_head
86   (struct bfd_elf_version_expr_head *);
87
88 /* Exported variables.  */
89 lang_output_section_statement_type *abs_output_section;
90 lang_statement_list_type lang_output_section_statement;
91 lang_statement_list_type *stat_ptr = &statement_list;
92 lang_statement_list_type file_chain = { NULL, NULL };
93 lang_statement_list_type input_file_chain;
94 struct bfd_sym_chain entry_symbol = { NULL, NULL };
95 static const char *entry_symbol_default = "start";
96 const char *entry_section = ".text";
97 bfd_boolean entry_from_cmdline;
98 bfd_boolean lang_has_input_file = FALSE;
99 bfd_boolean had_output_filename = FALSE;
100 bfd_boolean lang_float_flag = FALSE;
101 bfd_boolean delete_output_file_on_failure = FALSE;
102 struct lang_phdr *lang_phdr_list;
103 struct lang_nocrossrefs *nocrossref_list;
104 static struct unique_sections *unique_section_list;
105 static bfd_boolean ldlang_sysrooted_script = FALSE;
106
107  /* Functions that traverse the linker script and might evaluate
108     DEFINED() need to increment this.  */
109 int lang_statement_iteration = 0;
110
111 etree_type *base; /* Relocation base - or null */
112
113 /* Return TRUE if the PATTERN argument is a wildcard pattern.
114    Although backslashes are treated specially if a pattern contains
115    wildcards, we do not consider the mere presence of a backslash to
116    be enough to cause the pattern to be treated as a wildcard.
117    That lets us handle DOS filenames more naturally.  */
118 #define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
119
120 #define new_stat(x, y) \
121   (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
122
123 #define outside_section_address(q) \
124   ((q)->output_offset + (q)->output_section->vma)
125
126 #define outside_symbol_address(q) \
127   ((q)->value + outside_section_address (q->section))
128
129 #define SECTION_NAME_MAP_LENGTH (16)
130
131 void *
132 stat_alloc (size_t size)
133 {
134   return obstack_alloc (&stat_obstack, size);
135 }
136
137 static int
138 name_match (const char *pattern, const char *name)
139 {
140   if (wildcardp (pattern))
141     return fnmatch (pattern, name, 0);
142   return strcmp (pattern, name);
143 }
144
145 /* If PATTERN is of the form archive:file, return a pointer to the
146    separator.  If not, return NULL.  */
147
148 static char *
149 archive_path (const char *pattern)
150 {
151   char *p = NULL;
152
153   if (link_info.path_separator == 0)
154     return p;
155
156   p = strchr (pattern, link_info.path_separator);
157 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
158   if (p == NULL || link_info.path_separator != ':')
159     return p;
160
161   /* Assume a match on the second char is part of drive specifier,
162      as in "c:\silly.dos".  */
163   if (p == pattern + 1 && ISALPHA (*pattern))
164     p = strchr (p + 1, link_info.path_separator);
165 #endif
166   return p;
167 }
168
169 /* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
170    return whether F matches FILE_SPEC.  */
171
172 static bfd_boolean
173 input_statement_is_archive_path (const char *file_spec, char *sep,
174                                  lang_input_statement_type *f)
175 {
176   bfd_boolean match = FALSE;
177
178   if ((*(sep + 1) == 0
179        || name_match (sep + 1, f->filename) == 0)
180       && ((sep != file_spec)
181           == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
182     {
183       match = TRUE;
184
185       if (sep != file_spec)
186         {
187           const char *aname = f->the_bfd->my_archive->filename;
188           *sep = 0;
189           match = name_match (file_spec, aname) == 0;
190           *sep = link_info.path_separator;
191         }
192     }
193   return match;
194 }
195
196 static bfd_boolean
197 unique_section_p (const asection *sec)
198 {
199   struct unique_sections *unam;
200   const char *secnam;
201
202   if (link_info.relocatable
203       && sec->owner != NULL
204       && bfd_is_group_section (sec->owner, sec))
205     return TRUE;
206
207   secnam = sec->name;
208   for (unam = unique_section_list; unam; unam = unam->next)
209     if (name_match (unam->name, secnam) == 0)
210       return TRUE;
211
212   return FALSE;
213 }
214
215 /* Generic traversal routines for finding matching sections.  */
216
217 /* Try processing a section against a wildcard.  This just calls
218    the callback unless the filename exclusion list is present
219    and excludes the file.  It's hardly ever present so this
220    function is very fast.  */
221
222 static void
223 walk_wild_consider_section (lang_wild_statement_type *ptr,
224                             lang_input_statement_type *file,
225                             asection *s,
226                             struct wildcard_list *sec,
227                             callback_t callback,
228                             void *data)
229 {
230   struct name_list *list_tmp;
231
232   /* Don't process sections from files which were excluded.  */
233   for (list_tmp = sec->spec.exclude_name_list;
234        list_tmp;
235        list_tmp = list_tmp->next)
236     {
237       char *p = archive_path (list_tmp->name);
238
239       if (p != NULL)
240         {
241           if (input_statement_is_archive_path (list_tmp->name, p, file))
242             return;
243         }
244
245       else if (name_match (list_tmp->name, file->filename) == 0)
246         return;
247
248       /* FIXME: Perhaps remove the following at some stage?  Matching
249          unadorned archives like this was never documented and has
250          been superceded by the archive:path syntax.  */
251       else if (file->the_bfd != NULL
252                && file->the_bfd->my_archive != NULL
253                && name_match (list_tmp->name,
254                               file->the_bfd->my_archive->filename) == 0)
255         return;
256     }
257
258   (*callback) (ptr, sec, s, file, data);
259 }
260
261 /* Lowest common denominator routine that can handle everything correctly,
262    but slowly.  */
263
264 static void
265 walk_wild_section_general (lang_wild_statement_type *ptr,
266                            lang_input_statement_type *file,
267                            callback_t callback,
268                            void *data)
269 {
270   asection *s;
271   struct wildcard_list *sec;
272
273   for (s = file->the_bfd->sections; s != NULL; s = s->next)
274     {
275       sec = ptr->section_list;
276       if (sec == NULL)
277         (*callback) (ptr, sec, s, file, data);
278
279       while (sec != NULL)
280         {
281           bfd_boolean skip = FALSE;
282
283           if (sec->spec.name != NULL)
284             {
285               const char *sname = bfd_get_section_name (file->the_bfd, s);
286
287               skip = name_match (sec->spec.name, sname) != 0;
288             }
289
290           if (!skip)
291             walk_wild_consider_section (ptr, file, s, sec, callback, data);
292
293           sec = sec->next;
294         }
295     }
296 }
297
298 /* Routines to find a single section given its name.  If there's more
299    than one section with that name, we report that.  */
300
301 typedef struct
302 {
303   asection *found_section;
304   bfd_boolean multiple_sections_found;
305 } section_iterator_callback_data;
306
307 static bfd_boolean
308 section_iterator_callback (bfd *bfd ATTRIBUTE_UNUSED, asection *s, void *data)
309 {
310   section_iterator_callback_data *d = data;
311
312   if (d->found_section != NULL)
313     {
314       d->multiple_sections_found = TRUE;
315       return TRUE;
316     }
317
318   d->found_section = s;
319   return FALSE;
320 }
321
322 static asection *
323 find_section (lang_input_statement_type *file,
324               struct wildcard_list *sec,
325               bfd_boolean *multiple_sections_found)
326 {
327   section_iterator_callback_data cb_data = { NULL, FALSE };
328
329   bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
330                               section_iterator_callback, &cb_data);
331   *multiple_sections_found = cb_data.multiple_sections_found;
332   return cb_data.found_section;
333 }
334
335 /* Code for handling simple wildcards without going through fnmatch,
336    which can be expensive because of charset translations etc.  */
337
338 /* A simple wild is a literal string followed by a single '*',
339    where the literal part is at least 4 characters long.  */
340
341 static bfd_boolean
342 is_simple_wild (const char *name)
343 {
344   size_t len = strcspn (name, "*?[");
345   return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
346 }
347
348 static bfd_boolean
349 match_simple_wild (const char *pattern, const char *name)
350 {
351   /* The first four characters of the pattern are guaranteed valid
352      non-wildcard characters.  So we can go faster.  */
353   if (pattern[0] != name[0] || pattern[1] != name[1]
354       || pattern[2] != name[2] || pattern[3] != name[3])
355     return FALSE;
356
357   pattern += 4;
358   name += 4;
359   while (*pattern != '*')
360     if (*name++ != *pattern++)
361       return FALSE;
362
363   return TRUE;
364 }
365
366 /* Compare sections ASEC and BSEC according to SORT.  */
367
368 static int
369 compare_section (sort_type sort, asection *asec, asection *bsec)
370 {
371   int ret;
372
373   switch (sort)
374     {
375     default:
376       abort ();
377
378     case by_alignment_name:
379       ret = (bfd_section_alignment (bsec->owner, bsec)
380              - bfd_section_alignment (asec->owner, asec));
381       if (ret)
382         break;
383       /* Fall through.  */
384
385     case by_name:
386       ret = strcmp (bfd_get_section_name (asec->owner, asec),
387                     bfd_get_section_name (bsec->owner, bsec));
388       break;
389
390     case by_name_alignment:
391       ret = strcmp (bfd_get_section_name (asec->owner, asec),
392                     bfd_get_section_name (bsec->owner, bsec));
393       if (ret)
394         break;
395       /* Fall through.  */
396
397     case by_alignment:
398       ret = (bfd_section_alignment (bsec->owner, bsec)
399              - bfd_section_alignment (asec->owner, asec));
400       break;
401     }
402
403   return ret;
404 }
405
406 /* Build a Binary Search Tree to sort sections, unlike insertion sort
407    used in wild_sort(). BST is considerably faster if the number of
408    of sections are large.  */
409
410 static lang_section_bst_type **
411 wild_sort_fast (lang_wild_statement_type *wild,
412                 struct wildcard_list *sec,
413                 lang_input_statement_type *file ATTRIBUTE_UNUSED,
414                 asection *section)
415 {
416   lang_section_bst_type **tree;
417
418   tree = &wild->tree;
419   if (!wild->filenames_sorted
420       && (sec == NULL || sec->spec.sorted == none))
421     {
422       /* Append at the right end of tree.  */
423       while (*tree)
424         tree = &((*tree)->right);
425       return tree;
426     }
427
428   while (*tree)
429     {
430       /* Find the correct node to append this section.  */
431       if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
432         tree = &((*tree)->left);
433       else
434         tree = &((*tree)->right);
435     }
436
437   return tree;
438 }
439
440 /* Use wild_sort_fast to build a BST to sort sections.  */
441
442 static void
443 output_section_callback_fast (lang_wild_statement_type *ptr,
444                               struct wildcard_list *sec,
445                               asection *section,
446                               lang_input_statement_type *file,
447                               void *output ATTRIBUTE_UNUSED)
448 {
449   lang_section_bst_type *node;
450   lang_section_bst_type **tree;
451
452   if (unique_section_p (section))
453     return;
454
455   node = xmalloc (sizeof (lang_section_bst_type));
456   node->left = 0;
457   node->right = 0;
458   node->section = section;
459
460   tree = wild_sort_fast (ptr, sec, file, section);
461   if (tree != NULL)
462     *tree = node;
463 }
464
465 /* Convert a sorted sections' BST back to list form.  */
466
467 static void
468 output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
469                                       lang_section_bst_type *tree,
470                                       void *output)
471 {
472   if (tree->left)
473     output_section_callback_tree_to_list (ptr, tree->left, output);
474
475   lang_add_section (&ptr->children, tree->section,
476                     (lang_output_section_statement_type *) output);
477
478   if (tree->right)
479     output_section_callback_tree_to_list (ptr, tree->right, output);
480
481   free (tree);
482 }
483
484 /* Specialized, optimized routines for handling different kinds of
485    wildcards */
486
487 static void
488 walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
489                                 lang_input_statement_type *file,
490                                 callback_t callback,
491                                 void *data)
492 {
493   /* We can just do a hash lookup for the section with the right name.
494      But if that lookup discovers more than one section with the name
495      (should be rare), we fall back to the general algorithm because
496      we would otherwise have to sort the sections to make sure they
497      get processed in the bfd's order.  */
498   bfd_boolean multiple_sections_found;
499   struct wildcard_list *sec0 = ptr->handler_data[0];
500   asection *s0 = find_section (file, sec0, &multiple_sections_found);
501
502   if (multiple_sections_found)
503     walk_wild_section_general (ptr, file, callback, data);
504   else if (s0)
505     walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
506 }
507
508 static void
509 walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
510                                 lang_input_statement_type *file,
511                                 callback_t callback,
512                                 void *data)
513 {
514   asection *s;
515   struct wildcard_list *wildsec0 = ptr->handler_data[0];
516
517   for (s = file->the_bfd->sections; s != NULL; s = s->next)
518     {
519       const char *sname = bfd_get_section_name (file->the_bfd, s);
520       bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
521
522       if (!skip)
523         walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
524     }
525 }
526
527 static void
528 walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
529                                 lang_input_statement_type *file,
530                                 callback_t callback,
531                                 void *data)
532 {
533   asection *s;
534   struct wildcard_list *sec0 = ptr->handler_data[0];
535   struct wildcard_list *wildsec1 = ptr->handler_data[1];
536   bfd_boolean multiple_sections_found;
537   asection *s0 = find_section (file, sec0, &multiple_sections_found);
538
539   if (multiple_sections_found)
540     {
541       walk_wild_section_general (ptr, file, callback, data);
542       return;
543     }
544
545   /* Note that if the section was not found, s0 is NULL and
546      we'll simply never succeed the s == s0 test below.  */
547   for (s = file->the_bfd->sections; s != NULL; s = s->next)
548     {
549       /* Recall that in this code path, a section cannot satisfy more
550          than one spec, so if s == s0 then it cannot match
551          wildspec1.  */
552       if (s == s0)
553         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
554       else
555         {
556           const char *sname = bfd_get_section_name (file->the_bfd, s);
557           bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
558
559           if (!skip)
560             walk_wild_consider_section (ptr, file, s, wildsec1, callback,
561                                         data);
562         }
563     }
564 }
565
566 static void
567 walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
568                                 lang_input_statement_type *file,
569                                 callback_t callback,
570                                 void *data)
571 {
572   asection *s;
573   struct wildcard_list *sec0 = ptr->handler_data[0];
574   struct wildcard_list *wildsec1 = ptr->handler_data[1];
575   struct wildcard_list *wildsec2 = ptr->handler_data[2];
576   bfd_boolean multiple_sections_found;
577   asection *s0 = find_section (file, sec0, &multiple_sections_found);
578
579   if (multiple_sections_found)
580     {
581       walk_wild_section_general (ptr, file, callback, data);
582       return;
583     }
584
585   for (s = file->the_bfd->sections; s != NULL; s = s->next)
586     {
587       if (s == s0)
588         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
589       else
590         {
591           const char *sname = bfd_get_section_name (file->the_bfd, s);
592           bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
593
594           if (!skip)
595             walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
596           else
597             {
598               skip = !match_simple_wild (wildsec2->spec.name, sname);
599               if (!skip)
600                 walk_wild_consider_section (ptr, file, s, wildsec2, callback,
601                                             data);
602             }
603         }
604     }
605 }
606
607 static void
608 walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
609                                 lang_input_statement_type *file,
610                                 callback_t callback,
611                                 void *data)
612 {
613   asection *s;
614   struct wildcard_list *sec0 = ptr->handler_data[0];
615   struct wildcard_list *sec1 = ptr->handler_data[1];
616   struct wildcard_list *wildsec2 = ptr->handler_data[2];
617   struct wildcard_list *wildsec3 = ptr->handler_data[3];
618   bfd_boolean multiple_sections_found;
619   asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
620
621   if (multiple_sections_found)
622     {
623       walk_wild_section_general (ptr, file, callback, data);
624       return;
625     }
626
627   s1 = find_section (file, sec1, &multiple_sections_found);
628   if (multiple_sections_found)
629     {
630       walk_wild_section_general (ptr, file, callback, data);
631       return;
632     }
633
634   for (s = file->the_bfd->sections; s != NULL; s = s->next)
635     {
636       if (s == s0)
637         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
638       else
639         if (s == s1)
640           walk_wild_consider_section (ptr, file, s, sec1, callback, data);
641         else
642           {
643             const char *sname = bfd_get_section_name (file->the_bfd, s);
644             bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
645                                                    sname);
646
647             if (!skip)
648               walk_wild_consider_section (ptr, file, s, wildsec2, callback,
649                                           data);
650             else
651               {
652                 skip = !match_simple_wild (wildsec3->spec.name, sname);
653                 if (!skip)
654                   walk_wild_consider_section (ptr, file, s, wildsec3,
655                                               callback, data);
656               }
657           }
658     }
659 }
660
661 static void
662 walk_wild_section (lang_wild_statement_type *ptr,
663                    lang_input_statement_type *file,
664                    callback_t callback,
665                    void *data)
666 {
667   if (file->just_syms_flag)
668     return;
669
670   (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
671 }
672
673 /* Returns TRUE when name1 is a wildcard spec that might match
674    something name2 can match.  We're conservative: we return FALSE
675    only if the prefixes of name1 and name2 are different up to the
676    first wildcard character.  */
677
678 static bfd_boolean
679 wild_spec_can_overlap (const char *name1, const char *name2)
680 {
681   size_t prefix1_len = strcspn (name1, "?*[");
682   size_t prefix2_len = strcspn (name2, "?*[");
683   size_t min_prefix_len;
684
685   /* Note that if there is no wildcard character, then we treat the
686      terminating 0 as part of the prefix.  Thus ".text" won't match
687      ".text." or ".text.*", for example.  */
688   if (name1[prefix1_len] == '\0')
689     prefix1_len++;
690   if (name2[prefix2_len] == '\0')
691     prefix2_len++;
692
693   min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
694
695   return memcmp (name1, name2, min_prefix_len) == 0;
696 }
697
698 /* Select specialized code to handle various kinds of wildcard
699    statements.  */
700
701 static void
702 analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
703 {
704   int sec_count = 0;
705   int wild_name_count = 0;
706   struct wildcard_list *sec;
707   int signature;
708   int data_counter;
709
710   ptr->walk_wild_section_handler = walk_wild_section_general;
711   ptr->handler_data[0] = NULL;
712   ptr->handler_data[1] = NULL;
713   ptr->handler_data[2] = NULL;
714   ptr->handler_data[3] = NULL;
715   ptr->tree = NULL;
716
717   /* Count how many wildcard_specs there are, and how many of those
718      actually use wildcards in the name.  Also, bail out if any of the
719      wildcard names are NULL. (Can this actually happen?
720      walk_wild_section used to test for it.)  And bail out if any
721      of the wildcards are more complex than a simple string
722      ending in a single '*'.  */
723   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
724     {
725       ++sec_count;
726       if (sec->spec.name == NULL)
727         return;
728       if (wildcardp (sec->spec.name))
729         {
730           ++wild_name_count;
731           if (!is_simple_wild (sec->spec.name))
732             return;
733         }
734     }
735
736   /* The zero-spec case would be easy to optimize but it doesn't
737      happen in practice.  Likewise, more than 4 specs doesn't
738      happen in practice.  */
739   if (sec_count == 0 || sec_count > 4)
740     return;
741
742   /* Check that no two specs can match the same section.  */
743   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
744     {
745       struct wildcard_list *sec2;
746       for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
747         {
748           if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
749             return;
750         }
751     }
752
753   signature = (sec_count << 8) + wild_name_count;
754   switch (signature)
755     {
756     case 0x0100:
757       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
758       break;
759     case 0x0101:
760       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
761       break;
762     case 0x0201:
763       ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
764       break;
765     case 0x0302:
766       ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
767       break;
768     case 0x0402:
769       ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
770       break;
771     default:
772       return;
773     }
774
775   /* Now fill the data array with pointers to the specs, first the
776      specs with non-wildcard names, then the specs with wildcard
777      names.  It's OK to process the specs in different order from the
778      given order, because we've already determined that no section
779      will match more than one spec.  */
780   data_counter = 0;
781   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
782     if (!wildcardp (sec->spec.name))
783       ptr->handler_data[data_counter++] = sec;
784   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
785     if (wildcardp (sec->spec.name))
786       ptr->handler_data[data_counter++] = sec;
787 }
788
789 /* Handle a wild statement for a single file F.  */
790
791 static void
792 walk_wild_file (lang_wild_statement_type *s,
793                 lang_input_statement_type *f,
794                 callback_t callback,
795                 void *data)
796 {
797   if (f->the_bfd == NULL
798       || ! bfd_check_format (f->the_bfd, bfd_archive))
799     walk_wild_section (s, f, callback, data);
800   else
801     {
802       bfd *member;
803
804       /* This is an archive file.  We must map each member of the
805          archive separately.  */
806       member = bfd_openr_next_archived_file (f->the_bfd, NULL);
807       while (member != NULL)
808         {
809           /* When lookup_name is called, it will call the add_symbols
810              entry point for the archive.  For each element of the
811              archive which is included, BFD will call ldlang_add_file,
812              which will set the usrdata field of the member to the
813              lang_input_statement.  */
814           if (member->usrdata != NULL)
815             {
816               walk_wild_section (s, member->usrdata, callback, data);
817             }
818
819           member = bfd_openr_next_archived_file (f->the_bfd, member);
820         }
821     }
822 }
823
824 static void
825 walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
826 {
827   const char *file_spec = s->filename;
828   char *p;
829
830   if (file_spec == NULL)
831     {
832       /* Perform the iteration over all files in the list.  */
833       LANG_FOR_EACH_INPUT_STATEMENT (f)
834         {
835           walk_wild_file (s, f, callback, data);
836         }
837     }
838   else if ((p = archive_path (file_spec)) != NULL)
839     {
840       LANG_FOR_EACH_INPUT_STATEMENT (f)
841         {
842           if (input_statement_is_archive_path (file_spec, p, f))
843             walk_wild_file (s, f, callback, data);
844         }
845     }
846   else if (wildcardp (file_spec))
847     {
848       LANG_FOR_EACH_INPUT_STATEMENT (f)
849         {
850           if (fnmatch (file_spec, f->filename, 0) == 0)
851             walk_wild_file (s, f, callback, data);
852         }
853     }
854   else
855     {
856       lang_input_statement_type *f;
857
858       /* Perform the iteration over a single file.  */
859       f = lookup_name (file_spec);
860       if (f)
861         walk_wild_file (s, f, callback, data);
862     }
863 }
864
865 /* lang_for_each_statement walks the parse tree and calls the provided
866    function for each node.  */
867
868 static void
869 lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
870                                 lang_statement_union_type *s)
871 {
872   for (; s != NULL; s = s->header.next)
873     {
874       func (s);
875
876       switch (s->header.type)
877         {
878         case lang_constructors_statement_enum:
879           lang_for_each_statement_worker (func, constructor_list.head);
880           break;
881         case lang_output_section_statement_enum:
882           lang_for_each_statement_worker
883             (func, s->output_section_statement.children.head);
884           break;
885         case lang_wild_statement_enum:
886           lang_for_each_statement_worker (func,
887                                           s->wild_statement.children.head);
888           break;
889         case lang_group_statement_enum:
890           lang_for_each_statement_worker (func,
891                                           s->group_statement.children.head);
892           break;
893         case lang_data_statement_enum:
894         case lang_reloc_statement_enum:
895         case lang_object_symbols_statement_enum:
896         case lang_output_statement_enum:
897         case lang_target_statement_enum:
898         case lang_input_section_enum:
899         case lang_input_statement_enum:
900         case lang_assignment_statement_enum:
901         case lang_padding_statement_enum:
902         case lang_address_statement_enum:
903         case lang_fill_statement_enum:
904         case lang_insert_statement_enum:
905           break;
906         default:
907           FAIL ();
908           break;
909         }
910     }
911 }
912
913 void
914 lang_for_each_statement (void (*func) (lang_statement_union_type *))
915 {
916   lang_for_each_statement_worker (func, statement_list.head);
917 }
918
919 /*----------------------------------------------------------------------*/
920
921 void
922 lang_list_init (lang_statement_list_type *list)
923 {
924   list->head = NULL;
925   list->tail = &list->head;
926 }
927
928 /* Build a new statement node for the parse tree.  */
929
930 static lang_statement_union_type *
931 new_statement (enum statement_enum type,
932                size_t size,
933                lang_statement_list_type *list)
934 {
935   lang_statement_union_type *new;
936
937   new = stat_alloc (size);
938   new->header.type = type;
939   new->header.next = NULL;
940   lang_statement_append (list, new, &new->header.next);
941   return new;
942 }
943
944 /* Build a new input file node for the language.  There are several
945    ways in which we treat an input file, eg, we only look at symbols,
946    or prefix it with a -l etc.
947
948    We can be supplied with requests for input files more than once;
949    they may, for example be split over several lines like foo.o(.text)
950    foo.o(.data) etc, so when asked for a file we check that we haven't
951    got it already so we don't duplicate the bfd.  */
952
953 static lang_input_statement_type *
954 new_afile (const char *name,
955            lang_input_file_enum_type file_type,
956            const char *target,
957            bfd_boolean add_to_list)
958 {
959   lang_input_statement_type *p;
960
961   if (add_to_list)
962     p = new_stat (lang_input_statement, stat_ptr);
963   else
964     {
965       p = stat_alloc (sizeof (lang_input_statement_type));
966       p->header.type = lang_input_statement_enum;
967       p->header.next = NULL;
968     }
969
970   lang_has_input_file = TRUE;
971   p->target = target;
972   p->sysrooted = FALSE;
973
974   if (file_type == lang_input_file_is_l_enum
975       && name[0] == ':' && name[1] != '\0')
976     {
977       file_type = lang_input_file_is_search_file_enum;
978       name = name + 1;
979     }
980
981   switch (file_type)
982     {
983     case lang_input_file_is_symbols_only_enum:
984       p->filename = name;
985       p->is_archive = FALSE;
986       p->real = TRUE;
987       p->local_sym_name = name;
988       p->just_syms_flag = TRUE;
989       p->search_dirs_flag = FALSE;
990       break;
991     case lang_input_file_is_fake_enum:
992       p->filename = name;
993       p->is_archive = FALSE;
994       p->real = FALSE;
995       p->local_sym_name = name;
996       p->just_syms_flag = FALSE;
997       p->search_dirs_flag = FALSE;
998       break;
999     case lang_input_file_is_l_enum:
1000       p->is_archive = TRUE;
1001       p->filename = name;
1002       p->real = TRUE;
1003       p->local_sym_name = concat ("-l", name, (const char *) NULL);
1004       p->just_syms_flag = FALSE;
1005       p->search_dirs_flag = TRUE;
1006       break;
1007     case lang_input_file_is_marker_enum:
1008       p->filename = name;
1009       p->is_archive = FALSE;
1010       p->real = FALSE;
1011       p->local_sym_name = name;
1012       p->just_syms_flag = FALSE;
1013       p->search_dirs_flag = TRUE;
1014       break;
1015     case lang_input_file_is_search_file_enum:
1016       p->sysrooted = ldlang_sysrooted_script;
1017       p->filename = name;
1018       p->is_archive = FALSE;
1019       p->real = TRUE;
1020       p->local_sym_name = name;
1021       p->just_syms_flag = FALSE;
1022       p->search_dirs_flag = TRUE;
1023       break;
1024     case lang_input_file_is_file_enum:
1025       p->filename = name;
1026       p->is_archive = FALSE;
1027       p->real = TRUE;
1028       p->local_sym_name = name;
1029       p->just_syms_flag = FALSE;
1030       p->search_dirs_flag = FALSE;
1031       break;
1032     default:
1033       FAIL ();
1034     }
1035   p->the_bfd = NULL;
1036   p->next_real_file = NULL;
1037   p->next = NULL;
1038   p->dynamic = config.dynamic_link;
1039   p->add_needed = add_needed;
1040   p->as_needed = as_needed;
1041   p->whole_archive = whole_archive;
1042   p->loaded = FALSE;
1043   lang_statement_append (&input_file_chain,
1044                          (lang_statement_union_type *) p,
1045                          &p->next_real_file);
1046   return p;
1047 }
1048
1049 lang_input_statement_type *
1050 lang_add_input_file (const char *name,
1051                      lang_input_file_enum_type file_type,
1052                      const char *target)
1053 {
1054   return new_afile (name, file_type, target, TRUE);
1055 }
1056
1057 struct out_section_hash_entry
1058 {
1059   struct bfd_hash_entry root;
1060   lang_statement_union_type s;
1061 };
1062
1063 /* The hash table.  */
1064
1065 static struct bfd_hash_table output_section_statement_table;
1066
1067 /* Support routines for the hash table used by lang_output_section_find,
1068    initialize the table, fill in an entry and remove the table.  */
1069
1070 static struct bfd_hash_entry *
1071 output_section_statement_newfunc (struct bfd_hash_entry *entry,
1072                                   struct bfd_hash_table *table,
1073                                   const char *string)
1074 {
1075   lang_output_section_statement_type **nextp;
1076   struct out_section_hash_entry *ret;
1077
1078   if (entry == NULL)
1079     {
1080       entry = bfd_hash_allocate (table, sizeof (*ret));
1081       if (entry == NULL)
1082         return entry;
1083     }
1084
1085   entry = bfd_hash_newfunc (entry, table, string);
1086   if (entry == NULL)
1087     return entry;
1088
1089   ret = (struct out_section_hash_entry *) entry;
1090   memset (&ret->s, 0, sizeof (ret->s));
1091   ret->s.header.type = lang_output_section_statement_enum;
1092   ret->s.output_section_statement.subsection_alignment = -1;
1093   ret->s.output_section_statement.section_alignment = -1;
1094   ret->s.output_section_statement.block_value = 1;
1095   lang_list_init (&ret->s.output_section_statement.children);
1096   lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
1097
1098   /* For every output section statement added to the list, except the
1099      first one, lang_output_section_statement.tail points to the "next"
1100      field of the last element of the list.  */
1101   if (lang_output_section_statement.head != NULL)
1102     ret->s.output_section_statement.prev
1103       = ((lang_output_section_statement_type *)
1104          ((char *) lang_output_section_statement.tail
1105           - offsetof (lang_output_section_statement_type, next)));
1106
1107   /* GCC's strict aliasing rules prevent us from just casting the
1108      address, so we store the pointer in a variable and cast that
1109      instead.  */
1110   nextp = &ret->s.output_section_statement.next;
1111   lang_statement_append (&lang_output_section_statement,
1112                          &ret->s,
1113                          (lang_statement_union_type **) nextp);
1114   return &ret->root;
1115 }
1116
1117 static void
1118 output_section_statement_table_init (void)
1119 {
1120   if (!bfd_hash_table_init_n (&output_section_statement_table,
1121                               output_section_statement_newfunc,
1122                               sizeof (struct out_section_hash_entry),
1123                               61))
1124     einfo (_("%P%F: can not create hash table: %E\n"));
1125 }
1126
1127 static void
1128 output_section_statement_table_free (void)
1129 {
1130   bfd_hash_table_free (&output_section_statement_table);
1131 }
1132
1133 /* Build enough state so that the parser can build its tree.  */
1134
1135 void
1136 lang_init (void)
1137 {
1138   obstack_begin (&stat_obstack, 1000);
1139
1140   stat_ptr = &statement_list;
1141
1142   output_section_statement_table_init ();
1143
1144   lang_list_init (stat_ptr);
1145
1146   lang_list_init (&input_file_chain);
1147   lang_list_init (&lang_output_section_statement);
1148   lang_list_init (&file_chain);
1149   first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
1150                                     NULL);
1151   abs_output_section =
1152     lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
1153
1154   abs_output_section->bfd_section = bfd_abs_section_ptr;
1155
1156   /* The value "3" is ad-hoc, somewhat related to the expected number of
1157      DEFINED expressions in a linker script.  For most default linker
1158      scripts, there are none.  Why a hash table then?  Well, it's somewhat
1159      simpler to re-use working machinery than using a linked list in terms
1160      of code-complexity here in ld, besides the initialization which just
1161      looks like other code here.  */
1162   if (!bfd_hash_table_init_n (&lang_definedness_table,
1163                               lang_definedness_newfunc,
1164                               sizeof (struct lang_definedness_hash_entry),
1165                               3))
1166     einfo (_("%P%F: can not create hash table: %E\n"));
1167 }
1168
1169 void
1170 lang_finish (void)
1171 {
1172   output_section_statement_table_free ();
1173 }
1174
1175 /*----------------------------------------------------------------------
1176   A region is an area of memory declared with the
1177   MEMORY {  name:org=exp, len=exp ... }
1178   syntax.
1179
1180   We maintain a list of all the regions here.
1181
1182   If no regions are specified in the script, then the default is used
1183   which is created when looked up to be the entire data space.
1184
1185   If create is true we are creating a region inside a MEMORY block.
1186   In this case it is probably an error to create a region that has
1187   already been created.  If we are not inside a MEMORY block it is
1188   dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
1189   and so we issue a warning.  */
1190
1191 static lang_memory_region_type *lang_memory_region_list;
1192 static lang_memory_region_type **lang_memory_region_list_tail
1193   = &lang_memory_region_list;
1194
1195 lang_memory_region_type *
1196 lang_memory_region_lookup (const char *const name, bfd_boolean create)
1197 {
1198   lang_memory_region_type *p;
1199   lang_memory_region_type *new;
1200
1201   /* NAME is NULL for LMA memspecs if no region was specified.  */
1202   if (name == NULL)
1203     return NULL;
1204
1205   for (p = lang_memory_region_list; p != NULL; p = p->next)
1206     if (strcmp (p->name, name) == 0)
1207       {
1208         if (create)
1209           einfo (_("%P:%S: warning: redeclaration of memory region '%s'\n"),
1210                  name);
1211         return p;
1212       }
1213
1214   if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
1215     einfo (_("%P:%S: warning: memory region %s not declared\n"), name);
1216
1217   new = stat_alloc (sizeof (lang_memory_region_type));
1218
1219   new->name = xstrdup (name);
1220   new->next = NULL;
1221   new->origin = 0;
1222   new->length = ~(bfd_size_type) 0;
1223   new->current = 0;
1224   new->last_os = NULL;
1225   new->flags = 0;
1226   new->not_flags = 0;
1227   new->had_full_message = FALSE;
1228
1229   *lang_memory_region_list_tail = new;
1230   lang_memory_region_list_tail = &new->next;
1231
1232   return new;
1233 }
1234
1235 static lang_memory_region_type *
1236 lang_memory_default (asection *section)
1237 {
1238   lang_memory_region_type *p;
1239
1240   flagword sec_flags = section->flags;
1241
1242   /* Override SEC_DATA to mean a writable section.  */
1243   if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
1244     sec_flags |= SEC_DATA;
1245
1246   for (p = lang_memory_region_list; p != NULL; p = p->next)
1247     {
1248       if ((p->flags & sec_flags) != 0
1249           && (p->not_flags & sec_flags) == 0)
1250         {
1251           return p;
1252         }
1253     }
1254   return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
1255 }
1256
1257 lang_output_section_statement_type *
1258 lang_output_section_statement_lookup (const char *const name,
1259                                       int constraint,
1260                                       bfd_boolean create)
1261 {
1262   struct out_section_hash_entry *entry;
1263
1264   entry = ((struct out_section_hash_entry *)
1265            bfd_hash_lookup (&output_section_statement_table, name,
1266                             create, FALSE));
1267   if (entry == NULL)
1268     {
1269       if (create)
1270         einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1271       return NULL;
1272     }
1273
1274   if (entry->s.output_section_statement.name != NULL)
1275     {
1276       /* We have a section of this name, but it might not have the correct
1277          constraint.  */
1278       struct out_section_hash_entry *last_ent;
1279       unsigned long hash = entry->root.hash;
1280
1281       if (create && constraint == SPECIAL)
1282         /* Not traversing to the end reverses the order of the second
1283            and subsequent SPECIAL sections in the hash table chain,
1284            but that shouldn't matter.  */
1285         last_ent = entry;
1286       else
1287         do
1288           {
1289             if (entry->s.output_section_statement.constraint >= 0
1290                 && (constraint == 0
1291                     || (constraint
1292                         == entry->s.output_section_statement.constraint)))
1293               return &entry->s.output_section_statement;
1294             last_ent = entry;
1295             entry = (struct out_section_hash_entry *) entry->root.next;
1296           }
1297         while (entry != NULL
1298                && entry->root.hash == hash
1299                && strcmp (name, entry->s.output_section_statement.name) == 0);
1300
1301       if (!create)
1302         return NULL;
1303
1304       entry
1305         = ((struct out_section_hash_entry *)
1306            output_section_statement_newfunc (NULL,
1307                                              &output_section_statement_table,
1308                                              name));
1309       if (entry == NULL)
1310         {
1311           einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1312           return NULL;
1313         }
1314       entry->root = last_ent->root;
1315       last_ent->root.next = &entry->root;
1316     }
1317
1318   entry->s.output_section_statement.name = name;
1319   entry->s.output_section_statement.constraint = constraint;
1320   return &entry->s.output_section_statement;
1321 }
1322
1323 /* A variant of lang_output_section_find used by place_orphan.
1324    Returns the output statement that should precede a new output
1325    statement for SEC.  If an exact match is found on certain flags,
1326    sets *EXACT too.  */
1327
1328 lang_output_section_statement_type *
1329 lang_output_section_find_by_flags (const asection *sec,
1330                                    lang_output_section_statement_type **exact,
1331                                    lang_match_sec_type_func match_type)
1332 {
1333   lang_output_section_statement_type *first, *look, *found;
1334   flagword flags;
1335
1336   /* We know the first statement on this list is *ABS*.  May as well
1337      skip it.  */
1338   first = &lang_output_section_statement.head->output_section_statement;
1339   first = first->next;
1340
1341   /* First try for an exact match.  */
1342   found = NULL;
1343   for (look = first; look; look = look->next)
1344     {
1345       flags = look->flags;
1346       if (look->bfd_section != NULL)
1347         {
1348           flags = look->bfd_section->flags;
1349           if (match_type && !match_type (link_info.output_bfd,
1350                                          look->bfd_section,
1351                                          sec->owner, sec))
1352             continue;
1353         }
1354       flags ^= sec->flags;
1355       if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1356                      | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1357         found = look;
1358     }
1359   if (found != NULL)
1360     {
1361       if (exact != NULL)
1362         *exact = found;
1363       return found;
1364     }
1365
1366   if (sec->flags & SEC_CODE)
1367     {
1368       /* Try for a rw code section.  */
1369       for (look = first; look; look = look->next)
1370         {
1371           flags = look->flags;
1372           if (look->bfd_section != NULL)
1373             {
1374               flags = look->bfd_section->flags;
1375               if (match_type && !match_type (link_info.output_bfd,
1376                                              look->bfd_section,
1377                                              sec->owner, sec))
1378                 continue;
1379             }
1380           flags ^= sec->flags;
1381           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1382                          | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1383             found = look;
1384         }
1385     }
1386   else if (sec->flags & (SEC_READONLY | SEC_THREAD_LOCAL))
1387     {
1388       /* .rodata can go after .text, .sdata2 after .rodata.  */
1389       for (look = first; look; look = look->next)
1390         {
1391           flags = look->flags;
1392           if (look->bfd_section != NULL)
1393             {
1394               flags = look->bfd_section->flags;
1395               if (match_type && !match_type (link_info.output_bfd,
1396                                              look->bfd_section,
1397                                              sec->owner, sec))
1398                 continue;
1399             }
1400           flags ^= sec->flags;
1401           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1402                          | SEC_READONLY))
1403               && !(look->flags & (SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1404             found = look;
1405         }
1406     }
1407   else if (sec->flags & SEC_SMALL_DATA)
1408     {
1409       /* .sdata goes after .data, .sbss after .sdata.  */
1410       for (look = first; look; look = look->next)
1411         {
1412           flags = look->flags;
1413           if (look->bfd_section != NULL)
1414             {
1415               flags = look->bfd_section->flags;
1416               if (match_type && !match_type (link_info.output_bfd,
1417                                              look->bfd_section,
1418                                              sec->owner, sec))
1419                 continue;
1420             }
1421           flags ^= sec->flags;
1422           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1423                          | SEC_THREAD_LOCAL))
1424               || ((look->flags & SEC_SMALL_DATA)
1425                   && !(sec->flags & SEC_HAS_CONTENTS)))
1426             found = look;
1427         }
1428     }
1429   else if (sec->flags & SEC_HAS_CONTENTS)
1430     {
1431       /* .data goes after .rodata.  */
1432       for (look = first; look; look = look->next)
1433         {
1434           flags = look->flags;
1435           if (look->bfd_section != NULL)
1436             {
1437               flags = look->bfd_section->flags;
1438               if (match_type && !match_type (link_info.output_bfd,
1439                                              look->bfd_section,
1440                                              sec->owner, sec))
1441                 continue;
1442             }
1443           flags ^= sec->flags;
1444           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1445                          | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1446             found = look;
1447         }
1448     }
1449   else
1450     {
1451       /* .bss goes last.  */
1452       for (look = first; look; look = look->next)
1453         {
1454           flags = look->flags;
1455           if (look->bfd_section != NULL)
1456             {
1457               flags = look->bfd_section->flags;
1458               if (match_type && !match_type (link_info.output_bfd,
1459                                              look->bfd_section,
1460                                              sec->owner, sec))
1461                 continue;
1462             }
1463           flags ^= sec->flags;
1464           if (!(flags & SEC_ALLOC))
1465             found = look;
1466         }
1467     }
1468
1469   if (found || !match_type)
1470     return found;
1471
1472   return lang_output_section_find_by_flags (sec, NULL, NULL);
1473 }
1474
1475 /* Find the last output section before given output statement.
1476    Used by place_orphan.  */
1477
1478 static asection *
1479 output_prev_sec_find (lang_output_section_statement_type *os)
1480 {
1481   lang_output_section_statement_type *lookup;
1482
1483   for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
1484     {
1485       if (lookup->constraint < 0)
1486         continue;
1487
1488       if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1489         return lookup->bfd_section;
1490     }
1491
1492   return NULL;
1493 }
1494
1495 /* Look for a suitable place for a new output section statement.  The
1496    idea is to skip over anything that might be inside a SECTIONS {}
1497    statement in a script, before we find another output section
1498    statement.  Assignments to "dot" before an output section statement
1499    are assumed to belong to it.  An exception to this rule is made for
1500    the first assignment to dot, otherwise we might put an orphan
1501    before . = . + SIZEOF_HEADERS or similar assignments that set the
1502    initial address.  */
1503
1504 static lang_statement_union_type **
1505 insert_os_after (lang_output_section_statement_type *after)
1506 {
1507   lang_statement_union_type **where;
1508   lang_statement_union_type **assign = NULL;
1509   bfd_boolean ignore_first;
1510
1511   ignore_first
1512     = after == &lang_output_section_statement.head->output_section_statement;
1513
1514   for (where = &after->header.next;
1515        *where != NULL;
1516        where = &(*where)->header.next)
1517     {
1518       switch ((*where)->header.type)
1519         {
1520         case lang_assignment_statement_enum:
1521           if (assign == NULL)
1522             {
1523               lang_assignment_statement_type *ass;
1524
1525               ass = &(*where)->assignment_statement;
1526               if (ass->exp->type.node_class != etree_assert
1527                   && ass->exp->assign.dst[0] == '.'
1528                   && ass->exp->assign.dst[1] == 0
1529                   && !ignore_first)
1530                 assign = where;
1531             }
1532           ignore_first = FALSE;
1533           continue;
1534         case lang_wild_statement_enum:
1535         case lang_input_section_enum:
1536         case lang_object_symbols_statement_enum:
1537         case lang_fill_statement_enum:
1538         case lang_data_statement_enum:
1539         case lang_reloc_statement_enum:
1540         case lang_padding_statement_enum:
1541         case lang_constructors_statement_enum:
1542           assign = NULL;
1543           continue;
1544         case lang_output_section_statement_enum:
1545           if (assign != NULL)
1546             where = assign;
1547           break;
1548         case lang_input_statement_enum:
1549         case lang_address_statement_enum:
1550         case lang_target_statement_enum:
1551         case lang_output_statement_enum:
1552         case lang_group_statement_enum:
1553         case lang_insert_statement_enum:
1554           continue;
1555         }
1556       break;
1557     }
1558
1559   return where;
1560 }
1561
1562 lang_output_section_statement_type *
1563 lang_insert_orphan (asection *s,
1564                     const char *secname,
1565                     int constraint,
1566                     lang_output_section_statement_type *after,
1567                     struct orphan_save *place,
1568                     etree_type *address,
1569                     lang_statement_list_type *add_child)
1570 {
1571   lang_statement_list_type *old;
1572   lang_statement_list_type add;
1573   const char *ps;
1574   lang_output_section_statement_type *os;
1575   lang_output_section_statement_type **os_tail;
1576
1577   /* Start building a list of statements for this section.
1578      First save the current statement pointer.  */
1579   old = stat_ptr;
1580
1581   /* If we have found an appropriate place for the output section
1582      statements for this orphan, add them to our own private list,
1583      inserting them later into the global statement list.  */
1584   if (after != NULL)
1585     {
1586       stat_ptr = &add;
1587       lang_list_init (stat_ptr);
1588     }
1589
1590   ps = NULL;
1591   if (config.build_constructors)
1592     {
1593       /* If the name of the section is representable in C, then create
1594          symbols to mark the start and the end of the section.  */
1595       for (ps = secname; *ps != '\0'; ps++)
1596         if (! ISALNUM ((unsigned char) *ps) && *ps != '_')
1597           break;
1598       if (*ps == '\0')
1599         {
1600           char *symname;
1601           etree_type *e_align;
1602
1603           symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1604           symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1605           sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1606           e_align = exp_unop (ALIGN_K,
1607                               exp_intop ((bfd_vma) 1 << s->alignment_power));
1608           lang_add_assignment (exp_assop ('=', ".", e_align));
1609           lang_add_assignment (exp_provide (symname,
1610                                             exp_nameop (NAME, "."),
1611                                             FALSE));
1612         }
1613     }
1614
1615   if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1616     address = exp_intop (0);
1617
1618   os_tail = ((lang_output_section_statement_type **)
1619              lang_output_section_statement.tail);
1620   os = lang_enter_output_section_statement (secname, address, 0, NULL, NULL,
1621                                             NULL, constraint);
1622
1623   if (add_child == NULL)
1624     add_child = &os->children;
1625   lang_add_section (add_child, s, os);
1626
1627   lang_leave_output_section_statement (0, "*default*", NULL, NULL);
1628
1629   if (config.build_constructors && *ps == '\0')
1630     {
1631       char *symname;
1632
1633       /* lang_leave_ouput_section_statement resets stat_ptr.
1634          Put stat_ptr back where we want it.  */
1635       if (after != NULL)
1636         stat_ptr = &add;
1637
1638       symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
1639       symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1640       sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
1641       lang_add_assignment (exp_provide (symname,
1642                                         exp_nameop (NAME, "."),
1643                                         FALSE));
1644     }
1645
1646   /* Restore the global list pointer.  */
1647   if (after != NULL)
1648     stat_ptr = old;
1649
1650   if (after != NULL && os->bfd_section != NULL)
1651     {
1652       asection *snew, *as;
1653
1654       snew = os->bfd_section;
1655
1656       /* Shuffle the bfd section list to make the output file look
1657          neater.  This is really only cosmetic.  */
1658       if (place->section == NULL
1659           && after != (&lang_output_section_statement.head
1660                        ->output_section_statement))
1661         {
1662           asection *bfd_section = after->bfd_section;
1663
1664           /* If the output statement hasn't been used to place any input
1665              sections (and thus doesn't have an output bfd_section),
1666              look for the closest prior output statement having an
1667              output section.  */
1668           if (bfd_section == NULL)
1669             bfd_section = output_prev_sec_find (after);
1670
1671           if (bfd_section != NULL && bfd_section != snew)
1672             place->section = &bfd_section->next;
1673         }
1674
1675       if (place->section == NULL)
1676         place->section = &link_info.output_bfd->sections;
1677
1678       as = *place->section;
1679
1680       if (!as)
1681         {
1682           /* Put the section at the end of the list.  */
1683
1684           /* Unlink the section.  */
1685           bfd_section_list_remove (link_info.output_bfd, snew);
1686
1687           /* Now tack it back on in the right place.  */
1688           bfd_section_list_append (link_info.output_bfd, snew);
1689         }
1690       else if (as != snew && as->prev != snew)
1691         {
1692           /* Unlink the section.  */
1693           bfd_section_list_remove (link_info.output_bfd, snew);
1694
1695           /* Now tack it back on in the right place.  */
1696           bfd_section_list_insert_before (link_info.output_bfd, as, snew);
1697         }
1698
1699       /* Save the end of this list.  Further ophans of this type will
1700          follow the one we've just added.  */
1701       place->section = &snew->next;
1702
1703       /* The following is non-cosmetic.  We try to put the output
1704          statements in some sort of reasonable order here, because they
1705          determine the final load addresses of the orphan sections.
1706          In addition, placing output statements in the wrong order may
1707          require extra segments.  For instance, given a typical
1708          situation of all read-only sections placed in one segment and
1709          following that a segment containing all the read-write
1710          sections, we wouldn't want to place an orphan read/write
1711          section before or amongst the read-only ones.  */
1712       if (add.head != NULL)
1713         {
1714           lang_output_section_statement_type *newly_added_os;
1715
1716           if (place->stmt == NULL)
1717             {
1718               lang_statement_union_type **where = insert_os_after (after);
1719
1720               *add.tail = *where;
1721               *where = add.head;
1722
1723               place->os_tail = &after->next;
1724             }
1725           else
1726             {
1727               /* Put it after the last orphan statement we added.  */
1728               *add.tail = *place->stmt;
1729               *place->stmt = add.head;
1730             }
1731
1732           /* Fix the global list pointer if we happened to tack our
1733              new list at the tail.  */
1734           if (*old->tail == add.head)
1735             old->tail = add.tail;
1736
1737           /* Save the end of this list.  */
1738           place->stmt = add.tail;
1739
1740           /* Do the same for the list of output section statements.  */
1741           newly_added_os = *os_tail;
1742           *os_tail = NULL;
1743           newly_added_os->prev = (lang_output_section_statement_type *)
1744             ((char *) place->os_tail
1745              - offsetof (lang_output_section_statement_type, next));
1746           newly_added_os->next = *place->os_tail;
1747           if (newly_added_os->next != NULL)
1748             newly_added_os->next->prev = newly_added_os;
1749           *place->os_tail = newly_added_os;
1750           place->os_tail = &newly_added_os->next;
1751
1752           /* Fixing the global list pointer here is a little different.
1753              We added to the list in lang_enter_output_section_statement,
1754              trimmed off the new output_section_statment above when
1755              assigning *os_tail = NULL, but possibly added it back in
1756              the same place when assigning *place->os_tail.  */
1757           if (*os_tail == NULL)
1758             lang_output_section_statement.tail
1759               = (lang_statement_union_type **) os_tail;
1760         }
1761     }
1762   return os;
1763 }
1764
1765 static void
1766 lang_map_flags (flagword flag)
1767 {
1768   if (flag & SEC_ALLOC)
1769     minfo ("a");
1770
1771   if (flag & SEC_CODE)
1772     minfo ("x");
1773
1774   if (flag & SEC_READONLY)
1775     minfo ("r");
1776
1777   if (flag & SEC_DATA)
1778     minfo ("w");
1779
1780   if (flag & SEC_LOAD)
1781     minfo ("l");
1782 }
1783
1784 void
1785 lang_map (void)
1786 {
1787   lang_memory_region_type *m;
1788   bfd_boolean dis_header_printed = FALSE;
1789   bfd *p;
1790
1791   LANG_FOR_EACH_INPUT_STATEMENT (file)
1792     {
1793       asection *s;
1794
1795       if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
1796           || file->just_syms_flag)
1797         continue;
1798
1799       for (s = file->the_bfd->sections; s != NULL; s = s->next)
1800         if ((s->output_section == NULL
1801              || s->output_section->owner != link_info.output_bfd)
1802             && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
1803           {
1804             if (! dis_header_printed)
1805               {
1806                 fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
1807                 dis_header_printed = TRUE;
1808               }
1809
1810             print_input_section (s);
1811           }
1812     }
1813
1814   minfo (_("\nMemory Configuration\n\n"));
1815   fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
1816            _("Name"), _("Origin"), _("Length"), _("Attributes"));
1817
1818   for (m = lang_memory_region_list; m != NULL; m = m->next)
1819     {
1820       char buf[100];
1821       int len;
1822
1823       fprintf (config.map_file, "%-16s ", m->name);
1824
1825       sprintf_vma (buf, m->origin);
1826       minfo ("0x%s ", buf);
1827       len = strlen (buf);
1828       while (len < 16)
1829         {
1830           print_space ();
1831           ++len;
1832         }
1833
1834       minfo ("0x%V", m->length);
1835       if (m->flags || m->not_flags)
1836         {
1837 #ifndef BFD64
1838           minfo ("        ");
1839 #endif
1840           if (m->flags)
1841             {
1842               print_space ();
1843               lang_map_flags (m->flags);
1844             }
1845
1846           if (m->not_flags)
1847             {
1848               minfo (" !");
1849               lang_map_flags (m->not_flags);
1850             }
1851         }
1852
1853       print_nl ();
1854     }
1855
1856   fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
1857
1858   if (! link_info.reduce_memory_overheads)
1859     {
1860       obstack_begin (&map_obstack, 1000);
1861       for (p = link_info.input_bfds; p != (bfd *) NULL; p = p->link_next)
1862         bfd_map_over_sections (p, init_map_userdata, 0);
1863       bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
1864     }
1865   lang_statement_iteration ++;
1866   print_statements ();
1867 }
1868
1869 static void
1870 init_map_userdata (bfd *abfd ATTRIBUTE_UNUSED,
1871                    asection *sec,
1872                    void *data ATTRIBUTE_UNUSED)
1873 {
1874   fat_section_userdata_type *new_data
1875     = ((fat_section_userdata_type *) (stat_alloc
1876                                       (sizeof (fat_section_userdata_type))));
1877
1878   ASSERT (get_userdata (sec) == NULL);
1879   get_userdata (sec) = new_data;
1880   new_data->map_symbol_def_tail = &new_data->map_symbol_def_head;
1881 }
1882
1883 static bfd_boolean
1884 sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
1885                  void *info ATTRIBUTE_UNUSED)
1886 {
1887   if (hash_entry->type == bfd_link_hash_defined
1888       || hash_entry->type == bfd_link_hash_defweak)
1889     {
1890       struct fat_user_section_struct *ud;
1891       struct map_symbol_def *def;
1892
1893       ud = get_userdata (hash_entry->u.def.section);
1894       if  (! ud)
1895         {
1896           /* ??? What do we have to do to initialize this beforehand?  */
1897           /* The first time we get here is bfd_abs_section...  */
1898           init_map_userdata (0, hash_entry->u.def.section, 0);
1899           ud = get_userdata (hash_entry->u.def.section);
1900         }
1901       else if  (!ud->map_symbol_def_tail)
1902         ud->map_symbol_def_tail = &ud->map_symbol_def_head;
1903
1904       def = obstack_alloc (&map_obstack, sizeof *def);
1905       def->entry = hash_entry;
1906       *(ud->map_symbol_def_tail) = def;
1907       ud->map_symbol_def_tail = &def->next;
1908     }
1909   return TRUE;
1910 }
1911
1912 /* Initialize an output section.  */
1913
1914 static void
1915 init_os (lang_output_section_statement_type *s, asection *isec,
1916          flagword flags)
1917 {
1918   if (s->bfd_section != NULL)
1919     return;
1920
1921   if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
1922     einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
1923
1924   if (s->constraint != SPECIAL)
1925     s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
1926   if (s->bfd_section == NULL)
1927     s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
1928                                                          s->name, flags);
1929   if (s->bfd_section == NULL)
1930     {
1931       einfo (_("%P%F: output format %s cannot represent section called %s\n"),
1932              link_info.output_bfd->xvec->name, s->name);
1933     }
1934   s->bfd_section->output_section = s->bfd_section;
1935   s->bfd_section->output_offset = 0;
1936
1937   if (!link_info.reduce_memory_overheads)
1938     {
1939       fat_section_userdata_type *new
1940         = stat_alloc (sizeof (fat_section_userdata_type));
1941       memset (new, 0, sizeof (fat_section_userdata_type));
1942       get_userdata (s->bfd_section) = new;
1943     }
1944
1945   /* If there is a base address, make sure that any sections it might
1946      mention are initialized.  */
1947   if (s->addr_tree != NULL)
1948     exp_init_os (s->addr_tree);
1949
1950   if (s->load_base != NULL)
1951     exp_init_os (s->load_base);
1952
1953   /* If supplied an alignment, set it.  */
1954   if (s->section_alignment != -1)
1955     s->bfd_section->alignment_power = s->section_alignment;
1956
1957   if (isec)
1958     bfd_init_private_section_data (isec->owner, isec,
1959                                    link_info.output_bfd, s->bfd_section,
1960                                    &link_info);
1961 }
1962
1963 /* Make sure that all output sections mentioned in an expression are
1964    initialized.  */
1965
1966 static void
1967 exp_init_os (etree_type *exp)
1968 {
1969   switch (exp->type.node_class)
1970     {
1971     case etree_assign:
1972     case etree_provide:
1973       exp_init_os (exp->assign.src);
1974       break;
1975
1976     case etree_binary:
1977       exp_init_os (exp->binary.lhs);
1978       exp_init_os (exp->binary.rhs);
1979       break;
1980
1981     case etree_trinary:
1982       exp_init_os (exp->trinary.cond);
1983       exp_init_os (exp->trinary.lhs);
1984       exp_init_os (exp->trinary.rhs);
1985       break;
1986
1987     case etree_assert:
1988       exp_init_os (exp->assert_s.child);
1989       break;
1990
1991     case etree_unary:
1992       exp_init_os (exp->unary.child);
1993       break;
1994
1995     case etree_name:
1996       switch (exp->type.node_code)
1997         {
1998         case ADDR:
1999         case LOADADDR:
2000         case SIZEOF:
2001           {
2002             lang_output_section_statement_type *os;
2003
2004             os = lang_output_section_find (exp->name.name);
2005             if (os != NULL && os->bfd_section == NULL)
2006               init_os (os, NULL, 0);
2007           }
2008         }
2009       break;
2010
2011     default:
2012       break;
2013     }
2014 }
2015 \f
2016 static void
2017 section_already_linked (bfd *abfd, asection *sec, void *data)
2018 {
2019   lang_input_statement_type *entry = data;
2020
2021   /* If we are only reading symbols from this object, then we want to
2022      discard all sections.  */
2023   if (entry->just_syms_flag)
2024     {
2025       bfd_link_just_syms (abfd, sec, &link_info);
2026       return;
2027     }
2028
2029   if (!(abfd->flags & DYNAMIC))
2030     bfd_section_already_linked (abfd, sec, &link_info);
2031 }
2032 \f
2033 /* The wild routines.
2034
2035    These expand statements like *(.text) and foo.o to a list of
2036    explicit actions, like foo.o(.text), bar.o(.text) and
2037    foo.o(.text, .data).  */
2038
2039 /* Add SECTION to the output section OUTPUT.  Do this by creating a
2040    lang_input_section statement which is placed at PTR.  FILE is the
2041    input file which holds SECTION.  */
2042
2043 void
2044 lang_add_section (lang_statement_list_type *ptr,
2045                   asection *section,
2046                   lang_output_section_statement_type *output)
2047 {
2048   flagword flags = section->flags;
2049   bfd_boolean discard;
2050
2051   /* Discard sections marked with SEC_EXCLUDE.  */
2052   discard = (flags & SEC_EXCLUDE) != 0;
2053
2054   /* Discard input sections which are assigned to a section named
2055      DISCARD_SECTION_NAME.  */
2056   if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
2057     discard = TRUE;
2058
2059   /* Discard debugging sections if we are stripping debugging
2060      information.  */
2061   if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
2062       && (flags & SEC_DEBUGGING) != 0)
2063     discard = TRUE;
2064
2065   if (discard)
2066     {
2067       if (section->output_section == NULL)
2068         {
2069           /* This prevents future calls from assigning this section.  */
2070           section->output_section = bfd_abs_section_ptr;
2071         }
2072       return;
2073     }
2074
2075   if (section->output_section == NULL)
2076     {
2077       bfd_boolean first;
2078       lang_input_section_type *new;
2079       flagword flags;
2080
2081       flags = section->flags;
2082
2083       /* We don't copy the SEC_NEVER_LOAD flag from an input section
2084          to an output section, because we want to be able to include a
2085          SEC_NEVER_LOAD section in the middle of an otherwise loaded
2086          section (I don't know why we want to do this, but we do).
2087          build_link_order in ldwrite.c handles this case by turning
2088          the embedded SEC_NEVER_LOAD section into a fill.  */
2089
2090       flags &= ~ SEC_NEVER_LOAD;
2091
2092       switch (output->sectype)
2093         {
2094         case normal_section:
2095         case overlay_section:
2096           break;
2097         case noalloc_section:
2098           flags &= ~SEC_ALLOC;
2099           break;
2100         case noload_section:
2101           flags &= ~SEC_LOAD;
2102           flags |= SEC_NEVER_LOAD;
2103           break;
2104         }
2105
2106       if (output->bfd_section == NULL)
2107         init_os (output, section, flags);
2108
2109       first = ! output->bfd_section->linker_has_input;
2110       output->bfd_section->linker_has_input = 1;
2111
2112       if (!link_info.relocatable
2113           && !stripped_excluded_sections)
2114         {
2115           asection *s = output->bfd_section->map_tail.s;
2116           output->bfd_section->map_tail.s = section;
2117           section->map_head.s = NULL;
2118           section->map_tail.s = s;
2119           if (s != NULL)
2120             s->map_head.s = section;
2121           else
2122             output->bfd_section->map_head.s = section;
2123         }
2124
2125       /* Add a section reference to the list.  */
2126       new = new_stat (lang_input_section, ptr);
2127
2128       new->section = section;
2129       section->output_section = output->bfd_section;
2130
2131       /* If final link, don't copy the SEC_LINK_ONCE flags, they've
2132          already been processed.  One reason to do this is that on pe
2133          format targets, .text$foo sections go into .text and it's odd
2134          to see .text with SEC_LINK_ONCE set.  */
2135
2136       if (! link_info.relocatable)
2137         flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
2138
2139       /* If this is not the first input section, and the SEC_READONLY
2140          flag is not currently set, then don't set it just because the
2141          input section has it set.  */
2142
2143       if (! first && (output->bfd_section->flags & SEC_READONLY) == 0)
2144         flags &= ~ SEC_READONLY;
2145
2146       /* Keep SEC_MERGE and SEC_STRINGS only if they are the same.  */
2147       if (! first
2148           && ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
2149               != (flags & (SEC_MERGE | SEC_STRINGS))
2150               || ((flags & SEC_MERGE)
2151                   && output->bfd_section->entsize != section->entsize)))
2152         {
2153           output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
2154           flags &= ~ (SEC_MERGE | SEC_STRINGS);
2155         }
2156
2157       output->bfd_section->flags |= flags;
2158
2159       if (flags & SEC_MERGE)
2160         output->bfd_section->entsize = section->entsize;
2161
2162       /* If SEC_READONLY is not set in the input section, then clear
2163          it from the output section.  */
2164       if ((section->flags & SEC_READONLY) == 0)
2165         output->bfd_section->flags &= ~SEC_READONLY;
2166
2167       /* Copy over SEC_SMALL_DATA.  */
2168       if (section->flags & SEC_SMALL_DATA)
2169         output->bfd_section->flags |= SEC_SMALL_DATA;
2170
2171       if (section->alignment_power > output->bfd_section->alignment_power)
2172         output->bfd_section->alignment_power = section->alignment_power;
2173
2174       if (bfd_get_arch (section->owner) == bfd_arch_tic54x
2175           && (section->flags & SEC_TIC54X_BLOCK) != 0)
2176         {
2177           output->bfd_section->flags |= SEC_TIC54X_BLOCK;
2178           /* FIXME: This value should really be obtained from the bfd...  */
2179           output->block_value = 128;
2180         }
2181     }
2182 }
2183
2184 /* Handle wildcard sorting.  This returns the lang_input_section which
2185    should follow the one we are going to create for SECTION and FILE,
2186    based on the sorting requirements of WILD.  It returns NULL if the
2187    new section should just go at the end of the current list.  */
2188
2189 static lang_statement_union_type *
2190 wild_sort (lang_wild_statement_type *wild,
2191            struct wildcard_list *sec,
2192            lang_input_statement_type *file,
2193            asection *section)
2194 {
2195   const char *section_name;
2196   lang_statement_union_type *l;
2197
2198   if (!wild->filenames_sorted
2199       && (sec == NULL || sec->spec.sorted == none))
2200     return NULL;
2201
2202   section_name = bfd_get_section_name (file->the_bfd, section);
2203   for (l = wild->children.head; l != NULL; l = l->header.next)
2204     {
2205       lang_input_section_type *ls;
2206
2207       if (l->header.type != lang_input_section_enum)
2208         continue;
2209       ls = &l->input_section;
2210
2211       /* Sorting by filename takes precedence over sorting by section
2212          name.  */
2213
2214       if (wild->filenames_sorted)
2215         {
2216           const char *fn, *ln;
2217           bfd_boolean fa, la;
2218           int i;
2219
2220           /* The PE support for the .idata section as generated by
2221              dlltool assumes that files will be sorted by the name of
2222              the archive and then the name of the file within the
2223              archive.  */
2224
2225           if (file->the_bfd != NULL
2226               && bfd_my_archive (file->the_bfd) != NULL)
2227             {
2228               fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
2229               fa = TRUE;
2230             }
2231           else
2232             {
2233               fn = file->filename;
2234               fa = FALSE;
2235             }
2236
2237           if (bfd_my_archive (ls->section->owner) != NULL)
2238             {
2239               ln = bfd_get_filename (bfd_my_archive (ls->section->owner));
2240               la = TRUE;
2241             }
2242           else
2243             {
2244               ln = ls->section->owner->filename;
2245               la = FALSE;
2246             }
2247
2248           i = strcmp (fn, ln);
2249           if (i > 0)
2250             continue;
2251           else if (i < 0)
2252             break;
2253
2254           if (fa || la)
2255             {
2256               if (fa)
2257                 fn = file->filename;
2258               if (la)
2259                 ln = ls->section->owner->filename;
2260
2261               i = strcmp (fn, ln);
2262               if (i > 0)
2263                 continue;
2264               else if (i < 0)
2265                 break;
2266             }
2267         }
2268
2269       /* Here either the files are not sorted by name, or we are
2270          looking at the sections for this file.  */
2271
2272       if (sec != NULL && sec->spec.sorted != none)
2273         if (compare_section (sec->spec.sorted, section, ls->section) < 0)
2274           break;
2275     }
2276
2277   return l;
2278 }
2279
2280 /* Expand a wild statement for a particular FILE.  SECTION may be
2281    NULL, in which case it is a wild card.  */
2282
2283 static void
2284 output_section_callback (lang_wild_statement_type *ptr,
2285                          struct wildcard_list *sec,
2286                          asection *section,
2287                          lang_input_statement_type *file,
2288                          void *output)
2289 {
2290   lang_statement_union_type *before;
2291
2292   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2293   if (unique_section_p (section))
2294     return;
2295
2296   before = wild_sort (ptr, sec, file, section);
2297
2298   /* Here BEFORE points to the lang_input_section which
2299      should follow the one we are about to add.  If BEFORE
2300      is NULL, then the section should just go at the end
2301      of the current list.  */
2302
2303   if (before == NULL)
2304     lang_add_section (&ptr->children, section,
2305                       (lang_output_section_statement_type *) output);
2306   else
2307     {
2308       lang_statement_list_type list;
2309       lang_statement_union_type **pp;
2310
2311       lang_list_init (&list);
2312       lang_add_section (&list, section,
2313                         (lang_output_section_statement_type *) output);
2314
2315       /* If we are discarding the section, LIST.HEAD will
2316          be NULL.  */
2317       if (list.head != NULL)
2318         {
2319           ASSERT (list.head->header.next == NULL);
2320
2321           for (pp = &ptr->children.head;
2322                *pp != before;
2323                pp = &(*pp)->header.next)
2324             ASSERT (*pp != NULL);
2325
2326           list.head->header.next = *pp;
2327           *pp = list.head;
2328         }
2329     }
2330 }
2331
2332 /* Check if all sections in a wild statement for a particular FILE
2333    are readonly.  */
2334
2335 static void
2336 check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2337                         struct wildcard_list *sec ATTRIBUTE_UNUSED,
2338                         asection *section,
2339                         lang_input_statement_type *file ATTRIBUTE_UNUSED,
2340                         void *data)
2341 {
2342   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2343   if (unique_section_p (section))
2344     return;
2345
2346   if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2347     ((lang_output_section_statement_type *) data)->all_input_readonly = FALSE;
2348 }
2349
2350 /* This is passed a file name which must have been seen already and
2351    added to the statement tree.  We will see if it has been opened
2352    already and had its symbols read.  If not then we'll read it.  */
2353
2354 static lang_input_statement_type *
2355 lookup_name (const char *name)
2356 {
2357   lang_input_statement_type *search;
2358
2359   for (search = (lang_input_statement_type *) input_file_chain.head;
2360        search != NULL;
2361        search = (lang_input_statement_type *) search->next_real_file)
2362     {
2363       /* Use the local_sym_name as the name of the file that has
2364          already been loaded as filename might have been transformed
2365          via the search directory lookup mechanism.  */
2366       const char *filename = search->local_sym_name;
2367
2368       if (filename != NULL
2369           && strcmp (filename, name) == 0)
2370         break;
2371     }
2372
2373   if (search == NULL)
2374     search = new_afile (name, lang_input_file_is_search_file_enum,
2375                         default_target, FALSE);
2376
2377   /* If we have already added this file, or this file is not real
2378      don't add this file.  */
2379   if (search->loaded || !search->real)
2380     return search;
2381
2382   if (! load_symbols (search, NULL))
2383     return NULL;
2384
2385   return search;
2386 }
2387
2388 /* Save LIST as a list of libraries whose symbols should not be exported.  */
2389
2390 struct excluded_lib
2391 {
2392   char *name;
2393   struct excluded_lib *next;
2394 };
2395 static struct excluded_lib *excluded_libs;
2396
2397 void
2398 add_excluded_libs (const char *list)
2399 {
2400   const char *p = list, *end;
2401
2402   while (*p != '\0')
2403     {
2404       struct excluded_lib *entry;
2405       end = strpbrk (p, ",:");
2406       if (end == NULL)
2407         end = p + strlen (p);
2408       entry = xmalloc (sizeof (*entry));
2409       entry->next = excluded_libs;
2410       entry->name = xmalloc (end - p + 1);
2411       memcpy (entry->name, p, end - p);
2412       entry->name[end - p] = '\0';
2413       excluded_libs = entry;
2414       if (*end == '\0')
2415         break;
2416       p = end + 1;
2417     }
2418 }
2419
2420 static void
2421 check_excluded_libs (bfd *abfd)
2422 {
2423   struct excluded_lib *lib = excluded_libs;
2424
2425   while (lib)
2426     {
2427       int len = strlen (lib->name);
2428       const char *filename = lbasename (abfd->filename);
2429
2430       if (strcmp (lib->name, "ALL") == 0)
2431         {
2432           abfd->no_export = TRUE;
2433           return;
2434         }
2435
2436       if (strncmp (lib->name, filename, len) == 0
2437           && (filename[len] == '\0'
2438               || (filename[len] == '.' && filename[len + 1] == 'a'
2439                   && filename[len + 2] == '\0')))
2440         {
2441           abfd->no_export = TRUE;
2442           return;
2443         }
2444
2445       lib = lib->next;
2446     }
2447 }
2448
2449 /* Get the symbols for an input file.  */
2450
2451 bfd_boolean
2452 load_symbols (lang_input_statement_type *entry,
2453               lang_statement_list_type *place)
2454 {
2455   char **matching;
2456
2457   if (entry->loaded)
2458     return TRUE;
2459
2460   ldfile_open_file (entry);
2461
2462   if (! bfd_check_format (entry->the_bfd, bfd_archive)
2463       && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2464     {
2465       bfd_error_type err;
2466       lang_statement_list_type *hold;
2467       bfd_boolean bad_load = TRUE;
2468       bfd_boolean save_ldlang_sysrooted_script;
2469       bfd_boolean save_as_needed, save_add_needed;
2470
2471       err = bfd_get_error ();
2472
2473       /* See if the emulation has some special knowledge.  */
2474       if (ldemul_unrecognized_file (entry))
2475         return TRUE;
2476
2477       if (err == bfd_error_file_ambiguously_recognized)
2478         {
2479           char **p;
2480
2481           einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2482           einfo (_("%B: matching formats:"), entry->the_bfd);
2483           for (p = matching; *p != NULL; p++)
2484             einfo (" %s", *p);
2485           einfo ("%F\n");
2486         }
2487       else if (err != bfd_error_file_not_recognized
2488                || place == NULL)
2489         einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2490       else
2491         bad_load = FALSE;
2492
2493       bfd_close (entry->the_bfd);
2494       entry->the_bfd = NULL;
2495
2496       /* Try to interpret the file as a linker script.  */
2497       ldfile_open_command_file (entry->filename);
2498
2499       hold = stat_ptr;
2500       stat_ptr = place;
2501       save_ldlang_sysrooted_script = ldlang_sysrooted_script;
2502       ldlang_sysrooted_script = entry->sysrooted;
2503       save_as_needed = as_needed;
2504       as_needed = entry->as_needed;
2505       save_add_needed = add_needed;
2506       add_needed = entry->add_needed;
2507
2508       ldfile_assumed_script = TRUE;
2509       parser_input = input_script;
2510       /* We want to use the same -Bdynamic/-Bstatic as the one for
2511          ENTRY.  */
2512       config.dynamic_link = entry->dynamic;
2513       yyparse ();
2514       ldfile_assumed_script = FALSE;
2515
2516       ldlang_sysrooted_script = save_ldlang_sysrooted_script;
2517       as_needed = save_as_needed;
2518       add_needed = save_add_needed;
2519       stat_ptr = hold;
2520
2521       return ! bad_load;
2522     }
2523
2524   if (ldemul_recognized_file (entry))
2525     return TRUE;
2526
2527   /* We don't call ldlang_add_file for an archive.  Instead, the
2528      add_symbols entry point will call ldlang_add_file, via the
2529      add_archive_element callback, for each element of the archive
2530      which is used.  */
2531   switch (bfd_get_format (entry->the_bfd))
2532     {
2533     default:
2534       break;
2535
2536     case bfd_object:
2537       ldlang_add_file (entry);
2538       if (trace_files || trace_file_tries)
2539         info_msg ("%I\n", entry);
2540       break;
2541
2542     case bfd_archive:
2543       check_excluded_libs (entry->the_bfd);
2544
2545       if (entry->whole_archive)
2546         {
2547           bfd *member = NULL;
2548           bfd_boolean loaded = TRUE;
2549
2550           for (;;)
2551             {
2552               member = bfd_openr_next_archived_file (entry->the_bfd, member);
2553
2554               if (member == NULL)
2555                 break;
2556
2557               if (! bfd_check_format (member, bfd_object))
2558                 {
2559                   einfo (_("%F%B: member %B in archive is not an object\n"),
2560                          entry->the_bfd, member);
2561                   loaded = FALSE;
2562                 }
2563
2564               if (! ((*link_info.callbacks->add_archive_element)
2565                      (&link_info, member, "--whole-archive")))
2566                 abort ();
2567
2568               if (! bfd_link_add_symbols (member, &link_info))
2569                 {
2570                   einfo (_("%F%B: could not read symbols: %E\n"), member);
2571                   loaded = FALSE;
2572                 }
2573             }
2574
2575           entry->loaded = loaded;
2576           return loaded;
2577         }
2578       break;
2579     }
2580
2581   if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2582     entry->loaded = TRUE;
2583   else
2584     einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
2585
2586   return entry->loaded;
2587 }
2588
2589 /* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
2590    may be NULL, indicating that it is a wildcard.  Separate
2591    lang_input_section statements are created for each part of the
2592    expansion; they are added after the wild statement S.  OUTPUT is
2593    the output section.  */
2594
2595 static void
2596 wild (lang_wild_statement_type *s,
2597       const char *target ATTRIBUTE_UNUSED,
2598       lang_output_section_statement_type *output)
2599 {
2600   struct wildcard_list *sec;
2601
2602   if (s->handler_data[0]
2603       && s->handler_data[0]->spec.sorted == by_name
2604       && !s->filenames_sorted)
2605     {
2606       lang_section_bst_type *tree;
2607
2608       walk_wild (s, output_section_callback_fast, output);
2609
2610       tree = s->tree;
2611       if (tree)
2612         {
2613           output_section_callback_tree_to_list (s, tree, output);
2614           s->tree = NULL;
2615         }
2616     }
2617   else
2618     walk_wild (s, output_section_callback, output);
2619
2620   if (default_common_section == NULL)
2621     for (sec = s->section_list; sec != NULL; sec = sec->next)
2622       if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2623         {
2624           /* Remember the section that common is going to in case we
2625              later get something which doesn't know where to put it.  */
2626           default_common_section = output;
2627           break;
2628         }
2629 }
2630
2631 /* Return TRUE iff target is the sought target.  */
2632
2633 static int
2634 get_target (const bfd_target *target, void *data)
2635 {
2636   const char *sought = data;
2637
2638   return strcmp (target->name, sought) == 0;
2639 }
2640
2641 /* Like strcpy() but convert to lower case as well.  */
2642
2643 static void
2644 stricpy (char *dest, char *src)
2645 {
2646   char c;
2647
2648   while ((c = *src++) != 0)
2649     *dest++ = TOLOWER (c);
2650
2651   *dest = 0;
2652 }
2653
2654 /* Remove the first occurrence of needle (if any) in haystack
2655    from haystack.  */
2656
2657 static void
2658 strcut (char *haystack, char *needle)
2659 {
2660   haystack = strstr (haystack, needle);
2661
2662   if (haystack)
2663     {
2664       char *src;
2665
2666       for (src = haystack + strlen (needle); *src;)
2667         *haystack++ = *src++;
2668
2669       *haystack = 0;
2670     }
2671 }
2672
2673 /* Compare two target format name strings.
2674    Return a value indicating how "similar" they are.  */
2675
2676 static int
2677 name_compare (char *first, char *second)
2678 {
2679   char *copy1;
2680   char *copy2;
2681   int result;
2682
2683   copy1 = xmalloc (strlen (first) + 1);
2684   copy2 = xmalloc (strlen (second) + 1);
2685
2686   /* Convert the names to lower case.  */
2687   stricpy (copy1, first);
2688   stricpy (copy2, second);
2689
2690   /* Remove size and endian strings from the name.  */
2691   strcut (copy1, "big");
2692   strcut (copy1, "little");
2693   strcut (copy2, "big");
2694   strcut (copy2, "little");
2695
2696   /* Return a value based on how many characters match,
2697      starting from the beginning.   If both strings are
2698      the same then return 10 * their length.  */
2699   for (result = 0; copy1[result] == copy2[result]; result++)
2700     if (copy1[result] == 0)
2701       {
2702         result *= 10;
2703         break;
2704       }
2705
2706   free (copy1);
2707   free (copy2);
2708
2709   return result;
2710 }
2711
2712 /* Set by closest_target_match() below.  */
2713 static const bfd_target *winner;
2714
2715 /* Scan all the valid bfd targets looking for one that has the endianness
2716    requirement that was specified on the command line, and is the nearest
2717    match to the original output target.  */
2718
2719 static int
2720 closest_target_match (const bfd_target *target, void *data)
2721 {
2722   const bfd_target *original = data;
2723
2724   if (command_line.endian == ENDIAN_BIG
2725       && target->byteorder != BFD_ENDIAN_BIG)
2726     return 0;
2727
2728   if (command_line.endian == ENDIAN_LITTLE
2729       && target->byteorder != BFD_ENDIAN_LITTLE)
2730     return 0;
2731
2732   /* Must be the same flavour.  */
2733   if (target->flavour != original->flavour)
2734     return 0;
2735
2736   /* Ignore generic big and little endian elf vectors.  */
2737   if (strcmp (target->name, "elf32-big") == 0
2738       || strcmp (target->name, "elf64-big") == 0
2739       || strcmp (target->name, "elf32-little") == 0
2740       || strcmp (target->name, "elf64-little") == 0)
2741     return 0;
2742
2743   /* If we have not found a potential winner yet, then record this one.  */
2744   if (winner == NULL)
2745     {
2746       winner = target;
2747       return 0;
2748     }
2749
2750   /* Oh dear, we now have two potential candidates for a successful match.
2751      Compare their names and choose the better one.  */
2752   if (name_compare (target->name, original->name)
2753       > name_compare (winner->name, original->name))
2754     winner = target;
2755
2756   /* Keep on searching until wqe have checked them all.  */
2757   return 0;
2758 }
2759
2760 /* Return the BFD target format of the first input file.  */
2761
2762 static char *
2763 get_first_input_target (void)
2764 {
2765   char *target = NULL;
2766
2767   LANG_FOR_EACH_INPUT_STATEMENT (s)
2768     {
2769       if (s->header.type == lang_input_statement_enum
2770           && s->real)
2771         {
2772           ldfile_open_file (s);
2773
2774           if (s->the_bfd != NULL
2775               && bfd_check_format (s->the_bfd, bfd_object))
2776             {
2777               target = bfd_get_target (s->the_bfd);
2778
2779               if (target != NULL)
2780                 break;
2781             }
2782         }
2783     }
2784
2785   return target;
2786 }
2787
2788 const char *
2789 lang_get_output_target (void)
2790 {
2791   const char *target;
2792
2793   /* Has the user told us which output format to use?  */
2794   if (output_target != NULL)
2795     return output_target;
2796
2797   /* No - has the current target been set to something other than
2798      the default?  */
2799   if (current_target != default_target)
2800     return current_target;
2801
2802   /* No - can we determine the format of the first input file?  */
2803   target = get_first_input_target ();
2804   if (target != NULL)
2805     return target;
2806
2807   /* Failed - use the default output target.  */
2808   return default_target;
2809 }
2810
2811 /* Open the output file.  */
2812
2813 static void
2814 open_output (const char *name)
2815 {
2816   output_target = lang_get_output_target ();
2817
2818   /* Has the user requested a particular endianness on the command
2819      line?  */
2820   if (command_line.endian != ENDIAN_UNSET)
2821     {
2822       const bfd_target *target;
2823       enum bfd_endian desired_endian;
2824
2825       /* Get the chosen target.  */
2826       target = bfd_search_for_target (get_target, (void *) output_target);
2827
2828       /* If the target is not supported, we cannot do anything.  */
2829       if (target != NULL)
2830         {
2831           if (command_line.endian == ENDIAN_BIG)
2832             desired_endian = BFD_ENDIAN_BIG;
2833           else
2834             desired_endian = BFD_ENDIAN_LITTLE;
2835
2836           /* See if the target has the wrong endianness.  This should
2837              not happen if the linker script has provided big and
2838              little endian alternatives, but some scrips don't do
2839              this.  */
2840           if (target->byteorder != desired_endian)
2841             {
2842               /* If it does, then see if the target provides
2843                  an alternative with the correct endianness.  */
2844               if (target->alternative_target != NULL
2845                   && (target->alternative_target->byteorder == desired_endian))
2846                 output_target = target->alternative_target->name;
2847               else
2848                 {
2849                   /* Try to find a target as similar as possible to
2850                      the default target, but which has the desired
2851                      endian characteristic.  */
2852                   bfd_search_for_target (closest_target_match,
2853                                          (void *) target);
2854
2855                   /* Oh dear - we could not find any targets that
2856                      satisfy our requirements.  */
2857                   if (winner == NULL)
2858                     einfo (_("%P: warning: could not find any targets"
2859                              " that match endianness requirement\n"));
2860                   else
2861                     output_target = winner->name;
2862                 }
2863             }
2864         }
2865     }
2866
2867   link_info.output_bfd = bfd_openw (name, output_target);
2868
2869   if (link_info.output_bfd == NULL)
2870     {
2871       if (bfd_get_error () == bfd_error_invalid_target)
2872         einfo (_("%P%F: target %s not found\n"), output_target);
2873
2874       einfo (_("%P%F: cannot open output file %s: %E\n"), name);
2875     }
2876
2877   delete_output_file_on_failure = TRUE;
2878
2879   if (! bfd_set_format (link_info.output_bfd, bfd_object))
2880     einfo (_("%P%F:%s: can not make object file: %E\n"), name);
2881   if (! bfd_set_arch_mach (link_info.output_bfd,
2882                            ldfile_output_architecture,
2883                            ldfile_output_machine))
2884     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
2885
2886   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
2887   if (link_info.hash == NULL)
2888     einfo (_("%P%F: can not create hash table: %E\n"));
2889
2890   bfd_set_gp_size (link_info.output_bfd, g_switch_value);
2891 }
2892
2893 static void
2894 ldlang_open_output (lang_statement_union_type *statement)
2895 {
2896   switch (statement->header.type)
2897     {
2898     case lang_output_statement_enum:
2899       ASSERT (link_info.output_bfd == NULL);
2900       open_output (statement->output_statement.name);
2901       ldemul_set_output_arch ();
2902       if (config.magic_demand_paged && !link_info.relocatable)
2903         link_info.output_bfd->flags |= D_PAGED;
2904       else
2905         link_info.output_bfd->flags &= ~D_PAGED;
2906       if (config.text_read_only)
2907         link_info.output_bfd->flags |= WP_TEXT;
2908       else
2909         link_info.output_bfd->flags &= ~WP_TEXT;
2910       if (link_info.traditional_format)
2911         link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
2912       else
2913         link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
2914       break;
2915
2916     case lang_target_statement_enum:
2917       current_target = statement->target_statement.target;
2918       break;
2919     default:
2920       break;
2921     }
2922 }
2923
2924 /* Convert between addresses in bytes and sizes in octets.
2925    For currently supported targets, octets_per_byte is always a power
2926    of two, so we can use shifts.  */
2927 #define TO_ADDR(X) ((X) >> opb_shift)
2928 #define TO_SIZE(X) ((X) << opb_shift)
2929
2930 /* Support the above.  */
2931 static unsigned int opb_shift = 0;
2932
2933 static void
2934 init_opb (void)
2935 {
2936   unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2937                                               ldfile_output_machine);
2938   opb_shift = 0;
2939   if (x > 1)
2940     while ((x & 1) == 0)
2941       {
2942         x >>= 1;
2943         ++opb_shift;
2944       }
2945   ASSERT (x == 1);
2946 }
2947
2948 /* Open all the input files.  */
2949
2950 static void
2951 open_input_bfds (lang_statement_union_type *s, bfd_boolean force)
2952 {
2953   for (; s != NULL; s = s->header.next)
2954     {
2955       switch (s->header.type)
2956         {
2957         case lang_constructors_statement_enum:
2958           open_input_bfds (constructor_list.head, force);
2959           break;
2960         case lang_output_section_statement_enum:
2961           open_input_bfds (s->output_section_statement.children.head, force);
2962           break;
2963         case lang_wild_statement_enum:
2964           /* Maybe we should load the file's symbols.  */
2965           if (s->wild_statement.filename
2966               && !wildcardp (s->wild_statement.filename)
2967               && !archive_path (s->wild_statement.filename))
2968             lookup_name (s->wild_statement.filename);
2969           open_input_bfds (s->wild_statement.children.head, force);
2970           break;
2971         case lang_group_statement_enum:
2972           {
2973             struct bfd_link_hash_entry *undefs;
2974
2975             /* We must continually search the entries in the group
2976                until no new symbols are added to the list of undefined
2977                symbols.  */
2978
2979             do
2980               {
2981                 undefs = link_info.hash->undefs_tail;
2982                 open_input_bfds (s->group_statement.children.head, TRUE);
2983               }
2984             while (undefs != link_info.hash->undefs_tail);
2985           }
2986           break;
2987         case lang_target_statement_enum:
2988           current_target = s->target_statement.target;
2989           break;
2990         case lang_input_statement_enum:
2991           if (s->input_statement.real)
2992             {
2993               lang_statement_list_type add;
2994
2995               s->input_statement.target = current_target;
2996
2997               /* If we are being called from within a group, and this
2998                  is an archive which has already been searched, then
2999                  force it to be researched unless the whole archive
3000                  has been loaded already.  */
3001               if (force
3002                   && !s->input_statement.whole_archive
3003                   && s->input_statement.loaded
3004                   && bfd_check_format (s->input_statement.the_bfd,
3005                                        bfd_archive))
3006                 s->input_statement.loaded = FALSE;
3007
3008               lang_list_init (&add);
3009
3010               if (! load_symbols (&s->input_statement, &add))
3011                 config.make_executable = FALSE;
3012
3013               if (add.head != NULL)
3014                 {
3015                   *add.tail = s->header.next;
3016                   s->header.next = add.head;
3017                 }
3018             }
3019           break;
3020         default:
3021           break;
3022         }
3023     }
3024 }
3025
3026 /* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions.  */
3027
3028 void
3029 lang_track_definedness (const char *name)
3030 {
3031   if (bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE) == NULL)
3032     einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
3033 }
3034
3035 /* New-function for the definedness hash table.  */
3036
3037 static struct bfd_hash_entry *
3038 lang_definedness_newfunc (struct bfd_hash_entry *entry,
3039                           struct bfd_hash_table *table ATTRIBUTE_UNUSED,
3040                           const char *name ATTRIBUTE_UNUSED)
3041 {
3042   struct lang_definedness_hash_entry *ret
3043     = (struct lang_definedness_hash_entry *) entry;
3044
3045   if (ret == NULL)
3046     ret = (struct lang_definedness_hash_entry *)
3047       bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
3048
3049   if (ret == NULL)
3050     einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
3051
3052   ret->iteration = -1;
3053   return &ret->root;
3054 }
3055
3056 /* Return the iteration when the definition of NAME was last updated.  A
3057    value of -1 means that the symbol is not defined in the linker script
3058    or the command line, but may be defined in the linker symbol table.  */
3059
3060 int
3061 lang_symbol_definition_iteration (const char *name)
3062 {
3063   struct lang_definedness_hash_entry *defentry
3064     = (struct lang_definedness_hash_entry *)
3065     bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3066
3067   /* We've already created this one on the presence of DEFINED in the
3068      script, so it can't be NULL unless something is borked elsewhere in
3069      the code.  */
3070   if (defentry == NULL)
3071     FAIL ();
3072
3073   return defentry->iteration;
3074 }
3075
3076 /* Update the definedness state of NAME.  */
3077
3078 void
3079 lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
3080 {
3081   struct lang_definedness_hash_entry *defentry
3082     = (struct lang_definedness_hash_entry *)
3083     bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3084
3085   /* We don't keep track of symbols not tested with DEFINED.  */
3086   if (defentry == NULL)
3087     return;
3088
3089   /* If the symbol was already defined, and not from an earlier statement
3090      iteration, don't update the definedness iteration, because that'd
3091      make the symbol seem defined in the linker script at this point, and
3092      it wasn't; it was defined in some object.  If we do anyway, DEFINED
3093      would start to yield false before this point and the construct "sym =
3094      DEFINED (sym) ? sym : X;" would change sym to X despite being defined
3095      in an object.  */
3096   if (h->type != bfd_link_hash_undefined
3097       && h->type != bfd_link_hash_common
3098       && h->type != bfd_link_hash_new
3099       && defentry->iteration == -1)
3100     return;
3101
3102   defentry->iteration = lang_statement_iteration;
3103 }
3104
3105 /* Add the supplied name to the symbol table as an undefined reference.
3106    This is a two step process as the symbol table doesn't even exist at
3107    the time the ld command line is processed.  First we put the name
3108    on a list, then, once the output file has been opened, transfer the
3109    name to the symbol table.  */
3110
3111 typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
3112
3113 #define ldlang_undef_chain_list_head entry_symbol.next
3114
3115 void
3116 ldlang_add_undef (const char *const name)
3117 {
3118   ldlang_undef_chain_list_type *new =
3119     stat_alloc (sizeof (ldlang_undef_chain_list_type));
3120
3121   new->next = ldlang_undef_chain_list_head;
3122   ldlang_undef_chain_list_head = new;
3123
3124   new->name = xstrdup (name);
3125
3126   if (link_info.output_bfd != NULL)
3127     insert_undefined (new->name);
3128 }
3129
3130 /* Insert NAME as undefined in the symbol table.  */
3131
3132 static void
3133 insert_undefined (const char *name)
3134 {
3135   struct bfd_link_hash_entry *h;
3136
3137   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
3138   if (h == NULL)
3139     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3140   if (h->type == bfd_link_hash_new)
3141     {
3142       h->type = bfd_link_hash_undefined;
3143       h->u.undef.abfd = NULL;
3144       bfd_link_add_undef (link_info.hash, h);
3145     }
3146 }
3147
3148 /* Run through the list of undefineds created above and place them
3149    into the linker hash table as undefined symbols belonging to the
3150    script file.  */
3151
3152 static void
3153 lang_place_undefineds (void)
3154 {
3155   ldlang_undef_chain_list_type *ptr;
3156
3157   for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
3158     insert_undefined (ptr->name);
3159 }
3160
3161 /* Check for all readonly or some readwrite sections.  */
3162
3163 static void
3164 check_input_sections
3165   (lang_statement_union_type *s,
3166    lang_output_section_statement_type *output_section_statement)
3167 {
3168   for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3169     {
3170       switch (s->header.type)
3171         {
3172         case lang_wild_statement_enum:
3173           walk_wild (&s->wild_statement, check_section_callback,
3174                      output_section_statement);
3175           if (! output_section_statement->all_input_readonly)
3176             return;
3177           break;
3178         case lang_constructors_statement_enum:
3179           check_input_sections (constructor_list.head,
3180                                 output_section_statement);
3181           if (! output_section_statement->all_input_readonly)
3182             return;
3183           break;
3184         case lang_group_statement_enum:
3185           check_input_sections (s->group_statement.children.head,
3186                                 output_section_statement);
3187           if (! output_section_statement->all_input_readonly)
3188             return;
3189           break;
3190         default:
3191           break;
3192         }
3193     }
3194 }
3195
3196 /* Update wildcard statements if needed.  */
3197
3198 static void
3199 update_wild_statements (lang_statement_union_type *s)
3200 {
3201   struct wildcard_list *sec;
3202
3203   switch (sort_section)
3204     {
3205     default:
3206       FAIL ();
3207
3208     case none:
3209       break;
3210
3211     case by_name:
3212     case by_alignment:
3213       for (; s != NULL; s = s->header.next)
3214         {
3215           switch (s->header.type)
3216             {
3217             default:
3218               break;
3219
3220             case lang_wild_statement_enum:
3221               sec = s->wild_statement.section_list;
3222               for (sec = s->wild_statement.section_list; sec != NULL;
3223                    sec = sec->next)
3224                 {
3225                   switch (sec->spec.sorted)
3226                     {
3227                     case none:
3228                       sec->spec.sorted = sort_section;
3229                       break;
3230                     case by_name:
3231                       if (sort_section == by_alignment)
3232                         sec->spec.sorted = by_name_alignment;
3233                       break;
3234                     case by_alignment:
3235                       if (sort_section == by_name)
3236                         sec->spec.sorted = by_alignment_name;
3237                       break;
3238                     default:
3239                       break;
3240                     }
3241                 }
3242               break;
3243
3244             case lang_constructors_statement_enum:
3245               update_wild_statements (constructor_list.head);
3246               break;
3247
3248             case lang_output_section_statement_enum:
3249               update_wild_statements
3250                 (s->output_section_statement.children.head);
3251               break;
3252
3253             case lang_group_statement_enum:
3254               update_wild_statements (s->group_statement.children.head);
3255               break;
3256             }
3257         }
3258       break;
3259     }
3260 }
3261
3262 /* Open input files and attach to output sections.  */
3263
3264 static void
3265 map_input_to_output_sections
3266   (lang_statement_union_type *s, const char *target,
3267    lang_output_section_statement_type *os)
3268 {
3269   flagword flags;
3270
3271   for (; s != NULL; s = s->header.next)
3272     {
3273       switch (s->header.type)
3274         {
3275         case lang_wild_statement_enum:
3276           wild (&s->wild_statement, target, os);
3277           break;
3278         case lang_constructors_statement_enum:
3279           map_input_to_output_sections (constructor_list.head,
3280                                         target,
3281                                         os);
3282           break;
3283         case lang_output_section_statement_enum:
3284           if (s->output_section_statement.constraint)
3285             {
3286               if (s->output_section_statement.constraint != ONLY_IF_RW
3287                   && s->output_section_statement.constraint != ONLY_IF_RO)
3288                 break;
3289               s->output_section_statement.all_input_readonly = TRUE;
3290               check_input_sections (s->output_section_statement.children.head,
3291                                     &s->output_section_statement);
3292               if ((s->output_section_statement.all_input_readonly
3293                    && s->output_section_statement.constraint == ONLY_IF_RW)
3294                   || (!s->output_section_statement.all_input_readonly
3295                       && s->output_section_statement.constraint == ONLY_IF_RO))
3296                 {
3297                   s->output_section_statement.constraint = -1;
3298                   break;
3299                 }
3300             }
3301
3302           map_input_to_output_sections (s->output_section_statement.children.head,
3303                                         target,
3304                                         &s->output_section_statement);
3305           break;
3306         case lang_output_statement_enum:
3307           break;
3308         case lang_target_statement_enum:
3309           target = s->target_statement.target;
3310           break;
3311         case lang_group_statement_enum:
3312           map_input_to_output_sections (s->group_statement.children.head,
3313                                         target,
3314                                         os);
3315           break;
3316         case lang_data_statement_enum:
3317           /* Make sure that any sections mentioned in the expression
3318              are initialized.  */
3319           exp_init_os (s->data_statement.exp);
3320           flags = SEC_HAS_CONTENTS;
3321           /* The output section gets contents, and then we inspect for
3322              any flags set in the input script which override any ALLOC.  */
3323           if (!(os->flags & SEC_NEVER_LOAD))
3324             flags |= SEC_ALLOC | SEC_LOAD;
3325           if (os->bfd_section == NULL)
3326             init_os (os, NULL, flags);
3327           else
3328             os->bfd_section->flags |= flags;
3329           break;
3330         case lang_input_section_enum:
3331           break;
3332         case lang_fill_statement_enum:
3333         case lang_object_symbols_statement_enum:
3334         case lang_reloc_statement_enum:
3335         case lang_padding_statement_enum:
3336         case lang_input_statement_enum:
3337           if (os != NULL && os->bfd_section == NULL)
3338             init_os (os, NULL, 0);
3339           break;
3340         case lang_assignment_statement_enum:
3341           if (os != NULL && os->bfd_section == NULL)
3342             init_os (os, NULL, 0);
3343
3344           /* Make sure that any sections mentioned in the assignment
3345              are initialized.  */
3346           exp_init_os (s->assignment_statement.exp);
3347           break;
3348         case lang_address_statement_enum:
3349           /* Mark the specified section with the supplied address.
3350              If this section was actually a segment marker, then the
3351              directive is ignored if the linker script explicitly
3352              processed the segment marker.  Originally, the linker
3353              treated segment directives (like -Ttext on the
3354              command-line) as section directives.  We honor the
3355              section directive semantics for backwards compatibilty;
3356              linker scripts that do not specifically check for
3357              SEGMENT_START automatically get the old semantics.  */
3358           if (!s->address_statement.segment
3359               || !s->address_statement.segment->used)
3360             {
3361               lang_output_section_statement_type *aos
3362                 = (lang_output_section_statement_lookup
3363                    (s->address_statement.section_name, 0, TRUE));
3364
3365               if (aos->bfd_section == NULL)
3366                 init_os (aos, NULL, 0);
3367               aos->addr_tree = s->address_statement.address;
3368             }
3369           break;
3370         case lang_insert_statement_enum:
3371           break;
3372         }
3373     }
3374 }
3375
3376 /* An insert statement snips out all the linker statements from the
3377    start of the list and places them after the output section
3378    statement specified by the insert.  This operation is complicated
3379    by the fact that we keep a doubly linked list of output section
3380    statements as well as the singly linked list of all statements.  */
3381
3382 static void
3383 process_insert_statements (void)
3384 {
3385   lang_statement_union_type **s;
3386   lang_output_section_statement_type *first_os = NULL;
3387   lang_output_section_statement_type *last_os = NULL;
3388   lang_output_section_statement_type *os;
3389
3390   /* "start of list" is actually the statement immediately after
3391      the special abs_section output statement, so that it isn't
3392      reordered.  */
3393   s = &lang_output_section_statement.head;
3394   while (*(s = &(*s)->header.next) != NULL)
3395     {
3396       if ((*s)->header.type == lang_output_section_statement_enum)
3397         {
3398           /* Keep pointers to the first and last output section
3399              statement in the sequence we may be about to move.  */
3400           last_os = &(*s)->output_section_statement;
3401
3402           /* Set constraint negative so that lang_output_section_find
3403              won't match this output section statement.  At this
3404              stage in linking constraint has values in the range
3405              [-1, ONLY_IN_RW].  */
3406           last_os->constraint = -2 - last_os->constraint;
3407           if (first_os == NULL)
3408             first_os = last_os;
3409         }
3410       else if ((*s)->header.type == lang_insert_statement_enum)
3411         {
3412           lang_insert_statement_type *i = &(*s)->insert_statement;
3413           lang_output_section_statement_type *where;
3414           lang_statement_union_type **ptr;
3415           lang_statement_union_type *first;
3416
3417           where = lang_output_section_find (i->where);
3418           if (where != NULL && i->is_before)
3419             {
3420               do
3421                 where = where->prev;
3422               while (where != NULL && where->constraint < 0);
3423             }
3424           if (where == NULL)
3425             {
3426               einfo (_("%F%P: %s not found for insert\n"), i->where);
3427               return;
3428             }
3429
3430           /* Deal with reordering the output section statement list.  */
3431           if (last_os != NULL)
3432             {
3433               asection *first_sec, *last_sec;
3434               struct lang_output_section_statement_struct **next;
3435
3436               /* Snip out the output sections we are moving.  */
3437               first_os->prev->next = last_os->next;
3438               if (last_os->next == NULL)
3439                 {
3440                   next = &first_os->prev->next;
3441                   lang_output_section_statement.tail
3442                     = (lang_statement_union_type **) next;
3443                 }
3444               else
3445                 last_os->next->prev = first_os->prev;
3446               /* Add them in at the new position.  */
3447               last_os->next = where->next;
3448               if (where->next == NULL)
3449                 {
3450                   next = &last_os->next;
3451                   lang_output_section_statement.tail
3452                     = (lang_statement_union_type **) next;
3453                 }
3454               else
3455                 where->next->prev = last_os;
3456               first_os->prev = where;
3457               where->next = first_os;
3458
3459               /* Move the bfd sections in the same way.  */
3460               first_sec = NULL;
3461               last_sec = NULL;
3462               for (os = first_os; os != NULL; os = os->next)
3463                 {
3464                   os->constraint = -2 - os->constraint;
3465                   if (os->bfd_section != NULL
3466                       && os->bfd_section->owner != NULL)
3467                     {
3468                       last_sec = os->bfd_section;
3469                       if (first_sec == NULL)
3470                         first_sec = last_sec;
3471                     }
3472                   if (os == last_os)
3473                     break;
3474                 }
3475               if (last_sec != NULL)
3476                 {
3477                   asection *sec = where->bfd_section;
3478                   if (sec == NULL)
3479                     sec = output_prev_sec_find (where);
3480
3481                   /* The place we want to insert must come after the
3482                      sections we are moving.  So if we find no
3483                      section or if the section is the same as our
3484                      last section, then no move is needed.  */
3485                   if (sec != NULL && sec != last_sec)
3486                     {
3487                       /* Trim them off.  */
3488                       if (first_sec->prev != NULL)
3489                         first_sec->prev->next = last_sec->next;
3490                       else
3491                         link_info.output_bfd->sections = last_sec->next;
3492                       if (last_sec->next != NULL)
3493                         last_sec->next->prev = first_sec->prev;
3494                       else
3495                         link_info.output_bfd->section_last = first_sec->prev;
3496                       /* Add back.  */
3497                       last_sec->next = sec->next;
3498                       if (sec->next != NULL)
3499                         sec->next->prev = last_sec;
3500                       else
3501                         link_info.output_bfd->section_last = last_sec;
3502                       first_sec->prev = sec;
3503                       sec->next = first_sec;
3504                     }
3505                 }
3506
3507               first_os = NULL;
3508               last_os = NULL;
3509             }
3510
3511           ptr = insert_os_after (where);
3512           /* Snip everything after the abs_section output statement we
3513              know is at the start of the list, up to and including
3514              the insert statement we are currently processing.  */
3515           first = lang_output_section_statement.head->header.next;
3516           lang_output_section_statement.head->header.next = (*s)->header.next;
3517           /* Add them back where they belong.  */
3518           *s = *ptr;
3519           if (*s == NULL)
3520             statement_list.tail = s;
3521           *ptr = first;
3522           s = &lang_output_section_statement.head;
3523         }
3524     }
3525
3526   /* Undo constraint twiddling.  */
3527   for (os = first_os; os != NULL; os = os->next)
3528     {
3529       os->constraint = -2 - os->constraint;
3530       if (os == last_os)
3531         break;
3532     }
3533 }
3534
3535 /* An output section might have been removed after its statement was
3536    added.  For example, ldemul_before_allocation can remove dynamic
3537    sections if they turn out to be not needed.  Clean them up here.  */
3538
3539 void
3540 strip_excluded_output_sections (void)
3541 {
3542   lang_output_section_statement_type *os;
3543
3544   /* Run lang_size_sections (if not already done).  */
3545   if (expld.phase != lang_mark_phase_enum)
3546     {
3547       expld.phase = lang_mark_phase_enum;
3548       expld.dataseg.phase = exp_dataseg_none;
3549       one_lang_size_sections_pass (NULL, FALSE);
3550       lang_reset_memory_regions ();
3551     }
3552
3553   for (os = &lang_output_section_statement.head->output_section_statement;
3554        os != NULL;
3555        os = os->next)
3556     {
3557       asection *output_section;
3558       bfd_boolean exclude;
3559
3560       if (os->constraint < 0)
3561         continue;
3562
3563       output_section = os->bfd_section;
3564       if (output_section == NULL)
3565         continue;
3566
3567       exclude = (output_section->rawsize == 0
3568                  && (output_section->flags & SEC_KEEP) == 0
3569                  && !bfd_section_removed_from_list (link_info.output_bfd,
3570                                                     output_section));
3571
3572       /* Some sections have not yet been sized, notably .gnu.version,
3573          .dynsym, .dynstr and .hash.  These all have SEC_LINKER_CREATED
3574          input sections, so don't drop output sections that have such
3575          input sections unless they are also marked SEC_EXCLUDE.  */
3576       if (exclude && output_section->map_head.s != NULL)
3577         {
3578           asection *s;
3579
3580           for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
3581             if ((s->flags & SEC_LINKER_CREATED) != 0
3582                 && (s->flags & SEC_EXCLUDE) == 0)
3583               {
3584                 exclude = FALSE;
3585                 break;
3586               }
3587         }
3588
3589       /* TODO: Don't just junk map_head.s, turn them into link_orders.  */
3590       output_section->map_head.link_order = NULL;
3591       output_section->map_tail.link_order = NULL;
3592
3593       if (exclude)
3594         {
3595           /* We don't set bfd_section to NULL since bfd_section of the
3596              removed output section statement may still be used.  */
3597           if (!os->section_relative_symbol
3598               && !os->update_dot_tree)
3599             os->ignored = TRUE;
3600           output_section->flags |= SEC_EXCLUDE;
3601           bfd_section_list_remove (link_info.output_bfd, output_section);
3602           link_info.output_bfd->section_count--;
3603         }
3604     }
3605
3606   /* Stop future calls to lang_add_section from messing with map_head
3607      and map_tail link_order fields.  */
3608   stripped_excluded_sections = TRUE;
3609 }
3610
3611 static void
3612 print_output_section_statement
3613   (lang_output_section_statement_type *output_section_statement)
3614 {
3615   asection *section = output_section_statement->bfd_section;
3616   int len;
3617
3618   if (output_section_statement != abs_output_section)
3619     {
3620       minfo ("\n%s", output_section_statement->name);
3621
3622       if (section != NULL)
3623         {
3624           print_dot = section->vma;
3625
3626           len = strlen (output_section_statement->name);
3627           if (len >= SECTION_NAME_MAP_LENGTH - 1)
3628             {
3629               print_nl ();
3630               len = 0;
3631             }
3632           while (len < SECTION_NAME_MAP_LENGTH)
3633             {
3634               print_space ();
3635               ++len;
3636             }
3637
3638           minfo ("0x%V %W", section->vma, section->size);
3639
3640           if (section->vma != section->lma)
3641             minfo (_(" load address 0x%V"), section->lma);
3642
3643           if (output_section_statement->update_dot_tree != NULL)
3644             exp_fold_tree (output_section_statement->update_dot_tree,
3645                            bfd_abs_section_ptr, &print_dot);
3646         }
3647
3648       print_nl ();
3649     }
3650
3651   print_statement_list (output_section_statement->children.head,
3652                         output_section_statement);
3653 }
3654
3655 /* Scan for the use of the destination in the right hand side
3656    of an expression.  In such cases we will not compute the
3657    correct expression, since the value of DST that is used on
3658    the right hand side will be its final value, not its value
3659    just before this expression is evaluated.  */
3660
3661 static bfd_boolean
3662 scan_for_self_assignment (const char * dst, etree_type * rhs)
3663 {
3664   if (rhs == NULL || dst == NULL)
3665     return FALSE;
3666
3667   switch (rhs->type.node_class)
3668     {
3669     case etree_binary:
3670       return scan_for_self_assignment (dst, rhs->binary.lhs)
3671         ||   scan_for_self_assignment (dst, rhs->binary.rhs);
3672
3673     case etree_trinary:
3674       return scan_for_self_assignment (dst, rhs->trinary.lhs)
3675         ||   scan_for_self_assignment (dst, rhs->trinary.rhs);
3676
3677     case etree_assign:
3678     case etree_provided:
3679     case etree_provide:
3680       if (strcmp (dst, rhs->assign.dst) == 0)
3681         return TRUE;
3682       return scan_for_self_assignment (dst, rhs->assign.src);
3683
3684     case etree_unary:
3685       return scan_for_self_assignment (dst, rhs->unary.child);
3686
3687     case etree_value:
3688       if (rhs->value.str)
3689         return strcmp (dst, rhs->value.str) == 0;
3690       return FALSE;
3691
3692     case etree_name:
3693       if (rhs->name.name)
3694         return strcmp (dst, rhs->name.name) == 0;
3695       return FALSE;
3696
3697     default:
3698       break;
3699     }
3700
3701   return FALSE;
3702 }
3703
3704
3705 static void
3706 print_assignment (lang_assignment_statement_type *assignment,
3707                   lang_output_section_statement_type *output_section)
3708 {
3709   unsigned int i;
3710   bfd_boolean is_dot;
3711   bfd_boolean computation_is_valid = TRUE;
3712   etree_type *tree;
3713
3714   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3715     print_space ();
3716
3717   if (assignment->exp->type.node_class == etree_assert)
3718     {
3719       is_dot = FALSE;
3720       tree = assignment->exp->assert_s.child;
3721       computation_is_valid = TRUE;
3722     }
3723   else
3724     {
3725       const char *dst = assignment->exp->assign.dst;
3726
3727       is_dot = (dst[0] == '.' && dst[1] == 0);
3728       tree = assignment->exp->assign.src;
3729       computation_is_valid = is_dot || (scan_for_self_assignment (dst, tree) == FALSE);
3730     }
3731
3732   exp_fold_tree (tree, output_section->bfd_section, &print_dot);
3733   if (expld.result.valid_p)
3734     {
3735       bfd_vma value;
3736
3737       if (computation_is_valid)
3738         {
3739           value = expld.result.value;
3740
3741           if (expld.result.section)
3742             value += expld.result.section->vma;
3743
3744           minfo ("0x%V", value);
3745           if (is_dot)
3746             print_dot = value;
3747         }
3748       else
3749         {
3750           struct bfd_link_hash_entry *h;
3751
3752           h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
3753                                     FALSE, FALSE, TRUE);
3754           if (h)
3755             {
3756               value = h->u.def.value;
3757
3758               if (expld.result.section)
3759                 value += expld.result.section->vma;
3760
3761               minfo ("[0x%V]", value);
3762             }
3763           else
3764             minfo ("[unresolved]");
3765         }
3766     }
3767   else
3768     {
3769       minfo ("*undef*   ");
3770 #ifdef BFD64
3771       minfo ("        ");
3772 #endif
3773     }
3774
3775   minfo ("                ");
3776   exp_print_tree (assignment->exp);
3777   print_nl ();
3778 }
3779
3780 static void
3781 print_input_statement (lang_input_statement_type *statm)
3782 {
3783   if (statm->filename != NULL
3784       && (statm->the_bfd == NULL
3785           || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
3786     fprintf (config.map_file, "LOAD %s\n", statm->filename);
3787 }
3788
3789 /* Print all symbols defined in a particular section.  This is called
3790    via bfd_link_hash_traverse, or by print_all_symbols.  */
3791
3792 static bfd_boolean
3793 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
3794 {
3795   asection *sec = ptr;
3796
3797   if ((hash_entry->type == bfd_link_hash_defined
3798        || hash_entry->type == bfd_link_hash_defweak)
3799       && sec == hash_entry->u.def.section)
3800     {
3801       int i;
3802
3803       for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3804         print_space ();
3805       minfo ("0x%V   ",
3806              (hash_entry->u.def.value
3807               + hash_entry->u.def.section->output_offset
3808               + hash_entry->u.def.section->output_section->vma));
3809
3810       minfo ("             %T\n", hash_entry->root.string);
3811     }
3812
3813   return TRUE;
3814 }
3815
3816 static void
3817 print_all_symbols (asection *sec)
3818 {
3819   struct fat_user_section_struct *ud = get_userdata (sec);
3820   struct map_symbol_def *def;
3821
3822   if (!ud)
3823     return;
3824
3825   *ud->map_symbol_def_tail = 0;
3826   for (def = ud->map_symbol_def_head; def; def = def->next)
3827     print_one_symbol (def->entry, sec);
3828 }
3829
3830 /* Print information about an input section to the map file.  */
3831
3832 static void
3833 print_input_section (asection *i)
3834 {
3835   bfd_size_type size = i->size;
3836   int len;
3837   bfd_vma addr;
3838
3839   init_opb ();
3840
3841   print_space ();
3842   minfo ("%s", i->name);
3843
3844   len = 1 + strlen (i->name);
3845   if (len >= SECTION_NAME_MAP_LENGTH - 1)
3846     {
3847       print_nl ();
3848       len = 0;
3849     }
3850   while (len < SECTION_NAME_MAP_LENGTH)
3851     {
3852       print_space ();
3853       ++len;
3854     }
3855
3856   if (i->output_section != NULL
3857       && i->output_section->owner == link_info.output_bfd)
3858     addr = i->output_section->vma + i->output_offset;
3859   else
3860     {
3861       addr = print_dot;
3862       size = 0;
3863     }
3864
3865   minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
3866
3867   if (size != i->rawsize && i->rawsize != 0)
3868     {
3869       len = SECTION_NAME_MAP_LENGTH + 3;
3870 #ifdef BFD64
3871       len += 16;
3872 #else
3873       len += 8;
3874 #endif
3875       while (len > 0)
3876         {
3877           print_space ();
3878           --len;
3879         }
3880
3881       minfo (_("%W (size before relaxing)\n"), i->rawsize);
3882     }
3883
3884   if (i->output_section != NULL
3885       && i->output_section->owner == link_info.output_bfd)
3886     {
3887       if (link_info.reduce_memory_overheads)
3888         bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
3889       else
3890         print_all_symbols (i);
3891
3892       /* Update print_dot, but make sure that we do not move it
3893          backwards - this could happen if we have overlays and a
3894          later overlay is shorter than an earier one.  */
3895       if (addr + TO_ADDR (size) > print_dot)
3896         print_dot = addr + TO_ADDR (size);
3897     }
3898 }
3899
3900 static void
3901 print_fill_statement (lang_fill_statement_type *fill)
3902 {
3903   size_t size;
3904   unsigned char *p;
3905   fputs (" FILL mask 0x", config.map_file);
3906   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
3907     fprintf (config.map_file, "%02x", *p);
3908   fputs ("\n", config.map_file);
3909 }
3910
3911 static void
3912 print_data_statement (lang_data_statement_type *data)
3913 {
3914   int i;
3915   bfd_vma addr;
3916   bfd_size_type size;
3917   const char *name;
3918
3919   init_opb ();
3920   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3921     print_space ();
3922
3923   addr = data->output_offset;
3924   if (data->output_section != NULL)
3925     addr += data->output_section->vma;
3926
3927   switch (data->type)
3928     {
3929     default:
3930       abort ();
3931     case BYTE:
3932       size = BYTE_SIZE;
3933       name = "BYTE";
3934       break;
3935     case SHORT:
3936       size = SHORT_SIZE;
3937       name = "SHORT";
3938       break;
3939     case LONG:
3940       size = LONG_SIZE;
3941       name = "LONG";
3942       break;
3943     case QUAD:
3944       size = QUAD_SIZE;
3945       name = "QUAD";
3946       break;
3947     case SQUAD:
3948       size = QUAD_SIZE;
3949       name = "SQUAD";
3950       break;
3951     }
3952
3953   minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
3954
3955   if (data->exp->type.node_class != etree_value)
3956     {
3957       print_space ();
3958       exp_print_tree (data->exp);
3959     }
3960
3961   print_nl ();
3962
3963   print_dot = addr + TO_ADDR (size);
3964 }
3965
3966 /* Print an address statement.  These are generated by options like
3967    -Ttext.  */
3968
3969 static void
3970 print_address_statement (lang_address_statement_type *address)
3971 {
3972   minfo (_("Address of section %s set to "), address->section_name);
3973   exp_print_tree (address->address);
3974   print_nl ();
3975 }
3976
3977 /* Print a reloc statement.  */
3978
3979 static void
3980 print_reloc_statement (lang_reloc_statement_type *reloc)
3981 {
3982   int i;
3983   bfd_vma addr;
3984   bfd_size_type size;
3985
3986   init_opb ();
3987   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3988     print_space ();
3989
3990   addr = reloc->output_offset;
3991   if (reloc->output_section != NULL)
3992     addr += reloc->output_section->vma;
3993
3994   size = bfd_get_reloc_size (reloc->howto);
3995
3996   minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
3997
3998   if (reloc->name != NULL)
3999     minfo ("%s+", reloc->name);
4000   else
4001     minfo ("%s+", reloc->section->name);
4002
4003   exp_print_tree (reloc->addend_exp);
4004
4005   print_nl ();
4006
4007   print_dot = addr + TO_ADDR (size);
4008 }
4009
4010 static void
4011 print_padding_statement (lang_padding_statement_type *s)
4012 {
4013   int len;
4014   bfd_vma addr;
4015
4016   init_opb ();
4017   minfo (" *fill*");
4018
4019   len = sizeof " *fill*" - 1;
4020   while (len < SECTION_NAME_MAP_LENGTH)
4021     {
4022       print_space ();
4023       ++len;
4024     }
4025
4026   addr = s->output_offset;
4027   if (s->output_section != NULL)
4028     addr += s->output_section->vma;
4029   minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4030
4031   if (s->fill->size != 0)
4032     {
4033       size_t size;
4034       unsigned char *p;
4035       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4036         fprintf (config.map_file, "%02x", *p);
4037     }
4038
4039   print_nl ();
4040
4041   print_dot = addr + TO_ADDR (s->size);
4042 }
4043
4044 static void
4045 print_wild_statement (lang_wild_statement_type *w,
4046                       lang_output_section_statement_type *os)
4047 {
4048   struct wildcard_list *sec;
4049
4050   print_space ();
4051
4052   if (w->filenames_sorted)
4053     minfo ("SORT(");
4054   if (w->filename != NULL)
4055     minfo ("%s", w->filename);
4056   else
4057     minfo ("*");
4058   if (w->filenames_sorted)
4059     minfo (")");
4060
4061   minfo ("(");
4062   for (sec = w->section_list; sec; sec = sec->next)
4063     {
4064       if (sec->spec.sorted)
4065         minfo ("SORT(");
4066       if (sec->spec.exclude_name_list != NULL)
4067         {
4068           name_list *tmp;
4069           minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4070           for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4071             minfo (" %s", tmp->name);
4072           minfo (") ");
4073         }
4074       if (sec->spec.name != NULL)
4075         minfo ("%s", sec->spec.name);
4076       else
4077         minfo ("*");
4078       if (sec->spec.sorted)
4079         minfo (")");
4080       if (sec->next)
4081         minfo (" ");
4082     }
4083   minfo (")");
4084
4085   print_nl ();
4086
4087   print_statement_list (w->children.head, os);
4088 }
4089
4090 /* Print a group statement.  */
4091
4092 static void
4093 print_group (lang_group_statement_type *s,
4094              lang_output_section_statement_type *os)
4095 {
4096   fprintf (config.map_file, "START GROUP\n");
4097   print_statement_list (s->children.head, os);
4098   fprintf (config.map_file, "END GROUP\n");
4099 }
4100
4101 /* Print the list of statements in S.
4102    This can be called for any statement type.  */
4103
4104 static void
4105 print_statement_list (lang_statement_union_type *s,
4106                       lang_output_section_statement_type *os)
4107 {
4108   while (s != NULL)
4109     {
4110       print_statement (s, os);
4111       s = s->header.next;
4112     }
4113 }
4114
4115 /* Print the first statement in statement list S.
4116    This can be called for any statement type.  */
4117
4118 static void
4119 print_statement (lang_statement_union_type *s,
4120                  lang_output_section_statement_type *os)
4121 {
4122   switch (s->header.type)
4123     {
4124     default:
4125       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4126       FAIL ();
4127       break;
4128     case lang_constructors_statement_enum:
4129       if (constructor_list.head != NULL)
4130         {
4131           if (constructors_sorted)
4132             minfo (" SORT (CONSTRUCTORS)\n");
4133           else
4134             minfo (" CONSTRUCTORS\n");
4135           print_statement_list (constructor_list.head, os);
4136         }
4137       break;
4138     case lang_wild_statement_enum:
4139       print_wild_statement (&s->wild_statement, os);
4140       break;
4141     case lang_address_statement_enum:
4142       print_address_statement (&s->address_statement);
4143       break;
4144     case lang_object_symbols_statement_enum:
4145       minfo (" CREATE_OBJECT_SYMBOLS\n");
4146       break;
4147     case lang_fill_statement_enum:
4148       print_fill_statement (&s->fill_statement);
4149       break;
4150     case lang_data_statement_enum:
4151       print_data_statement (&s->data_statement);
4152       break;
4153     case lang_reloc_statement_enum:
4154       print_reloc_statement (&s->reloc_statement);
4155       break;
4156     case lang_input_section_enum:
4157       print_input_section (s->input_section.section);
4158       break;
4159     case lang_padding_statement_enum:
4160       print_padding_statement (&s->padding_statement);
4161       break;
4162     case lang_output_section_statement_enum:
4163       print_output_section_statement (&s->output_section_statement);
4164       break;
4165     case lang_assignment_statement_enum:
4166       print_assignment (&s->assignment_statement, os);
4167       break;
4168     case lang_target_statement_enum:
4169       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4170       break;
4171     case lang_output_statement_enum:
4172       minfo ("OUTPUT(%s", s->output_statement.name);
4173       if (output_target != NULL)
4174         minfo (" %s", output_target);
4175       minfo (")\n");
4176       break;
4177     case lang_input_statement_enum:
4178       print_input_statement (&s->input_statement);
4179       break;
4180     case lang_group_statement_enum:
4181       print_group (&s->group_statement, os);
4182       break;
4183     case lang_insert_statement_enum:
4184       minfo ("INSERT %s %s\n",
4185              s->insert_statement.is_before ? "BEFORE" : "AFTER",
4186              s->insert_statement.where);
4187       break;
4188     }
4189 }
4190
4191 static void
4192 print_statements (void)
4193 {
4194   print_statement_list (statement_list.head, abs_output_section);
4195 }
4196
4197 /* Print the first N statements in statement list S to STDERR.
4198    If N == 0, nothing is printed.
4199    If N < 0, the entire list is printed.
4200    Intended to be called from GDB.  */
4201
4202 void
4203 dprint_statement (lang_statement_union_type *s, int n)
4204 {
4205   FILE *map_save = config.map_file;
4206
4207   config.map_file = stderr;
4208
4209   if (n < 0)
4210     print_statement_list (s, abs_output_section);
4211   else
4212     {
4213       while (s && --n >= 0)
4214         {
4215           print_statement (s, abs_output_section);
4216           s = s->header.next;
4217         }
4218     }
4219
4220   config.map_file = map_save;
4221 }
4222
4223 static void
4224 insert_pad (lang_statement_union_type **ptr,
4225             fill_type *fill,
4226             unsigned int alignment_needed,
4227             asection *output_section,
4228             bfd_vma dot)
4229 {
4230   static fill_type zero_fill = { 1, { 0 } };
4231   lang_statement_union_type *pad = NULL;
4232
4233   if (ptr != &statement_list.head)
4234     pad = ((lang_statement_union_type *)
4235            ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4236   if (pad != NULL
4237       && pad->header.type == lang_padding_statement_enum
4238       && pad->padding_statement.output_section == output_section)
4239     {
4240       /* Use the existing pad statement.  */
4241     }
4242   else if ((pad = *ptr) != NULL
4243            && pad->header.type == lang_padding_statement_enum
4244            && pad->padding_statement.output_section == output_section)
4245     {
4246       /* Use the existing pad statement.  */
4247     }
4248   else
4249     {
4250       /* Make a new padding statement, linked into existing chain.  */
4251       pad = stat_alloc (sizeof (lang_padding_statement_type));
4252       pad->header.next = *ptr;
4253       *ptr = pad;
4254       pad->header.type = lang_padding_statement_enum;
4255       pad->padding_statement.output_section = output_section;
4256       if (fill == NULL)
4257         fill = &zero_fill;
4258       pad->padding_statement.fill = fill;
4259     }
4260   pad->padding_statement.output_offset = dot - output_section->vma;
4261   pad->padding_statement.size = alignment_needed;
4262   output_section->size += alignment_needed;
4263 }
4264
4265 /* Work out how much this section will move the dot point.  */
4266
4267 static bfd_vma
4268 size_input_section
4269   (lang_statement_union_type **this_ptr,
4270    lang_output_section_statement_type *output_section_statement,
4271    fill_type *fill,
4272    bfd_vma dot)
4273 {
4274   lang_input_section_type *is = &((*this_ptr)->input_section);
4275   asection *i = is->section;
4276
4277   if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
4278       && (i->flags & SEC_EXCLUDE) == 0)
4279     {
4280       unsigned int alignment_needed;
4281       asection *o;
4282
4283       /* Align this section first to the input sections requirement,
4284          then to the output section's requirement.  If this alignment
4285          is greater than any seen before, then record it too.  Perform
4286          the alignment by inserting a magic 'padding' statement.  */
4287
4288       if (output_section_statement->subsection_alignment != -1)
4289         i->alignment_power = output_section_statement->subsection_alignment;
4290
4291       o = output_section_statement->bfd_section;
4292       if (o->alignment_power < i->alignment_power)
4293         o->alignment_power = i->alignment_power;
4294
4295       alignment_needed = align_power (dot, i->alignment_power) - dot;
4296
4297       if (alignment_needed != 0)
4298         {
4299           insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4300           dot += alignment_needed;
4301         }
4302
4303       /* Remember where in the output section this input section goes.  */
4304
4305       i->output_offset = dot - o->vma;
4306
4307       /* Mark how big the output section must be to contain this now.  */
4308       dot += TO_ADDR (i->size);
4309       o->size = TO_SIZE (dot - o->vma);
4310     }
4311   else
4312     {
4313       i->output_offset = i->vma - output_section_statement->bfd_section->vma;
4314     }
4315
4316   return dot;
4317 }
4318
4319 static int
4320 sort_sections_by_lma (const void *arg1, const void *arg2)
4321 {
4322   const asection *sec1 = *(const asection **) arg1;
4323   const asection *sec2 = *(const asection **) arg2;
4324
4325   if (bfd_section_lma (sec1->owner, sec1)
4326       < bfd_section_lma (sec2->owner, sec2))
4327     return -1;
4328   else if (bfd_section_lma (sec1->owner, sec1)
4329            > bfd_section_lma (sec2->owner, sec2))
4330     return 1;
4331   else if (sec1->id < sec2->id)
4332     return -1;
4333   else if (sec1->id > sec2->id)
4334     return 1;
4335
4336   return 0;
4337 }
4338
4339 #define IGNORE_SECTION(s) \
4340   ((s->flags & SEC_NEVER_LOAD) != 0                             \
4341    || (s->flags & SEC_ALLOC) == 0                               \
4342    || ((s->flags & SEC_THREAD_LOCAL) != 0                       \
4343         && (s->flags & SEC_LOAD) == 0))
4344
4345 /* Check to see if any allocated sections overlap with other allocated
4346    sections.  This can happen if a linker script specifies the output
4347    section addresses of the two sections.  Also check whether any memory
4348    region has overflowed.  */
4349
4350 static void
4351 lang_check_section_addresses (void)
4352 {
4353   asection *s, *os;
4354   asection **sections, **spp;
4355   unsigned int count;
4356   bfd_vma s_start;
4357   bfd_vma s_end;
4358   bfd_vma os_start;
4359   bfd_vma os_end;
4360   bfd_size_type amt;
4361   lang_memory_region_type *m;
4362
4363   if (bfd_count_sections (link_info.output_bfd) <= 1)
4364     return;
4365
4366   amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4367   sections = xmalloc (amt);
4368
4369   /* Scan all sections in the output list.  */
4370   count = 0;
4371   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4372     {
4373       /* Only consider loadable sections with real contents.  */
4374       if (IGNORE_SECTION (s) || s->size == 0)
4375         continue;
4376
4377       sections[count] = s;
4378       count++;
4379     }
4380
4381   if (count <= 1)
4382     return;
4383
4384   qsort (sections, (size_t) count, sizeof (asection *),
4385          sort_sections_by_lma);
4386
4387   spp = sections;
4388   s = *spp++;
4389   s_start = bfd_section_lma (link_info.output_bfd, s);
4390   s_end = s_start + TO_ADDR (s->size) - 1;
4391   for (count--; count; count--)
4392     {
4393       /* We must check the sections' LMA addresses not their VMA
4394          addresses because overlay sections can have overlapping VMAs
4395          but they must have distinct LMAs.  */
4396       os = s;
4397       os_start = s_start;
4398       os_end = s_end;
4399       s = *spp++;
4400       s_start = bfd_section_lma (link_info.output_bfd, s);
4401       s_end = s_start + TO_ADDR (s->size) - 1;
4402
4403       /* Look for an overlap.  */
4404       if (s_end >= os_start && s_start <= os_end)
4405         einfo (_("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
4406                s->name, s_start, s_end, os->name, os_start, os_end);
4407     }
4408
4409   free (sections);
4410
4411   /* If any memory region has overflowed, report by how much.
4412      We do not issue this diagnostic for regions that had sections
4413      explicitly placed outside their bounds; os_region_check's
4414      diagnostics are adequate for that case.
4415
4416      FIXME: It is conceivable that m->current - (m->origin + m->length)
4417      might overflow a 32-bit integer.  There is, alas, no way to print
4418      a bfd_vma quantity in decimal.  */
4419   for (m = lang_memory_region_list; m; m = m->next)
4420     if (m->had_full_message)
4421       einfo (_("%X%P: region %s overflowed by %ld bytes\n"),
4422              m->name, (long)(m->current - (m->origin + m->length)));
4423
4424 }
4425
4426 /* Make sure the new address is within the region.  We explicitly permit the
4427    current address to be at the exact end of the region when the address is
4428    non-zero, in case the region is at the end of addressable memory and the
4429    calculation wraps around.  */
4430
4431 static void
4432 os_region_check (lang_output_section_statement_type *os,
4433                  lang_memory_region_type *region,
4434                  etree_type *tree,
4435                  bfd_vma base)
4436 {
4437   if ((region->current < region->origin
4438        || (region->current - region->origin > region->length))
4439       && ((region->current != region->origin + region->length)
4440           || base == 0))
4441     {
4442       if (tree != NULL)
4443         {
4444           einfo (_("%X%P: address 0x%v of %B section %s"
4445                    " is not within region %s\n"),
4446                  region->current,
4447                  os->bfd_section->owner,
4448                  os->bfd_section->name,
4449                  region->name);
4450         }
4451       else if (!region->had_full_message)
4452         {
4453           region->had_full_message = TRUE;
4454
4455           einfo (_("%X%P: %B section %s will not fit in region %s\n"),
4456                  os->bfd_section->owner,
4457                  os->bfd_section->name,
4458                  region->name);
4459         }
4460     }
4461 }
4462
4463 /* Set the sizes for all the output sections.  */
4464
4465 static bfd_vma
4466 lang_size_sections_1
4467   (lang_statement_union_type *s,
4468    lang_output_section_statement_type *output_section_statement,
4469    lang_statement_union_type **prev,
4470    fill_type *fill,
4471    bfd_vma dot,
4472    bfd_boolean *relax,
4473    bfd_boolean check_regions)
4474 {
4475   /* Size up the sections from their constituent parts.  */
4476   for (; s != NULL; s = s->header.next)
4477     {
4478       switch (s->header.type)
4479         {
4480         case lang_output_section_statement_enum:
4481           {
4482             bfd_vma newdot, after;
4483             lang_output_section_statement_type *os;
4484             lang_memory_region_type *r;
4485
4486             os = &s->output_section_statement;
4487             if (os->addr_tree != NULL)
4488               {
4489                 os->processed_vma = FALSE;
4490                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4491
4492                 if (expld.result.valid_p)
4493                   dot = expld.result.value + expld.result.section->vma;
4494                 else if (expld.phase != lang_mark_phase_enum)
4495                   einfo (_("%F%S: non constant or forward reference"
4496                            " address expression for section %s\n"),
4497                          os->name);
4498               }
4499
4500             if (os->bfd_section == NULL)
4501               /* This section was removed or never actually created.  */
4502               break;
4503
4504             /* If this is a COFF shared library section, use the size and
4505                address from the input section.  FIXME: This is COFF
4506                specific; it would be cleaner if there were some other way
4507                to do this, but nothing simple comes to mind.  */
4508             if (((bfd_get_flavour (link_info.output_bfd)
4509                   == bfd_target_ecoff_flavour)
4510                  || (bfd_get_flavour (link_info.output_bfd)
4511                      == bfd_target_coff_flavour))
4512                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4513               {
4514                 asection *input;
4515
4516                 if (os->children.head == NULL
4517                     || os->children.head->header.next != NULL
4518                     || (os->children.head->header.type
4519                         != lang_input_section_enum))
4520                   einfo (_("%P%X: Internal error on COFF shared library"
4521                            " section %s\n"), os->name);
4522
4523                 input = os->children.head->input_section.section;
4524                 bfd_set_section_vma (os->bfd_section->owner,
4525                                      os->bfd_section,
4526                                      bfd_section_vma (input->owner, input));
4527                 os->bfd_section->size = input->size;
4528                 break;
4529               }
4530
4531             newdot = dot;
4532             if (bfd_is_abs_section (os->bfd_section))
4533               {
4534                 /* No matter what happens, an abs section starts at zero.  */
4535                 ASSERT (os->bfd_section->vma == 0);
4536               }
4537             else
4538               {
4539                 int align;
4540
4541                 if (os->addr_tree == NULL)
4542                   {
4543                     /* No address specified for this section, get one
4544                        from the region specification.  */
4545                     if (os->region == NULL
4546                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4547                             && os->region->name[0] == '*'
4548                             && strcmp (os->region->name,
4549                                        DEFAULT_MEMORY_REGION) == 0))
4550                       {
4551                         os->region = lang_memory_default (os->bfd_section);
4552                       }
4553
4554                     /* If a loadable section is using the default memory
4555                        region, and some non default memory regions were
4556                        defined, issue an error message.  */
4557                     if (!os->ignored
4558                         && !IGNORE_SECTION (os->bfd_section)
4559                         && ! link_info.relocatable
4560                         && check_regions
4561                         && strcmp (os->region->name,
4562                                    DEFAULT_MEMORY_REGION) == 0
4563                         && lang_memory_region_list != NULL
4564                         && (strcmp (lang_memory_region_list->name,
4565                                     DEFAULT_MEMORY_REGION) != 0
4566                             || lang_memory_region_list->next != NULL)
4567                         && expld.phase != lang_mark_phase_enum)
4568                       {
4569                         /* By default this is an error rather than just a
4570                            warning because if we allocate the section to the
4571                            default memory region we can end up creating an
4572                            excessively large binary, or even seg faulting when
4573                            attempting to perform a negative seek.  See
4574                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
4575                            for an example of this.  This behaviour can be
4576                            overridden by the using the --no-check-sections
4577                            switch.  */
4578                         if (command_line.check_section_addresses)
4579                           einfo (_("%P%F: error: no memory region specified"
4580                                    " for loadable section `%s'\n"),
4581                                  bfd_get_section_name (link_info.output_bfd,
4582                                                        os->bfd_section));
4583                         else
4584                           einfo (_("%P: warning: no memory region specified"
4585                                    " for loadable section `%s'\n"),
4586                                  bfd_get_section_name (link_info.output_bfd,
4587                                                        os->bfd_section));
4588                       }
4589
4590                     newdot = os->region->current;
4591                     align = os->bfd_section->alignment_power;
4592                   }
4593                 else
4594                   align = os->section_alignment;
4595
4596                 /* Align to what the section needs.  */
4597                 if (align > 0)
4598                   {
4599                     bfd_vma savedot = newdot;
4600                     newdot = align_power (newdot, align);
4601
4602                     if (newdot != savedot
4603                         && (config.warn_section_align
4604                             || os->addr_tree != NULL)
4605                         && expld.phase != lang_mark_phase_enum)
4606                       einfo (_("%P: warning: changing start of section"
4607                                " %s by %lu bytes\n"),
4608                              os->name, (unsigned long) (newdot - savedot));
4609                   }
4610
4611                 bfd_set_section_vma (0, os->bfd_section, newdot);
4612
4613                 os->bfd_section->output_offset = 0;
4614               }
4615
4616             lang_size_sections_1 (os->children.head, os, &os->children.head,
4617                                   os->fill, newdot, relax, check_regions);
4618
4619             os->processed_vma = TRUE;
4620
4621             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4622               /* Except for some special linker created sections,
4623                  no output section should change from zero size
4624                  after strip_excluded_output_sections.  A non-zero
4625                  size on an ignored section indicates that some
4626                  input section was not sized early enough.  */
4627               ASSERT (os->bfd_section->size == 0);
4628             else
4629               {
4630                 dot = os->bfd_section->vma;
4631
4632                 /* Put the section within the requested block size, or
4633                    align at the block boundary.  */
4634                 after = ((dot
4635                           + TO_ADDR (os->bfd_section->size)
4636                           + os->block_value - 1)
4637                          & - (bfd_vma) os->block_value);
4638
4639                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4640               }
4641
4642             /* Set section lma.  */
4643             r = os->region;
4644             if (r == NULL)
4645               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4646
4647             if (os->load_base)
4648               {
4649                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4650                 os->bfd_section->lma = lma;
4651               }
4652             else if (os->lma_region != NULL)
4653               {
4654                 bfd_vma lma = os->lma_region->current;
4655
4656                 if (os->section_alignment != -1)
4657                   lma = align_power (lma, os->section_alignment);
4658                 os->bfd_section->lma = lma;
4659               }
4660             else if (r->last_os != NULL
4661                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
4662               {
4663                 bfd_vma lma;
4664                 asection *last;
4665
4666                 last = r->last_os->output_section_statement.bfd_section;
4667
4668                 /* A backwards move of dot should be accompanied by
4669                    an explicit assignment to the section LMA (ie.
4670                    os->load_base set) because backwards moves can
4671                    create overlapping LMAs.  */
4672                 if (dot < last->vma
4673                     && os->bfd_section->size != 0
4674                     && dot + os->bfd_section->size <= last->vma)
4675                   {
4676                     /* If dot moved backwards then leave lma equal to
4677                        vma.  This is the old default lma, which might
4678                        just happen to work when the backwards move is
4679                        sufficiently large.  Nag if this changes anything,
4680                        so people can fix their linker scripts.  */
4681
4682                     if (last->vma != last->lma)
4683                       einfo (_("%P: warning: dot moved backwards before `%s'\n"),
4684                              os->name);
4685                   }
4686                 else
4687                   {
4688                     /* If this is an overlay, set the current lma to that
4689                        at the end of the previous section.  */
4690                     if (os->sectype == overlay_section)
4691                       lma = last->lma + last->size;
4692
4693                     /* Otherwise, keep the same lma to vma relationship
4694                        as the previous section.  */
4695                     else
4696                       lma = dot + last->lma - last->vma;
4697
4698                     if (os->section_alignment != -1)
4699                       lma = align_power (lma, os->section_alignment);
4700                     os->bfd_section->lma = lma;
4701                   }
4702               }
4703             os->processed_lma = TRUE;
4704
4705             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4706               break;
4707
4708             /* Keep track of normal sections using the default
4709                lma region.  We use this to set the lma for
4710                following sections.  Overlays or other linker
4711                script assignment to lma might mean that the
4712                default lma == vma is incorrect.
4713                To avoid warnings about dot moving backwards when using
4714                -Ttext, don't start tracking sections until we find one
4715                of non-zero size or with lma set differently to vma.  */
4716             if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4717                  || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
4718                 && (os->bfd_section->flags & SEC_ALLOC) != 0
4719                 && (os->bfd_section->size != 0
4720                     || (r->last_os == NULL
4721                         && os->bfd_section->vma != os->bfd_section->lma)
4722                     || (r->last_os != NULL
4723                         && dot >= (r->last_os->output_section_statement
4724                                    .bfd_section->vma)))
4725                 && os->lma_region == NULL
4726                 && !link_info.relocatable)
4727               r->last_os = s;
4728
4729             /* .tbss sections effectively have zero size.  */
4730             if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4731                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
4732                 || link_info.relocatable)
4733               dot += TO_ADDR (os->bfd_section->size);
4734
4735             if (os->update_dot_tree != 0)
4736               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
4737
4738             /* Update dot in the region ?
4739                We only do this if the section is going to be allocated,
4740                since unallocated sections do not contribute to the region's
4741                overall size in memory.
4742
4743                If the SEC_NEVER_LOAD bit is not set, it will affect the
4744                addresses of sections after it. We have to update
4745                dot.  */
4746             if (os->region != NULL
4747                 && ((os->bfd_section->flags & SEC_NEVER_LOAD) == 0
4748                     || (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))))
4749               {
4750                 os->region->current = dot;
4751
4752                 if (check_regions)
4753                   /* Make sure the new address is within the region.  */
4754                   os_region_check (os, os->region, os->addr_tree,
4755                                    os->bfd_section->vma);
4756
4757                 if (os->lma_region != NULL && os->lma_region != os->region
4758                     && (os->bfd_section->flags & SEC_LOAD))
4759                   {
4760                     os->lma_region->current
4761                       = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
4762
4763                     if (check_regions)
4764                       os_region_check (os, os->lma_region, NULL,
4765                                        os->bfd_section->lma);
4766                   }
4767               }
4768           }
4769           break;
4770
4771         case lang_constructors_statement_enum:
4772           dot = lang_size_sections_1 (constructor_list.head,
4773                                       output_section_statement,
4774                                       &s->wild_statement.children.head,
4775                                       fill, dot, relax, check_regions);
4776           break;
4777
4778         case lang_data_statement_enum:
4779           {
4780             unsigned int size = 0;
4781
4782             s->data_statement.output_offset =
4783               dot - output_section_statement->bfd_section->vma;
4784             s->data_statement.output_section =
4785               output_section_statement->bfd_section;
4786
4787             /* We might refer to provided symbols in the expression, and
4788                need to mark them as needed.  */
4789             exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
4790
4791             switch (s->data_statement.type)
4792               {
4793               default:
4794                 abort ();
4795               case QUAD:
4796               case SQUAD:
4797                 size = QUAD_SIZE;
4798                 break;
4799               case LONG:
4800                 size = LONG_SIZE;
4801                 break;
4802               case SHORT:
4803                 size = SHORT_SIZE;
4804                 break;
4805               case BYTE:
4806                 size = BYTE_SIZE;
4807                 break;
4808               }
4809             if (size < TO_SIZE ((unsigned) 1))
4810               size = TO_SIZE ((unsigned) 1);
4811             dot += TO_ADDR (size);
4812             output_section_statement->bfd_section->size += size;
4813           }
4814           break;
4815
4816         case lang_reloc_statement_enum:
4817           {
4818             int size;
4819
4820             s->reloc_statement.output_offset =
4821               dot - output_section_statement->bfd_section->vma;
4822             s->reloc_statement.output_section =
4823               output_section_statement->bfd_section;
4824             size = bfd_get_reloc_size (s->reloc_statement.howto);
4825             dot += TO_ADDR (size);
4826             output_section_statement->bfd_section->size += size;
4827           }
4828           break;
4829
4830         case lang_wild_statement_enum:
4831           dot = lang_size_sections_1 (s->wild_statement.children.head,
4832                                       output_section_statement,
4833                                       &s->wild_statement.children.head,
4834                                       fill, dot, relax, check_regions);
4835           break;
4836
4837         case lang_object_symbols_statement_enum:
4838           link_info.create_object_symbols_section =
4839             output_section_statement->bfd_section;
4840           break;
4841
4842         case lang_output_statement_enum:
4843         case lang_target_statement_enum:
4844           break;
4845
4846         case lang_input_section_enum:
4847           {
4848             asection *i;
4849
4850             i = (*prev)->input_section.section;
4851             if (relax)
4852               {
4853                 bfd_boolean again;
4854
4855                 if (! bfd_relax_section (i->owner, i, &link_info, &again))
4856                   einfo (_("%P%F: can't relax section: %E\n"));
4857                 if (again)
4858                   *relax = TRUE;
4859               }
4860             dot = size_input_section (prev, output_section_statement,
4861                                       output_section_statement->fill, dot);
4862           }
4863           break;
4864
4865         case lang_input_statement_enum:
4866           break;
4867
4868         case lang_fill_statement_enum:
4869           s->fill_statement.output_section =
4870             output_section_statement->bfd_section;
4871
4872           fill = s->fill_statement.fill;
4873           break;
4874
4875         case lang_assignment_statement_enum:
4876           {
4877             bfd_vma newdot = dot;
4878             etree_type *tree = s->assignment_statement.exp;
4879
4880             expld.dataseg.relro = exp_dataseg_relro_none;
4881
4882             exp_fold_tree (tree,
4883                            output_section_statement->bfd_section,
4884                            &newdot);
4885
4886             if (expld.dataseg.relro == exp_dataseg_relro_start)
4887               {
4888                 if (!expld.dataseg.relro_start_stat)
4889                   expld.dataseg.relro_start_stat = s;
4890                 else
4891                   {
4892                     ASSERT (expld.dataseg.relro_start_stat == s);
4893                   }
4894               }
4895             else if (expld.dataseg.relro == exp_dataseg_relro_end)
4896               {
4897                 if (!expld.dataseg.relro_end_stat)
4898                   expld.dataseg.relro_end_stat = s;
4899                 else
4900                   {
4901                     ASSERT (expld.dataseg.relro_end_stat == s);
4902                   }
4903               }
4904             expld.dataseg.relro = exp_dataseg_relro_none;
4905
4906             /* This symbol is relative to this section.  */
4907             if ((tree->type.node_class == etree_provided
4908                  || tree->type.node_class == etree_assign)
4909                 && (tree->assign.dst [0] != '.'
4910                     || tree->assign.dst [1] != '\0'))
4911               output_section_statement->section_relative_symbol = 1;
4912
4913             if (!output_section_statement->ignored)
4914               {
4915                 if (output_section_statement == abs_output_section)
4916                   {
4917                     /* If we don't have an output section, then just adjust
4918                        the default memory address.  */
4919                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
4920                                                FALSE)->current = newdot;
4921                   }
4922                 else if (newdot != dot)
4923                   {
4924                     /* Insert a pad after this statement.  We can't
4925                        put the pad before when relaxing, in case the
4926                        assignment references dot.  */
4927                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
4928                                 output_section_statement->bfd_section, dot);
4929
4930                     /* Don't neuter the pad below when relaxing.  */
4931                     s = s->header.next;
4932
4933                     /* If dot is advanced, this implies that the section
4934                        should have space allocated to it, unless the
4935                        user has explicitly stated that the section
4936                        should never be loaded.  */
4937                     if (!(output_section_statement->flags & SEC_NEVER_LOAD))
4938                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
4939                   }
4940                 dot = newdot;
4941               }
4942           }
4943           break;
4944
4945         case lang_padding_statement_enum:
4946           /* If this is the first time lang_size_sections is called,
4947              we won't have any padding statements.  If this is the
4948              second or later passes when relaxing, we should allow
4949              padding to shrink.  If padding is needed on this pass, it
4950              will be added back in.  */
4951           s->padding_statement.size = 0;
4952
4953           /* Make sure output_offset is valid.  If relaxation shrinks
4954              the section and this pad isn't needed, it's possible to
4955              have output_offset larger than the final size of the
4956              section.  bfd_set_section_contents will complain even for
4957              a pad size of zero.  */
4958           s->padding_statement.output_offset
4959             = dot - output_section_statement->bfd_section->vma;
4960           break;
4961
4962         case lang_group_statement_enum:
4963           dot = lang_size_sections_1 (s->group_statement.children.head,
4964                                       output_section_statement,
4965                                       &s->group_statement.children.head,
4966                                       fill, dot, relax, check_regions);
4967           break;
4968
4969         case lang_insert_statement_enum:
4970           break;
4971
4972           /* We can only get here when relaxing is turned on.  */
4973         case lang_address_statement_enum:
4974           break;
4975
4976         default:
4977           FAIL ();
4978           break;
4979         }
4980       prev = &s->header.next;
4981     }
4982   return dot;
4983 }
4984
4985 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
4986    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
4987    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
4988    segments.  We are allowed an opportunity to override this decision.  */
4989
4990 bfd_boolean
4991 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
4992                                     bfd * abfd ATTRIBUTE_UNUSED,
4993                                     asection * current_section,
4994                                     asection * previous_section,
4995                                     bfd_boolean new_segment)
4996 {
4997   lang_output_section_statement_type * cur;
4998   lang_output_section_statement_type * prev;
4999
5000   /* The checks below are only necessary when the BFD library has decided
5001      that the two sections ought to be placed into the same segment.  */
5002   if (new_segment)
5003     return TRUE;
5004
5005   /* Paranoia checks.  */
5006   if (current_section == NULL || previous_section == NULL)
5007     return new_segment;
5008
5009   /* Find the memory regions associated with the two sections.
5010      We call lang_output_section_find() here rather than scanning the list
5011      of output sections looking for a matching section pointer because if
5012      we have a large number of sections then a hash lookup is faster.  */
5013   cur  = lang_output_section_find (current_section->name);
5014   prev = lang_output_section_find (previous_section->name);
5015
5016   /* More paranoia.  */
5017   if (cur == NULL || prev == NULL)
5018     return new_segment;
5019
5020   /* If the regions are different then force the sections to live in
5021      different segments.  See the email thread starting at the following
5022      URL for the reasons why this is necessary:
5023      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5024   return cur->region != prev->region;
5025 }
5026
5027 void
5028 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5029 {
5030   lang_statement_iteration++;
5031   lang_size_sections_1 (statement_list.head, abs_output_section,
5032                         &statement_list.head, 0, 0, relax, check_regions);
5033 }
5034
5035 void
5036 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5037 {
5038   expld.phase = lang_allocating_phase_enum;
5039   expld.dataseg.phase = exp_dataseg_none;
5040
5041   one_lang_size_sections_pass (relax, check_regions);
5042   if (expld.dataseg.phase == exp_dataseg_end_seen
5043       && link_info.relro && expld.dataseg.relro_end)
5044     {
5045       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5046          to put expld.dataseg.relro on a (common) page boundary.  */
5047       bfd_vma min_base, old_base, relro_end, maxpage;
5048
5049       expld.dataseg.phase = exp_dataseg_relro_adjust;
5050       maxpage = expld.dataseg.maxpagesize;
5051       /* MIN_BASE is the absolute minimum address we are allowed to start the
5052          read-write segment (byte before will be mapped read-only).  */
5053       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5054       /* OLD_BASE is the address for a feasible minimum address which will
5055          still not cause a data overlap inside MAXPAGE causing file offset skip
5056          by MAXPAGE.  */
5057       old_base = expld.dataseg.base;
5058       expld.dataseg.base += (-expld.dataseg.relro_end
5059                              & (expld.dataseg.pagesize - 1));
5060       /* Compute the expected PT_GNU_RELRO segment end.  */
5061       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5062                    & ~(expld.dataseg.pagesize - 1));
5063       if (min_base + maxpage < expld.dataseg.base)
5064         {
5065           expld.dataseg.base -= maxpage;
5066           relro_end -= maxpage;
5067         }
5068       lang_reset_memory_regions ();
5069       one_lang_size_sections_pass (relax, check_regions);
5070       if (expld.dataseg.relro_end > relro_end)
5071         {
5072           /* The alignment of sections between DATA_SEGMENT_ALIGN
5073              and DATA_SEGMENT_RELRO_END caused huge padding to be
5074              inserted at DATA_SEGMENT_RELRO_END.  Try to start a bit lower so
5075              that the section alignments will fit in.  */
5076           asection *sec;
5077           unsigned int max_alignment_power = 0;
5078
5079           /* Find maximum alignment power of sections between
5080              DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5081           for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5082             if (sec->vma >= expld.dataseg.base
5083                 && sec->vma < expld.dataseg.relro_end
5084                 && sec->alignment_power > max_alignment_power)
5085               max_alignment_power = sec->alignment_power;
5086
5087           if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5088             {
5089               if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
5090                 expld.dataseg.base += expld.dataseg.pagesize;
5091               expld.dataseg.base -= (1 << max_alignment_power);
5092               lang_reset_memory_regions ();
5093               one_lang_size_sections_pass (relax, check_regions);
5094             }
5095         }
5096       link_info.relro_start = expld.dataseg.base;
5097       link_info.relro_end = expld.dataseg.relro_end;
5098     }
5099   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5100     {
5101       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5102          a page could be saved in the data segment.  */
5103       bfd_vma first, last;
5104
5105       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5106       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5107       if (first && last
5108           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5109               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5110           && first + last <= expld.dataseg.pagesize)
5111         {
5112           expld.dataseg.phase = exp_dataseg_adjust;
5113           lang_reset_memory_regions ();
5114           one_lang_size_sections_pass (relax, check_regions);
5115         }
5116     }
5117
5118   expld.phase = lang_final_phase_enum;
5119 }
5120
5121 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5122
5123 static bfd_vma
5124 lang_do_assignments_1 (lang_statement_union_type *s,
5125                        lang_output_section_statement_type *current_os,
5126                        fill_type *fill,
5127                        bfd_vma dot)
5128 {
5129   for (; s != NULL; s = s->header.next)
5130     {
5131       switch (s->header.type)
5132         {
5133         case lang_constructors_statement_enum:
5134           dot = lang_do_assignments_1 (constructor_list.head,
5135                                        current_os, fill, dot);
5136           break;
5137
5138         case lang_output_section_statement_enum:
5139           {
5140             lang_output_section_statement_type *os;
5141
5142             os = &(s->output_section_statement);
5143             if (os->bfd_section != NULL && !os->ignored)
5144               {
5145                 dot = os->bfd_section->vma;
5146
5147                 lang_do_assignments_1 (os->children.head, os, os->fill, dot);
5148
5149                 /* .tbss sections effectively have zero size.  */
5150                 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5151                     || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5152                     || link_info.relocatable)
5153                   dot += TO_ADDR (os->bfd_section->size);
5154
5155                 if (os->update_dot_tree != NULL)
5156                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5157               }
5158           }
5159           break;
5160
5161         case lang_wild_statement_enum:
5162
5163           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5164                                        current_os, fill, dot);
5165           break;
5166
5167         case lang_object_symbols_statement_enum:
5168         case lang_output_statement_enum:
5169         case lang_target_statement_enum:
5170           break;
5171
5172         case lang_data_statement_enum:
5173           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5174           if (expld.result.valid_p)
5175             s->data_statement.value = (expld.result.value
5176                                        + expld.result.section->vma);
5177           else
5178             einfo (_("%F%P: invalid data statement\n"));
5179           {
5180             unsigned int size;
5181             switch (s->data_statement.type)
5182               {
5183               default:
5184                 abort ();
5185               case QUAD:
5186               case SQUAD:
5187                 size = QUAD_SIZE;
5188                 break;
5189               case LONG:
5190                 size = LONG_SIZE;
5191                 break;
5192               case SHORT:
5193                 size = SHORT_SIZE;
5194                 break;
5195               case BYTE:
5196                 size = BYTE_SIZE;
5197                 break;
5198               }
5199             if (size < TO_SIZE ((unsigned) 1))
5200               size = TO_SIZE ((unsigned) 1);
5201             dot += TO_ADDR (size);
5202           }
5203           break;
5204
5205         case lang_reloc_statement_enum:
5206           exp_fold_tree (s->reloc_statement.addend_exp,
5207                          bfd_abs_section_ptr, &dot);
5208           if (expld.result.valid_p)
5209             s->reloc_statement.addend_value = expld.result.value;
5210           else
5211             einfo (_("%F%P: invalid reloc statement\n"));
5212           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5213           break;
5214
5215         case lang_input_section_enum:
5216           {
5217             asection *in = s->input_section.section;
5218
5219             if ((in->flags & SEC_EXCLUDE) == 0)
5220               dot += TO_ADDR (in->size);
5221           }
5222           break;
5223
5224         case lang_input_statement_enum:
5225           break;
5226
5227         case lang_fill_statement_enum:
5228           fill = s->fill_statement.fill;
5229           break;
5230
5231         case lang_assignment_statement_enum:
5232           exp_fold_tree (s->assignment_statement.exp,
5233                          current_os->bfd_section,
5234                          &dot);
5235           break;
5236
5237         case lang_padding_statement_enum:
5238           dot += TO_ADDR (s->padding_statement.size);
5239           break;
5240
5241         case lang_group_statement_enum:
5242           dot = lang_do_assignments_1 (s->group_statement.children.head,
5243                                        current_os, fill, dot);
5244           break;
5245
5246         case lang_insert_statement_enum:
5247           break;
5248
5249         case lang_address_statement_enum:
5250           break;
5251
5252         default:
5253           FAIL ();
5254           break;
5255         }
5256     }
5257   return dot;
5258 }
5259
5260 void
5261 lang_do_assignments (void)
5262 {
5263   lang_statement_iteration++;
5264   lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
5265 }
5266
5267 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5268    operator .startof. (section_name), it produces an undefined symbol
5269    .startof.section_name.  Similarly, when it sees
5270    .sizeof. (section_name), it produces an undefined symbol
5271    .sizeof.section_name.  For all the output sections, we look for
5272    such symbols, and set them to the correct value.  */
5273
5274 static void
5275 lang_set_startof (void)
5276 {
5277   asection *s;
5278
5279   if (link_info.relocatable)
5280     return;
5281
5282   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5283     {
5284       const char *secname;
5285       char *buf;
5286       struct bfd_link_hash_entry *h;
5287
5288       secname = bfd_get_section_name (link_info.output_bfd, s);
5289       buf = xmalloc (10 + strlen (secname));
5290
5291       sprintf (buf, ".startof.%s", secname);
5292       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5293       if (h != NULL && h->type == bfd_link_hash_undefined)
5294         {
5295           h->type = bfd_link_hash_defined;
5296           h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5297           h->u.def.section = bfd_abs_section_ptr;
5298         }
5299
5300       sprintf (buf, ".sizeof.%s", secname);
5301       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5302       if (h != NULL && h->type == bfd_link_hash_undefined)
5303         {
5304           h->type = bfd_link_hash_defined;
5305           h->u.def.value = TO_ADDR (s->size);
5306           h->u.def.section = bfd_abs_section_ptr;
5307         }
5308
5309       free (buf);
5310     }
5311 }
5312
5313 static void
5314 lang_end (void)
5315 {
5316   struct bfd_link_hash_entry *h;
5317   bfd_boolean warn;
5318
5319   if ((link_info.relocatable && !link_info.gc_sections)
5320       || link_info.shared)
5321     warn = entry_from_cmdline;
5322   else
5323     warn = TRUE;
5324
5325   /* Force the user to specify a root when generating a relocatable with
5326      --gc-sections.  */
5327   if (link_info.gc_sections && link_info.relocatable
5328       && (entry_symbol.name == NULL
5329           && ldlang_undef_chain_list_head == NULL))
5330     einfo (_("%P%F: gc-sections requires either an entry or "
5331              "an undefined symbol\n"));
5332
5333   if (entry_symbol.name == NULL)
5334     {
5335       /* No entry has been specified.  Look for the default entry, but
5336          don't warn if we don't find it.  */
5337       entry_symbol.name = entry_symbol_default;
5338       warn = FALSE;
5339     }
5340
5341   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5342                             FALSE, FALSE, TRUE);
5343   if (h != NULL
5344       && (h->type == bfd_link_hash_defined
5345           || h->type == bfd_link_hash_defweak)
5346       && h->u.def.section->output_section != NULL)
5347     {
5348       bfd_vma val;
5349
5350       val = (h->u.def.value
5351              + bfd_get_section_vma (link_info.output_bfd,
5352                                     h->u.def.section->output_section)
5353              + h->u.def.section->output_offset);
5354       if (! bfd_set_start_address (link_info.output_bfd, val))
5355         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5356     }
5357   else
5358     {
5359       bfd_vma val;
5360       const char *send;
5361
5362       /* We couldn't find the entry symbol.  Try parsing it as a
5363          number.  */
5364       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5365       if (*send == '\0')
5366         {
5367           if (! bfd_set_start_address (link_info.output_bfd, val))
5368             einfo (_("%P%F: can't set start address\n"));
5369         }
5370       else
5371         {
5372           asection *ts;
5373
5374           /* Can't find the entry symbol, and it's not a number.  Use
5375              the first address in the text section.  */
5376           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5377           if (ts != NULL)
5378             {
5379               if (warn)
5380                 einfo (_("%P: warning: cannot find entry symbol %s;"
5381                          " defaulting to %V\n"),
5382                        entry_symbol.name,
5383                        bfd_get_section_vma (link_info.output_bfd, ts));
5384               if (!(bfd_set_start_address
5385                     (link_info.output_bfd,
5386                      bfd_get_section_vma (link_info.output_bfd, ts))))
5387                 einfo (_("%P%F: can't set start address\n"));
5388             }
5389           else
5390             {
5391               if (warn)
5392                 einfo (_("%P: warning: cannot find entry symbol %s;"
5393                          " not setting start address\n"),
5394                        entry_symbol.name);
5395             }
5396         }
5397     }
5398
5399   /* Don't bfd_hash_table_free (&lang_definedness_table);
5400      map file output may result in a call of lang_track_definedness.  */
5401 }
5402
5403 /* This is a small function used when we want to ignore errors from
5404    BFD.  */
5405
5406 static void
5407 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5408 {
5409   /* Don't do anything.  */
5410 }
5411
5412 /* Check that the architecture of all the input files is compatible
5413    with the output file.  Also call the backend to let it do any
5414    other checking that is needed.  */
5415
5416 static void
5417 lang_check (void)
5418 {
5419   lang_statement_union_type *file;
5420   bfd *input_bfd;
5421   const bfd_arch_info_type *compatible;
5422
5423   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5424     {
5425       input_bfd = file->input_statement.the_bfd;
5426       compatible
5427         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5428                                    command_line.accept_unknown_input_arch);
5429
5430       /* In general it is not possible to perform a relocatable
5431          link between differing object formats when the input
5432          file has relocations, because the relocations in the
5433          input format may not have equivalent representations in
5434          the output format (and besides BFD does not translate
5435          relocs for other link purposes than a final link).  */
5436       if ((link_info.relocatable || link_info.emitrelocations)
5437           && (compatible == NULL
5438               || (bfd_get_flavour (input_bfd)
5439                   != bfd_get_flavour (link_info.output_bfd)))
5440           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5441         {
5442           einfo (_("%P%F: Relocatable linking with relocations from"
5443                    " format %s (%B) to format %s (%B) is not supported\n"),
5444                  bfd_get_target (input_bfd), input_bfd,
5445                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5446           /* einfo with %F exits.  */
5447         }
5448
5449       if (compatible == NULL)
5450         {
5451           if (command_line.warn_mismatch)
5452             einfo (_("%P%X: %s architecture of input file `%B'"
5453                      " is incompatible with %s output\n"),
5454                    bfd_printable_name (input_bfd), input_bfd,
5455                    bfd_printable_name (link_info.output_bfd));
5456         }
5457       else if (bfd_count_sections (input_bfd))
5458         {
5459           /* If the input bfd has no contents, it shouldn't set the
5460              private data of the output bfd.  */
5461
5462           bfd_error_handler_type pfn = NULL;
5463
5464           /* If we aren't supposed to warn about mismatched input
5465              files, temporarily set the BFD error handler to a
5466              function which will do nothing.  We still want to call
5467              bfd_merge_private_bfd_data, since it may set up
5468              information which is needed in the output file.  */
5469           if (! command_line.warn_mismatch)
5470             pfn = bfd_set_error_handler (ignore_bfd_errors);
5471           if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5472             {
5473               if (command_line.warn_mismatch)
5474                 einfo (_("%P%X: failed to merge target specific data"
5475                          " of file %B\n"), input_bfd);
5476             }
5477           if (! command_line.warn_mismatch)
5478             bfd_set_error_handler (pfn);
5479         }
5480     }
5481 }
5482
5483 /* Look through all the global common symbols and attach them to the
5484    correct section.  The -sort-common command line switch may be used
5485    to roughly sort the entries by alignment.  */
5486
5487 static void
5488 lang_common (void)
5489 {
5490   if (command_line.inhibit_common_definition)
5491     return;
5492   if (link_info.relocatable
5493       && ! command_line.force_common_definition)
5494     return;
5495
5496   if (! config.sort_common)
5497     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5498   else
5499     {
5500       unsigned int power;
5501
5502       if (config.sort_common == sort_descending)
5503         {
5504           for (power = 4; power > 0; power--)
5505             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5506
5507           power = 0;
5508           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5509         }
5510       else
5511         {
5512           for (power = 0; power <= 4; power++)
5513             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5514
5515           power = UINT_MAX;
5516           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5517         }
5518     }
5519 }
5520
5521 /* Place one common symbol in the correct section.  */
5522
5523 static bfd_boolean
5524 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5525 {
5526   unsigned int power_of_two;
5527   bfd_vma size;
5528   asection *section;
5529
5530   if (h->type != bfd_link_hash_common)
5531     return TRUE;
5532
5533   size = h->u.c.size;
5534   power_of_two = h->u.c.p->alignment_power;
5535
5536   if (config.sort_common == sort_descending
5537       && power_of_two < *(unsigned int *) info)
5538     return TRUE;
5539   else if (config.sort_common == sort_ascending
5540            && power_of_two > *(unsigned int *) info)
5541     return TRUE;
5542
5543   section = h->u.c.p->section;
5544
5545   /* Increase the size of the section to align the common sym.  */
5546   section->size += ((bfd_vma) 1 << (power_of_two + opb_shift)) - 1;
5547   section->size &= (- (bfd_vma) 1 << (power_of_two + opb_shift));
5548
5549   /* Adjust the alignment if necessary.  */
5550   if (power_of_two > section->alignment_power)
5551     section->alignment_power = power_of_two;
5552
5553   /* Change the symbol from common to defined.  */
5554   h->type = bfd_link_hash_defined;
5555   h->u.def.section = section;
5556   h->u.def.value = section->size;
5557
5558   /* Increase the size of the section.  */
5559   section->size += size;
5560
5561   /* Make sure the section is allocated in memory, and make sure that
5562      it is no longer a common section.  */
5563   section->flags |= SEC_ALLOC;
5564   section->flags &= ~SEC_IS_COMMON;
5565
5566   if (config.map_file != NULL)
5567     {
5568       static bfd_boolean header_printed;
5569       int len;
5570       char *name;
5571       char buf[50];
5572
5573       if (! header_printed)
5574         {
5575           minfo (_("\nAllocating common symbols\n"));
5576           minfo (_("Common symbol       size              file\n\n"));
5577           header_printed = TRUE;
5578         }
5579
5580       name = bfd_demangle (link_info.output_bfd, h->root.string,
5581                            DMGL_ANSI | DMGL_PARAMS);
5582       if (name == NULL)
5583         {
5584           minfo ("%s", h->root.string);
5585           len = strlen (h->root.string);
5586         }
5587       else
5588         {
5589           minfo ("%s", name);
5590           len = strlen (name);
5591           free (name);
5592         }
5593
5594       if (len >= 19)
5595         {
5596           print_nl ();
5597           len = 0;
5598         }
5599       while (len < 20)
5600         {
5601           print_space ();
5602           ++len;
5603         }
5604
5605       minfo ("0x");
5606       if (size <= 0xffffffff)
5607         sprintf (buf, "%lx", (unsigned long) size);
5608       else
5609         sprintf_vma (buf, size);
5610       minfo ("%s", buf);
5611       len = strlen (buf);
5612
5613       while (len < 16)
5614         {
5615           print_space ();
5616           ++len;
5617         }
5618
5619       minfo ("%B\n", section->owner);
5620     }
5621
5622   return TRUE;
5623 }
5624
5625 /* Run through the input files and ensure that every input section has
5626    somewhere to go.  If one is found without a destination then create
5627    an input request and place it into the statement tree.  */
5628
5629 static void
5630 lang_place_orphans (void)
5631 {
5632   LANG_FOR_EACH_INPUT_STATEMENT (file)
5633     {
5634       asection *s;
5635
5636       for (s = file->the_bfd->sections; s != NULL; s = s->next)
5637         {
5638           if (s->output_section == NULL)
5639             {
5640               /* This section of the file is not attached, root
5641                  around for a sensible place for it to go.  */
5642
5643               if (file->just_syms_flag)
5644                 bfd_link_just_syms (file->the_bfd, s, &link_info);
5645               else if ((s->flags & SEC_EXCLUDE) != 0)
5646                 s->output_section = bfd_abs_section_ptr;
5647               else if (strcmp (s->name, "COMMON") == 0)
5648                 {
5649                   /* This is a lonely common section which must have
5650                      come from an archive.  We attach to the section
5651                      with the wildcard.  */
5652                   if (! link_info.relocatable
5653                       || command_line.force_common_definition)
5654                     {
5655                       if (default_common_section == NULL)
5656                         default_common_section
5657                           = lang_output_section_statement_lookup (".bss", 0,
5658                                                                   TRUE);
5659                       lang_add_section (&default_common_section->children, s,
5660                                         default_common_section);
5661                     }
5662                 }
5663               else
5664                 {
5665                   const char *name = s->name;
5666                   int constraint = 0;
5667
5668                   if (config.unique_orphan_sections || unique_section_p (s))
5669                     constraint = SPECIAL;
5670
5671                   if (!ldemul_place_orphan (s, name, constraint))
5672                     {
5673                       lang_output_section_statement_type *os;
5674                       os = lang_output_section_statement_lookup (name,
5675                                                                  constraint,
5676                                                                  TRUE);
5677                       lang_add_section (&os->children, s, os);
5678                     }
5679                 }
5680             }
5681         }
5682     }
5683 }
5684
5685 void
5686 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
5687 {
5688   flagword *ptr_flags;
5689
5690   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
5691   while (*flags)
5692     {
5693       switch (*flags)
5694         {
5695         case 'A': case 'a':
5696           *ptr_flags |= SEC_ALLOC;
5697           break;
5698
5699         case 'R': case 'r':
5700           *ptr_flags |= SEC_READONLY;
5701           break;
5702
5703         case 'W': case 'w':
5704           *ptr_flags |= SEC_DATA;
5705           break;
5706
5707         case 'X': case 'x':
5708           *ptr_flags |= SEC_CODE;
5709           break;
5710
5711         case 'L': case 'l':
5712         case 'I': case 'i':
5713           *ptr_flags |= SEC_LOAD;
5714           break;
5715
5716         default:
5717           einfo (_("%P%F: invalid syntax in flags\n"));
5718           break;
5719         }
5720       flags++;
5721     }
5722 }
5723
5724 /* Call a function on each input file.  This function will be called
5725    on an archive, but not on the elements.  */
5726
5727 void
5728 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
5729 {
5730   lang_input_statement_type *f;
5731
5732   for (f = (lang_input_statement_type *) input_file_chain.head;
5733        f != NULL;
5734        f = (lang_input_statement_type *) f->next_real_file)
5735     func (f);
5736 }
5737
5738 /* Call a function on each file.  The function will be called on all
5739    the elements of an archive which are included in the link, but will
5740    not be called on the archive file itself.  */
5741
5742 void
5743 lang_for_each_file (void (*func) (lang_input_statement_type *))
5744 {
5745   LANG_FOR_EACH_INPUT_STATEMENT (f)
5746     {
5747       func (f);
5748     }
5749 }
5750
5751 void
5752 ldlang_add_file (lang_input_statement_type *entry)
5753 {
5754   lang_statement_append (&file_chain,
5755                          (lang_statement_union_type *) entry,
5756                          &entry->next);
5757
5758   /* The BFD linker needs to have a list of all input BFDs involved in
5759      a link.  */
5760   ASSERT (entry->the_bfd->link_next == NULL);
5761   ASSERT (entry->the_bfd != link_info.output_bfd);
5762
5763   *link_info.input_bfds_tail = entry->the_bfd;
5764   link_info.input_bfds_tail = &entry->the_bfd->link_next;
5765   entry->the_bfd->usrdata = entry;
5766   bfd_set_gp_size (entry->the_bfd, g_switch_value);
5767
5768   /* Look through the sections and check for any which should not be
5769      included in the link.  We need to do this now, so that we can
5770      notice when the backend linker tries to report multiple
5771      definition errors for symbols which are in sections we aren't
5772      going to link.  FIXME: It might be better to entirely ignore
5773      symbols which are defined in sections which are going to be
5774      discarded.  This would require modifying the backend linker for
5775      each backend which might set the SEC_LINK_ONCE flag.  If we do
5776      this, we should probably handle SEC_EXCLUDE in the same way.  */
5777
5778   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
5779 }
5780
5781 void
5782 lang_add_output (const char *name, int from_script)
5783 {
5784   /* Make -o on command line override OUTPUT in script.  */
5785   if (!had_output_filename || !from_script)
5786     {
5787       output_filename = name;
5788       had_output_filename = TRUE;
5789     }
5790 }
5791
5792 static lang_output_section_statement_type *current_section;
5793
5794 static int
5795 topower (int x)
5796 {
5797   unsigned int i = 1;
5798   int l;
5799
5800   if (x < 0)
5801     return -1;
5802
5803   for (l = 0; l < 32; l++)
5804     {
5805       if (i >= (unsigned int) x)
5806         return l;
5807       i <<= 1;
5808     }
5809
5810   return 0;
5811 }
5812
5813 lang_output_section_statement_type *
5814 lang_enter_output_section_statement (const char *output_section_statement_name,
5815                                      etree_type *address_exp,
5816                                      enum section_type sectype,
5817                                      etree_type *align,
5818                                      etree_type *subalign,
5819                                      etree_type *ebase,
5820                                      int constraint)
5821 {
5822   lang_output_section_statement_type *os;
5823
5824   os = lang_output_section_statement_lookup (output_section_statement_name,
5825                                              constraint, TRUE);
5826   current_section = os;
5827
5828   if (os->addr_tree == NULL)
5829     {
5830       os->addr_tree = address_exp;
5831     }
5832   os->sectype = sectype;
5833   if (sectype != noload_section)
5834     os->flags = SEC_NO_FLAGS;
5835   else
5836     os->flags = SEC_NEVER_LOAD;
5837   os->block_value = 1;
5838
5839   /* Make next things chain into subchain of this.  */
5840   stat_ptr = &os->children;
5841
5842   os->subsection_alignment =
5843     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
5844   os->section_alignment =
5845     topower (exp_get_value_int (align, -1, "section alignment"));
5846
5847   os->load_base = ebase;
5848   return os;
5849 }
5850
5851 void
5852 lang_final (void)
5853 {
5854   lang_output_statement_type *new;
5855
5856   new = new_stat (lang_output_statement, stat_ptr);
5857   new->name = output_filename;
5858 }
5859
5860 /* Reset the current counters in the regions.  */
5861
5862 void
5863 lang_reset_memory_regions (void)
5864 {
5865   lang_memory_region_type *p = lang_memory_region_list;
5866   asection *o;
5867   lang_output_section_statement_type *os;
5868
5869   for (p = lang_memory_region_list; p != NULL; p = p->next)
5870     {
5871       p->current = p->origin;
5872       p->last_os = NULL;
5873     }
5874
5875   for (os = &lang_output_section_statement.head->output_section_statement;
5876        os != NULL;
5877        os = os->next)
5878     {
5879       os->processed_vma = FALSE;
5880       os->processed_lma = FALSE;
5881     }
5882
5883   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
5884     {
5885       /* Save the last size for possible use by bfd_relax_section.  */
5886       o->rawsize = o->size;
5887       o->size = 0;
5888     }
5889 }
5890
5891 /* Worker for lang_gc_sections_1.  */
5892
5893 static void
5894 gc_section_callback (lang_wild_statement_type *ptr,
5895                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
5896                      asection *section,
5897                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
5898                      void *data ATTRIBUTE_UNUSED)
5899 {
5900   /* If the wild pattern was marked KEEP, the member sections
5901      should be as well.  */
5902   if (ptr->keep_sections)
5903     section->flags |= SEC_KEEP;
5904 }
5905
5906 /* Iterate over sections marking them against GC.  */
5907
5908 static void
5909 lang_gc_sections_1 (lang_statement_union_type *s)
5910 {
5911   for (; s != NULL; s = s->header.next)
5912     {
5913       switch (s->header.type)
5914         {
5915         case lang_wild_statement_enum:
5916           walk_wild (&s->wild_statement, gc_section_callback, NULL);
5917           break;
5918         case lang_constructors_statement_enum:
5919           lang_gc_sections_1 (constructor_list.head);
5920           break;
5921         case lang_output_section_statement_enum:
5922           lang_gc_sections_1 (s->output_section_statement.children.head);
5923           break;
5924         case lang_group_statement_enum:
5925           lang_gc_sections_1 (s->group_statement.children.head);
5926           break;
5927         default:
5928           break;
5929         }
5930     }
5931 }
5932
5933 static void
5934 lang_gc_sections (void)
5935 {
5936   /* Keep all sections so marked in the link script.  */
5937
5938   lang_gc_sections_1 (statement_list.head);
5939
5940   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
5941      the special case of debug info.  (See bfd/stabs.c)
5942      Twiddle the flag here, to simplify later linker code.  */
5943   if (link_info.relocatable)
5944     {
5945       LANG_FOR_EACH_INPUT_STATEMENT (f)
5946         {
5947           asection *sec;
5948           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
5949             if ((sec->flags & SEC_DEBUGGING) == 0)
5950               sec->flags &= ~SEC_EXCLUDE;
5951         }
5952     }
5953
5954   if (link_info.gc_sections)
5955     bfd_gc_sections (link_info.output_bfd, &link_info);
5956 }
5957
5958 /* Worker for lang_find_relro_sections_1.  */
5959
5960 static void
5961 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
5962                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
5963                              asection *section,
5964                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
5965                              void *data)
5966 {
5967   /* Discarded, excluded and ignored sections effectively have zero
5968      size.  */
5969   if (section->output_section != NULL
5970       && section->output_section->owner == link_info.output_bfd
5971       && (section->output_section->flags & SEC_EXCLUDE) == 0
5972       && !IGNORE_SECTION (section)
5973       && section->size != 0)
5974     {
5975       bfd_boolean *has_relro_section = (bfd_boolean *) data;
5976       *has_relro_section = TRUE;
5977     }
5978 }
5979
5980 /* Iterate over sections for relro sections.  */
5981
5982 static void
5983 lang_find_relro_sections_1 (lang_statement_union_type *s,
5984                             bfd_boolean *has_relro_section)
5985 {
5986   if (*has_relro_section)
5987     return;
5988
5989   for (; s != NULL; s = s->header.next)
5990     {
5991       if (s == expld.dataseg.relro_end_stat)
5992         break;
5993
5994       switch (s->header.type)
5995         {
5996         case lang_wild_statement_enum:
5997           walk_wild (&s->wild_statement,
5998                      find_relro_section_callback,
5999                      has_relro_section);
6000           break;
6001         case lang_constructors_statement_enum:
6002           lang_find_relro_sections_1 (constructor_list.head,
6003                                       has_relro_section);
6004           break;
6005         case lang_output_section_statement_enum:
6006           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6007                                       has_relro_section);
6008           break;
6009         case lang_group_statement_enum:
6010           lang_find_relro_sections_1 (s->group_statement.children.head,
6011                                       has_relro_section);
6012           break;
6013         default:
6014           break;
6015         }
6016     }
6017 }
6018
6019 static void
6020 lang_find_relro_sections (void)
6021 {
6022   bfd_boolean has_relro_section = FALSE;
6023
6024   /* Check all sections in the link script.  */
6025
6026   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6027                               &has_relro_section);
6028
6029   if (!has_relro_section)
6030     link_info.relro = FALSE;
6031 }
6032
6033 /* Relax all sections until bfd_relax_section gives up.  */
6034
6035 static void
6036 relax_sections (void)
6037 {
6038   /* Keep relaxing until bfd_relax_section gives up.  */
6039   bfd_boolean relax_again;
6040
6041   link_info.relax_trip = -1;
6042   do
6043     {
6044       relax_again = FALSE;
6045       link_info.relax_trip++;
6046
6047       /* Note: pe-dll.c does something like this also.  If you find
6048          you need to change this code, you probably need to change
6049          pe-dll.c also.  DJ  */
6050
6051       /* Do all the assignments with our current guesses as to
6052          section sizes.  */
6053       lang_do_assignments ();
6054
6055       /* We must do this after lang_do_assignments, because it uses
6056          size.  */
6057       lang_reset_memory_regions ();
6058
6059       /* Perform another relax pass - this time we know where the
6060          globals are, so can make a better guess.  */
6061       lang_size_sections (&relax_again, FALSE);
6062     }
6063   while (relax_again);
6064 }
6065
6066 void
6067 lang_process (void)
6068 {
6069   /* Finalize dynamic list.  */
6070   if (link_info.dynamic_list)
6071     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6072
6073   current_target = default_target;
6074
6075   /* Open the output file.  */
6076   lang_for_each_statement (ldlang_open_output);
6077   init_opb ();
6078
6079   ldemul_create_output_section_statements ();
6080
6081   /* Add to the hash table all undefineds on the command line.  */
6082   lang_place_undefineds ();
6083
6084   if (!bfd_section_already_linked_table_init ())
6085     einfo (_("%P%F: Failed to create hash table\n"));
6086
6087   /* Create a bfd for each input file.  */
6088   current_target = default_target;
6089   open_input_bfds (statement_list.head, FALSE);
6090
6091   link_info.gc_sym_list = &entry_symbol;
6092   if (entry_symbol.name == NULL)
6093     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6094
6095   ldemul_after_open ();
6096
6097   bfd_section_already_linked_table_free ();
6098
6099   /* Make sure that we're not mixing architectures.  We call this
6100      after all the input files have been opened, but before we do any
6101      other processing, so that any operations merge_private_bfd_data
6102      does on the output file will be known during the rest of the
6103      link.  */
6104   lang_check ();
6105
6106   /* Handle .exports instead of a version script if we're told to do so.  */
6107   if (command_line.version_exports_section)
6108     lang_do_version_exports_section ();
6109
6110   /* Build all sets based on the information gathered from the input
6111      files.  */
6112   ldctor_build_sets ();
6113
6114   /* Remove unreferenced sections if asked to.  */
6115   lang_gc_sections ();
6116
6117   /* Size up the common data.  */
6118   lang_common ();
6119
6120   /* Update wild statements.  */
6121   update_wild_statements (statement_list.head);
6122
6123   /* Run through the contours of the script and attach input sections
6124      to the correct output sections.  */
6125   map_input_to_output_sections (statement_list.head, NULL, NULL);
6126
6127   process_insert_statements ();
6128
6129   /* Find any sections not attached explicitly and handle them.  */
6130   lang_place_orphans ();
6131
6132   if (! link_info.relocatable)
6133     {
6134       asection *found;
6135
6136       /* Merge SEC_MERGE sections.  This has to be done after GC of
6137          sections, so that GCed sections are not merged, but before
6138          assigning dynamic symbols, since removing whole input sections
6139          is hard then.  */
6140       bfd_merge_sections (link_info.output_bfd, &link_info);
6141
6142       /* Look for a text section and set the readonly attribute in it.  */
6143       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6144
6145       if (found != NULL)
6146         {
6147           if (config.text_read_only)
6148             found->flags |= SEC_READONLY;
6149           else
6150             found->flags &= ~SEC_READONLY;
6151         }
6152     }
6153
6154   /* Do anything special before sizing sections.  This is where ELF
6155      and other back-ends size dynamic sections.  */
6156   ldemul_before_allocation ();
6157
6158   /* We must record the program headers before we try to fix the
6159      section positions, since they will affect SIZEOF_HEADERS.  */
6160   lang_record_phdrs ();
6161
6162   /* Check relro sections.  */
6163   if (link_info.relro && ! link_info.relocatable)
6164     lang_find_relro_sections ();
6165
6166   /* Size up the sections.  */
6167   lang_size_sections (NULL, !command_line.relax);
6168
6169   /* Now run around and relax if we can.  */
6170   if (command_line.relax)
6171     {
6172       /* We may need more than one relaxation pass.  */
6173       int i = link_info.relax_pass;
6174
6175       /* The backend can use it to determine the current pass.  */
6176       link_info.relax_pass = 0;
6177
6178       while (i--)
6179         {
6180           relax_sections ();
6181           link_info.relax_pass++;
6182         }
6183
6184       /* Final extra sizing to report errors.  */
6185       lang_do_assignments ();
6186       lang_reset_memory_regions ();
6187       lang_size_sections (NULL, TRUE);
6188     }
6189
6190   /* See if anything special should be done now we know how big
6191      everything is.  */
6192   ldemul_after_allocation ();
6193
6194   /* Fix any .startof. or .sizeof. symbols.  */
6195   lang_set_startof ();
6196
6197   /* Do all the assignments, now that we know the final resting places
6198      of all the symbols.  */
6199
6200   lang_do_assignments ();
6201
6202   ldemul_finish ();
6203
6204   /* Make sure that the section addresses make sense.  */
6205   if (! link_info.relocatable
6206       && command_line.check_section_addresses)
6207     lang_check_section_addresses ();
6208
6209   lang_end ();
6210 }
6211
6212 /* EXPORTED TO YACC */
6213
6214 void
6215 lang_add_wild (struct wildcard_spec *filespec,
6216                struct wildcard_list *section_list,
6217                bfd_boolean keep_sections)
6218 {
6219   struct wildcard_list *curr, *next;
6220   lang_wild_statement_type *new;
6221
6222   /* Reverse the list as the parser puts it back to front.  */
6223   for (curr = section_list, section_list = NULL;
6224        curr != NULL;
6225        section_list = curr, curr = next)
6226     {
6227       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6228         placed_commons = TRUE;
6229
6230       next = curr->next;
6231       curr->next = section_list;
6232     }
6233
6234   if (filespec != NULL && filespec->name != NULL)
6235     {
6236       if (strcmp (filespec->name, "*") == 0)
6237         filespec->name = NULL;
6238       else if (! wildcardp (filespec->name))
6239         lang_has_input_file = TRUE;
6240     }
6241
6242   new = new_stat (lang_wild_statement, stat_ptr);
6243   new->filename = NULL;
6244   new->filenames_sorted = FALSE;
6245   if (filespec != NULL)
6246     {
6247       new->filename = filespec->name;
6248       new->filenames_sorted = filespec->sorted == by_name;
6249     }
6250   new->section_list = section_list;
6251   new->keep_sections = keep_sections;
6252   lang_list_init (&new->children);
6253   analyze_walk_wild_section_handler (new);
6254 }
6255
6256 void
6257 lang_section_start (const char *name, etree_type *address,
6258                     const segment_type *segment)
6259 {
6260   lang_address_statement_type *ad;
6261
6262   ad = new_stat (lang_address_statement, stat_ptr);
6263   ad->section_name = name;
6264   ad->address = address;
6265   ad->segment = segment;
6266 }
6267
6268 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6269    because of a -e argument on the command line, or zero if this is
6270    called by ENTRY in a linker script.  Command line arguments take
6271    precedence.  */
6272
6273 void
6274 lang_add_entry (const char *name, bfd_boolean cmdline)
6275 {
6276   if (entry_symbol.name == NULL
6277       || cmdline
6278       || ! entry_from_cmdline)
6279     {
6280       entry_symbol.name = name;
6281       entry_from_cmdline = cmdline;
6282     }
6283 }
6284
6285 /* Set the default start symbol to NAME.  .em files should use this,
6286    not lang_add_entry, to override the use of "start" if neither the
6287    linker script nor the command line specifies an entry point.  NAME
6288    must be permanently allocated.  */
6289 void
6290 lang_default_entry (const char *name)
6291 {
6292   entry_symbol_default = name;
6293 }
6294
6295 void
6296 lang_add_target (const char *name)
6297 {
6298   lang_target_statement_type *new;
6299
6300   new = new_stat (lang_target_statement, stat_ptr);
6301   new->target = name;
6302 }
6303
6304 void
6305 lang_add_map (const char *name)
6306 {
6307   while (*name)
6308     {
6309       switch (*name)
6310         {
6311         case 'F':
6312           map_option_f = TRUE;
6313           break;
6314         }
6315       name++;
6316     }
6317 }
6318
6319 void
6320 lang_add_fill (fill_type *fill)
6321 {
6322   lang_fill_statement_type *new;
6323
6324   new = new_stat (lang_fill_statement, stat_ptr);
6325   new->fill = fill;
6326 }
6327
6328 void
6329 lang_add_data (int type, union etree_union *exp)
6330 {
6331   lang_data_statement_type *new;
6332
6333   new = new_stat (lang_data_statement, stat_ptr);
6334   new->exp = exp;
6335   new->type = type;
6336 }
6337
6338 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6339    generate.  HOWTO is the corresponding howto structure (we could
6340    look this up, but the caller has already done so).  SECTION is the
6341    section to generate a reloc against, or NAME is the name of the
6342    symbol to generate a reloc against.  Exactly one of SECTION and
6343    NAME must be NULL.  ADDEND is an expression for the addend.  */
6344
6345 void
6346 lang_add_reloc (bfd_reloc_code_real_type reloc,
6347                 reloc_howto_type *howto,
6348                 asection *section,
6349                 const char *name,
6350                 union etree_union *addend)
6351 {
6352   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6353
6354   p->reloc = reloc;
6355   p->howto = howto;
6356   p->section = section;
6357   p->name = name;
6358   p->addend_exp = addend;
6359
6360   p->addend_value = 0;
6361   p->output_section = NULL;
6362   p->output_offset = 0;
6363 }
6364
6365 lang_assignment_statement_type *
6366 lang_add_assignment (etree_type *exp)
6367 {
6368   lang_assignment_statement_type *new;
6369
6370   new = new_stat (lang_assignment_statement, stat_ptr);
6371   new->exp = exp;
6372   return new;
6373 }
6374
6375 void
6376 lang_add_attribute (enum statement_enum attribute)
6377 {
6378   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6379 }
6380
6381 void
6382 lang_startup (const char *name)
6383 {
6384   if (startup_file != NULL)
6385     {
6386       einfo (_("%P%F: multiple STARTUP files\n"));
6387     }
6388   first_file->filename = name;
6389   first_file->local_sym_name = name;
6390   first_file->real = TRUE;
6391
6392   startup_file = name;
6393 }
6394
6395 void
6396 lang_float (bfd_boolean maybe)
6397 {
6398   lang_float_flag = maybe;
6399 }
6400
6401
6402 /* Work out the load- and run-time regions from a script statement, and
6403    store them in *LMA_REGION and *REGION respectively.
6404
6405    MEMSPEC is the name of the run-time region, or the value of
6406    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6407    LMA_MEMSPEC is the name of the load-time region, or null if the
6408    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6409    had an explicit load address.
6410
6411    It is an error to specify both a load region and a load address.  */
6412
6413 static void
6414 lang_get_regions (lang_memory_region_type **region,
6415                   lang_memory_region_type **lma_region,
6416                   const char *memspec,
6417                   const char *lma_memspec,
6418                   bfd_boolean have_lma,
6419                   bfd_boolean have_vma)
6420 {
6421   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6422
6423   /* If no runtime region or VMA has been specified, but the load region
6424      has been specified, then use the load region for the runtime region
6425      as well.  */
6426   if (lma_memspec != NULL
6427       && ! have_vma
6428       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6429     *region = *lma_region;
6430   else
6431     *region = lang_memory_region_lookup (memspec, FALSE);
6432
6433   if (have_lma && lma_memspec != 0)
6434     einfo (_("%X%P:%S: section has both a load address and a load region\n"));
6435 }
6436
6437 void
6438 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6439                                      lang_output_section_phdr_list *phdrs,
6440                                      const char *lma_memspec)
6441 {
6442   lang_get_regions (&current_section->region,
6443                     &current_section->lma_region,
6444                     memspec, lma_memspec,
6445                     current_section->load_base != NULL,
6446                     current_section->addr_tree != NULL);
6447   current_section->fill = fill;
6448   current_section->phdrs = phdrs;
6449   stat_ptr = &statement_list;
6450 }
6451
6452 /* Create an absolute symbol with the given name with the value of the
6453    address of first byte of the section named.
6454
6455    If the symbol already exists, then do nothing.  */
6456
6457 void
6458 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
6459 {
6460   struct bfd_link_hash_entry *h;
6461
6462   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6463   if (h == NULL)
6464     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6465
6466   if (h->type == bfd_link_hash_new
6467       || h->type == bfd_link_hash_undefined)
6468     {
6469       asection *sec;
6470
6471       h->type = bfd_link_hash_defined;
6472
6473       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6474       if (sec == NULL)
6475         h->u.def.value = 0;
6476       else
6477         h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
6478
6479       h->u.def.section = bfd_abs_section_ptr;
6480     }
6481 }
6482
6483 /* Create an absolute symbol with the given name with the value of the
6484    address of the first byte after the end of the section named.
6485
6486    If the symbol already exists, then do nothing.  */
6487
6488 void
6489 lang_abs_symbol_at_end_of (const char *secname, const char *name)
6490 {
6491   struct bfd_link_hash_entry *h;
6492
6493   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6494   if (h == NULL)
6495     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6496
6497   if (h->type == bfd_link_hash_new
6498       || h->type == bfd_link_hash_undefined)
6499     {
6500       asection *sec;
6501
6502       h->type = bfd_link_hash_defined;
6503
6504       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6505       if (sec == NULL)
6506         h->u.def.value = 0;
6507       else
6508         h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
6509                           + TO_ADDR (sec->size));
6510
6511       h->u.def.section = bfd_abs_section_ptr;
6512     }
6513 }
6514
6515 void
6516 lang_statement_append (lang_statement_list_type *list,
6517                        lang_statement_union_type *element,
6518                        lang_statement_union_type **field)
6519 {
6520   *(list->tail) = element;
6521   list->tail = field;
6522 }
6523
6524 /* Set the output format type.  -oformat overrides scripts.  */
6525
6526 void
6527 lang_add_output_format (const char *format,
6528                         const char *big,
6529                         const char *little,
6530                         int from_script)
6531 {
6532   if (output_target == NULL || !from_script)
6533     {
6534       if (command_line.endian == ENDIAN_BIG
6535           && big != NULL)
6536         format = big;
6537       else if (command_line.endian == ENDIAN_LITTLE
6538                && little != NULL)
6539         format = little;
6540
6541       output_target = format;
6542     }
6543 }
6544
6545 void
6546 lang_add_insert (const char *where, int is_before)
6547 {
6548   lang_insert_statement_type *new;
6549
6550   new = new_stat (lang_insert_statement, stat_ptr);
6551   new->where = where;
6552   new->is_before = is_before;
6553   saved_script_handle = previous_script_handle;
6554 }
6555
6556 /* Enter a group.  This creates a new lang_group_statement, and sets
6557    stat_ptr to build new statements within the group.  */
6558
6559 void
6560 lang_enter_group (void)
6561 {
6562   lang_group_statement_type *g;
6563
6564   g = new_stat (lang_group_statement, stat_ptr);
6565   lang_list_init (&g->children);
6566   stat_ptr = &g->children;
6567 }
6568
6569 /* Leave a group.  This just resets stat_ptr to start writing to the
6570    regular list of statements again.  Note that this will not work if
6571    groups can occur inside anything else which can adjust stat_ptr,
6572    but currently they can't.  */
6573
6574 void
6575 lang_leave_group (void)
6576 {
6577   stat_ptr = &statement_list;
6578 }
6579
6580 /* Add a new program header.  This is called for each entry in a PHDRS
6581    command in a linker script.  */
6582
6583 void
6584 lang_new_phdr (const char *name,
6585                etree_type *type,
6586                bfd_boolean filehdr,
6587                bfd_boolean phdrs,
6588                etree_type *at,
6589                etree_type *flags)
6590 {
6591   struct lang_phdr *n, **pp;
6592
6593   n = stat_alloc (sizeof (struct lang_phdr));
6594   n->next = NULL;
6595   n->name = name;
6596   n->type = exp_get_value_int (type, 0, "program header type");
6597   n->filehdr = filehdr;
6598   n->phdrs = phdrs;
6599   n->at = at;
6600   n->flags = flags;
6601
6602   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
6603     ;
6604   *pp = n;
6605 }
6606
6607 /* Record the program header information in the output BFD.  FIXME: We
6608    should not be calling an ELF specific function here.  */
6609
6610 static void
6611 lang_record_phdrs (void)
6612 {
6613   unsigned int alc;
6614   asection **secs;
6615   lang_output_section_phdr_list *last;
6616   struct lang_phdr *l;
6617   lang_output_section_statement_type *os;
6618
6619   alc = 10;
6620   secs = xmalloc (alc * sizeof (asection *));
6621   last = NULL;
6622
6623   for (l = lang_phdr_list; l != NULL; l = l->next)
6624     {
6625       unsigned int c;
6626       flagword flags;
6627       bfd_vma at;
6628
6629       c = 0;
6630       for (os = &lang_output_section_statement.head->output_section_statement;
6631            os != NULL;
6632            os = os->next)
6633         {
6634           lang_output_section_phdr_list *pl;
6635
6636           if (os->constraint < 0)
6637             continue;
6638
6639           pl = os->phdrs;
6640           if (pl != NULL)
6641             last = pl;
6642           else
6643             {
6644               if (os->sectype == noload_section
6645                   || os->bfd_section == NULL
6646                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
6647                 continue;
6648
6649               if (last == NULL)
6650                 {
6651                   lang_output_section_statement_type * tmp_os;
6652
6653                   /* If we have not run across a section with a program
6654                      header assigned to it yet, then scan forwards to find
6655                      one.  This prevents inconsistencies in the linker's
6656                      behaviour when a script has specified just a single
6657                      header and there are sections in that script which are
6658                      not assigned to it, and which occur before the first
6659                      use of that header. See here for more details:
6660                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
6661                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
6662                     if (tmp_os->phdrs)
6663                       {
6664                         last = tmp_os->phdrs;
6665                         break;
6666                       }
6667                   if (last == NULL)
6668                     einfo (_("%F%P: no sections assigned to phdrs\n"));
6669                 }
6670               pl = last;
6671             }
6672
6673           if (os->bfd_section == NULL)
6674             continue;
6675
6676           for (; pl != NULL; pl = pl->next)
6677             {
6678               if (strcmp (pl->name, l->name) == 0)
6679                 {
6680                   if (c >= alc)
6681                     {
6682                       alc *= 2;
6683                       secs = xrealloc (secs, alc * sizeof (asection *));
6684                     }
6685                   secs[c] = os->bfd_section;
6686                   ++c;
6687                   pl->used = TRUE;
6688                 }
6689             }
6690         }
6691
6692       if (l->flags == NULL)
6693         flags = 0;
6694       else
6695         flags = exp_get_vma (l->flags, 0, "phdr flags");
6696
6697       if (l->at == NULL)
6698         at = 0;
6699       else
6700         at = exp_get_vma (l->at, 0, "phdr load address");
6701
6702       if (! bfd_record_phdr (link_info.output_bfd, l->type,
6703                              l->flags != NULL, flags, l->at != NULL,
6704                              at, l->filehdr, l->phdrs, c, secs))
6705         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
6706     }
6707
6708   free (secs);
6709
6710   /* Make sure all the phdr assignments succeeded.  */
6711   for (os = &lang_output_section_statement.head->output_section_statement;
6712        os != NULL;
6713        os = os->next)
6714     {
6715       lang_output_section_phdr_list *pl;
6716
6717       if (os->constraint < 0
6718           || os->bfd_section == NULL)
6719         continue;
6720
6721       for (pl = os->phdrs;
6722            pl != NULL;
6723            pl = pl->next)
6724         if (! pl->used && strcmp (pl->name, "NONE") != 0)
6725           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
6726                  os->name, pl->name);
6727     }
6728 }
6729
6730 /* Record a list of sections which may not be cross referenced.  */
6731
6732 void
6733 lang_add_nocrossref (lang_nocrossref_type *l)
6734 {
6735   struct lang_nocrossrefs *n;
6736
6737   n = xmalloc (sizeof *n);
6738   n->next = nocrossref_list;
6739   n->list = l;
6740   nocrossref_list = n;
6741
6742   /* Set notice_all so that we get informed about all symbols.  */
6743   link_info.notice_all = TRUE;
6744 }
6745 \f
6746 /* Overlay handling.  We handle overlays with some static variables.  */
6747
6748 /* The overlay virtual address.  */
6749 static etree_type *overlay_vma;
6750 /* And subsection alignment.  */
6751 static etree_type *overlay_subalign;
6752
6753 /* An expression for the maximum section size seen so far.  */
6754 static etree_type *overlay_max;
6755
6756 /* A list of all the sections in this overlay.  */
6757
6758 struct overlay_list {
6759   struct overlay_list *next;
6760   lang_output_section_statement_type *os;
6761 };
6762
6763 static struct overlay_list *overlay_list;
6764
6765 /* Start handling an overlay.  */
6766
6767 void
6768 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
6769 {
6770   /* The grammar should prevent nested overlays from occurring.  */
6771   ASSERT (overlay_vma == NULL
6772           && overlay_subalign == NULL
6773           && overlay_max == NULL);
6774
6775   overlay_vma = vma_expr;
6776   overlay_subalign = subalign;
6777 }
6778
6779 /* Start a section in an overlay.  We handle this by calling
6780    lang_enter_output_section_statement with the correct VMA.
6781    lang_leave_overlay sets up the LMA and memory regions.  */
6782
6783 void
6784 lang_enter_overlay_section (const char *name)
6785 {
6786   struct overlay_list *n;
6787   etree_type *size;
6788
6789   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
6790                                        0, overlay_subalign, 0, 0);
6791
6792   /* If this is the first section, then base the VMA of future
6793      sections on this one.  This will work correctly even if `.' is
6794      used in the addresses.  */
6795   if (overlay_list == NULL)
6796     overlay_vma = exp_nameop (ADDR, name);
6797
6798   /* Remember the section.  */
6799   n = xmalloc (sizeof *n);
6800   n->os = current_section;
6801   n->next = overlay_list;
6802   overlay_list = n;
6803
6804   size = exp_nameop (SIZEOF, name);
6805
6806   /* Arrange to work out the maximum section end address.  */
6807   if (overlay_max == NULL)
6808     overlay_max = size;
6809   else
6810     overlay_max = exp_binop (MAX_K, overlay_max, size);
6811 }
6812
6813 /* Finish a section in an overlay.  There isn't any special to do
6814    here.  */
6815
6816 void
6817 lang_leave_overlay_section (fill_type *fill,
6818                             lang_output_section_phdr_list *phdrs)
6819 {
6820   const char *name;
6821   char *clean, *s2;
6822   const char *s1;
6823   char *buf;
6824
6825   name = current_section->name;
6826
6827   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
6828      region and that no load-time region has been specified.  It doesn't
6829      really matter what we say here, since lang_leave_overlay will
6830      override it.  */
6831   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
6832
6833   /* Define the magic symbols.  */
6834
6835   clean = xmalloc (strlen (name) + 1);
6836   s2 = clean;
6837   for (s1 = name; *s1 != '\0'; s1++)
6838     if (ISALNUM (*s1) || *s1 == '_')
6839       *s2++ = *s1;
6840   *s2 = '\0';
6841
6842   buf = xmalloc (strlen (clean) + sizeof "__load_start_");
6843   sprintf (buf, "__load_start_%s", clean);
6844   lang_add_assignment (exp_provide (buf,
6845                                     exp_nameop (LOADADDR, name),
6846                                     FALSE));
6847
6848   buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
6849   sprintf (buf, "__load_stop_%s", clean);
6850   lang_add_assignment (exp_provide (buf,
6851                                     exp_binop ('+',
6852                                                exp_nameop (LOADADDR, name),
6853                                                exp_nameop (SIZEOF, name)),
6854                                     FALSE));
6855
6856   free (clean);
6857 }
6858
6859 /* Finish an overlay.  If there are any overlay wide settings, this
6860    looks through all the sections in the overlay and sets them.  */
6861
6862 void
6863 lang_leave_overlay (etree_type *lma_expr,
6864                     int nocrossrefs,
6865                     fill_type *fill,
6866                     const char *memspec,
6867                     lang_output_section_phdr_list *phdrs,
6868                     const char *lma_memspec)
6869 {
6870   lang_memory_region_type *region;
6871   lang_memory_region_type *lma_region;
6872   struct overlay_list *l;
6873   lang_nocrossref_type *nocrossref;
6874
6875   lang_get_regions (&region, &lma_region,
6876                     memspec, lma_memspec,
6877                     lma_expr != NULL, FALSE);
6878
6879   nocrossref = NULL;
6880
6881   /* After setting the size of the last section, set '.' to end of the
6882      overlay region.  */
6883   if (overlay_list != NULL)
6884     overlay_list->os->update_dot_tree
6885       = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
6886
6887   l = overlay_list;
6888   while (l != NULL)
6889     {
6890       struct overlay_list *next;
6891
6892       if (fill != NULL && l->os->fill == NULL)
6893         l->os->fill = fill;
6894
6895       l->os->region = region;
6896       l->os->lma_region = lma_region;
6897
6898       /* The first section has the load address specified in the
6899          OVERLAY statement.  The rest are worked out from that.
6900          The base address is not needed (and should be null) if
6901          an LMA region was specified.  */
6902       if (l->next == 0)
6903         {
6904           l->os->load_base = lma_expr;
6905           l->os->sectype = normal_section;
6906         }
6907       if (phdrs != NULL && l->os->phdrs == NULL)
6908         l->os->phdrs = phdrs;
6909
6910       if (nocrossrefs)
6911         {
6912           lang_nocrossref_type *nc;
6913
6914           nc = xmalloc (sizeof *nc);
6915           nc->name = l->os->name;
6916           nc->next = nocrossref;
6917           nocrossref = nc;
6918         }
6919
6920       next = l->next;
6921       free (l);
6922       l = next;
6923     }
6924
6925   if (nocrossref != NULL)
6926     lang_add_nocrossref (nocrossref);
6927
6928   overlay_vma = NULL;
6929   overlay_list = NULL;
6930   overlay_max = NULL;
6931 }
6932 \f
6933 /* Version handling.  This is only useful for ELF.  */
6934
6935 /* This global variable holds the version tree that we build.  */
6936
6937 struct bfd_elf_version_tree *lang_elf_version_info;
6938
6939 /* If PREV is NULL, return first version pattern matching particular symbol.
6940    If PREV is non-NULL, return first version pattern matching particular
6941    symbol after PREV (previously returned by lang_vers_match).  */
6942
6943 static struct bfd_elf_version_expr *
6944 lang_vers_match (struct bfd_elf_version_expr_head *head,
6945                  struct bfd_elf_version_expr *prev,
6946                  const char *sym)
6947 {
6948   const char *cxx_sym = sym;
6949   const char *java_sym = sym;
6950   struct bfd_elf_version_expr *expr = NULL;
6951
6952   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
6953     {
6954       cxx_sym = cplus_demangle (sym, DMGL_PARAMS | DMGL_ANSI);
6955       if (!cxx_sym)
6956         cxx_sym = sym;
6957     }
6958   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
6959     {
6960       java_sym = cplus_demangle (sym, DMGL_JAVA);
6961       if (!java_sym)
6962         java_sym = sym;
6963     }
6964
6965   if (head->htab && (prev == NULL || prev->symbol))
6966     {
6967       struct bfd_elf_version_expr e;
6968
6969       switch (prev ? prev->mask : 0)
6970         {
6971         case 0:
6972           if (head->mask & BFD_ELF_VERSION_C_TYPE)
6973             {
6974               e.symbol = sym;
6975               expr = htab_find (head->htab, &e);
6976               while (expr && strcmp (expr->symbol, sym) == 0)
6977                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
6978                   goto out_ret;
6979                 else
6980                   expr = expr->next;
6981             }
6982           /* Fallthrough */
6983         case BFD_ELF_VERSION_C_TYPE:
6984           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
6985             {
6986               e.symbol = cxx_sym;
6987               expr = htab_find (head->htab, &e);
6988               while (expr && strcmp (expr->symbol, cxx_sym) == 0)
6989                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
6990                   goto out_ret;
6991                 else
6992                   expr = expr->next;
6993             }
6994           /* Fallthrough */
6995         case BFD_ELF_VERSION_CXX_TYPE:
6996           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
6997             {
6998               e.symbol = java_sym;
6999               expr = htab_find (head->htab, &e);
7000               while (expr && strcmp (expr->symbol, java_sym) == 0)
7001                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7002                   goto out_ret;
7003                 else
7004                   expr = expr->next;
7005             }
7006           /* Fallthrough */
7007         default:
7008           break;
7009         }
7010     }
7011
7012   /* Finally, try the wildcards.  */
7013   if (prev == NULL || prev->symbol)
7014     expr = head->remaining;
7015   else
7016     expr = prev->next;
7017   for (; expr; expr = expr->next)
7018     {
7019       const char *s;
7020
7021       if (!expr->pattern)
7022         continue;
7023
7024       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7025         break;
7026
7027       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7028         s = java_sym;
7029       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7030         s = cxx_sym;
7031       else
7032         s = sym;
7033       if (fnmatch (expr->pattern, s, 0) == 0)
7034         break;
7035     }
7036
7037  out_ret:
7038   if (cxx_sym != sym)
7039     free ((char *) cxx_sym);
7040   if (java_sym != sym)
7041     free ((char *) java_sym);
7042   return expr;
7043 }
7044
7045 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7046    return a string pointing to the symbol name.  */
7047
7048 static const char *
7049 realsymbol (const char *pattern)
7050 {
7051   const char *p;
7052   bfd_boolean changed = FALSE, backslash = FALSE;
7053   char *s, *symbol = xmalloc (strlen (pattern) + 1);
7054
7055   for (p = pattern, s = symbol; *p != '\0'; ++p)
7056     {
7057       /* It is a glob pattern only if there is no preceding
7058          backslash.  */
7059       if (! backslash && (*p == '?' || *p == '*' || *p == '['))
7060         {
7061           free (symbol);
7062           return NULL;
7063         }
7064
7065       if (backslash)
7066         {
7067           /* Remove the preceding backslash.  */
7068           *(s - 1) = *p;
7069           changed = TRUE;
7070         }
7071       else
7072         *s++ = *p;
7073
7074       backslash = *p == '\\';
7075     }
7076
7077   if (changed)
7078     {
7079       *s = '\0';
7080       return symbol;
7081     }
7082   else
7083     {
7084       free (symbol);
7085       return pattern;
7086     }
7087 }
7088
7089 /* This is called for each variable name or match expression.  NEW is
7090    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7091    pattern to be matched against symbol names.  */
7092
7093 struct bfd_elf_version_expr *
7094 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7095                        const char *new,
7096                        const char *lang,
7097                        bfd_boolean literal_p)
7098 {
7099   struct bfd_elf_version_expr *ret;
7100
7101   ret = xmalloc (sizeof *ret);
7102   ret->next = orig;
7103   ret->pattern = literal_p ? NULL : new;
7104   ret->symver = 0;
7105   ret->script = 0;
7106   ret->symbol = literal_p ? new : realsymbol (new);
7107
7108   if (lang == NULL || strcasecmp (lang, "C") == 0)
7109     ret->mask = BFD_ELF_VERSION_C_TYPE;
7110   else if (strcasecmp (lang, "C++") == 0)
7111     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7112   else if (strcasecmp (lang, "Java") == 0)
7113     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7114   else
7115     {
7116       einfo (_("%X%P: unknown language `%s' in version information\n"),
7117              lang);
7118       ret->mask = BFD_ELF_VERSION_C_TYPE;
7119     }
7120
7121   return ldemul_new_vers_pattern (ret);
7122 }
7123
7124 /* This is called for each set of variable names and match
7125    expressions.  */
7126
7127 struct bfd_elf_version_tree *
7128 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7129                     struct bfd_elf_version_expr *locals)
7130 {
7131   struct bfd_elf_version_tree *ret;
7132
7133   ret = xcalloc (1, sizeof *ret);
7134   ret->globals.list = globals;
7135   ret->locals.list = locals;
7136   ret->match = lang_vers_match;
7137   ret->name_indx = (unsigned int) -1;
7138   return ret;
7139 }
7140
7141 /* This static variable keeps track of version indices.  */
7142
7143 static int version_index;
7144
7145 static hashval_t
7146 version_expr_head_hash (const void *p)
7147 {
7148   const struct bfd_elf_version_expr *e = p;
7149
7150   return htab_hash_string (e->symbol);
7151 }
7152
7153 static int
7154 version_expr_head_eq (const void *p1, const void *p2)
7155 {
7156   const struct bfd_elf_version_expr *e1 = p1;
7157   const struct bfd_elf_version_expr *e2 = p2;
7158
7159   return strcmp (e1->symbol, e2->symbol) == 0;
7160 }
7161
7162 static void
7163 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7164 {
7165   size_t count = 0;
7166   struct bfd_elf_version_expr *e, *next;
7167   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7168
7169   for (e = head->list; e; e = e->next)
7170     {
7171       if (e->symbol)
7172         count++;
7173       head->mask |= e->mask;
7174     }
7175
7176   if (count)
7177     {
7178       head->htab = htab_create (count * 2, version_expr_head_hash,
7179                                 version_expr_head_eq, NULL);
7180       list_loc = &head->list;
7181       remaining_loc = &head->remaining;
7182       for (e = head->list; e; e = next)
7183         {
7184           next = e->next;
7185           if (!e->symbol)
7186             {
7187               *remaining_loc = e;
7188               remaining_loc = &e->next;
7189             }
7190           else
7191             {
7192               void **loc = htab_find_slot (head->htab, e, INSERT);
7193
7194               if (*loc)
7195                 {
7196                   struct bfd_elf_version_expr *e1, *last;
7197
7198                   e1 = *loc;
7199                   last = NULL;
7200                   do
7201                     {
7202                       if (e1->mask == e->mask)
7203                         {
7204                           last = NULL;
7205                           break;
7206                         }
7207                       last = e1;
7208                       e1 = e1->next;
7209                     }
7210                   while (e1 && strcmp (e1->symbol, e->symbol) == 0);
7211
7212                   if (last == NULL)
7213                     {
7214                       /* This is a duplicate.  */
7215                       /* FIXME: Memory leak.  Sometimes pattern is not
7216                          xmalloced alone, but in larger chunk of memory.  */
7217                       /* free (e->symbol); */
7218                       free (e);
7219                     }
7220                   else
7221                     {
7222                       e->next = last->next;
7223                       last->next = e;
7224                     }
7225                 }
7226               else
7227                 {
7228                   *loc = e;
7229                   *list_loc = e;
7230                   list_loc = &e->next;
7231                 }
7232             }
7233         }
7234       *remaining_loc = NULL;
7235       *list_loc = head->remaining;
7236     }
7237   else
7238     head->remaining = head->list;
7239 }
7240
7241 /* This is called when we know the name and dependencies of the
7242    version.  */
7243
7244 void
7245 lang_register_vers_node (const char *name,
7246                          struct bfd_elf_version_tree *version,
7247                          struct bfd_elf_version_deps *deps)
7248 {
7249   struct bfd_elf_version_tree *t, **pp;
7250   struct bfd_elf_version_expr *e1;
7251
7252   if (name == NULL)
7253     name = "";
7254
7255   if ((name[0] == '\0' && lang_elf_version_info != NULL)
7256       || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
7257     {
7258       einfo (_("%X%P: anonymous version tag cannot be combined"
7259                " with other version tags\n"));
7260       free (version);
7261       return;
7262     }
7263
7264   /* Make sure this node has a unique name.  */
7265   for (t = lang_elf_version_info; t != NULL; t = t->next)
7266     if (strcmp (t->name, name) == 0)
7267       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7268
7269   lang_finalize_version_expr_head (&version->globals);
7270   lang_finalize_version_expr_head (&version->locals);
7271
7272   /* Check the global and local match names, and make sure there
7273      aren't any duplicates.  */
7274
7275   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7276     {
7277       for (t = lang_elf_version_info; t != NULL; t = t->next)
7278         {
7279           struct bfd_elf_version_expr *e2;
7280
7281           if (t->locals.htab && e1->symbol)
7282             {
7283               e2 = htab_find (t->locals.htab, e1);
7284               while (e2 && strcmp (e1->symbol, e2->symbol) == 0)
7285                 {
7286                   if (e1->mask == e2->mask)
7287                     einfo (_("%X%P: duplicate expression `%s'"
7288                              " in version information\n"), e1->symbol);
7289                   e2 = e2->next;
7290                 }
7291             }
7292           else if (!e1->symbol)
7293             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7294               if (strcmp (e1->pattern, e2->pattern) == 0
7295                   && e1->mask == e2->mask)
7296                 einfo (_("%X%P: duplicate expression `%s'"
7297                          " in version information\n"), e1->pattern);
7298         }
7299     }
7300
7301   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7302     {
7303       for (t = lang_elf_version_info; t != NULL; t = t->next)
7304         {
7305           struct bfd_elf_version_expr *e2;
7306
7307           if (t->globals.htab && e1->symbol)
7308             {
7309               e2 = htab_find (t->globals.htab, e1);
7310               while (e2 && strcmp (e1->symbol, e2->symbol) == 0)
7311                 {
7312                   if (e1->mask == e2->mask)
7313                     einfo (_("%X%P: duplicate expression `%s'"
7314                              " in version information\n"),
7315                            e1->symbol);
7316                   e2 = e2->next;
7317                 }
7318             }
7319           else if (!e1->symbol)
7320             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7321               if (strcmp (e1->pattern, e2->pattern) == 0
7322                   && e1->mask == e2->mask)
7323                 einfo (_("%X%P: duplicate expression `%s'"
7324                          " in version information\n"), e1->pattern);
7325         }
7326     }
7327
7328   version->deps = deps;
7329   version->name = name;
7330   if (name[0] != '\0')
7331     {
7332       ++version_index;
7333       version->vernum = version_index;
7334     }
7335   else
7336     version->vernum = 0;
7337
7338   for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
7339     ;
7340   *pp = version;
7341 }
7342
7343 /* This is called when we see a version dependency.  */
7344
7345 struct bfd_elf_version_deps *
7346 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7347 {
7348   struct bfd_elf_version_deps *ret;
7349   struct bfd_elf_version_tree *t;
7350
7351   ret = xmalloc (sizeof *ret);
7352   ret->next = list;
7353
7354   for (t = lang_elf_version_info; t != NULL; t = t->next)
7355     {
7356       if (strcmp (t->name, name) == 0)
7357         {
7358           ret->version_needed = t;
7359           return ret;
7360         }
7361     }
7362
7363   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7364
7365   return ret;
7366 }
7367
7368 static void
7369 lang_do_version_exports_section (void)
7370 {
7371   struct bfd_elf_version_expr *greg = NULL, *lreg;
7372
7373   LANG_FOR_EACH_INPUT_STATEMENT (is)
7374     {
7375       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7376       char *contents, *p;
7377       bfd_size_type len;
7378
7379       if (sec == NULL)
7380         continue;
7381
7382       len = sec->size;
7383       contents = xmalloc (len);
7384       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7385         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7386
7387       p = contents;
7388       while (p < contents + len)
7389         {
7390           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7391           p = strchr (p, '\0') + 1;
7392         }
7393
7394       /* Do not free the contents, as we used them creating the regex.  */
7395
7396       /* Do not include this section in the link.  */
7397       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7398     }
7399
7400   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7401   lang_register_vers_node (command_line.version_exports_section,
7402                            lang_new_vers_node (greg, lreg), NULL);
7403 }
7404
7405 void
7406 lang_add_unique (const char *name)
7407 {
7408   struct unique_sections *ent;
7409
7410   for (ent = unique_section_list; ent; ent = ent->next)
7411     if (strcmp (ent->name, name) == 0)
7412       return;
7413
7414   ent = xmalloc (sizeof *ent);
7415   ent->name = xstrdup (name);
7416   ent->next = unique_section_list;
7417   unique_section_list = ent;
7418 }
7419
7420 /* Append the list of dynamic symbols to the existing one.  */
7421
7422 void
7423 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7424 {
7425   if (link_info.dynamic_list)
7426     {
7427       struct bfd_elf_version_expr *tail;
7428       for (tail = dynamic; tail->next != NULL; tail = tail->next)
7429         ;
7430       tail->next = link_info.dynamic_list->head.list;
7431       link_info.dynamic_list->head.list = dynamic;
7432     }
7433   else
7434     {
7435       struct bfd_elf_dynamic_list *d;
7436
7437       d = xcalloc (1, sizeof *d);
7438       d->head.list = dynamic;
7439       d->match = lang_vers_match;
7440       link_info.dynamic_list = d;
7441     }
7442 }
7443
7444 /* Append the list of C++ typeinfo dynamic symbols to the existing
7445    one.  */
7446
7447 void
7448 lang_append_dynamic_list_cpp_typeinfo (void)
7449 {
7450   const char * symbols [] =
7451     {
7452       "typeinfo name for*",
7453       "typeinfo for*"
7454     };
7455   struct bfd_elf_version_expr *dynamic = NULL;
7456   unsigned int i;
7457
7458   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7459     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7460                                      FALSE);
7461
7462   lang_append_dynamic_list (dynamic);
7463 }
7464
7465 /* Append the list of C++ operator new and delete dynamic symbols to the
7466    existing one.  */
7467
7468 void
7469 lang_append_dynamic_list_cpp_new (void)
7470 {
7471   const char * symbols [] =
7472     {
7473       "operator new*",
7474       "operator delete*"
7475     };
7476   struct bfd_elf_version_expr *dynamic = NULL;
7477   unsigned int i;
7478
7479   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7480     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7481                                      FALSE);
7482
7483   lang_append_dynamic_list (dynamic);
7484 }