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