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