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