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