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