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