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