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