Allow self-assignment for absolute symbols defined in a linker script
[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       expld.assign_name = dst;
3939       tree = assignment->exp->assign.src;
3940     }
3941
3942   osec = output_section->bfd_section;
3943   if (osec == NULL)
3944     osec = bfd_abs_section_ptr;
3945   exp_fold_tree (tree, osec, &print_dot);
3946   if (expld.result.valid_p)
3947     {
3948       bfd_vma value;
3949
3950       if (assignment->exp->type.node_class == etree_assert
3951           || is_dot
3952           || expld.assign_name != NULL)
3953         {
3954           value = expld.result.value;
3955
3956           if (expld.result.section != NULL)
3957             value += expld.result.section->vma;
3958
3959           minfo ("0x%V", value);
3960           if (is_dot)
3961             print_dot = value;
3962         }
3963       else
3964         {
3965           struct bfd_link_hash_entry *h;
3966
3967           h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
3968                                     FALSE, FALSE, TRUE);
3969           if (h)
3970             {
3971               value = h->u.def.value;
3972               value += h->u.def.section->output_section->vma;
3973               value += h->u.def.section->output_offset;
3974
3975               minfo ("[0x%V]", value);
3976             }
3977           else
3978             minfo ("[unresolved]");
3979         }
3980     }
3981   else
3982     {
3983       minfo ("*undef*   ");
3984 #ifdef BFD64
3985       minfo ("        ");
3986 #endif
3987     }
3988   expld.assign_name = NULL;
3989
3990   minfo ("                ");
3991   exp_print_tree (assignment->exp);
3992   print_nl ();
3993 }
3994
3995 static void
3996 print_input_statement (lang_input_statement_type *statm)
3997 {
3998   if (statm->filename != NULL
3999       && (statm->the_bfd == NULL
4000           || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4001     fprintf (config.map_file, "LOAD %s\n", statm->filename);
4002 }
4003
4004 /* Print all symbols defined in a particular section.  This is called
4005    via bfd_link_hash_traverse, or by print_all_symbols.  */
4006
4007 static bfd_boolean
4008 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4009 {
4010   asection *sec = (asection *) ptr;
4011
4012   if ((hash_entry->type == bfd_link_hash_defined
4013        || hash_entry->type == bfd_link_hash_defweak)
4014       && sec == hash_entry->u.def.section)
4015     {
4016       int i;
4017
4018       for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4019         print_space ();
4020       minfo ("0x%V   ",
4021              (hash_entry->u.def.value
4022               + hash_entry->u.def.section->output_offset
4023               + hash_entry->u.def.section->output_section->vma));
4024
4025       minfo ("             %T\n", hash_entry->root.string);
4026     }
4027
4028   return TRUE;
4029 }
4030
4031 static int
4032 hash_entry_addr_cmp (const void *a, const void *b)
4033 {
4034   const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4035   const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4036
4037   if (l->u.def.value < r->u.def.value)
4038     return -1;
4039   else if (l->u.def.value > r->u.def.value)
4040     return 1;
4041   else
4042     return 0;
4043 }
4044
4045 static void
4046 print_all_symbols (asection *sec)
4047 {
4048   input_section_userdata_type *ud
4049     = (input_section_userdata_type *) get_userdata (sec);
4050   struct map_symbol_def *def;
4051   struct bfd_link_hash_entry **entries;
4052   unsigned int i;
4053
4054   if (!ud)
4055     return;
4056
4057   *ud->map_symbol_def_tail = 0;
4058
4059   /* Sort the symbols by address.  */
4060   entries = (struct bfd_link_hash_entry **)
4061       obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
4062
4063   for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4064     entries[i] = def->entry;
4065
4066   qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4067          hash_entry_addr_cmp);
4068
4069   /* Print the symbols.  */
4070   for (i = 0; i < ud->map_symbol_def_count; i++)
4071     print_one_symbol (entries[i], sec);
4072
4073   obstack_free (&map_obstack, entries);
4074 }
4075
4076 /* Print information about an input section to the map file.  */
4077
4078 static void
4079 print_input_section (asection *i, bfd_boolean is_discarded)
4080 {
4081   bfd_size_type size = i->size;
4082   int len;
4083   bfd_vma addr;
4084
4085   init_opb ();
4086
4087   print_space ();
4088   minfo ("%s", i->name);
4089
4090   len = 1 + strlen (i->name);
4091   if (len >= SECTION_NAME_MAP_LENGTH - 1)
4092     {
4093       print_nl ();
4094       len = 0;
4095     }
4096   while (len < SECTION_NAME_MAP_LENGTH)
4097     {
4098       print_space ();
4099       ++len;
4100     }
4101
4102   if (i->output_section != NULL
4103       && i->output_section->owner == link_info.output_bfd)
4104     addr = i->output_section->vma + i->output_offset;
4105   else
4106     {
4107       addr = print_dot;
4108       if (!is_discarded)
4109         size = 0;
4110     }
4111
4112   minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
4113
4114   if (size != i->rawsize && i->rawsize != 0)
4115     {
4116       len = SECTION_NAME_MAP_LENGTH + 3;
4117 #ifdef BFD64
4118       len += 16;
4119 #else
4120       len += 8;
4121 #endif
4122       while (len > 0)
4123         {
4124           print_space ();
4125           --len;
4126         }
4127
4128       minfo (_("%W (size before relaxing)\n"), i->rawsize);
4129     }
4130
4131   if (i->output_section != NULL
4132       && i->output_section->owner == link_info.output_bfd)
4133     {
4134       if (link_info.reduce_memory_overheads)
4135         bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4136       else
4137         print_all_symbols (i);
4138
4139       /* Update print_dot, but make sure that we do not move it
4140          backwards - this could happen if we have overlays and a
4141          later overlay is shorter than an earier one.  */
4142       if (addr + TO_ADDR (size) > print_dot)
4143         print_dot = addr + TO_ADDR (size);
4144     }
4145 }
4146
4147 static void
4148 print_fill_statement (lang_fill_statement_type *fill)
4149 {
4150   size_t size;
4151   unsigned char *p;
4152   fputs (" FILL mask 0x", config.map_file);
4153   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4154     fprintf (config.map_file, "%02x", *p);
4155   fputs ("\n", config.map_file);
4156 }
4157
4158 static void
4159 print_data_statement (lang_data_statement_type *data)
4160 {
4161   int i;
4162   bfd_vma addr;
4163   bfd_size_type size;
4164   const char *name;
4165
4166   init_opb ();
4167   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4168     print_space ();
4169
4170   addr = data->output_offset;
4171   if (data->output_section != NULL)
4172     addr += data->output_section->vma;
4173
4174   switch (data->type)
4175     {
4176     default:
4177       abort ();
4178     case BYTE:
4179       size = BYTE_SIZE;
4180       name = "BYTE";
4181       break;
4182     case SHORT:
4183       size = SHORT_SIZE;
4184       name = "SHORT";
4185       break;
4186     case LONG:
4187       size = LONG_SIZE;
4188       name = "LONG";
4189       break;
4190     case QUAD:
4191       size = QUAD_SIZE;
4192       name = "QUAD";
4193       break;
4194     case SQUAD:
4195       size = QUAD_SIZE;
4196       name = "SQUAD";
4197       break;
4198     }
4199
4200   minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
4201
4202   if (data->exp->type.node_class != etree_value)
4203     {
4204       print_space ();
4205       exp_print_tree (data->exp);
4206     }
4207
4208   print_nl ();
4209
4210   print_dot = addr + TO_ADDR (size);
4211 }
4212
4213 /* Print an address statement.  These are generated by options like
4214    -Ttext.  */
4215
4216 static void
4217 print_address_statement (lang_address_statement_type *address)
4218 {
4219   minfo (_("Address of section %s set to "), address->section_name);
4220   exp_print_tree (address->address);
4221   print_nl ();
4222 }
4223
4224 /* Print a reloc statement.  */
4225
4226 static void
4227 print_reloc_statement (lang_reloc_statement_type *reloc)
4228 {
4229   int i;
4230   bfd_vma addr;
4231   bfd_size_type size;
4232
4233   init_opb ();
4234   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4235     print_space ();
4236
4237   addr = reloc->output_offset;
4238   if (reloc->output_section != NULL)
4239     addr += reloc->output_section->vma;
4240
4241   size = bfd_get_reloc_size (reloc->howto);
4242
4243   minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
4244
4245   if (reloc->name != NULL)
4246     minfo ("%s+", reloc->name);
4247   else
4248     minfo ("%s+", reloc->section->name);
4249
4250   exp_print_tree (reloc->addend_exp);
4251
4252   print_nl ();
4253
4254   print_dot = addr + TO_ADDR (size);
4255 }
4256
4257 static void
4258 print_padding_statement (lang_padding_statement_type *s)
4259 {
4260   int len;
4261   bfd_vma addr;
4262
4263   init_opb ();
4264   minfo (" *fill*");
4265
4266   len = sizeof " *fill*" - 1;
4267   while (len < SECTION_NAME_MAP_LENGTH)
4268     {
4269       print_space ();
4270       ++len;
4271     }
4272
4273   addr = s->output_offset;
4274   if (s->output_section != NULL)
4275     addr += s->output_section->vma;
4276   minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4277
4278   if (s->fill->size != 0)
4279     {
4280       size_t size;
4281       unsigned char *p;
4282       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4283         fprintf (config.map_file, "%02x", *p);
4284     }
4285
4286   print_nl ();
4287
4288   print_dot = addr + TO_ADDR (s->size);
4289 }
4290
4291 static void
4292 print_wild_statement (lang_wild_statement_type *w,
4293                       lang_output_section_statement_type *os)
4294 {
4295   struct wildcard_list *sec;
4296
4297   print_space ();
4298
4299   if (w->filenames_sorted)
4300     minfo ("SORT(");
4301   if (w->filename != NULL)
4302     minfo ("%s", w->filename);
4303   else
4304     minfo ("*");
4305   if (w->filenames_sorted)
4306     minfo (")");
4307
4308   minfo ("(");
4309   for (sec = w->section_list; sec; sec = sec->next)
4310     {
4311       if (sec->spec.sorted)
4312         minfo ("SORT(");
4313       if (sec->spec.exclude_name_list != NULL)
4314         {
4315           name_list *tmp;
4316           minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4317           for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4318             minfo (" %s", tmp->name);
4319           minfo (") ");
4320         }
4321       if (sec->spec.name != NULL)
4322         minfo ("%s", sec->spec.name);
4323       else
4324         minfo ("*");
4325       if (sec->spec.sorted)
4326         minfo (")");
4327       if (sec->next)
4328         minfo (" ");
4329     }
4330   minfo (")");
4331
4332   print_nl ();
4333
4334   print_statement_list (w->children.head, os);
4335 }
4336
4337 /* Print a group statement.  */
4338
4339 static void
4340 print_group (lang_group_statement_type *s,
4341              lang_output_section_statement_type *os)
4342 {
4343   fprintf (config.map_file, "START GROUP\n");
4344   print_statement_list (s->children.head, os);
4345   fprintf (config.map_file, "END GROUP\n");
4346 }
4347
4348 /* Print the list of statements in S.
4349    This can be called for any statement type.  */
4350
4351 static void
4352 print_statement_list (lang_statement_union_type *s,
4353                       lang_output_section_statement_type *os)
4354 {
4355   while (s != NULL)
4356     {
4357       print_statement (s, os);
4358       s = s->header.next;
4359     }
4360 }
4361
4362 /* Print the first statement in statement list S.
4363    This can be called for any statement type.  */
4364
4365 static void
4366 print_statement (lang_statement_union_type *s,
4367                  lang_output_section_statement_type *os)
4368 {
4369   switch (s->header.type)
4370     {
4371     default:
4372       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4373       FAIL ();
4374       break;
4375     case lang_constructors_statement_enum:
4376       if (constructor_list.head != NULL)
4377         {
4378           if (constructors_sorted)
4379             minfo (" SORT (CONSTRUCTORS)\n");
4380           else
4381             minfo (" CONSTRUCTORS\n");
4382           print_statement_list (constructor_list.head, os);
4383         }
4384       break;
4385     case lang_wild_statement_enum:
4386       print_wild_statement (&s->wild_statement, os);
4387       break;
4388     case lang_address_statement_enum:
4389       print_address_statement (&s->address_statement);
4390       break;
4391     case lang_object_symbols_statement_enum:
4392       minfo (" CREATE_OBJECT_SYMBOLS\n");
4393       break;
4394     case lang_fill_statement_enum:
4395       print_fill_statement (&s->fill_statement);
4396       break;
4397     case lang_data_statement_enum:
4398       print_data_statement (&s->data_statement);
4399       break;
4400     case lang_reloc_statement_enum:
4401       print_reloc_statement (&s->reloc_statement);
4402       break;
4403     case lang_input_section_enum:
4404       print_input_section (s->input_section.section, FALSE);
4405       break;
4406     case lang_padding_statement_enum:
4407       print_padding_statement (&s->padding_statement);
4408       break;
4409     case lang_output_section_statement_enum:
4410       print_output_section_statement (&s->output_section_statement);
4411       break;
4412     case lang_assignment_statement_enum:
4413       print_assignment (&s->assignment_statement, os);
4414       break;
4415     case lang_target_statement_enum:
4416       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4417       break;
4418     case lang_output_statement_enum:
4419       minfo ("OUTPUT(%s", s->output_statement.name);
4420       if (output_target != NULL)
4421         minfo (" %s", output_target);
4422       minfo (")\n");
4423       break;
4424     case lang_input_statement_enum:
4425       print_input_statement (&s->input_statement);
4426       break;
4427     case lang_group_statement_enum:
4428       print_group (&s->group_statement, os);
4429       break;
4430     case lang_insert_statement_enum:
4431       minfo ("INSERT %s %s\n",
4432              s->insert_statement.is_before ? "BEFORE" : "AFTER",
4433              s->insert_statement.where);
4434       break;
4435     }
4436 }
4437
4438 static void
4439 print_statements (void)
4440 {
4441   print_statement_list (statement_list.head, abs_output_section);
4442 }
4443
4444 /* Print the first N statements in statement list S to STDERR.
4445    If N == 0, nothing is printed.
4446    If N < 0, the entire list is printed.
4447    Intended to be called from GDB.  */
4448
4449 void
4450 dprint_statement (lang_statement_union_type *s, int n)
4451 {
4452   FILE *map_save = config.map_file;
4453
4454   config.map_file = stderr;
4455
4456   if (n < 0)
4457     print_statement_list (s, abs_output_section);
4458   else
4459     {
4460       while (s && --n >= 0)
4461         {
4462           print_statement (s, abs_output_section);
4463           s = s->header.next;
4464         }
4465     }
4466
4467   config.map_file = map_save;
4468 }
4469
4470 static void
4471 insert_pad (lang_statement_union_type **ptr,
4472             fill_type *fill,
4473             bfd_size_type alignment_needed,
4474             asection *output_section,
4475             bfd_vma dot)
4476 {
4477   static fill_type zero_fill;
4478   lang_statement_union_type *pad = NULL;
4479
4480   if (ptr != &statement_list.head)
4481     pad = ((lang_statement_union_type *)
4482            ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4483   if (pad != NULL
4484       && pad->header.type == lang_padding_statement_enum
4485       && pad->padding_statement.output_section == output_section)
4486     {
4487       /* Use the existing pad statement.  */
4488     }
4489   else if ((pad = *ptr) != NULL
4490            && pad->header.type == lang_padding_statement_enum
4491            && pad->padding_statement.output_section == output_section)
4492     {
4493       /* Use the existing pad statement.  */
4494     }
4495   else
4496     {
4497       /* Make a new padding statement, linked into existing chain.  */
4498       pad = (lang_statement_union_type *)
4499           stat_alloc (sizeof (lang_padding_statement_type));
4500       pad->header.next = *ptr;
4501       *ptr = pad;
4502       pad->header.type = lang_padding_statement_enum;
4503       pad->padding_statement.output_section = output_section;
4504       if (fill == NULL)
4505         fill = &zero_fill;
4506       pad->padding_statement.fill = fill;
4507     }
4508   pad->padding_statement.output_offset = dot - output_section->vma;
4509   pad->padding_statement.size = alignment_needed;
4510   output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
4511                                   - output_section->vma);
4512 }
4513
4514 /* Work out how much this section will move the dot point.  */
4515
4516 static bfd_vma
4517 size_input_section
4518   (lang_statement_union_type **this_ptr,
4519    lang_output_section_statement_type *output_section_statement,
4520    fill_type *fill,
4521    bfd_vma dot)
4522 {
4523   lang_input_section_type *is = &((*this_ptr)->input_section);
4524   asection *i = is->section;
4525
4526   if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
4527       && (i->flags & SEC_EXCLUDE) == 0)
4528     {
4529       bfd_size_type alignment_needed;
4530       asection *o;
4531
4532       /* Align this section first to the input sections requirement,
4533          then to the output section's requirement.  If this alignment
4534          is greater than any seen before, then record it too.  Perform
4535          the alignment by inserting a magic 'padding' statement.  */
4536
4537       if (output_section_statement->subsection_alignment != -1)
4538         i->alignment_power = output_section_statement->subsection_alignment;
4539
4540       o = output_section_statement->bfd_section;
4541       if (o->alignment_power < i->alignment_power)
4542         o->alignment_power = i->alignment_power;
4543
4544       alignment_needed = align_power (dot, i->alignment_power) - dot;
4545
4546       if (alignment_needed != 0)
4547         {
4548           insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4549           dot += alignment_needed;
4550         }
4551
4552       /* Remember where in the output section this input section goes.  */
4553
4554       i->output_offset = dot - o->vma;
4555
4556       /* Mark how big the output section must be to contain this now.  */
4557       dot += TO_ADDR (i->size);
4558       o->size = TO_SIZE (dot - o->vma);
4559     }
4560   else
4561     {
4562       i->output_offset = i->vma - output_section_statement->bfd_section->vma;
4563     }
4564
4565   return dot;
4566 }
4567
4568 static int
4569 sort_sections_by_lma (const void *arg1, const void *arg2)
4570 {
4571   const asection *sec1 = *(const asection **) arg1;
4572   const asection *sec2 = *(const asection **) arg2;
4573
4574   if (bfd_section_lma (sec1->owner, sec1)
4575       < bfd_section_lma (sec2->owner, sec2))
4576     return -1;
4577   else if (bfd_section_lma (sec1->owner, sec1)
4578            > bfd_section_lma (sec2->owner, sec2))
4579     return 1;
4580   else if (sec1->id < sec2->id)
4581     return -1;
4582   else if (sec1->id > sec2->id)
4583     return 1;
4584
4585   return 0;
4586 }
4587
4588 #define IGNORE_SECTION(s) \
4589   ((s->flags & SEC_ALLOC) == 0                          \
4590    || ((s->flags & SEC_THREAD_LOCAL) != 0               \
4591         && (s->flags & SEC_LOAD) == 0))
4592
4593 /* Check to see if any allocated sections overlap with other allocated
4594    sections.  This can happen if a linker script specifies the output
4595    section addresses of the two sections.  Also check whether any memory
4596    region has overflowed.  */
4597
4598 static void
4599 lang_check_section_addresses (void)
4600 {
4601   asection *s, *p;
4602   asection **sections, **spp;
4603   unsigned int count;
4604   bfd_vma s_start;
4605   bfd_vma s_end;
4606   bfd_vma p_start;
4607   bfd_vma p_end;
4608   bfd_size_type amt;
4609   lang_memory_region_type *m;
4610
4611   if (bfd_count_sections (link_info.output_bfd) <= 1)
4612     return;
4613
4614   amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4615   sections = (asection **) xmalloc (amt);
4616
4617   /* Scan all sections in the output list.  */
4618   count = 0;
4619   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4620     {
4621       /* Only consider loadable sections with real contents.  */
4622       if (!(s->flags & SEC_LOAD)
4623           || !(s->flags & SEC_ALLOC)
4624           || s->size == 0)
4625         continue;
4626
4627       sections[count] = s;
4628       count++;
4629     }
4630
4631   if (count <= 1)
4632     return;
4633
4634   qsort (sections, (size_t) count, sizeof (asection *),
4635          sort_sections_by_lma);
4636
4637   spp = sections;
4638   s = *spp++;
4639   s_start = s->lma;
4640   s_end = s_start + TO_ADDR (s->size) - 1;
4641   for (count--; count; count--)
4642     {
4643       /* We must check the sections' LMA addresses not their VMA
4644          addresses because overlay sections can have overlapping VMAs
4645          but they must have distinct LMAs.  */
4646       p = s;
4647       p_start = s_start;
4648       p_end = s_end;
4649       s = *spp++;
4650       s_start = s->lma;
4651       s_end = s_start + TO_ADDR (s->size) - 1;
4652
4653       /* Look for an overlap.  We have sorted sections by lma, so we
4654          know that s_start >= p_start.  Besides the obvious case of
4655          overlap when the current section starts before the previous
4656          one ends, we also must have overlap if the previous section
4657          wraps around the address space.  */
4658       if (s_start <= p_end
4659           || p_end < p_start)
4660         einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
4661                s->name, s_start, s_end, p->name, p_start, p_end);
4662     }
4663
4664   free (sections);
4665
4666   /* If any memory region has overflowed, report by how much.
4667      We do not issue this diagnostic for regions that had sections
4668      explicitly placed outside their bounds; os_region_check's
4669      diagnostics are adequate for that case.
4670
4671      FIXME: It is conceivable that m->current - (m->origin + m->length)
4672      might overflow a 32-bit integer.  There is, alas, no way to print
4673      a bfd_vma quantity in decimal.  */
4674   for (m = lang_memory_region_list; m; m = m->next)
4675     if (m->had_full_message)
4676       einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4677              m->name_list.name, (long)(m->current - (m->origin + m->length)));
4678
4679 }
4680
4681 /* Make sure the new address is within the region.  We explicitly permit the
4682    current address to be at the exact end of the region when the address is
4683    non-zero, in case the region is at the end of addressable memory and the
4684    calculation wraps around.  */
4685
4686 static void
4687 os_region_check (lang_output_section_statement_type *os,
4688                  lang_memory_region_type *region,
4689                  etree_type *tree,
4690                  bfd_vma rbase)
4691 {
4692   if ((region->current < region->origin
4693        || (region->current - region->origin > region->length))
4694       && ((region->current != region->origin + region->length)
4695           || rbase == 0))
4696     {
4697       if (tree != NULL)
4698         {
4699           einfo (_("%X%P: address 0x%v of %B section `%s'"
4700                    " is not within region `%s'\n"),
4701                  region->current,
4702                  os->bfd_section->owner,
4703                  os->bfd_section->name,
4704                  region->name_list.name);
4705         }
4706       else if (!region->had_full_message)
4707         {
4708           region->had_full_message = TRUE;
4709
4710           einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4711                  os->bfd_section->owner,
4712                  os->bfd_section->name,
4713                  region->name_list.name);
4714         }
4715     }
4716 }
4717
4718 /* Set the sizes for all the output sections.  */
4719
4720 static bfd_vma
4721 lang_size_sections_1
4722   (lang_statement_union_type **prev,
4723    lang_output_section_statement_type *output_section_statement,
4724    fill_type *fill,
4725    bfd_vma dot,
4726    bfd_boolean *relax,
4727    bfd_boolean check_regions)
4728 {
4729   lang_statement_union_type *s;
4730
4731   /* Size up the sections from their constituent parts.  */
4732   for (s = *prev; s != NULL; s = s->header.next)
4733     {
4734       switch (s->header.type)
4735         {
4736         case lang_output_section_statement_enum:
4737           {
4738             bfd_vma newdot, after;
4739             lang_output_section_statement_type *os;
4740             lang_memory_region_type *r;
4741             int section_alignment = 0;
4742
4743             os = &s->output_section_statement;
4744             if (os->constraint == -1)
4745               break;
4746
4747             /* FIXME: We shouldn't need to zero section vmas for ld -r
4748                here, in lang_insert_orphan, or in the default linker scripts.
4749                This is covering for coff backend linker bugs.  See PR6945.  */
4750             if (os->addr_tree == NULL
4751                 && link_info.relocatable
4752                 && (bfd_get_flavour (link_info.output_bfd)
4753                     == bfd_target_coff_flavour))
4754               os->addr_tree = exp_intop (0);
4755             if (os->addr_tree != NULL)
4756               {
4757                 os->processed_vma = FALSE;
4758                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4759
4760                 if (expld.result.valid_p)
4761                   {
4762                     dot = expld.result.value;
4763                     if (expld.result.section != NULL)
4764                       dot += expld.result.section->vma;
4765                   }
4766                 else if (expld.phase != lang_mark_phase_enum)
4767                   einfo (_("%F%S: non constant or forward reference"
4768                            " address expression for section %s\n"),
4769                          os->addr_tree, os->name);
4770               }
4771
4772             if (os->bfd_section == NULL)
4773               /* This section was removed or never actually created.  */
4774               break;
4775
4776             /* If this is a COFF shared library section, use the size and
4777                address from the input section.  FIXME: This is COFF
4778                specific; it would be cleaner if there were some other way
4779                to do this, but nothing simple comes to mind.  */
4780             if (((bfd_get_flavour (link_info.output_bfd)
4781                   == bfd_target_ecoff_flavour)
4782                  || (bfd_get_flavour (link_info.output_bfd)
4783                      == bfd_target_coff_flavour))
4784                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4785               {
4786                 asection *input;
4787
4788                 if (os->children.head == NULL
4789                     || os->children.head->header.next != NULL
4790                     || (os->children.head->header.type
4791                         != lang_input_section_enum))
4792                   einfo (_("%P%X: Internal error on COFF shared library"
4793                            " section %s\n"), os->name);
4794
4795                 input = os->children.head->input_section.section;
4796                 bfd_set_section_vma (os->bfd_section->owner,
4797                                      os->bfd_section,
4798                                      bfd_section_vma (input->owner, input));
4799                 os->bfd_section->size = input->size;
4800                 break;
4801               }
4802
4803             newdot = dot;
4804             if (bfd_is_abs_section (os->bfd_section))
4805               {
4806                 /* No matter what happens, an abs section starts at zero.  */
4807                 ASSERT (os->bfd_section->vma == 0);
4808               }
4809             else
4810               {
4811                 if (os->addr_tree == NULL)
4812                   {
4813                     /* No address specified for this section, get one
4814                        from the region specification.  */
4815                     if (os->region == NULL
4816                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4817                             && os->region->name_list.name[0] == '*'
4818                             && strcmp (os->region->name_list.name,
4819                                        DEFAULT_MEMORY_REGION) == 0))
4820                       {
4821                         os->region = lang_memory_default (os->bfd_section);
4822                       }
4823
4824                     /* If a loadable section is using the default memory
4825                        region, and some non default memory regions were
4826                        defined, issue an error message.  */
4827                     if (!os->ignored
4828                         && !IGNORE_SECTION (os->bfd_section)
4829                         && ! link_info.relocatable
4830                         && check_regions
4831                         && strcmp (os->region->name_list.name,
4832                                    DEFAULT_MEMORY_REGION) == 0
4833                         && lang_memory_region_list != NULL
4834                         && (strcmp (lang_memory_region_list->name_list.name,
4835                                     DEFAULT_MEMORY_REGION) != 0
4836                             || lang_memory_region_list->next != NULL)
4837                         && expld.phase != lang_mark_phase_enum)
4838                       {
4839                         /* By default this is an error rather than just a
4840                            warning because if we allocate the section to the
4841                            default memory region we can end up creating an
4842                            excessively large binary, or even seg faulting when
4843                            attempting to perform a negative seek.  See
4844                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
4845                            for an example of this.  This behaviour can be
4846                            overridden by the using the --no-check-sections
4847                            switch.  */
4848                         if (command_line.check_section_addresses)
4849                           einfo (_("%P%F: error: no memory region specified"
4850                                    " for loadable section `%s'\n"),
4851                                  bfd_get_section_name (link_info.output_bfd,
4852                                                        os->bfd_section));
4853                         else
4854                           einfo (_("%P: warning: no memory region specified"
4855                                    " for loadable section `%s'\n"),
4856                                  bfd_get_section_name (link_info.output_bfd,
4857                                                        os->bfd_section));
4858                       }
4859
4860                     newdot = os->region->current;
4861                     section_alignment = os->bfd_section->alignment_power;
4862                   }
4863                 else
4864                   section_alignment = os->section_alignment;
4865
4866                 /* Align to what the section needs.  */
4867                 if (section_alignment > 0)
4868                   {
4869                     bfd_vma savedot = newdot;
4870                     newdot = align_power (newdot, section_alignment);
4871
4872                     if (newdot != savedot
4873                         && (config.warn_section_align
4874                             || os->addr_tree != NULL)
4875                         && expld.phase != lang_mark_phase_enum)
4876                       einfo (_("%P: warning: changing start of section"
4877                                " %s by %lu bytes\n"),
4878                              os->name, (unsigned long) (newdot - savedot));
4879                   }
4880
4881                 bfd_set_section_vma (0, os->bfd_section, newdot);
4882
4883                 os->bfd_section->output_offset = 0;
4884               }
4885
4886             lang_size_sections_1 (&os->children.head, os,
4887                                   os->fill, newdot, relax, check_regions);
4888
4889             os->processed_vma = TRUE;
4890
4891             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4892               /* Except for some special linker created sections,
4893                  no output section should change from zero size
4894                  after strip_excluded_output_sections.  A non-zero
4895                  size on an ignored section indicates that some
4896                  input section was not sized early enough.  */
4897               ASSERT (os->bfd_section->size == 0);
4898             else
4899               {
4900                 dot = os->bfd_section->vma;
4901
4902                 /* Put the section within the requested block size, or
4903                    align at the block boundary.  */
4904                 after = ((dot
4905                           + TO_ADDR (os->bfd_section->size)
4906                           + os->block_value - 1)
4907                          & - (bfd_vma) os->block_value);
4908
4909                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4910               }
4911
4912             /* Set section lma.  */
4913             r = os->region;
4914             if (r == NULL)
4915               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4916
4917             if (os->load_base)
4918               {
4919                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4920                 os->bfd_section->lma = lma;
4921               }
4922             else if (os->lma_region != NULL)
4923               {
4924                 bfd_vma lma = os->lma_region->current;
4925
4926                 /* When LMA_REGION is the same as REGION, align the LMA
4927                    as we did for the VMA, possibly including alignment
4928                    from the bfd section.  If a different region, then
4929                    only align according to the value in the output
4930                    statement unless specified otherwise.  */
4931                 if (os->lma_region != os->region && !os->align_lma_with_input)
4932                   section_alignment = os->section_alignment;
4933                 if (section_alignment > 0)
4934                   lma = align_power (lma, section_alignment);
4935                 os->bfd_section->lma = lma;
4936               }
4937             else if (r->last_os != NULL
4938                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
4939               {
4940                 bfd_vma lma;
4941                 asection *last;
4942
4943                 last = r->last_os->output_section_statement.bfd_section;
4944
4945                 /* A backwards move of dot should be accompanied by
4946                    an explicit assignment to the section LMA (ie.
4947                    os->load_base set) because backwards moves can
4948                    create overlapping LMAs.  */
4949                 if (dot < last->vma
4950                     && os->bfd_section->size != 0
4951                     && dot + os->bfd_section->size <= last->vma)
4952                   {
4953                     /* If dot moved backwards then leave lma equal to
4954                        vma.  This is the old default lma, which might
4955                        just happen to work when the backwards move is
4956                        sufficiently large.  Nag if this changes anything,
4957                        so people can fix their linker scripts.  */
4958
4959                     if (last->vma != last->lma)
4960                       einfo (_("%P: warning: dot moved backwards before `%s'\n"),
4961                              os->name);
4962                   }
4963                 else
4964                   {
4965                     /* If this is an overlay, set the current lma to that
4966                        at the end of the previous section.  */
4967                     if (os->sectype == overlay_section)
4968                       lma = last->lma + last->size;
4969
4970                     /* Otherwise, keep the same lma to vma relationship
4971                        as the previous section.  */
4972                     else
4973                       lma = dot + last->lma - last->vma;
4974
4975                     if (section_alignment > 0)
4976                       lma = align_power (lma, section_alignment);
4977                     os->bfd_section->lma = lma;
4978                   }
4979               }
4980             os->processed_lma = TRUE;
4981
4982             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4983               break;
4984
4985             /* Keep track of normal sections using the default
4986                lma region.  We use this to set the lma for
4987                following sections.  Overlays or other linker
4988                script assignment to lma might mean that the
4989                default lma == vma is incorrect.
4990                To avoid warnings about dot moving backwards when using
4991                -Ttext, don't start tracking sections until we find one
4992                of non-zero size or with lma set differently to vma.  */
4993             if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4994                  || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
4995                 && (os->bfd_section->flags & SEC_ALLOC) != 0
4996                 && (os->bfd_section->size != 0
4997                     || (r->last_os == NULL
4998                         && os->bfd_section->vma != os->bfd_section->lma)
4999                     || (r->last_os != NULL
5000                         && dot >= (r->last_os->output_section_statement
5001                                    .bfd_section->vma)))
5002                 && os->lma_region == NULL
5003                 && !link_info.relocatable)
5004               r->last_os = s;
5005
5006             /* .tbss sections effectively have zero size.  */
5007             if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5008                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5009                 || link_info.relocatable)
5010               dot += TO_ADDR (os->bfd_section->size);
5011
5012             if (os->update_dot_tree != 0)
5013               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5014
5015             /* Update dot in the region ?
5016                We only do this if the section is going to be allocated,
5017                since unallocated sections do not contribute to the region's
5018                overall size in memory.  */
5019             if (os->region != NULL
5020                 && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5021               {
5022                 os->region->current = dot;
5023
5024                 if (check_regions)
5025                   /* Make sure the new address is within the region.  */
5026                   os_region_check (os, os->region, os->addr_tree,
5027                                    os->bfd_section->vma);
5028
5029                 if (os->lma_region != NULL && os->lma_region != os->region
5030                     && (os->bfd_section->flags & SEC_LOAD))
5031                   {
5032                     os->lma_region->current
5033                       = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
5034
5035                     if (check_regions)
5036                       os_region_check (os, os->lma_region, NULL,
5037                                        os->bfd_section->lma);
5038                   }
5039               }
5040           }
5041           break;
5042
5043         case lang_constructors_statement_enum:
5044           dot = lang_size_sections_1 (&constructor_list.head,
5045                                       output_section_statement,
5046                                       fill, dot, relax, check_regions);
5047           break;
5048
5049         case lang_data_statement_enum:
5050           {
5051             unsigned int size = 0;
5052
5053             s->data_statement.output_offset =
5054               dot - output_section_statement->bfd_section->vma;
5055             s->data_statement.output_section =
5056               output_section_statement->bfd_section;
5057
5058             /* We might refer to provided symbols in the expression, and
5059                need to mark them as needed.  */
5060             exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5061
5062             switch (s->data_statement.type)
5063               {
5064               default:
5065                 abort ();
5066               case QUAD:
5067               case SQUAD:
5068                 size = QUAD_SIZE;
5069                 break;
5070               case LONG:
5071                 size = LONG_SIZE;
5072                 break;
5073               case SHORT:
5074                 size = SHORT_SIZE;
5075                 break;
5076               case BYTE:
5077                 size = BYTE_SIZE;
5078                 break;
5079               }
5080             if (size < TO_SIZE ((unsigned) 1))
5081               size = TO_SIZE ((unsigned) 1);
5082             dot += TO_ADDR (size);
5083             output_section_statement->bfd_section->size
5084               = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5085
5086           }
5087           break;
5088
5089         case lang_reloc_statement_enum:
5090           {
5091             int size;
5092
5093             s->reloc_statement.output_offset =
5094               dot - output_section_statement->bfd_section->vma;
5095             s->reloc_statement.output_section =
5096               output_section_statement->bfd_section;
5097             size = bfd_get_reloc_size (s->reloc_statement.howto);
5098             dot += TO_ADDR (size);
5099             output_section_statement->bfd_section->size
5100               = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5101           }
5102           break;
5103
5104         case lang_wild_statement_enum:
5105           dot = lang_size_sections_1 (&s->wild_statement.children.head,
5106                                       output_section_statement,
5107                                       fill, dot, relax, check_regions);
5108           break;
5109
5110         case lang_object_symbols_statement_enum:
5111           link_info.create_object_symbols_section =
5112             output_section_statement->bfd_section;
5113           break;
5114
5115         case lang_output_statement_enum:
5116         case lang_target_statement_enum:
5117           break;
5118
5119         case lang_input_section_enum:
5120           {
5121             asection *i;
5122
5123             i = s->input_section.section;
5124             if (relax)
5125               {
5126                 bfd_boolean again;
5127
5128                 if (! bfd_relax_section (i->owner, i, &link_info, &again))
5129                   einfo (_("%P%F: can't relax section: %E\n"));
5130                 if (again)
5131                   *relax = TRUE;
5132               }
5133             dot = size_input_section (prev, output_section_statement,
5134                                       output_section_statement->fill, dot);
5135           }
5136           break;
5137
5138         case lang_input_statement_enum:
5139           break;
5140
5141         case lang_fill_statement_enum:
5142           s->fill_statement.output_section =
5143             output_section_statement->bfd_section;
5144
5145           fill = s->fill_statement.fill;
5146           break;
5147
5148         case lang_assignment_statement_enum:
5149           {
5150             bfd_vma newdot = dot;
5151             etree_type *tree = s->assignment_statement.exp;
5152
5153             expld.dataseg.relro = exp_dataseg_relro_none;
5154
5155             exp_fold_tree (tree,
5156                            output_section_statement->bfd_section,
5157                            &newdot);
5158
5159             if (expld.dataseg.relro == exp_dataseg_relro_start)
5160               {
5161                 if (!expld.dataseg.relro_start_stat)
5162                   expld.dataseg.relro_start_stat = s;
5163                 else
5164                   {
5165                     ASSERT (expld.dataseg.relro_start_stat == s);
5166                   }
5167               }
5168             else if (expld.dataseg.relro == exp_dataseg_relro_end)
5169               {
5170                 if (!expld.dataseg.relro_end_stat)
5171                   expld.dataseg.relro_end_stat = s;
5172                 else
5173                   {
5174                     ASSERT (expld.dataseg.relro_end_stat == s);
5175                   }
5176               }
5177             expld.dataseg.relro = exp_dataseg_relro_none;
5178
5179             /* This symbol may be relative to this section.  */
5180             if ((tree->type.node_class == etree_provided
5181                  || tree->type.node_class == etree_assign)
5182                 && (tree->assign.dst [0] != '.'
5183                     || tree->assign.dst [1] != '\0'))
5184               output_section_statement->update_dot = 1;
5185
5186             if (!output_section_statement->ignored)
5187               {
5188                 if (output_section_statement == abs_output_section)
5189                   {
5190                     /* If we don't have an output section, then just adjust
5191                        the default memory address.  */
5192                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5193                                                FALSE)->current = newdot;
5194                   }
5195                 else if (newdot != dot)
5196                   {
5197                     /* Insert a pad after this statement.  We can't
5198                        put the pad before when relaxing, in case the
5199                        assignment references dot.  */
5200                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5201                                 output_section_statement->bfd_section, dot);
5202
5203                     /* Don't neuter the pad below when relaxing.  */
5204                     s = s->header.next;
5205
5206                     /* If dot is advanced, this implies that the section
5207                        should have space allocated to it, unless the
5208                        user has explicitly stated that the section
5209                        should not be allocated.  */
5210                     if (output_section_statement->sectype != noalloc_section
5211                         && (output_section_statement->sectype != noload_section
5212                             || (bfd_get_flavour (link_info.output_bfd)
5213                                 == bfd_target_elf_flavour)))
5214                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
5215                   }
5216                 dot = newdot;
5217               }
5218           }
5219           break;
5220
5221         case lang_padding_statement_enum:
5222           /* If this is the first time lang_size_sections is called,
5223              we won't have any padding statements.  If this is the
5224              second or later passes when relaxing, we should allow
5225              padding to shrink.  If padding is needed on this pass, it
5226              will be added back in.  */
5227           s->padding_statement.size = 0;
5228
5229           /* Make sure output_offset is valid.  If relaxation shrinks
5230              the section and this pad isn't needed, it's possible to
5231              have output_offset larger than the final size of the
5232              section.  bfd_set_section_contents will complain even for
5233              a pad size of zero.  */
5234           s->padding_statement.output_offset
5235             = dot - output_section_statement->bfd_section->vma;
5236           break;
5237
5238         case lang_group_statement_enum:
5239           dot = lang_size_sections_1 (&s->group_statement.children.head,
5240                                       output_section_statement,
5241                                       fill, dot, relax, check_regions);
5242           break;
5243
5244         case lang_insert_statement_enum:
5245           break;
5246
5247           /* We can only get here when relaxing is turned on.  */
5248         case lang_address_statement_enum:
5249           break;
5250
5251         default:
5252           FAIL ();
5253           break;
5254         }
5255       prev = &s->header.next;
5256     }
5257   return dot;
5258 }
5259
5260 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5261    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5262    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5263    segments.  We are allowed an opportunity to override this decision.  */
5264
5265 bfd_boolean
5266 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5267                                     bfd * abfd ATTRIBUTE_UNUSED,
5268                                     asection * current_section,
5269                                     asection * previous_section,
5270                                     bfd_boolean new_segment)
5271 {
5272   lang_output_section_statement_type * cur;
5273   lang_output_section_statement_type * prev;
5274
5275   /* The checks below are only necessary when the BFD library has decided
5276      that the two sections ought to be placed into the same segment.  */
5277   if (new_segment)
5278     return TRUE;
5279
5280   /* Paranoia checks.  */
5281   if (current_section == NULL || previous_section == NULL)
5282     return new_segment;
5283
5284   /* If this flag is set, the target never wants code and non-code
5285      sections comingled in the same segment.  */
5286   if (config.separate_code
5287       && ((current_section->flags ^ previous_section->flags) & SEC_CODE))
5288     return TRUE;
5289
5290   /* Find the memory regions associated with the two sections.
5291      We call lang_output_section_find() here rather than scanning the list
5292      of output sections looking for a matching section pointer because if
5293      we have a large number of sections then a hash lookup is faster.  */
5294   cur  = lang_output_section_find (current_section->name);
5295   prev = lang_output_section_find (previous_section->name);
5296
5297   /* More paranoia.  */
5298   if (cur == NULL || prev == NULL)
5299     return new_segment;
5300
5301   /* If the regions are different then force the sections to live in
5302      different segments.  See the email thread starting at the following
5303      URL for the reasons why this is necessary:
5304      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5305   return cur->region != prev->region;
5306 }
5307
5308 void
5309 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5310 {
5311   lang_statement_iteration++;
5312   lang_size_sections_1 (&statement_list.head, abs_output_section,
5313                         0, 0, relax, check_regions);
5314 }
5315
5316 void
5317 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5318 {
5319   expld.phase = lang_allocating_phase_enum;
5320   expld.dataseg.phase = exp_dataseg_none;
5321
5322   one_lang_size_sections_pass (relax, check_regions);
5323   if (expld.dataseg.phase == exp_dataseg_end_seen
5324       && link_info.relro && expld.dataseg.relro_end)
5325     {
5326       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5327          to put expld.dataseg.relro_end on a (common) page boundary.  */
5328       bfd_vma min_base, relro_end, maxpage;
5329
5330       expld.dataseg.phase = exp_dataseg_relro_adjust;
5331       maxpage = expld.dataseg.maxpagesize;
5332       /* MIN_BASE is the absolute minimum address we are allowed to start the
5333          read-write segment (byte before will be mapped read-only).  */
5334       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5335       expld.dataseg.base += (-expld.dataseg.relro_end
5336                              & (expld.dataseg.pagesize - 1));
5337       /* Compute the expected PT_GNU_RELRO segment end.  */
5338       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5339                    & ~(expld.dataseg.pagesize - 1));
5340       if (min_base + maxpage < expld.dataseg.base)
5341         {
5342           expld.dataseg.base -= maxpage;
5343           relro_end -= maxpage;
5344         }
5345       lang_reset_memory_regions ();
5346       one_lang_size_sections_pass (relax, check_regions);
5347       if (expld.dataseg.relro_end > relro_end)
5348         {
5349           /* The alignment of sections between DATA_SEGMENT_ALIGN
5350              and DATA_SEGMENT_RELRO_END can cause excessive padding to
5351              be inserted at DATA_SEGMENT_RELRO_END.  Try to start a
5352              bit lower so that the section alignments will fit in.  */
5353           asection *sec;
5354           unsigned int max_alignment_power = 0;
5355
5356           /* Find maximum alignment power of sections between
5357              DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5358           for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5359             if (sec->vma >= expld.dataseg.base
5360                 && sec->vma < expld.dataseg.relro_end
5361                 && sec->alignment_power > max_alignment_power)
5362               max_alignment_power = sec->alignment_power;
5363
5364           if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5365             {
5366               /* Aligning the adjusted base guarantees the padding
5367                  between sections won't change.  This is better than
5368                  simply subtracting 1 << max_alignment_power which is
5369                  what we used to do here.  */
5370               expld.dataseg.base &= ~((1 << max_alignment_power) - 1);
5371               lang_reset_memory_regions ();
5372               one_lang_size_sections_pass (relax, check_regions);
5373             }
5374         }
5375       link_info.relro_start = expld.dataseg.base;
5376       link_info.relro_end = expld.dataseg.relro_end;
5377     }
5378   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5379     {
5380       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5381          a page could be saved in the data segment.  */
5382       bfd_vma first, last;
5383
5384       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5385       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5386       if (first && last
5387           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5388               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5389           && first + last <= expld.dataseg.pagesize)
5390         {
5391           expld.dataseg.phase = exp_dataseg_adjust;
5392           lang_reset_memory_regions ();
5393           one_lang_size_sections_pass (relax, check_regions);
5394         }
5395       else
5396         expld.dataseg.phase = exp_dataseg_done;
5397     }
5398   else
5399     expld.dataseg.phase = exp_dataseg_done;
5400 }
5401
5402 static lang_output_section_statement_type *current_section;
5403 static lang_assignment_statement_type *current_assign;
5404 static bfd_boolean prefer_next_section;
5405
5406 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5407
5408 static bfd_vma
5409 lang_do_assignments_1 (lang_statement_union_type *s,
5410                        lang_output_section_statement_type *current_os,
5411                        fill_type *fill,
5412                        bfd_vma dot,
5413                        bfd_boolean *found_end)
5414 {
5415   for (; s != NULL; s = s->header.next)
5416     {
5417       switch (s->header.type)
5418         {
5419         case lang_constructors_statement_enum:
5420           dot = lang_do_assignments_1 (constructor_list.head,
5421                                        current_os, fill, dot, found_end);
5422           break;
5423
5424         case lang_output_section_statement_enum:
5425           {
5426             lang_output_section_statement_type *os;
5427
5428             os = &(s->output_section_statement);
5429             os->after_end = *found_end;
5430             if (os->bfd_section != NULL && !os->ignored)
5431               {
5432                 if ((os->bfd_section->flags & SEC_ALLOC) != 0)
5433                   {
5434                     current_section = os;
5435                     prefer_next_section = FALSE;
5436                   }
5437                 dot = os->bfd_section->vma;
5438
5439                 lang_do_assignments_1 (os->children.head,
5440                                        os, os->fill, dot, found_end);
5441
5442                 /* .tbss sections effectively have zero size.  */
5443                 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5444                     || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5445                     || link_info.relocatable)
5446                   dot += TO_ADDR (os->bfd_section->size);
5447
5448                 if (os->update_dot_tree != NULL)
5449                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5450               }
5451           }
5452           break;
5453
5454         case lang_wild_statement_enum:
5455
5456           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5457                                        current_os, fill, dot, found_end);
5458           break;
5459
5460         case lang_object_symbols_statement_enum:
5461         case lang_output_statement_enum:
5462         case lang_target_statement_enum:
5463           break;
5464
5465         case lang_data_statement_enum:
5466           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5467           if (expld.result.valid_p)
5468             {
5469               s->data_statement.value = expld.result.value;
5470               if (expld.result.section != NULL)
5471                 s->data_statement.value += expld.result.section->vma;
5472             }
5473           else
5474             einfo (_("%F%P: invalid data statement\n"));
5475           {
5476             unsigned int size;
5477             switch (s->data_statement.type)
5478               {
5479               default:
5480                 abort ();
5481               case QUAD:
5482               case SQUAD:
5483                 size = QUAD_SIZE;
5484                 break;
5485               case LONG:
5486                 size = LONG_SIZE;
5487                 break;
5488               case SHORT:
5489                 size = SHORT_SIZE;
5490                 break;
5491               case BYTE:
5492                 size = BYTE_SIZE;
5493                 break;
5494               }
5495             if (size < TO_SIZE ((unsigned) 1))
5496               size = TO_SIZE ((unsigned) 1);
5497             dot += TO_ADDR (size);
5498           }
5499           break;
5500
5501         case lang_reloc_statement_enum:
5502           exp_fold_tree (s->reloc_statement.addend_exp,
5503                          bfd_abs_section_ptr, &dot);
5504           if (expld.result.valid_p)
5505             s->reloc_statement.addend_value = expld.result.value;
5506           else
5507             einfo (_("%F%P: invalid reloc statement\n"));
5508           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5509           break;
5510
5511         case lang_input_section_enum:
5512           {
5513             asection *in = s->input_section.section;
5514
5515             if ((in->flags & SEC_EXCLUDE) == 0)
5516               dot += TO_ADDR (in->size);
5517           }
5518           break;
5519
5520         case lang_input_statement_enum:
5521           break;
5522
5523         case lang_fill_statement_enum:
5524           fill = s->fill_statement.fill;
5525           break;
5526
5527         case lang_assignment_statement_enum:
5528           current_assign = &s->assignment_statement;
5529           if (current_assign->exp->type.node_class != etree_assert)
5530             {
5531               const char *p = current_assign->exp->assign.dst;
5532
5533               if (current_os == abs_output_section && p[0] == '.' && p[1] == 0)
5534                 prefer_next_section = TRUE;
5535
5536               while (*p == '_')
5537                 ++p;
5538               if (strcmp (p, "end") == 0)
5539                 *found_end = TRUE;
5540             }
5541           exp_fold_tree (s->assignment_statement.exp,
5542                          current_os->bfd_section,
5543                          &dot);
5544           break;
5545
5546         case lang_padding_statement_enum:
5547           dot += TO_ADDR (s->padding_statement.size);
5548           break;
5549
5550         case lang_group_statement_enum:
5551           dot = lang_do_assignments_1 (s->group_statement.children.head,
5552                                        current_os, fill, dot, found_end);
5553           break;
5554
5555         case lang_insert_statement_enum:
5556           break;
5557
5558         case lang_address_statement_enum:
5559           break;
5560
5561         default:
5562           FAIL ();
5563           break;
5564         }
5565     }
5566   return dot;
5567 }
5568
5569 void
5570 lang_do_assignments (lang_phase_type phase)
5571 {
5572   bfd_boolean found_end = FALSE;
5573
5574   current_section = NULL;
5575   prefer_next_section = FALSE;
5576   expld.phase = phase;
5577   lang_statement_iteration++;
5578   lang_do_assignments_1 (statement_list.head,
5579                          abs_output_section, NULL, 0, &found_end);
5580 }
5581
5582 /* For an assignment statement outside of an output section statement,
5583    choose the best of neighbouring output sections to use for values
5584    of "dot".  */
5585
5586 asection *
5587 section_for_dot (void)
5588 {
5589   asection *s;
5590
5591   /* Assignments belong to the previous output section, unless there
5592      has been an assignment to "dot", in which case following
5593      assignments belong to the next output section.  (The assumption
5594      is that an assignment to "dot" is setting up the address for the
5595      next output section.)  Except that past the assignment to "_end"
5596      we always associate with the previous section.  This exception is
5597      for targets like SH that define an alloc .stack or other
5598      weirdness after non-alloc sections.  */
5599   if (current_section == NULL || prefer_next_section)
5600     {
5601       lang_statement_union_type *stmt;
5602       lang_output_section_statement_type *os;
5603
5604       for (stmt = (lang_statement_union_type *) current_assign;
5605            stmt != NULL;
5606            stmt = stmt->header.next)
5607         if (stmt->header.type == lang_output_section_statement_enum)
5608           break;
5609
5610       os = &stmt->output_section_statement;
5611       while (os != NULL
5612              && !os->after_end
5613              && (os->bfd_section == NULL
5614                  || (os->bfd_section->flags & SEC_EXCLUDE) != 0
5615                  || bfd_section_removed_from_list (link_info.output_bfd,
5616                                                    os->bfd_section)))
5617         os = os->next;
5618
5619       if (current_section == NULL || os == NULL || !os->after_end)
5620         {
5621           if (os != NULL)
5622             s = os->bfd_section;
5623           else
5624             s = link_info.output_bfd->section_last;
5625           while (s != NULL
5626                  && ((s->flags & SEC_ALLOC) == 0
5627                      || (s->flags & SEC_THREAD_LOCAL) != 0))
5628             s = s->prev;
5629           if (s != NULL)
5630             return s;
5631
5632           return bfd_abs_section_ptr;
5633         }
5634     }
5635
5636   s = current_section->bfd_section;
5637
5638   /* The section may have been stripped.  */
5639   while (s != NULL
5640          && ((s->flags & SEC_EXCLUDE) != 0
5641              || (s->flags & SEC_ALLOC) == 0
5642              || (s->flags & SEC_THREAD_LOCAL) != 0
5643              || bfd_section_removed_from_list (link_info.output_bfd, s)))
5644     s = s->prev;
5645   if (s == NULL)
5646     s = link_info.output_bfd->sections;
5647   while (s != NULL
5648          && ((s->flags & SEC_ALLOC) == 0
5649              || (s->flags & SEC_THREAD_LOCAL) != 0))
5650     s = s->next;
5651   if (s != NULL)
5652     return s;
5653
5654   return bfd_abs_section_ptr;
5655 }
5656
5657 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5658    operator .startof. (section_name), it produces an undefined symbol
5659    .startof.section_name.  Similarly, when it sees
5660    .sizeof. (section_name), it produces an undefined symbol
5661    .sizeof.section_name.  For all the output sections, we look for
5662    such symbols, and set them to the correct value.  */
5663
5664 static void
5665 lang_set_startof (void)
5666 {
5667   asection *s;
5668
5669   if (link_info.relocatable)
5670     return;
5671
5672   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5673     {
5674       const char *secname;
5675       char *buf;
5676       struct bfd_link_hash_entry *h;
5677
5678       secname = bfd_get_section_name (link_info.output_bfd, s);
5679       buf = (char *) xmalloc (10 + strlen (secname));
5680
5681       sprintf (buf, ".startof.%s", secname);
5682       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5683       if (h != NULL && h->type == bfd_link_hash_undefined)
5684         {
5685           h->type = bfd_link_hash_defined;
5686           h->u.def.value = 0;
5687           h->u.def.section = s;
5688         }
5689
5690       sprintf (buf, ".sizeof.%s", secname);
5691       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5692       if (h != NULL && h->type == bfd_link_hash_undefined)
5693         {
5694           h->type = bfd_link_hash_defined;
5695           h->u.def.value = TO_ADDR (s->size);
5696           h->u.def.section = bfd_abs_section_ptr;
5697         }
5698
5699       free (buf);
5700     }
5701 }
5702
5703 static void
5704 lang_end (void)
5705 {
5706   struct bfd_link_hash_entry *h;
5707   bfd_boolean warn;
5708
5709   if ((link_info.relocatable && !link_info.gc_sections)
5710       || (link_info.shared && !link_info.executable))
5711     warn = entry_from_cmdline;
5712   else
5713     warn = TRUE;
5714
5715   /* Force the user to specify a root when generating a relocatable with
5716      --gc-sections.  */
5717   if (link_info.gc_sections && link_info.relocatable
5718       && !(entry_from_cmdline || undef_from_cmdline))
5719     einfo (_("%P%F: gc-sections requires either an entry or "
5720              "an undefined symbol\n"));
5721
5722   if (entry_symbol.name == NULL)
5723     {
5724       /* No entry has been specified.  Look for the default entry, but
5725          don't warn if we don't find it.  */
5726       entry_symbol.name = entry_symbol_default;
5727       warn = FALSE;
5728     }
5729
5730   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5731                             FALSE, FALSE, TRUE);
5732   if (h != NULL
5733       && (h->type == bfd_link_hash_defined
5734           || h->type == bfd_link_hash_defweak)
5735       && h->u.def.section->output_section != NULL)
5736     {
5737       bfd_vma val;
5738
5739       val = (h->u.def.value
5740              + bfd_get_section_vma (link_info.output_bfd,
5741                                     h->u.def.section->output_section)
5742              + h->u.def.section->output_offset);
5743       if (! bfd_set_start_address (link_info.output_bfd, val))
5744         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5745     }
5746   else
5747     {
5748       bfd_vma val;
5749       const char *send;
5750
5751       /* We couldn't find the entry symbol.  Try parsing it as a
5752          number.  */
5753       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5754       if (*send == '\0')
5755         {
5756           if (! bfd_set_start_address (link_info.output_bfd, val))
5757             einfo (_("%P%F: can't set start address\n"));
5758         }
5759       else
5760         {
5761           asection *ts;
5762
5763           /* Can't find the entry symbol, and it's not a number.  Use
5764              the first address in the text section.  */
5765           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5766           if (ts != NULL)
5767             {
5768               if (warn)
5769                 einfo (_("%P: warning: cannot find entry symbol %s;"
5770                          " defaulting to %V\n"),
5771                        entry_symbol.name,
5772                        bfd_get_section_vma (link_info.output_bfd, ts));
5773               if (!(bfd_set_start_address
5774                     (link_info.output_bfd,
5775                      bfd_get_section_vma (link_info.output_bfd, ts))))
5776                 einfo (_("%P%F: can't set start address\n"));
5777             }
5778           else
5779             {
5780               if (warn)
5781                 einfo (_("%P: warning: cannot find entry symbol %s;"
5782                          " not setting start address\n"),
5783                        entry_symbol.name);
5784             }
5785         }
5786     }
5787 }
5788
5789 /* This is a small function used when we want to ignore errors from
5790    BFD.  */
5791
5792 static void
5793 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5794 {
5795   /* Don't do anything.  */
5796 }
5797
5798 /* Check that the architecture of all the input files is compatible
5799    with the output file.  Also call the backend to let it do any
5800    other checking that is needed.  */
5801
5802 static void
5803 lang_check (void)
5804 {
5805   lang_statement_union_type *file;
5806   bfd *input_bfd;
5807   const bfd_arch_info_type *compatible;
5808
5809   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5810     {
5811 #ifdef ENABLE_PLUGINS
5812       /* Don't check format of files claimed by plugin.  */
5813       if (file->input_statement.flags.claimed)
5814         continue;
5815 #endif /* ENABLE_PLUGINS */
5816       input_bfd = file->input_statement.the_bfd;
5817       compatible
5818         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5819                                    command_line.accept_unknown_input_arch);
5820
5821       /* In general it is not possible to perform a relocatable
5822          link between differing object formats when the input
5823          file has relocations, because the relocations in the
5824          input format may not have equivalent representations in
5825          the output format (and besides BFD does not translate
5826          relocs for other link purposes than a final link).  */
5827       if ((link_info.relocatable || link_info.emitrelocations)
5828           && (compatible == NULL
5829               || (bfd_get_flavour (input_bfd)
5830                   != bfd_get_flavour (link_info.output_bfd)))
5831           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5832         {
5833           einfo (_("%P%F: Relocatable linking with relocations from"
5834                    " format %s (%B) to format %s (%B) is not supported\n"),
5835                  bfd_get_target (input_bfd), input_bfd,
5836                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5837           /* einfo with %F exits.  */
5838         }
5839
5840       if (compatible == NULL)
5841         {
5842           if (command_line.warn_mismatch)
5843             einfo (_("%P%X: %s architecture of input file `%B'"
5844                      " is incompatible with %s output\n"),
5845                    bfd_printable_name (input_bfd), input_bfd,
5846                    bfd_printable_name (link_info.output_bfd));
5847         }
5848       else if (bfd_count_sections (input_bfd))
5849         {
5850           /* If the input bfd has no contents, it shouldn't set the
5851              private data of the output bfd.  */
5852
5853           bfd_error_handler_type pfn = NULL;
5854
5855           /* If we aren't supposed to warn about mismatched input
5856              files, temporarily set the BFD error handler to a
5857              function which will do nothing.  We still want to call
5858              bfd_merge_private_bfd_data, since it may set up
5859              information which is needed in the output file.  */
5860           if (! command_line.warn_mismatch)
5861             pfn = bfd_set_error_handler (ignore_bfd_errors);
5862           if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5863             {
5864               if (command_line.warn_mismatch)
5865                 einfo (_("%P%X: failed to merge target specific data"
5866                          " of file %B\n"), input_bfd);
5867             }
5868           if (! command_line.warn_mismatch)
5869             bfd_set_error_handler (pfn);
5870         }
5871     }
5872 }
5873
5874 /* Look through all the global common symbols and attach them to the
5875    correct section.  The -sort-common command line switch may be used
5876    to roughly sort the entries by alignment.  */
5877
5878 static void
5879 lang_common (void)
5880 {
5881   if (command_line.inhibit_common_definition)
5882     return;
5883   if (link_info.relocatable
5884       && ! command_line.force_common_definition)
5885     return;
5886
5887   if (! config.sort_common)
5888     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5889   else
5890     {
5891       unsigned int power;
5892
5893       if (config.sort_common == sort_descending)
5894         {
5895           for (power = 4; power > 0; power--)
5896             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5897
5898           power = 0;
5899           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5900         }
5901       else
5902         {
5903           for (power = 0; power <= 4; power++)
5904             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5905
5906           power = UINT_MAX;
5907           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5908         }
5909     }
5910 }
5911
5912 /* Place one common symbol in the correct section.  */
5913
5914 static bfd_boolean
5915 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5916 {
5917   unsigned int power_of_two;
5918   bfd_vma size;
5919   asection *section;
5920
5921   if (h->type != bfd_link_hash_common)
5922     return TRUE;
5923
5924   size = h->u.c.size;
5925   power_of_two = h->u.c.p->alignment_power;
5926
5927   if (config.sort_common == sort_descending
5928       && power_of_two < *(unsigned int *) info)
5929     return TRUE;
5930   else if (config.sort_common == sort_ascending
5931            && power_of_two > *(unsigned int *) info)
5932     return TRUE;
5933
5934   section = h->u.c.p->section;
5935   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5936     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5937            h->root.string);
5938
5939   if (config.map_file != NULL)
5940     {
5941       static bfd_boolean header_printed;
5942       int len;
5943       char *name;
5944       char buf[50];
5945
5946       if (! header_printed)
5947         {
5948           minfo (_("\nAllocating common symbols\n"));
5949           minfo (_("Common symbol       size              file\n\n"));
5950           header_printed = TRUE;
5951         }
5952
5953       name = bfd_demangle (link_info.output_bfd, h->root.string,
5954                            DMGL_ANSI | DMGL_PARAMS);
5955       if (name == NULL)
5956         {
5957           minfo ("%s", h->root.string);
5958           len = strlen (h->root.string);
5959         }
5960       else
5961         {
5962           minfo ("%s", name);
5963           len = strlen (name);
5964           free (name);
5965         }
5966
5967       if (len >= 19)
5968         {
5969           print_nl ();
5970           len = 0;
5971         }
5972       while (len < 20)
5973         {
5974           print_space ();
5975           ++len;
5976         }
5977
5978       minfo ("0x");
5979       if (size <= 0xffffffff)
5980         sprintf (buf, "%lx", (unsigned long) size);
5981       else
5982         sprintf_vma (buf, size);
5983       minfo ("%s", buf);
5984       len = strlen (buf);
5985
5986       while (len < 16)
5987         {
5988           print_space ();
5989           ++len;
5990         }
5991
5992       minfo ("%B\n", section->owner);
5993     }
5994
5995   return TRUE;
5996 }
5997
5998 /* Run through the input files and ensure that every input section has
5999    somewhere to go.  If one is found without a destination then create
6000    an input request and place it into the statement tree.  */
6001
6002 static void
6003 lang_place_orphans (void)
6004 {
6005   LANG_FOR_EACH_INPUT_STATEMENT (file)
6006     {
6007       asection *s;
6008
6009       for (s = file->the_bfd->sections; s != NULL; s = s->next)
6010         {
6011           if (s->output_section == NULL)
6012             {
6013               /* This section of the file is not attached, root
6014                  around for a sensible place for it to go.  */
6015
6016               if (file->flags.just_syms)
6017                 bfd_link_just_syms (file->the_bfd, s, &link_info);
6018               else if ((s->flags & SEC_EXCLUDE) != 0)
6019                 s->output_section = bfd_abs_section_ptr;
6020               else if (strcmp (s->name, "COMMON") == 0)
6021                 {
6022                   /* This is a lonely common section which must have
6023                      come from an archive.  We attach to the section
6024                      with the wildcard.  */
6025                   if (! link_info.relocatable
6026                       || command_line.force_common_definition)
6027                     {
6028                       if (default_common_section == NULL)
6029                         default_common_section
6030                           = lang_output_section_statement_lookup (".bss", 0,
6031                                                                   TRUE);
6032                       lang_add_section (&default_common_section->children, s,
6033                                         NULL, default_common_section);
6034                     }
6035                 }
6036               else
6037                 {
6038                   const char *name = s->name;
6039                   int constraint = 0;
6040
6041                   if (config.unique_orphan_sections
6042                       || unique_section_p (s, NULL))
6043                     constraint = SPECIAL;
6044
6045                   if (!ldemul_place_orphan (s, name, constraint))
6046                     {
6047                       lang_output_section_statement_type *os;
6048                       os = lang_output_section_statement_lookup (name,
6049                                                                  constraint,
6050                                                                  TRUE);
6051                       if (os->addr_tree == NULL
6052                           && (link_info.relocatable
6053                               || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6054                         os->addr_tree = exp_intop (0);
6055                       lang_add_section (&os->children, s, NULL, os);
6056                     }
6057                 }
6058             }
6059         }
6060     }
6061 }
6062
6063 void
6064 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
6065 {
6066   flagword *ptr_flags;
6067
6068   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6069   while (*flags)
6070     {
6071       switch (*flags)
6072         {
6073         case 'A': case 'a':
6074           *ptr_flags |= SEC_ALLOC;
6075           break;
6076
6077         case 'R': case 'r':
6078           *ptr_flags |= SEC_READONLY;
6079           break;
6080
6081         case 'W': case 'w':
6082           *ptr_flags |= SEC_DATA;
6083           break;
6084
6085         case 'X': case 'x':
6086           *ptr_flags |= SEC_CODE;
6087           break;
6088
6089         case 'L': case 'l':
6090         case 'I': case 'i':
6091           *ptr_flags |= SEC_LOAD;
6092           break;
6093
6094         default:
6095           einfo (_("%P%F: invalid syntax in flags\n"));
6096           break;
6097         }
6098       flags++;
6099     }
6100 }
6101
6102 /* Call a function on each input file.  This function will be called
6103    on an archive, but not on the elements.  */
6104
6105 void
6106 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6107 {
6108   lang_input_statement_type *f;
6109
6110   for (f = (lang_input_statement_type *) input_file_chain.head;
6111        f != NULL;
6112        f = (lang_input_statement_type *) f->next_real_file)
6113     func (f);
6114 }
6115
6116 /* Call a function on each file.  The function will be called on all
6117    the elements of an archive which are included in the link, but will
6118    not be called on the archive file itself.  */
6119
6120 void
6121 lang_for_each_file (void (*func) (lang_input_statement_type *))
6122 {
6123   LANG_FOR_EACH_INPUT_STATEMENT (f)
6124     {
6125       func (f);
6126     }
6127 }
6128
6129 void
6130 ldlang_add_file (lang_input_statement_type *entry)
6131 {
6132   lang_statement_append (&file_chain,
6133                          (lang_statement_union_type *) entry,
6134                          &entry->next);
6135
6136   /* The BFD linker needs to have a list of all input BFDs involved in
6137      a link.  */
6138   ASSERT (entry->the_bfd->link_next == NULL);
6139   ASSERT (entry->the_bfd != link_info.output_bfd);
6140
6141   *link_info.input_bfds_tail = entry->the_bfd;
6142   link_info.input_bfds_tail = &entry->the_bfd->link_next;
6143   entry->the_bfd->usrdata = entry;
6144   bfd_set_gp_size (entry->the_bfd, g_switch_value);
6145
6146   /* Look through the sections and check for any which should not be
6147      included in the link.  We need to do this now, so that we can
6148      notice when the backend linker tries to report multiple
6149      definition errors for symbols which are in sections we aren't
6150      going to link.  FIXME: It might be better to entirely ignore
6151      symbols which are defined in sections which are going to be
6152      discarded.  This would require modifying the backend linker for
6153      each backend which might set the SEC_LINK_ONCE flag.  If we do
6154      this, we should probably handle SEC_EXCLUDE in the same way.  */
6155
6156   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6157 }
6158
6159 void
6160 lang_add_output (const char *name, int from_script)
6161 {
6162   /* Make -o on command line override OUTPUT in script.  */
6163   if (!had_output_filename || !from_script)
6164     {
6165       output_filename = name;
6166       had_output_filename = TRUE;
6167     }
6168 }
6169
6170 static int
6171 topower (int x)
6172 {
6173   unsigned int i = 1;
6174   int l;
6175
6176   if (x < 0)
6177     return -1;
6178
6179   for (l = 0; l < 32; l++)
6180     {
6181       if (i >= (unsigned int) x)
6182         return l;
6183       i <<= 1;
6184     }
6185
6186   return 0;
6187 }
6188
6189 lang_output_section_statement_type *
6190 lang_enter_output_section_statement (const char *output_section_statement_name,
6191                                      etree_type *address_exp,
6192                                      enum section_type sectype,
6193                                      etree_type *align,
6194                                      etree_type *subalign,
6195                                      etree_type *ebase,
6196                                      int constraint,
6197                                      int align_with_input)
6198 {
6199   lang_output_section_statement_type *os;
6200
6201   os = lang_output_section_statement_lookup (output_section_statement_name,
6202                                              constraint, TRUE);
6203   current_section = os;
6204
6205   if (os->addr_tree == NULL)
6206     {
6207       os->addr_tree = address_exp;
6208     }
6209   os->sectype = sectype;
6210   if (sectype != noload_section)
6211     os->flags = SEC_NO_FLAGS;
6212   else
6213     os->flags = SEC_NEVER_LOAD;
6214   os->block_value = 1;
6215
6216   /* Make next things chain into subchain of this.  */
6217   push_stat_ptr (&os->children);
6218
6219   os->align_lma_with_input = align_with_input == ALIGN_WITH_INPUT;
6220   if (os->align_lma_with_input && align != NULL)
6221     einfo (_("%F%P:%S: error: align with input and explicit align specified\n"), NULL);
6222
6223   os->subsection_alignment =
6224     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6225   os->section_alignment =
6226     topower (exp_get_value_int (align, -1, "section alignment"));
6227
6228   os->load_base = ebase;
6229   return os;
6230 }
6231
6232 void
6233 lang_final (void)
6234 {
6235   lang_output_statement_type *new_stmt;
6236
6237   new_stmt = new_stat (lang_output_statement, stat_ptr);
6238   new_stmt->name = output_filename;
6239
6240 }
6241
6242 /* Reset the current counters in the regions.  */
6243
6244 void
6245 lang_reset_memory_regions (void)
6246 {
6247   lang_memory_region_type *p = lang_memory_region_list;
6248   asection *o;
6249   lang_output_section_statement_type *os;
6250
6251   for (p = lang_memory_region_list; p != NULL; p = p->next)
6252     {
6253       p->current = p->origin;
6254       p->last_os = NULL;
6255     }
6256
6257   for (os = &lang_output_section_statement.head->output_section_statement;
6258        os != NULL;
6259        os = os->next)
6260     {
6261       os->processed_vma = FALSE;
6262       os->processed_lma = FALSE;
6263     }
6264
6265   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6266     {
6267       /* Save the last size for possible use by bfd_relax_section.  */
6268       o->rawsize = o->size;
6269       o->size = 0;
6270     }
6271 }
6272
6273 /* Worker for lang_gc_sections_1.  */
6274
6275 static void
6276 gc_section_callback (lang_wild_statement_type *ptr,
6277                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
6278                      asection *section,
6279                      struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6280                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
6281                      void *data ATTRIBUTE_UNUSED)
6282 {
6283   /* If the wild pattern was marked KEEP, the member sections
6284      should be as well.  */
6285   if (ptr->keep_sections)
6286     section->flags |= SEC_KEEP;
6287 }
6288
6289 /* Iterate over sections marking them against GC.  */
6290
6291 static void
6292 lang_gc_sections_1 (lang_statement_union_type *s)
6293 {
6294   for (; s != NULL; s = s->header.next)
6295     {
6296       switch (s->header.type)
6297         {
6298         case lang_wild_statement_enum:
6299           walk_wild (&s->wild_statement, gc_section_callback, NULL);
6300           break;
6301         case lang_constructors_statement_enum:
6302           lang_gc_sections_1 (constructor_list.head);
6303           break;
6304         case lang_output_section_statement_enum:
6305           lang_gc_sections_1 (s->output_section_statement.children.head);
6306           break;
6307         case lang_group_statement_enum:
6308           lang_gc_sections_1 (s->group_statement.children.head);
6309           break;
6310         default:
6311           break;
6312         }
6313     }
6314 }
6315
6316 static void
6317 lang_gc_sections (void)
6318 {
6319   /* Keep all sections so marked in the link script.  */
6320
6321   lang_gc_sections_1 (statement_list.head);
6322
6323   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6324      the special case of debug info.  (See bfd/stabs.c)
6325      Twiddle the flag here, to simplify later linker code.  */
6326   if (link_info.relocatable)
6327     {
6328       LANG_FOR_EACH_INPUT_STATEMENT (f)
6329         {
6330           asection *sec;
6331 #ifdef ENABLE_PLUGINS
6332           if (f->flags.claimed)
6333             continue;
6334 #endif
6335           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6336             if ((sec->flags & SEC_DEBUGGING) == 0)
6337               sec->flags &= ~SEC_EXCLUDE;
6338         }
6339     }
6340
6341   if (link_info.gc_sections)
6342     bfd_gc_sections (link_info.output_bfd, &link_info);
6343 }
6344
6345 /* Worker for lang_find_relro_sections_1.  */
6346
6347 static void
6348 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6349                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
6350                              asection *section,
6351                              struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6352                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
6353                              void *data)
6354 {
6355   /* Discarded, excluded and ignored sections effectively have zero
6356      size.  */
6357   if (section->output_section != NULL
6358       && section->output_section->owner == link_info.output_bfd
6359       && (section->output_section->flags & SEC_EXCLUDE) == 0
6360       && !IGNORE_SECTION (section)
6361       && section->size != 0)
6362     {
6363       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6364       *has_relro_section = TRUE;
6365     }
6366 }
6367
6368 /* Iterate over sections for relro sections.  */
6369
6370 static void
6371 lang_find_relro_sections_1 (lang_statement_union_type *s,
6372                             bfd_boolean *has_relro_section)
6373 {
6374   if (*has_relro_section)
6375     return;
6376
6377   for (; s != NULL; s = s->header.next)
6378     {
6379       if (s == expld.dataseg.relro_end_stat)
6380         break;
6381
6382       switch (s->header.type)
6383         {
6384         case lang_wild_statement_enum:
6385           walk_wild (&s->wild_statement,
6386                      find_relro_section_callback,
6387                      has_relro_section);
6388           break;
6389         case lang_constructors_statement_enum:
6390           lang_find_relro_sections_1 (constructor_list.head,
6391                                       has_relro_section);
6392           break;
6393         case lang_output_section_statement_enum:
6394           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6395                                       has_relro_section);
6396           break;
6397         case lang_group_statement_enum:
6398           lang_find_relro_sections_1 (s->group_statement.children.head,
6399                                       has_relro_section);
6400           break;
6401         default:
6402           break;
6403         }
6404     }
6405 }
6406
6407 static void
6408 lang_find_relro_sections (void)
6409 {
6410   bfd_boolean has_relro_section = FALSE;
6411
6412   /* Check all sections in the link script.  */
6413
6414   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6415                               &has_relro_section);
6416
6417   if (!has_relro_section)
6418     link_info.relro = FALSE;
6419 }
6420
6421 /* Relax all sections until bfd_relax_section gives up.  */
6422
6423 void
6424 lang_relax_sections (bfd_boolean need_layout)
6425 {
6426   if (RELAXATION_ENABLED)
6427     {
6428       /* We may need more than one relaxation pass.  */
6429       int i = link_info.relax_pass;
6430
6431       /* The backend can use it to determine the current pass.  */
6432       link_info.relax_pass = 0;
6433
6434       while (i--)
6435         {
6436           /* Keep relaxing until bfd_relax_section gives up.  */
6437           bfd_boolean relax_again;
6438
6439           link_info.relax_trip = -1;
6440           do
6441             {
6442               link_info.relax_trip++;
6443
6444               /* Note: pe-dll.c does something like this also.  If you find
6445                  you need to change this code, you probably need to change
6446                  pe-dll.c also.  DJ  */
6447
6448               /* Do all the assignments with our current guesses as to
6449                  section sizes.  */
6450               lang_do_assignments (lang_assigning_phase_enum);
6451
6452               /* We must do this after lang_do_assignments, because it uses
6453                  size.  */
6454               lang_reset_memory_regions ();
6455
6456               /* Perform another relax pass - this time we know where the
6457                  globals are, so can make a better guess.  */
6458               relax_again = FALSE;
6459               lang_size_sections (&relax_again, FALSE);
6460             }
6461           while (relax_again);
6462
6463           link_info.relax_pass++;
6464         }
6465       need_layout = TRUE;
6466     }
6467
6468   if (need_layout)
6469     {
6470       /* Final extra sizing to report errors.  */
6471       lang_do_assignments (lang_assigning_phase_enum);
6472       lang_reset_memory_regions ();
6473       lang_size_sections (NULL, TRUE);
6474     }
6475 }
6476
6477 #ifdef ENABLE_PLUGINS
6478 /* Find the insert point for the plugin's replacement files.  We
6479    place them after the first claimed real object file, or if the
6480    first claimed object is an archive member, after the last real
6481    object file immediately preceding the archive.  In the event
6482    no objects have been claimed at all, we return the first dummy
6483    object file on the list as the insert point; that works, but
6484    the callee must be careful when relinking the file_chain as it
6485    is not actually on that chain, only the statement_list and the
6486    input_file list; in that case, the replacement files must be
6487    inserted at the head of the file_chain.  */
6488
6489 static lang_input_statement_type *
6490 find_replacements_insert_point (void)
6491 {
6492   lang_input_statement_type *claim1, *lastobject;
6493   lastobject = &input_file_chain.head->input_statement;
6494   for (claim1 = &file_chain.head->input_statement;
6495        claim1 != NULL;
6496        claim1 = &claim1->next->input_statement)
6497     {
6498       if (claim1->flags.claimed)
6499         return claim1->flags.claim_archive ? lastobject : claim1;
6500       /* Update lastobject if this is a real object file.  */
6501       if (claim1->the_bfd && (claim1->the_bfd->my_archive == NULL))
6502         lastobject = claim1;
6503     }
6504   /* No files were claimed by the plugin.  Choose the last object
6505      file found on the list (maybe the first, dummy entry) as the
6506      insert point.  */
6507   return lastobject;
6508 }
6509
6510 /* Insert SRCLIST into DESTLIST after given element by chaining
6511    on FIELD as the next-pointer.  (Counterintuitively does not need
6512    a pointer to the actual after-node itself, just its chain field.)  */
6513
6514 static void
6515 lang_list_insert_after (lang_statement_list_type *destlist,
6516                         lang_statement_list_type *srclist,
6517                         lang_statement_union_type **field)
6518 {
6519   *(srclist->tail) = *field;
6520   *field = srclist->head;
6521   if (destlist->tail == field)
6522     destlist->tail = srclist->tail;
6523 }
6524
6525 /* Detach new nodes added to DESTLIST since the time ORIGLIST
6526    was taken as a copy of it and leave them in ORIGLIST.  */
6527
6528 static void
6529 lang_list_remove_tail (lang_statement_list_type *destlist,
6530                        lang_statement_list_type *origlist)
6531 {
6532   union lang_statement_union **savetail;
6533   /* Check that ORIGLIST really is an earlier state of DESTLIST.  */
6534   ASSERT (origlist->head == destlist->head);
6535   savetail = origlist->tail;
6536   origlist->head = *(savetail);
6537   origlist->tail = destlist->tail;
6538   destlist->tail = savetail;
6539   *savetail = NULL;
6540 }
6541 #endif /* ENABLE_PLUGINS */
6542
6543 void
6544 lang_process (void)
6545 {
6546   /* Finalize dynamic list.  */
6547   if (link_info.dynamic_list)
6548     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6549
6550   current_target = default_target;
6551
6552   /* Open the output file.  */
6553   lang_for_each_statement (ldlang_open_output);
6554   init_opb ();
6555
6556   ldemul_create_output_section_statements ();
6557
6558   /* Add to the hash table all undefineds on the command line.  */
6559   lang_place_undefineds ();
6560
6561   if (!bfd_section_already_linked_table_init ())
6562     einfo (_("%P%F: Failed to create hash table\n"));
6563
6564   /* Create a bfd for each input file.  */
6565   current_target = default_target;
6566   open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
6567
6568 #ifdef ENABLE_PLUGINS
6569   if (plugin_active_plugins_p ())
6570     {
6571       lang_statement_list_type added;
6572       lang_statement_list_type files, inputfiles;
6573
6574       /* Now all files are read, let the plugin(s) decide if there
6575          are any more to be added to the link before we call the
6576          emulation's after_open hook.  We create a private list of
6577          input statements for this purpose, which we will eventually
6578          insert into the global statment list after the first claimed
6579          file.  */
6580       added = *stat_ptr;
6581       /* We need to manipulate all three chains in synchrony.  */
6582       files = file_chain;
6583       inputfiles = input_file_chain;
6584       if (plugin_call_all_symbols_read ())
6585         einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6586                plugin_error_plugin ());
6587       /* Open any newly added files, updating the file chains.  */
6588       link_info.loading_lto_outputs = TRUE;
6589       open_input_bfds (*added.tail, OPEN_BFD_NORMAL);
6590       /* Restore the global list pointer now they have all been added.  */
6591       lang_list_remove_tail (stat_ptr, &added);
6592       /* And detach the fresh ends of the file lists.  */
6593       lang_list_remove_tail (&file_chain, &files);
6594       lang_list_remove_tail (&input_file_chain, &inputfiles);
6595       /* Were any new files added?  */
6596       if (added.head != NULL)
6597         {
6598           /* If so, we will insert them into the statement list immediately
6599              after the first input file that was claimed by the plugin.  */
6600           plugin_insert = find_replacements_insert_point ();
6601           /* If a plugin adds input files without having claimed any, we
6602              don't really have a good idea where to place them.  Just putting
6603              them at the start or end of the list is liable to leave them
6604              outside the crtbegin...crtend range.  */
6605           ASSERT (plugin_insert != NULL);
6606           /* Splice the new statement list into the old one.  */
6607           lang_list_insert_after (stat_ptr, &added,
6608                                   &plugin_insert->header.next);
6609           /* Likewise for the file chains.  */
6610           lang_list_insert_after (&input_file_chain, &inputfiles,
6611                                   &plugin_insert->next_real_file);
6612           /* We must be careful when relinking file_chain; we may need to
6613              insert the new files at the head of the list if the insert
6614              point chosen is the dummy first input file.  */
6615           if (plugin_insert->filename)
6616             lang_list_insert_after (&file_chain, &files, &plugin_insert->next);
6617           else
6618             lang_list_insert_after (&file_chain, &files, &file_chain.head);
6619
6620           /* Rescan archives in case new undefined symbols have appeared.  */
6621           open_input_bfds (statement_list.head, OPEN_BFD_RESCAN);
6622         }
6623     }
6624 #endif /* ENABLE_PLUGINS */
6625
6626   link_info.gc_sym_list = &entry_symbol;
6627   if (entry_symbol.name == NULL)
6628     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6629
6630   ldemul_after_open ();
6631
6632   bfd_section_already_linked_table_free ();
6633
6634   /* Make sure that we're not mixing architectures.  We call this
6635      after all the input files have been opened, but before we do any
6636      other processing, so that any operations merge_private_bfd_data
6637      does on the output file will be known during the rest of the
6638      link.  */
6639   lang_check ();
6640
6641   /* Handle .exports instead of a version script if we're told to do so.  */
6642   if (command_line.version_exports_section)
6643     lang_do_version_exports_section ();
6644
6645   /* Build all sets based on the information gathered from the input
6646      files.  */
6647   ldctor_build_sets ();
6648
6649   /* PR 13683: We must rerun the assignments prior to running garbage
6650      collection in order to make sure that all symbol aliases are resolved.  */
6651   lang_do_assignments (lang_mark_phase_enum);
6652   expld.phase = lang_first_phase_enum;
6653
6654   /* Remove unreferenced sections if asked to.  */
6655   lang_gc_sections ();
6656
6657   /* Size up the common data.  */
6658   lang_common ();
6659
6660   /* Update wild statements.  */
6661   update_wild_statements (statement_list.head);
6662
6663   /* Run through the contours of the script and attach input sections
6664      to the correct output sections.  */
6665   lang_statement_iteration++;
6666   map_input_to_output_sections (statement_list.head, NULL, NULL);
6667
6668   process_insert_statements ();
6669
6670   /* Find any sections not attached explicitly and handle them.  */
6671   lang_place_orphans ();
6672
6673   if (! link_info.relocatable)
6674     {
6675       asection *found;
6676
6677       /* Merge SEC_MERGE sections.  This has to be done after GC of
6678          sections, so that GCed sections are not merged, but before
6679          assigning dynamic symbols, since removing whole input sections
6680          is hard then.  */
6681       bfd_merge_sections (link_info.output_bfd, &link_info);
6682
6683       /* Look for a text section and set the readonly attribute in it.  */
6684       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6685
6686       if (found != NULL)
6687         {
6688           if (config.text_read_only)
6689             found->flags |= SEC_READONLY;
6690           else
6691             found->flags &= ~SEC_READONLY;
6692         }
6693     }
6694
6695   /* Do anything special before sizing sections.  This is where ELF
6696      and other back-ends size dynamic sections.  */
6697   ldemul_before_allocation ();
6698
6699   /* We must record the program headers before we try to fix the
6700      section positions, since they will affect SIZEOF_HEADERS.  */
6701   lang_record_phdrs ();
6702
6703   /* Check relro sections.  */
6704   if (link_info.relro && ! link_info.relocatable)
6705     lang_find_relro_sections ();
6706
6707   /* Size up the sections.  */
6708   lang_size_sections (NULL, ! RELAXATION_ENABLED);
6709
6710   /* See if anything special should be done now we know how big
6711      everything is.  This is where relaxation is done.  */
6712   ldemul_after_allocation ();
6713
6714   /* Fix any .startof. or .sizeof. symbols.  */
6715   lang_set_startof ();
6716
6717   /* Do all the assignments, now that we know the final resting places
6718      of all the symbols.  */
6719   lang_do_assignments (lang_final_phase_enum);
6720
6721   ldemul_finish ();
6722
6723   /* Make sure that the section addresses make sense.  */
6724   if (command_line.check_section_addresses)
6725     lang_check_section_addresses ();
6726
6727   lang_end ();
6728 }
6729
6730 /* EXPORTED TO YACC */
6731
6732 void
6733 lang_add_wild (struct wildcard_spec *filespec,
6734                struct wildcard_list *section_list,
6735                bfd_boolean keep_sections)
6736 {
6737   struct wildcard_list *curr, *next;
6738   lang_wild_statement_type *new_stmt;
6739
6740   /* Reverse the list as the parser puts it back to front.  */
6741   for (curr = section_list, section_list = NULL;
6742        curr != NULL;
6743        section_list = curr, curr = next)
6744     {
6745       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6746         placed_commons = TRUE;
6747
6748       next = curr->next;
6749       curr->next = section_list;
6750     }
6751
6752   if (filespec != NULL && filespec->name != NULL)
6753     {
6754       if (strcmp (filespec->name, "*") == 0)
6755         filespec->name = NULL;
6756       else if (! wildcardp (filespec->name))
6757         lang_has_input_file = TRUE;
6758     }
6759
6760   new_stmt = new_stat (lang_wild_statement, stat_ptr);
6761   new_stmt->filename = NULL;
6762   new_stmt->filenames_sorted = FALSE;
6763   new_stmt->section_flag_list = NULL;
6764   if (filespec != NULL)
6765     {
6766       new_stmt->filename = filespec->name;
6767       new_stmt->filenames_sorted = filespec->sorted == by_name;
6768       new_stmt->section_flag_list = filespec->section_flag_list;
6769     }
6770   new_stmt->section_list = section_list;
6771   new_stmt->keep_sections = keep_sections;
6772   lang_list_init (&new_stmt->children);
6773   analyze_walk_wild_section_handler (new_stmt);
6774 }
6775
6776 void
6777 lang_section_start (const char *name, etree_type *address,
6778                     const segment_type *segment)
6779 {
6780   lang_address_statement_type *ad;
6781
6782   ad = new_stat (lang_address_statement, stat_ptr);
6783   ad->section_name = name;
6784   ad->address = address;
6785   ad->segment = segment;
6786 }
6787
6788 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6789    because of a -e argument on the command line, or zero if this is
6790    called by ENTRY in a linker script.  Command line arguments take
6791    precedence.  */
6792
6793 void
6794 lang_add_entry (const char *name, bfd_boolean cmdline)
6795 {
6796   if (entry_symbol.name == NULL
6797       || cmdline
6798       || ! entry_from_cmdline)
6799     {
6800       entry_symbol.name = name;
6801       entry_from_cmdline = cmdline;
6802     }
6803 }
6804
6805 /* Set the default start symbol to NAME.  .em files should use this,
6806    not lang_add_entry, to override the use of "start" if neither the
6807    linker script nor the command line specifies an entry point.  NAME
6808    must be permanently allocated.  */
6809 void
6810 lang_default_entry (const char *name)
6811 {
6812   entry_symbol_default = name;
6813 }
6814
6815 void
6816 lang_add_target (const char *name)
6817 {
6818   lang_target_statement_type *new_stmt;
6819
6820   new_stmt = new_stat (lang_target_statement, stat_ptr);
6821   new_stmt->target = name;
6822 }
6823
6824 void
6825 lang_add_map (const char *name)
6826 {
6827   while (*name)
6828     {
6829       switch (*name)
6830         {
6831         case 'F':
6832           map_option_f = TRUE;
6833           break;
6834         }
6835       name++;
6836     }
6837 }
6838
6839 void
6840 lang_add_fill (fill_type *fill)
6841 {
6842   lang_fill_statement_type *new_stmt;
6843
6844   new_stmt = new_stat (lang_fill_statement, stat_ptr);
6845   new_stmt->fill = fill;
6846 }
6847
6848 void
6849 lang_add_data (int type, union etree_union *exp)
6850 {
6851   lang_data_statement_type *new_stmt;
6852
6853   new_stmt = new_stat (lang_data_statement, stat_ptr);
6854   new_stmt->exp = exp;
6855   new_stmt->type = type;
6856 }
6857
6858 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6859    generate.  HOWTO is the corresponding howto structure (we could
6860    look this up, but the caller has already done so).  SECTION is the
6861    section to generate a reloc against, or NAME is the name of the
6862    symbol to generate a reloc against.  Exactly one of SECTION and
6863    NAME must be NULL.  ADDEND is an expression for the addend.  */
6864
6865 void
6866 lang_add_reloc (bfd_reloc_code_real_type reloc,
6867                 reloc_howto_type *howto,
6868                 asection *section,
6869                 const char *name,
6870                 union etree_union *addend)
6871 {
6872   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6873
6874   p->reloc = reloc;
6875   p->howto = howto;
6876   p->section = section;
6877   p->name = name;
6878   p->addend_exp = addend;
6879
6880   p->addend_value = 0;
6881   p->output_section = NULL;
6882   p->output_offset = 0;
6883 }
6884
6885 lang_assignment_statement_type *
6886 lang_add_assignment (etree_type *exp)
6887 {
6888   lang_assignment_statement_type *new_stmt;
6889
6890   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6891   new_stmt->exp = exp;
6892   return new_stmt;
6893 }
6894
6895 void
6896 lang_add_attribute (enum statement_enum attribute)
6897 {
6898   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6899 }
6900
6901 void
6902 lang_startup (const char *name)
6903 {
6904   if (first_file->filename != NULL)
6905     {
6906       einfo (_("%P%F: multiple STARTUP files\n"));
6907     }
6908   first_file->filename = name;
6909   first_file->local_sym_name = name;
6910   first_file->flags.real = TRUE;
6911 }
6912
6913 void
6914 lang_float (bfd_boolean maybe)
6915 {
6916   lang_float_flag = maybe;
6917 }
6918
6919
6920 /* Work out the load- and run-time regions from a script statement, and
6921    store them in *LMA_REGION and *REGION respectively.
6922
6923    MEMSPEC is the name of the run-time region, or the value of
6924    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6925    LMA_MEMSPEC is the name of the load-time region, or null if the
6926    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6927    had an explicit load address.
6928
6929    It is an error to specify both a load region and a load address.  */
6930
6931 static void
6932 lang_get_regions (lang_memory_region_type **region,
6933                   lang_memory_region_type **lma_region,
6934                   const char *memspec,
6935                   const char *lma_memspec,
6936                   bfd_boolean have_lma,
6937                   bfd_boolean have_vma)
6938 {
6939   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6940
6941   /* If no runtime region or VMA has been specified, but the load region
6942      has been specified, then use the load region for the runtime region
6943      as well.  */
6944   if (lma_memspec != NULL
6945       && ! have_vma
6946       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6947     *region = *lma_region;
6948   else
6949     *region = lang_memory_region_lookup (memspec, FALSE);
6950
6951   if (have_lma && lma_memspec != 0)
6952     einfo (_("%X%P:%S: section has both a load address and a load region\n"),
6953            NULL);
6954 }
6955
6956 void
6957 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6958                                      lang_output_section_phdr_list *phdrs,
6959                                      const char *lma_memspec)
6960 {
6961   lang_get_regions (&current_section->region,
6962                     &current_section->lma_region,
6963                     memspec, lma_memspec,
6964                     current_section->load_base != NULL,
6965                     current_section->addr_tree != NULL);
6966
6967   /* If this section has no load region or base, but uses the same
6968      region as the previous section, then propagate the previous
6969      section's load region.  */
6970
6971   if (current_section->lma_region == NULL
6972       && current_section->load_base == NULL
6973       && current_section->addr_tree == NULL
6974       && current_section->region == current_section->prev->region)
6975     current_section->lma_region = current_section->prev->lma_region;
6976
6977   current_section->fill = fill;
6978   current_section->phdrs = phdrs;
6979   pop_stat_ptr ();
6980 }
6981
6982 void
6983 lang_statement_append (lang_statement_list_type *list,
6984                        lang_statement_union_type *element,
6985                        lang_statement_union_type **field)
6986 {
6987   *(list->tail) = element;
6988   list->tail = field;
6989 }
6990
6991 /* Set the output format type.  -oformat overrides scripts.  */
6992
6993 void
6994 lang_add_output_format (const char *format,
6995                         const char *big,
6996                         const char *little,
6997                         int from_script)
6998 {
6999   if (output_target == NULL || !from_script)
7000     {
7001       if (command_line.endian == ENDIAN_BIG
7002           && big != NULL)
7003         format = big;
7004       else if (command_line.endian == ENDIAN_LITTLE
7005                && little != NULL)
7006         format = little;
7007
7008       output_target = format;
7009     }
7010 }
7011
7012 void
7013 lang_add_insert (const char *where, int is_before)
7014 {
7015   lang_insert_statement_type *new_stmt;
7016
7017   new_stmt = new_stat (lang_insert_statement, stat_ptr);
7018   new_stmt->where = where;
7019   new_stmt->is_before = is_before;
7020   saved_script_handle = previous_script_handle;
7021 }
7022
7023 /* Enter a group.  This creates a new lang_group_statement, and sets
7024    stat_ptr to build new statements within the group.  */
7025
7026 void
7027 lang_enter_group (void)
7028 {
7029   lang_group_statement_type *g;
7030
7031   g = new_stat (lang_group_statement, stat_ptr);
7032   lang_list_init (&g->children);
7033   push_stat_ptr (&g->children);
7034 }
7035
7036 /* Leave a group.  This just resets stat_ptr to start writing to the
7037    regular list of statements again.  Note that this will not work if
7038    groups can occur inside anything else which can adjust stat_ptr,
7039    but currently they can't.  */
7040
7041 void
7042 lang_leave_group (void)
7043 {
7044   pop_stat_ptr ();
7045 }
7046
7047 /* Add a new program header.  This is called for each entry in a PHDRS
7048    command in a linker script.  */
7049
7050 void
7051 lang_new_phdr (const char *name,
7052                etree_type *type,
7053                bfd_boolean filehdr,
7054                bfd_boolean phdrs,
7055                etree_type *at,
7056                etree_type *flags)
7057 {
7058   struct lang_phdr *n, **pp;
7059   bfd_boolean hdrs;
7060
7061   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
7062   n->next = NULL;
7063   n->name = name;
7064   n->type = exp_get_value_int (type, 0, "program header type");
7065   n->filehdr = filehdr;
7066   n->phdrs = phdrs;
7067   n->at = at;
7068   n->flags = flags;
7069
7070   hdrs = n->type == 1 && (phdrs || filehdr);
7071
7072   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
7073     if (hdrs
7074         && (*pp)->type == 1
7075         && !((*pp)->filehdr || (*pp)->phdrs))
7076       {
7077         einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported"
7078                  " when prior PT_LOAD headers lack them\n"), NULL);
7079         hdrs = FALSE;
7080       }
7081
7082   *pp = n;
7083 }
7084
7085 /* Record the program header information in the output BFD.  FIXME: We
7086    should not be calling an ELF specific function here.  */
7087
7088 static void
7089 lang_record_phdrs (void)
7090 {
7091   unsigned int alc;
7092   asection **secs;
7093   lang_output_section_phdr_list *last;
7094   struct lang_phdr *l;
7095   lang_output_section_statement_type *os;
7096
7097   alc = 10;
7098   secs = (asection **) xmalloc (alc * sizeof (asection *));
7099   last = NULL;
7100
7101   for (l = lang_phdr_list; l != NULL; l = l->next)
7102     {
7103       unsigned int c;
7104       flagword flags;
7105       bfd_vma at;
7106
7107       c = 0;
7108       for (os = &lang_output_section_statement.head->output_section_statement;
7109            os != NULL;
7110            os = os->next)
7111         {
7112           lang_output_section_phdr_list *pl;
7113
7114           if (os->constraint < 0)
7115             continue;
7116
7117           pl = os->phdrs;
7118           if (pl != NULL)
7119             last = pl;
7120           else
7121             {
7122               if (os->sectype == noload_section
7123                   || os->bfd_section == NULL
7124                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
7125                 continue;
7126
7127               /* Don't add orphans to PT_INTERP header.  */
7128               if (l->type == 3)
7129                 continue;
7130
7131               if (last == NULL)
7132                 {
7133                   lang_output_section_statement_type * tmp_os;
7134
7135                   /* If we have not run across a section with a program
7136                      header assigned to it yet, then scan forwards to find
7137                      one.  This prevents inconsistencies in the linker's
7138                      behaviour when a script has specified just a single
7139                      header and there are sections in that script which are
7140                      not assigned to it, and which occur before the first
7141                      use of that header. See here for more details:
7142                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7143                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7144                     if (tmp_os->phdrs)
7145                       {
7146                         last = tmp_os->phdrs;
7147                         break;
7148                       }
7149                   if (last == NULL)
7150                     einfo (_("%F%P: no sections assigned to phdrs\n"));
7151                 }
7152               pl = last;
7153             }
7154
7155           if (os->bfd_section == NULL)
7156             continue;
7157
7158           for (; pl != NULL; pl = pl->next)
7159             {
7160               if (strcmp (pl->name, l->name) == 0)
7161                 {
7162                   if (c >= alc)
7163                     {
7164                       alc *= 2;
7165                       secs = (asection **) xrealloc (secs,
7166                                                      alc * sizeof (asection *));
7167                     }
7168                   secs[c] = os->bfd_section;
7169                   ++c;
7170                   pl->used = TRUE;
7171                 }
7172             }
7173         }
7174
7175       if (l->flags == NULL)
7176         flags = 0;
7177       else
7178         flags = exp_get_vma (l->flags, 0, "phdr flags");
7179
7180       if (l->at == NULL)
7181         at = 0;
7182       else
7183         at = exp_get_vma (l->at, 0, "phdr load address");
7184
7185       if (! bfd_record_phdr (link_info.output_bfd, l->type,
7186                              l->flags != NULL, flags, l->at != NULL,
7187                              at, l->filehdr, l->phdrs, c, secs))
7188         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7189     }
7190
7191   free (secs);
7192
7193   /* Make sure all the phdr assignments succeeded.  */
7194   for (os = &lang_output_section_statement.head->output_section_statement;
7195        os != NULL;
7196        os = os->next)
7197     {
7198       lang_output_section_phdr_list *pl;
7199
7200       if (os->constraint < 0
7201           || os->bfd_section == NULL)
7202         continue;
7203
7204       for (pl = os->phdrs;
7205            pl != NULL;
7206            pl = pl->next)
7207         if (! pl->used && strcmp (pl->name, "NONE") != 0)
7208           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7209                  os->name, pl->name);
7210     }
7211 }
7212
7213 /* Record a list of sections which may not be cross referenced.  */
7214
7215 void
7216 lang_add_nocrossref (lang_nocrossref_type *l)
7217 {
7218   struct lang_nocrossrefs *n;
7219
7220   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7221   n->next = nocrossref_list;
7222   n->list = l;
7223   nocrossref_list = n;
7224
7225   /* Set notice_all so that we get informed about all symbols.  */
7226   link_info.notice_all = TRUE;
7227 }
7228 \f
7229 /* Overlay handling.  We handle overlays with some static variables.  */
7230
7231 /* The overlay virtual address.  */
7232 static etree_type *overlay_vma;
7233 /* And subsection alignment.  */
7234 static etree_type *overlay_subalign;
7235
7236 /* An expression for the maximum section size seen so far.  */
7237 static etree_type *overlay_max;
7238
7239 /* A list of all the sections in this overlay.  */
7240
7241 struct overlay_list {
7242   struct overlay_list *next;
7243   lang_output_section_statement_type *os;
7244 };
7245
7246 static struct overlay_list *overlay_list;
7247
7248 /* Start handling an overlay.  */
7249
7250 void
7251 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7252 {
7253   /* The grammar should prevent nested overlays from occurring.  */
7254   ASSERT (overlay_vma == NULL
7255           && overlay_subalign == NULL
7256           && overlay_max == NULL);
7257
7258   overlay_vma = vma_expr;
7259   overlay_subalign = subalign;
7260 }
7261
7262 /* Start a section in an overlay.  We handle this by calling
7263    lang_enter_output_section_statement with the correct VMA.
7264    lang_leave_overlay sets up the LMA and memory regions.  */
7265
7266 void
7267 lang_enter_overlay_section (const char *name)
7268 {
7269   struct overlay_list *n;
7270   etree_type *size;
7271
7272   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7273                                        0, overlay_subalign, 0, 0, 0);
7274
7275   /* If this is the first section, then base the VMA of future
7276      sections on this one.  This will work correctly even if `.' is
7277      used in the addresses.  */
7278   if (overlay_list == NULL)
7279     overlay_vma = exp_nameop (ADDR, name);
7280
7281   /* Remember the section.  */
7282   n = (struct overlay_list *) xmalloc (sizeof *n);
7283   n->os = current_section;
7284   n->next = overlay_list;
7285   overlay_list = n;
7286
7287   size = exp_nameop (SIZEOF, name);
7288
7289   /* Arrange to work out the maximum section end address.  */
7290   if (overlay_max == NULL)
7291     overlay_max = size;
7292   else
7293     overlay_max = exp_binop (MAX_K, overlay_max, size);
7294 }
7295
7296 /* Finish a section in an overlay.  There isn't any special to do
7297    here.  */
7298
7299 void
7300 lang_leave_overlay_section (fill_type *fill,
7301                             lang_output_section_phdr_list *phdrs)
7302 {
7303   const char *name;
7304   char *clean, *s2;
7305   const char *s1;
7306   char *buf;
7307
7308   name = current_section->name;
7309
7310   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7311      region and that no load-time region has been specified.  It doesn't
7312      really matter what we say here, since lang_leave_overlay will
7313      override it.  */
7314   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7315
7316   /* Define the magic symbols.  */
7317
7318   clean = (char *) xmalloc (strlen (name) + 1);
7319   s2 = clean;
7320   for (s1 = name; *s1 != '\0'; s1++)
7321     if (ISALNUM (*s1) || *s1 == '_')
7322       *s2++ = *s1;
7323   *s2 = '\0';
7324
7325   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7326   sprintf (buf, "__load_start_%s", clean);
7327   lang_add_assignment (exp_provide (buf,
7328                                     exp_nameop (LOADADDR, name),
7329                                     FALSE));
7330
7331   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7332   sprintf (buf, "__load_stop_%s", clean);
7333   lang_add_assignment (exp_provide (buf,
7334                                     exp_binop ('+',
7335                                                exp_nameop (LOADADDR, name),
7336                                                exp_nameop (SIZEOF, name)),
7337                                     FALSE));
7338
7339   free (clean);
7340 }
7341
7342 /* Finish an overlay.  If there are any overlay wide settings, this
7343    looks through all the sections in the overlay and sets them.  */
7344
7345 void
7346 lang_leave_overlay (etree_type *lma_expr,
7347                     int nocrossrefs,
7348                     fill_type *fill,
7349                     const char *memspec,
7350                     lang_output_section_phdr_list *phdrs,
7351                     const char *lma_memspec)
7352 {
7353   lang_memory_region_type *region;
7354   lang_memory_region_type *lma_region;
7355   struct overlay_list *l;
7356   lang_nocrossref_type *nocrossref;
7357
7358   lang_get_regions (&region, &lma_region,
7359                     memspec, lma_memspec,
7360                     lma_expr != NULL, FALSE);
7361
7362   nocrossref = NULL;
7363
7364   /* After setting the size of the last section, set '.' to end of the
7365      overlay region.  */
7366   if (overlay_list != NULL)
7367     {
7368       overlay_list->os->update_dot = 1;
7369       overlay_list->os->update_dot_tree
7370         = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max), FALSE);
7371     }
7372
7373   l = overlay_list;
7374   while (l != NULL)
7375     {
7376       struct overlay_list *next;
7377
7378       if (fill != NULL && l->os->fill == NULL)
7379         l->os->fill = fill;
7380
7381       l->os->region = region;
7382       l->os->lma_region = lma_region;
7383
7384       /* The first section has the load address specified in the
7385          OVERLAY statement.  The rest are worked out from that.
7386          The base address is not needed (and should be null) if
7387          an LMA region was specified.  */
7388       if (l->next == 0)
7389         {
7390           l->os->load_base = lma_expr;
7391           l->os->sectype = normal_section;
7392         }
7393       if (phdrs != NULL && l->os->phdrs == NULL)
7394         l->os->phdrs = phdrs;
7395
7396       if (nocrossrefs)
7397         {
7398           lang_nocrossref_type *nc;
7399
7400           nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7401           nc->name = l->os->name;
7402           nc->next = nocrossref;
7403           nocrossref = nc;
7404         }
7405
7406       next = l->next;
7407       free (l);
7408       l = next;
7409     }
7410
7411   if (nocrossref != NULL)
7412     lang_add_nocrossref (nocrossref);
7413
7414   overlay_vma = NULL;
7415   overlay_list = NULL;
7416   overlay_max = NULL;
7417 }
7418 \f
7419 /* Version handling.  This is only useful for ELF.  */
7420
7421 /* If PREV is NULL, return first version pattern matching particular symbol.
7422    If PREV is non-NULL, return first version pattern matching particular
7423    symbol after PREV (previously returned by lang_vers_match).  */
7424
7425 static struct bfd_elf_version_expr *
7426 lang_vers_match (struct bfd_elf_version_expr_head *head,
7427                  struct bfd_elf_version_expr *prev,
7428                  const char *sym)
7429 {
7430   const char *c_sym;
7431   const char *cxx_sym = sym;
7432   const char *java_sym = sym;
7433   struct bfd_elf_version_expr *expr = NULL;
7434   enum demangling_styles curr_style;
7435
7436   curr_style = CURRENT_DEMANGLING_STYLE;
7437   cplus_demangle_set_style (no_demangling);
7438   c_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_NO_OPTS);
7439   if (!c_sym)
7440     c_sym = sym;
7441   cplus_demangle_set_style (curr_style);
7442
7443   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7444     {
7445       cxx_sym = bfd_demangle (link_info.output_bfd, sym,
7446                               DMGL_PARAMS | DMGL_ANSI);
7447       if (!cxx_sym)
7448         cxx_sym = sym;
7449     }
7450   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7451     {
7452       java_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_JAVA);
7453       if (!java_sym)
7454         java_sym = sym;
7455     }
7456
7457   if (head->htab && (prev == NULL || prev->literal))
7458     {
7459       struct bfd_elf_version_expr e;
7460
7461       switch (prev ? prev->mask : 0)
7462         {
7463         case 0:
7464           if (head->mask & BFD_ELF_VERSION_C_TYPE)
7465             {
7466               e.pattern = c_sym;
7467               expr = (struct bfd_elf_version_expr *)
7468                   htab_find ((htab_t) head->htab, &e);
7469               while (expr && strcmp (expr->pattern, c_sym) == 0)
7470                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7471                   goto out_ret;
7472                 else
7473                   expr = expr->next;
7474             }
7475           /* Fallthrough */
7476         case BFD_ELF_VERSION_C_TYPE:
7477           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7478             {
7479               e.pattern = cxx_sym;
7480               expr = (struct bfd_elf_version_expr *)
7481                   htab_find ((htab_t) head->htab, &e);
7482               while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7483                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7484                   goto out_ret;
7485                 else
7486                   expr = expr->next;
7487             }
7488           /* Fallthrough */
7489         case BFD_ELF_VERSION_CXX_TYPE:
7490           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7491             {
7492               e.pattern = java_sym;
7493               expr = (struct bfd_elf_version_expr *)
7494                   htab_find ((htab_t) head->htab, &e);
7495               while (expr && strcmp (expr->pattern, java_sym) == 0)
7496                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7497                   goto out_ret;
7498                 else
7499                   expr = expr->next;
7500             }
7501           /* Fallthrough */
7502         default:
7503           break;
7504         }
7505     }
7506
7507   /* Finally, try the wildcards.  */
7508   if (prev == NULL || prev->literal)
7509     expr = head->remaining;
7510   else
7511     expr = prev->next;
7512   for (; expr; expr = expr->next)
7513     {
7514       const char *s;
7515
7516       if (!expr->pattern)
7517         continue;
7518
7519       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7520         break;
7521
7522       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7523         s = java_sym;
7524       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7525         s = cxx_sym;
7526       else
7527         s = c_sym;
7528       if (fnmatch (expr->pattern, s, 0) == 0)
7529         break;
7530     }
7531
7532  out_ret:
7533   if (c_sym != sym)
7534     free ((char *) c_sym);
7535   if (cxx_sym != sym)
7536     free ((char *) cxx_sym);
7537   if (java_sym != sym)
7538     free ((char *) java_sym);
7539   return expr;
7540 }
7541
7542 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7543    return a pointer to the symbol name with any backslash quotes removed.  */
7544
7545 static const char *
7546 realsymbol (const char *pattern)
7547 {
7548   const char *p;
7549   bfd_boolean changed = FALSE, backslash = FALSE;
7550   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7551
7552   for (p = pattern, s = symbol; *p != '\0'; ++p)
7553     {
7554       /* It is a glob pattern only if there is no preceding
7555          backslash.  */
7556       if (backslash)
7557         {
7558           /* Remove the preceding backslash.  */
7559           *(s - 1) = *p;
7560           backslash = FALSE;
7561           changed = TRUE;
7562         }
7563       else
7564         {
7565           if (*p == '?' || *p == '*' || *p == '[')
7566             {
7567               free (symbol);
7568               return NULL;
7569             }
7570
7571           *s++ = *p;
7572           backslash = *p == '\\';
7573         }
7574     }
7575
7576   if (changed)
7577     {
7578       *s = '\0';
7579       return symbol;
7580     }
7581   else
7582     {
7583       free (symbol);
7584       return pattern;
7585     }
7586 }
7587
7588 /* This is called for each variable name or match expression.  NEW_NAME is
7589    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7590    pattern to be matched against symbol names.  */
7591
7592 struct bfd_elf_version_expr *
7593 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7594                        const char *new_name,
7595                        const char *lang,
7596                        bfd_boolean literal_p)
7597 {
7598   struct bfd_elf_version_expr *ret;
7599
7600   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7601   ret->next = orig;
7602   ret->symver = 0;
7603   ret->script = 0;
7604   ret->literal = TRUE;
7605   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7606   if (ret->pattern == NULL)
7607     {
7608       ret->pattern = new_name;
7609       ret->literal = FALSE;
7610     }
7611
7612   if (lang == NULL || strcasecmp (lang, "C") == 0)
7613     ret->mask = BFD_ELF_VERSION_C_TYPE;
7614   else if (strcasecmp (lang, "C++") == 0)
7615     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7616   else if (strcasecmp (lang, "Java") == 0)
7617     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7618   else
7619     {
7620       einfo (_("%X%P: unknown language `%s' in version information\n"),
7621              lang);
7622       ret->mask = BFD_ELF_VERSION_C_TYPE;
7623     }
7624
7625   return ldemul_new_vers_pattern (ret);
7626 }
7627
7628 /* This is called for each set of variable names and match
7629    expressions.  */
7630
7631 struct bfd_elf_version_tree *
7632 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7633                     struct bfd_elf_version_expr *locals)
7634 {
7635   struct bfd_elf_version_tree *ret;
7636
7637   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7638   ret->globals.list = globals;
7639   ret->locals.list = locals;
7640   ret->match = lang_vers_match;
7641   ret->name_indx = (unsigned int) -1;
7642   return ret;
7643 }
7644
7645 /* This static variable keeps track of version indices.  */
7646
7647 static int version_index;
7648
7649 static hashval_t
7650 version_expr_head_hash (const void *p)
7651 {
7652   const struct bfd_elf_version_expr *e =
7653       (const struct bfd_elf_version_expr *) p;
7654
7655   return htab_hash_string (e->pattern);
7656 }
7657
7658 static int
7659 version_expr_head_eq (const void *p1, const void *p2)
7660 {
7661   const struct bfd_elf_version_expr *e1 =
7662       (const struct bfd_elf_version_expr *) p1;
7663   const struct bfd_elf_version_expr *e2 =
7664       (const struct bfd_elf_version_expr *) p2;
7665
7666   return strcmp (e1->pattern, e2->pattern) == 0;
7667 }
7668
7669 static void
7670 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7671 {
7672   size_t count = 0;
7673   struct bfd_elf_version_expr *e, *next;
7674   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7675
7676   for (e = head->list; e; e = e->next)
7677     {
7678       if (e->literal)
7679         count++;
7680       head->mask |= e->mask;
7681     }
7682
7683   if (count)
7684     {
7685       head->htab = htab_create (count * 2, version_expr_head_hash,
7686                                 version_expr_head_eq, NULL);
7687       list_loc = &head->list;
7688       remaining_loc = &head->remaining;
7689       for (e = head->list; e; e = next)
7690         {
7691           next = e->next;
7692           if (!e->literal)
7693             {
7694               *remaining_loc = e;
7695               remaining_loc = &e->next;
7696             }
7697           else
7698             {
7699               void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7700
7701               if (*loc)
7702                 {
7703                   struct bfd_elf_version_expr *e1, *last;
7704
7705                   e1 = (struct bfd_elf_version_expr *) *loc;
7706                   last = NULL;
7707                   do
7708                     {
7709                       if (e1->mask == e->mask)
7710                         {
7711                           last = NULL;
7712                           break;
7713                         }
7714                       last = e1;
7715                       e1 = e1->next;
7716                     }
7717                   while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7718
7719                   if (last == NULL)
7720                     {
7721                       /* This is a duplicate.  */
7722                       /* FIXME: Memory leak.  Sometimes pattern is not
7723                          xmalloced alone, but in larger chunk of memory.  */
7724                       /* free (e->pattern); */
7725                       free (e);
7726                     }
7727                   else
7728                     {
7729                       e->next = last->next;
7730                       last->next = e;
7731                     }
7732                 }
7733               else
7734                 {
7735                   *loc = e;
7736                   *list_loc = e;
7737                   list_loc = &e->next;
7738                 }
7739             }
7740         }
7741       *remaining_loc = NULL;
7742       *list_loc = head->remaining;
7743     }
7744   else
7745     head->remaining = head->list;
7746 }
7747
7748 /* This is called when we know the name and dependencies of the
7749    version.  */
7750
7751 void
7752 lang_register_vers_node (const char *name,
7753                          struct bfd_elf_version_tree *version,
7754                          struct bfd_elf_version_deps *deps)
7755 {
7756   struct bfd_elf_version_tree *t, **pp;
7757   struct bfd_elf_version_expr *e1;
7758
7759   if (name == NULL)
7760     name = "";
7761
7762   if (link_info.version_info != NULL
7763       && (name[0] == '\0' || link_info.version_info->name[0] == '\0'))
7764     {
7765       einfo (_("%X%P: anonymous version tag cannot be combined"
7766                " with other version tags\n"));
7767       free (version);
7768       return;
7769     }
7770
7771   /* Make sure this node has a unique name.  */
7772   for (t = link_info.version_info; t != NULL; t = t->next)
7773     if (strcmp (t->name, name) == 0)
7774       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7775
7776   lang_finalize_version_expr_head (&version->globals);
7777   lang_finalize_version_expr_head (&version->locals);
7778
7779   /* Check the global and local match names, and make sure there
7780      aren't any duplicates.  */
7781
7782   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7783     {
7784       for (t = link_info.version_info; t != NULL; t = t->next)
7785         {
7786           struct bfd_elf_version_expr *e2;
7787
7788           if (t->locals.htab && e1->literal)
7789             {
7790               e2 = (struct bfd_elf_version_expr *)
7791                   htab_find ((htab_t) t->locals.htab, e1);
7792               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7793                 {
7794                   if (e1->mask == e2->mask)
7795                     einfo (_("%X%P: duplicate expression `%s'"
7796                              " in version information\n"), e1->pattern);
7797                   e2 = e2->next;
7798                 }
7799             }
7800           else if (!e1->literal)
7801             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7802               if (strcmp (e1->pattern, e2->pattern) == 0
7803                   && e1->mask == e2->mask)
7804                 einfo (_("%X%P: duplicate expression `%s'"
7805                          " in version information\n"), e1->pattern);
7806         }
7807     }
7808
7809   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7810     {
7811       for (t = link_info.version_info; t != NULL; t = t->next)
7812         {
7813           struct bfd_elf_version_expr *e2;
7814
7815           if (t->globals.htab && e1->literal)
7816             {
7817               e2 = (struct bfd_elf_version_expr *)
7818                   htab_find ((htab_t) t->globals.htab, e1);
7819               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7820                 {
7821                   if (e1->mask == e2->mask)
7822                     einfo (_("%X%P: duplicate expression `%s'"
7823                              " in version information\n"),
7824                            e1->pattern);
7825                   e2 = e2->next;
7826                 }
7827             }
7828           else if (!e1->literal)
7829             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7830               if (strcmp (e1->pattern, e2->pattern) == 0
7831                   && e1->mask == e2->mask)
7832                 einfo (_("%X%P: duplicate expression `%s'"
7833                          " in version information\n"), e1->pattern);
7834         }
7835     }
7836
7837   version->deps = deps;
7838   version->name = name;
7839   if (name[0] != '\0')
7840     {
7841       ++version_index;
7842       version->vernum = version_index;
7843     }
7844   else
7845     version->vernum = 0;
7846
7847   for (pp = &link_info.version_info; *pp != NULL; pp = &(*pp)->next)
7848     ;
7849   *pp = version;
7850 }
7851
7852 /* This is called when we see a version dependency.  */
7853
7854 struct bfd_elf_version_deps *
7855 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7856 {
7857   struct bfd_elf_version_deps *ret;
7858   struct bfd_elf_version_tree *t;
7859
7860   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7861   ret->next = list;
7862
7863   for (t = link_info.version_info; t != NULL; t = t->next)
7864     {
7865       if (strcmp (t->name, name) == 0)
7866         {
7867           ret->version_needed = t;
7868           return ret;
7869         }
7870     }
7871
7872   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7873
7874   ret->version_needed = NULL;
7875   return ret;
7876 }
7877
7878 static void
7879 lang_do_version_exports_section (void)
7880 {
7881   struct bfd_elf_version_expr *greg = NULL, *lreg;
7882
7883   LANG_FOR_EACH_INPUT_STATEMENT (is)
7884     {
7885       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7886       char *contents, *p;
7887       bfd_size_type len;
7888
7889       if (sec == NULL)
7890         continue;
7891
7892       len = sec->size;
7893       contents = (char *) xmalloc (len);
7894       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7895         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7896
7897       p = contents;
7898       while (p < contents + len)
7899         {
7900           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7901           p = strchr (p, '\0') + 1;
7902         }
7903
7904       /* Do not free the contents, as we used them creating the regex.  */
7905
7906       /* Do not include this section in the link.  */
7907       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7908     }
7909
7910   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7911   lang_register_vers_node (command_line.version_exports_section,
7912                            lang_new_vers_node (greg, lreg), NULL);
7913 }
7914
7915 void
7916 lang_add_unique (const char *name)
7917 {
7918   struct unique_sections *ent;
7919
7920   for (ent = unique_section_list; ent; ent = ent->next)
7921     if (strcmp (ent->name, name) == 0)
7922       return;
7923
7924   ent = (struct unique_sections *) xmalloc (sizeof *ent);
7925   ent->name = xstrdup (name);
7926   ent->next = unique_section_list;
7927   unique_section_list = ent;
7928 }
7929
7930 /* Append the list of dynamic symbols to the existing one.  */
7931
7932 void
7933 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7934 {
7935   if (link_info.dynamic_list)
7936     {
7937       struct bfd_elf_version_expr *tail;
7938       for (tail = dynamic; tail->next != NULL; tail = tail->next)
7939         ;
7940       tail->next = link_info.dynamic_list->head.list;
7941       link_info.dynamic_list->head.list = dynamic;
7942     }
7943   else
7944     {
7945       struct bfd_elf_dynamic_list *d;
7946
7947       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
7948       d->head.list = dynamic;
7949       d->match = lang_vers_match;
7950       link_info.dynamic_list = d;
7951     }
7952 }
7953
7954 /* Append the list of C++ typeinfo dynamic symbols to the existing
7955    one.  */
7956
7957 void
7958 lang_append_dynamic_list_cpp_typeinfo (void)
7959 {
7960   const char * symbols [] =
7961     {
7962       "typeinfo name for*",
7963       "typeinfo for*"
7964     };
7965   struct bfd_elf_version_expr *dynamic = NULL;
7966   unsigned int i;
7967
7968   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7969     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7970                                      FALSE);
7971
7972   lang_append_dynamic_list (dynamic);
7973 }
7974
7975 /* Append the list of C++ operator new and delete dynamic symbols to the
7976    existing one.  */
7977
7978 void
7979 lang_append_dynamic_list_cpp_new (void)
7980 {
7981   const char * symbols [] =
7982     {
7983       "operator new*",
7984       "operator delete*"
7985     };
7986   struct bfd_elf_version_expr *dynamic = NULL;
7987   unsigned int i;
7988
7989   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7990     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7991                                      FALSE);
7992
7993   lang_append_dynamic_list (dynamic);
7994 }
7995
7996 /* Scan a space and/or comma separated string of features.  */
7997
7998 void
7999 lang_ld_feature (char *str)
8000 {
8001   char *p, *q;
8002
8003   p = str;
8004   while (*p)
8005     {
8006       char sep;
8007       while (*p == ',' || ISSPACE (*p))
8008         ++p;
8009       if (!*p)
8010         break;
8011       q = p + 1;
8012       while (*q && *q != ',' && !ISSPACE (*q))
8013         ++q;
8014       sep = *q;
8015       *q = 0;
8016       if (strcasecmp (p, "SANE_EXPR") == 0)
8017         config.sane_expr = TRUE;
8018       else
8019         einfo (_("%X%P: unknown feature `%s'\n"), p);
8020       *q = sep;
8021       p = q;
8022     }
8023 }