Don't include libbfd.h outside of bfd, part 4
[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 "elf-bfd.h"
43 #ifdef ENABLE_PLUGINS
44 #include "plugin.h"
45 #endif /* ENABLE_PLUGINS */
46
47 #ifndef offsetof
48 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
49 #endif
50
51 /* Convert between addresses in bytes and sizes in octets.
52    For currently supported targets, octets_per_byte is always a power
53    of two, so we can use shifts.  */
54 #define TO_ADDR(X) ((X) >> opb_shift)
55 #define TO_SIZE(X) ((X) << opb_shift)
56
57 /* Local variables.  */
58 static struct obstack stat_obstack;
59 static struct obstack map_obstack;
60
61 #define obstack_chunk_alloc xmalloc
62 #define obstack_chunk_free free
63 static const char *entry_symbol_default = "start";
64 static bfd_boolean placed_commons = FALSE;
65 static bfd_boolean map_head_is_link_order = FALSE;
66 static lang_output_section_statement_type *default_common_section;
67 static bfd_boolean map_option_f;
68 static bfd_vma print_dot;
69 static lang_input_statement_type *first_file;
70 static const char *current_target;
71 static lang_statement_list_type statement_list;
72 static lang_statement_list_type *stat_save[10];
73 static lang_statement_list_type **stat_save_ptr = &stat_save[0];
74 static struct unique_sections *unique_section_list;
75 static struct asneeded_minfo *asneeded_list_head;
76 static unsigned int opb_shift = 0;
77
78 /* Forward declarations.  */
79 static void exp_init_os (etree_type *);
80 static lang_input_statement_type *lookup_name (const char *);
81 static void insert_undefined (const char *);
82 static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
83 static void print_statement (lang_statement_union_type *,
84                              lang_output_section_statement_type *);
85 static void print_statement_list (lang_statement_union_type *,
86                                   lang_output_section_statement_type *);
87 static void print_statements (void);
88 static void print_input_section (asection *, bfd_boolean);
89 static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
90 static void lang_record_phdrs (void);
91 static void lang_do_version_exports_section (void);
92 static void lang_finalize_version_expr_head
93   (struct bfd_elf_version_expr_head *);
94 static void lang_do_memory_regions (void);
95
96 /* Exported variables.  */
97 const char *output_target;
98 lang_output_section_statement_type *abs_output_section;
99 lang_statement_list_type lang_output_section_statement;
100 lang_statement_list_type *stat_ptr = &statement_list;
101 lang_statement_list_type file_chain = { NULL, NULL };
102 lang_statement_list_type input_file_chain;
103 struct bfd_sym_chain entry_symbol = { NULL, NULL };
104 const char *entry_section = ".text";
105 struct lang_input_statement_flags input_flags;
106 bfd_boolean entry_from_cmdline;
107 bfd_boolean undef_from_cmdline;
108 bfd_boolean lang_has_input_file = FALSE;
109 bfd_boolean had_output_filename = FALSE;
110 bfd_boolean lang_float_flag = FALSE;
111 bfd_boolean delete_output_file_on_failure = FALSE;
112 struct lang_phdr *lang_phdr_list;
113 struct lang_nocrossrefs *nocrossref_list;
114 struct asneeded_minfo **asneeded_list_tail;
115
116  /* Functions that traverse the linker script and might evaluate
117     DEFINED() need to increment this at the start of the traversal.  */
118 int lang_statement_iteration = 0;
119
120 /* Return TRUE if the PATTERN argument is a wildcard pattern.
121    Although backslashes are treated specially if a pattern contains
122    wildcards, we do not consider the mere presence of a backslash to
123    be enough to cause the pattern to be treated as a wildcard.
124    That lets us handle DOS filenames more naturally.  */
125 #define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
126
127 #define new_stat(x, y) \
128   (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
129
130 #define outside_section_address(q) \
131   ((q)->output_offset + (q)->output_section->vma)
132
133 #define outside_symbol_address(q) \
134   ((q)->value + outside_section_address (q->section))
135
136 #define SECTION_NAME_MAP_LENGTH (16)
137
138 void *
139 stat_alloc (size_t size)
140 {
141   return obstack_alloc (&stat_obstack, size);
142 }
143
144 static int
145 name_match (const char *pattern, const char *name)
146 {
147   if (wildcardp (pattern))
148     return fnmatch (pattern, name, 0);
149   return strcmp (pattern, name);
150 }
151
152 /* If PATTERN is of the form archive:file, return a pointer to the
153    separator.  If not, return NULL.  */
154
155 static char *
156 archive_path (const char *pattern)
157 {
158   char *p = NULL;
159
160   if (link_info.path_separator == 0)
161     return p;
162
163   p = strchr (pattern, link_info.path_separator);
164 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
165   if (p == NULL || link_info.path_separator != ':')
166     return p;
167
168   /* Assume a match on the second char is part of drive specifier,
169      as in "c:\silly.dos".  */
170   if (p == pattern + 1 && ISALPHA (*pattern))
171     p = strchr (p + 1, link_info.path_separator);
172 #endif
173   return p;
174 }
175
176 /* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
177    return whether F matches FILE_SPEC.  */
178
179 static bfd_boolean
180 input_statement_is_archive_path (const char *file_spec, char *sep,
181                                  lang_input_statement_type *f)
182 {
183   bfd_boolean match = FALSE;
184
185   if ((*(sep + 1) == 0
186        || name_match (sep + 1, f->filename) == 0)
187       && ((sep != file_spec)
188           == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
189     {
190       match = TRUE;
191
192       if (sep != file_spec)
193         {
194           const char *aname = f->the_bfd->my_archive->filename;
195           *sep = 0;
196           match = name_match (file_spec, aname) == 0;
197           *sep = link_info.path_separator;
198         }
199     }
200   return match;
201 }
202
203 static bfd_boolean
204 unique_section_p (const asection *sec,
205                   const lang_output_section_statement_type *os)
206 {
207   struct unique_sections *unam;
208   const char *secnam;
209
210   if (bfd_link_relocatable (&link_info)
211       && sec->owner != NULL
212       && bfd_is_group_section (sec->owner, sec))
213     return !(os != NULL
214              && strcmp (os->name, DISCARD_SECTION_NAME) == 0);
215
216   secnam = sec->name;
217   for (unam = unique_section_list; unam; unam = unam->next)
218     if (name_match (unam->name, secnam) == 0)
219       return TRUE;
220
221   return FALSE;
222 }
223
224 /* Generic traversal routines for finding matching sections.  */
225
226 /* Try processing a section against a wildcard.  This just calls
227    the callback unless the filename exclusion list is present
228    and excludes the file.  It's hardly ever present so this
229    function is very fast.  */
230
231 static void
232 walk_wild_consider_section (lang_wild_statement_type *ptr,
233                             lang_input_statement_type *file,
234                             asection *s,
235                             struct wildcard_list *sec,
236                             callback_t callback,
237                             void *data)
238 {
239   struct name_list *list_tmp;
240
241   /* Don't process sections from files which were excluded.  */
242   for (list_tmp = sec->spec.exclude_name_list;
243        list_tmp;
244        list_tmp = list_tmp->next)
245     {
246       char *p = archive_path (list_tmp->name);
247
248       if (p != NULL)
249         {
250           if (input_statement_is_archive_path (list_tmp->name, p, file))
251             return;
252         }
253
254       else if (name_match (list_tmp->name, file->filename) == 0)
255         return;
256
257       /* FIXME: Perhaps remove the following at some stage?  Matching
258          unadorned archives like this was never documented and has
259          been superceded by the archive:path syntax.  */
260       else if (file->the_bfd != NULL
261                && file->the_bfd->my_archive != NULL
262                && name_match (list_tmp->name,
263                               file->the_bfd->my_archive->filename) == 0)
264         return;
265     }
266
267   (*callback) (ptr, sec, s, ptr->section_flag_list, file, data);
268 }
269
270 /* Lowest common denominator routine that can handle everything correctly,
271    but slowly.  */
272
273 static void
274 walk_wild_section_general (lang_wild_statement_type *ptr,
275                            lang_input_statement_type *file,
276                            callback_t callback,
277                            void *data)
278 {
279   asection *s;
280   struct wildcard_list *sec;
281
282   for (s = file->the_bfd->sections; s != NULL; s = s->next)
283     {
284       sec = ptr->section_list;
285       if (sec == NULL)
286         (*callback) (ptr, sec, s, ptr->section_flag_list, file, data);
287
288       while (sec != NULL)
289         {
290           bfd_boolean skip = FALSE;
291
292           if (sec->spec.name != NULL)
293             {
294               const char *sname = bfd_get_section_name (file->the_bfd, s);
295
296               skip = name_match (sec->spec.name, sname) != 0;
297             }
298
299           if (!skip)
300             walk_wild_consider_section (ptr, file, s, sec, callback, data);
301
302           sec = sec->next;
303         }
304     }
305 }
306
307 /* Routines to find a single section given its name.  If there's more
308    than one section with that name, we report that.  */
309
310 typedef struct
311 {
312   asection *found_section;
313   bfd_boolean multiple_sections_found;
314 } section_iterator_callback_data;
315
316 static bfd_boolean
317 section_iterator_callback (bfd *abfd ATTRIBUTE_UNUSED, asection *s, void *data)
318 {
319   section_iterator_callback_data *d = (section_iterator_callback_data *) data;
320
321   if (d->found_section != NULL)
322     {
323       d->multiple_sections_found = TRUE;
324       return TRUE;
325     }
326
327   d->found_section = s;
328   return FALSE;
329 }
330
331 static asection *
332 find_section (lang_input_statement_type *file,
333               struct wildcard_list *sec,
334               bfd_boolean *multiple_sections_found)
335 {
336   section_iterator_callback_data cb_data = { NULL, FALSE };
337
338   bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
339                               section_iterator_callback, &cb_data);
340   *multiple_sections_found = cb_data.multiple_sections_found;
341   return cb_data.found_section;
342 }
343
344 /* Code for handling simple wildcards without going through fnmatch,
345    which can be expensive because of charset translations etc.  */
346
347 /* A simple wild is a literal string followed by a single '*',
348    where the literal part is at least 4 characters long.  */
349
350 static bfd_boolean
351 is_simple_wild (const char *name)
352 {
353   size_t len = strcspn (name, "*?[");
354   return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
355 }
356
357 static bfd_boolean
358 match_simple_wild (const char *pattern, const char *name)
359 {
360   /* The first four characters of the pattern are guaranteed valid
361      non-wildcard characters.  So we can go faster.  */
362   if (pattern[0] != name[0] || pattern[1] != name[1]
363       || pattern[2] != name[2] || pattern[3] != name[3])
364     return FALSE;
365
366   pattern += 4;
367   name += 4;
368   while (*pattern != '*')
369     if (*name++ != *pattern++)
370       return FALSE;
371
372   return TRUE;
373 }
374
375 /* Return the numerical value of the init_priority attribute from
376    section name NAME.  */
377
378 static unsigned long
379 get_init_priority (const char *name)
380 {
381   char *end;
382   unsigned long init_priority;
383
384   /* GCC uses the following section names for the init_priority
385      attribute with numerical values 101 and 65535 inclusive. A
386      lower value means a higher priority.
387
388      1: .init_array.NNNN/.fini_array.NNNN: Where NNNN is the
389         decimal numerical value of the init_priority attribute.
390         The order of execution in .init_array is forward and
391         .fini_array is backward.
392      2: .ctors.NNNN/.dtors.NNNN: Where NNNN is 65535 minus the
393         decimal numerical value of the init_priority attribute.
394         The order of execution in .ctors is backward and .dtors
395         is forward.
396    */
397   if (strncmp (name, ".init_array.", 12) == 0
398       || strncmp (name, ".fini_array.", 12) == 0)
399     {
400       init_priority = strtoul (name + 12, &end, 10);
401       return *end ? 0 : init_priority;
402     }
403   else if (strncmp (name, ".ctors.", 7) == 0
404            || strncmp (name, ".dtors.", 7) == 0)
405     {
406       init_priority = strtoul (name + 7, &end, 10);
407       return *end ? 0 : 65535 - init_priority;
408     }
409
410   return 0;
411 }
412
413 /* Compare sections ASEC and BSEC according to SORT.  */
414
415 static int
416 compare_section (sort_type sort, asection *asec, asection *bsec)
417 {
418   int ret;
419   unsigned long ainit_priority, binit_priority;
420
421   switch (sort)
422     {
423     default:
424       abort ();
425
426     case by_init_priority:
427       ainit_priority
428         = get_init_priority (bfd_get_section_name (asec->owner, asec));
429       binit_priority
430         = get_init_priority (bfd_get_section_name (bsec->owner, bsec));
431       if (ainit_priority == 0 || binit_priority == 0)
432         goto sort_by_name;
433       ret = ainit_priority - binit_priority;
434       if (ret)
435         break;
436       else
437         goto sort_by_name;
438
439     case by_alignment_name:
440       ret = (bfd_section_alignment (bsec->owner, bsec)
441              - bfd_section_alignment (asec->owner, asec));
442       if (ret)
443         break;
444       /* Fall through.  */
445
446     case by_name:
447 sort_by_name:
448       ret = strcmp (bfd_get_section_name (asec->owner, asec),
449                     bfd_get_section_name (bsec->owner, bsec));
450       break;
451
452     case by_name_alignment:
453       ret = strcmp (bfd_get_section_name (asec->owner, asec),
454                     bfd_get_section_name (bsec->owner, bsec));
455       if (ret)
456         break;
457       /* Fall through.  */
458
459     case by_alignment:
460       ret = (bfd_section_alignment (bsec->owner, bsec)
461              - bfd_section_alignment (asec->owner, asec));
462       break;
463     }
464
465   return ret;
466 }
467
468 /* Build a Binary Search Tree to sort sections, unlike insertion sort
469    used in wild_sort(). BST is considerably faster if the number of
470    of sections are large.  */
471
472 static lang_section_bst_type **
473 wild_sort_fast (lang_wild_statement_type *wild,
474                 struct wildcard_list *sec,
475                 lang_input_statement_type *file ATTRIBUTE_UNUSED,
476                 asection *section)
477 {
478   lang_section_bst_type **tree;
479
480   tree = &wild->tree;
481   if (!wild->filenames_sorted
482       && (sec == NULL || sec->spec.sorted == none))
483     {
484       /* Append at the right end of tree.  */
485       while (*tree)
486         tree = &((*tree)->right);
487       return tree;
488     }
489
490   while (*tree)
491     {
492       /* Find the correct node to append this section.  */
493       if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
494         tree = &((*tree)->left);
495       else
496         tree = &((*tree)->right);
497     }
498
499   return tree;
500 }
501
502 /* Use wild_sort_fast to build a BST to sort sections.  */
503
504 static void
505 output_section_callback_fast (lang_wild_statement_type *ptr,
506                               struct wildcard_list *sec,
507                               asection *section,
508                               struct flag_info *sflag_list ATTRIBUTE_UNUSED,
509                               lang_input_statement_type *file,
510                               void *output)
511 {
512   lang_section_bst_type *node;
513   lang_section_bst_type **tree;
514   lang_output_section_statement_type *os;
515
516   os = (lang_output_section_statement_type *) output;
517
518   if (unique_section_p (section, os))
519     return;
520
521   node = (lang_section_bst_type *) xmalloc (sizeof (lang_section_bst_type));
522   node->left = 0;
523   node->right = 0;
524   node->section = section;
525
526   tree = wild_sort_fast (ptr, sec, file, section);
527   if (tree != NULL)
528     *tree = node;
529 }
530
531 /* Convert a sorted sections' BST back to list form.  */
532
533 static void
534 output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
535                                       lang_section_bst_type *tree,
536                                       void *output)
537 {
538   if (tree->left)
539     output_section_callback_tree_to_list (ptr, tree->left, output);
540
541   lang_add_section (&ptr->children, tree->section, NULL,
542                     (lang_output_section_statement_type *) output);
543
544   if (tree->right)
545     output_section_callback_tree_to_list (ptr, tree->right, output);
546
547   free (tree);
548 }
549
550 /* Specialized, optimized routines for handling different kinds of
551    wildcards */
552
553 static void
554 walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
555                                 lang_input_statement_type *file,
556                                 callback_t callback,
557                                 void *data)
558 {
559   /* We can just do a hash lookup for the section with the right name.
560      But if that lookup discovers more than one section with the name
561      (should be rare), we fall back to the general algorithm because
562      we would otherwise have to sort the sections to make sure they
563      get processed in the bfd's order.  */
564   bfd_boolean multiple_sections_found;
565   struct wildcard_list *sec0 = ptr->handler_data[0];
566   asection *s0 = find_section (file, sec0, &multiple_sections_found);
567
568   if (multiple_sections_found)
569     walk_wild_section_general (ptr, file, callback, data);
570   else if (s0)
571     walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
572 }
573
574 static void
575 walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
576                                 lang_input_statement_type *file,
577                                 callback_t callback,
578                                 void *data)
579 {
580   asection *s;
581   struct wildcard_list *wildsec0 = ptr->handler_data[0];
582
583   for (s = file->the_bfd->sections; s != NULL; s = s->next)
584     {
585       const char *sname = bfd_get_section_name (file->the_bfd, s);
586       bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
587
588       if (!skip)
589         walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
590     }
591 }
592
593 static void
594 walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
595                                 lang_input_statement_type *file,
596                                 callback_t callback,
597                                 void *data)
598 {
599   asection *s;
600   struct wildcard_list *sec0 = ptr->handler_data[0];
601   struct wildcard_list *wildsec1 = ptr->handler_data[1];
602   bfd_boolean multiple_sections_found;
603   asection *s0 = find_section (file, sec0, &multiple_sections_found);
604
605   if (multiple_sections_found)
606     {
607       walk_wild_section_general (ptr, file, callback, data);
608       return;
609     }
610
611   /* Note that if the section was not found, s0 is NULL and
612      we'll simply never succeed the s == s0 test below.  */
613   for (s = file->the_bfd->sections; s != NULL; s = s->next)
614     {
615       /* Recall that in this code path, a section cannot satisfy more
616          than one spec, so if s == s0 then it cannot match
617          wildspec1.  */
618       if (s == s0)
619         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
620       else
621         {
622           const char *sname = bfd_get_section_name (file->the_bfd, s);
623           bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
624
625           if (!skip)
626             walk_wild_consider_section (ptr, file, s, wildsec1, callback,
627                                         data);
628         }
629     }
630 }
631
632 static void
633 walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
634                                 lang_input_statement_type *file,
635                                 callback_t callback,
636                                 void *data)
637 {
638   asection *s;
639   struct wildcard_list *sec0 = ptr->handler_data[0];
640   struct wildcard_list *wildsec1 = ptr->handler_data[1];
641   struct wildcard_list *wildsec2 = ptr->handler_data[2];
642   bfd_boolean multiple_sections_found;
643   asection *s0 = find_section (file, sec0, &multiple_sections_found);
644
645   if (multiple_sections_found)
646     {
647       walk_wild_section_general (ptr, file, callback, data);
648       return;
649     }
650
651   for (s = file->the_bfd->sections; s != NULL; s = s->next)
652     {
653       if (s == s0)
654         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
655       else
656         {
657           const char *sname = bfd_get_section_name (file->the_bfd, s);
658           bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
659
660           if (!skip)
661             walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
662           else
663             {
664               skip = !match_simple_wild (wildsec2->spec.name, sname);
665               if (!skip)
666                 walk_wild_consider_section (ptr, file, s, wildsec2, callback,
667                                             data);
668             }
669         }
670     }
671 }
672
673 static void
674 walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
675                                 lang_input_statement_type *file,
676                                 callback_t callback,
677                                 void *data)
678 {
679   asection *s;
680   struct wildcard_list *sec0 = ptr->handler_data[0];
681   struct wildcard_list *sec1 = ptr->handler_data[1];
682   struct wildcard_list *wildsec2 = ptr->handler_data[2];
683   struct wildcard_list *wildsec3 = ptr->handler_data[3];
684   bfd_boolean multiple_sections_found;
685   asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
686
687   if (multiple_sections_found)
688     {
689       walk_wild_section_general (ptr, file, callback, data);
690       return;
691     }
692
693   s1 = find_section (file, sec1, &multiple_sections_found);
694   if (multiple_sections_found)
695     {
696       walk_wild_section_general (ptr, file, callback, data);
697       return;
698     }
699
700   for (s = file->the_bfd->sections; s != NULL; s = s->next)
701     {
702       if (s == s0)
703         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
704       else
705         if (s == s1)
706           walk_wild_consider_section (ptr, file, s, sec1, callback, data);
707         else
708           {
709             const char *sname = bfd_get_section_name (file->the_bfd, s);
710             bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
711                                                    sname);
712
713             if (!skip)
714               walk_wild_consider_section (ptr, file, s, wildsec2, callback,
715                                           data);
716             else
717               {
718                 skip = !match_simple_wild (wildsec3->spec.name, sname);
719                 if (!skip)
720                   walk_wild_consider_section (ptr, file, s, wildsec3,
721                                               callback, data);
722               }
723           }
724     }
725 }
726
727 static void
728 walk_wild_section (lang_wild_statement_type *ptr,
729                    lang_input_statement_type *file,
730                    callback_t callback,
731                    void *data)
732 {
733   if (file->flags.just_syms)
734     return;
735
736   (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
737 }
738
739 /* Returns TRUE when name1 is a wildcard spec that might match
740    something name2 can match.  We're conservative: we return FALSE
741    only if the prefixes of name1 and name2 are different up to the
742    first wildcard character.  */
743
744 static bfd_boolean
745 wild_spec_can_overlap (const char *name1, const char *name2)
746 {
747   size_t prefix1_len = strcspn (name1, "?*[");
748   size_t prefix2_len = strcspn (name2, "?*[");
749   size_t min_prefix_len;
750
751   /* Note that if there is no wildcard character, then we treat the
752      terminating 0 as part of the prefix.  Thus ".text" won't match
753      ".text." or ".text.*", for example.  */
754   if (name1[prefix1_len] == '\0')
755     prefix1_len++;
756   if (name2[prefix2_len] == '\0')
757     prefix2_len++;
758
759   min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
760
761   return memcmp (name1, name2, min_prefix_len) == 0;
762 }
763
764 /* Select specialized code to handle various kinds of wildcard
765    statements.  */
766
767 static void
768 analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
769 {
770   int sec_count = 0;
771   int wild_name_count = 0;
772   struct wildcard_list *sec;
773   int signature;
774   int data_counter;
775
776   ptr->walk_wild_section_handler = walk_wild_section_general;
777   ptr->handler_data[0] = NULL;
778   ptr->handler_data[1] = NULL;
779   ptr->handler_data[2] = NULL;
780   ptr->handler_data[3] = NULL;
781   ptr->tree = NULL;
782
783   /* Count how many wildcard_specs there are, and how many of those
784      actually use wildcards in the name.  Also, bail out if any of the
785      wildcard names are NULL. (Can this actually happen?
786      walk_wild_section used to test for it.)  And bail out if any
787      of the wildcards are more complex than a simple string
788      ending in a single '*'.  */
789   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
790     {
791       ++sec_count;
792       if (sec->spec.name == NULL)
793         return;
794       if (wildcardp (sec->spec.name))
795         {
796           ++wild_name_count;
797           if (!is_simple_wild (sec->spec.name))
798             return;
799         }
800     }
801
802   /* The zero-spec case would be easy to optimize but it doesn't
803      happen in practice.  Likewise, more than 4 specs doesn't
804      happen in practice.  */
805   if (sec_count == 0 || sec_count > 4)
806     return;
807
808   /* Check that no two specs can match the same section.  */
809   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
810     {
811       struct wildcard_list *sec2;
812       for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
813         {
814           if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
815             return;
816         }
817     }
818
819   signature = (sec_count << 8) + wild_name_count;
820   switch (signature)
821     {
822     case 0x0100:
823       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
824       break;
825     case 0x0101:
826       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
827       break;
828     case 0x0201:
829       ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
830       break;
831     case 0x0302:
832       ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
833       break;
834     case 0x0402:
835       ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
836       break;
837     default:
838       return;
839     }
840
841   /* Now fill the data array with pointers to the specs, first the
842      specs with non-wildcard names, then the specs with wildcard
843      names.  It's OK to process the specs in different order from the
844      given order, because we've already determined that no section
845      will match more than one spec.  */
846   data_counter = 0;
847   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
848     if (!wildcardp (sec->spec.name))
849       ptr->handler_data[data_counter++] = sec;
850   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
851     if (wildcardp (sec->spec.name))
852       ptr->handler_data[data_counter++] = sec;
853 }
854
855 /* Handle a wild statement for a single file F.  */
856
857 static void
858 walk_wild_file (lang_wild_statement_type *s,
859                 lang_input_statement_type *f,
860                 callback_t callback,
861                 void *data)
862 {
863   if (f->the_bfd == NULL
864       || !bfd_check_format (f->the_bfd, bfd_archive))
865     walk_wild_section (s, f, callback, data);
866   else
867     {
868       bfd *member;
869
870       /* This is an archive file.  We must map each member of the
871          archive separately.  */
872       member = bfd_openr_next_archived_file (f->the_bfd, NULL);
873       while (member != NULL)
874         {
875           /* When lookup_name is called, it will call the add_symbols
876              entry point for the archive.  For each element of the
877              archive which is included, BFD will call ldlang_add_file,
878              which will set the usrdata field of the member to the
879              lang_input_statement.  */
880           if (member->usrdata != NULL)
881             {
882               walk_wild_section (s,
883                                  (lang_input_statement_type *) member->usrdata,
884                                  callback, data);
885             }
886
887           member = bfd_openr_next_archived_file (f->the_bfd, member);
888         }
889     }
890 }
891
892 static void
893 walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
894 {
895   const char *file_spec = s->filename;
896   char *p;
897
898   if (file_spec == NULL)
899     {
900       /* Perform the iteration over all files in the list.  */
901       LANG_FOR_EACH_INPUT_STATEMENT (f)
902         {
903           walk_wild_file (s, f, callback, data);
904         }
905     }
906   else if ((p = archive_path (file_spec)) != NULL)
907     {
908       LANG_FOR_EACH_INPUT_STATEMENT (f)
909         {
910           if (input_statement_is_archive_path (file_spec, p, f))
911             walk_wild_file (s, f, callback, data);
912         }
913     }
914   else if (wildcardp (file_spec))
915     {
916       LANG_FOR_EACH_INPUT_STATEMENT (f)
917         {
918           if (fnmatch (file_spec, f->filename, 0) == 0)
919             walk_wild_file (s, f, callback, data);
920         }
921     }
922   else
923     {
924       lang_input_statement_type *f;
925
926       /* Perform the iteration over a single file.  */
927       f = lookup_name (file_spec);
928       if (f)
929         walk_wild_file (s, f, callback, data);
930     }
931 }
932
933 /* lang_for_each_statement walks the parse tree and calls the provided
934    function for each node, except those inside output section statements
935    with constraint set to -1.  */
936
937 void
938 lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
939                                 lang_statement_union_type *s)
940 {
941   for (; s != NULL; s = s->header.next)
942     {
943       func (s);
944
945       switch (s->header.type)
946         {
947         case lang_constructors_statement_enum:
948           lang_for_each_statement_worker (func, constructor_list.head);
949           break;
950         case lang_output_section_statement_enum:
951           if (s->output_section_statement.constraint != -1)
952             lang_for_each_statement_worker
953               (func, s->output_section_statement.children.head);
954           break;
955         case lang_wild_statement_enum:
956           lang_for_each_statement_worker (func,
957                                           s->wild_statement.children.head);
958           break;
959         case lang_group_statement_enum:
960           lang_for_each_statement_worker (func,
961                                           s->group_statement.children.head);
962           break;
963         case lang_data_statement_enum:
964         case lang_reloc_statement_enum:
965         case lang_object_symbols_statement_enum:
966         case lang_output_statement_enum:
967         case lang_target_statement_enum:
968         case lang_input_section_enum:
969         case lang_input_statement_enum:
970         case lang_assignment_statement_enum:
971         case lang_padding_statement_enum:
972         case lang_address_statement_enum:
973         case lang_fill_statement_enum:
974         case lang_insert_statement_enum:
975           break;
976         default:
977           FAIL ();
978           break;
979         }
980     }
981 }
982
983 void
984 lang_for_each_statement (void (*func) (lang_statement_union_type *))
985 {
986   lang_for_each_statement_worker (func, statement_list.head);
987 }
988
989 /*----------------------------------------------------------------------*/
990
991 void
992 lang_list_init (lang_statement_list_type *list)
993 {
994   list->head = NULL;
995   list->tail = &list->head;
996 }
997
998 void
999 push_stat_ptr (lang_statement_list_type *new_ptr)
1000 {
1001   if (stat_save_ptr >= stat_save + sizeof (stat_save) / sizeof (stat_save[0]))
1002     abort ();
1003   *stat_save_ptr++ = stat_ptr;
1004   stat_ptr = new_ptr;
1005 }
1006
1007 void
1008 pop_stat_ptr (void)
1009 {
1010   if (stat_save_ptr <= stat_save)
1011     abort ();
1012   stat_ptr = *--stat_save_ptr;
1013 }
1014
1015 /* Build a new statement node for the parse tree.  */
1016
1017 static lang_statement_union_type *
1018 new_statement (enum statement_enum type,
1019                size_t size,
1020                lang_statement_list_type *list)
1021 {
1022   lang_statement_union_type *new_stmt;
1023
1024   new_stmt = (lang_statement_union_type *) stat_alloc (size);
1025   new_stmt->header.type = type;
1026   new_stmt->header.next = NULL;
1027   lang_statement_append (list, new_stmt, &new_stmt->header.next);
1028   return new_stmt;
1029 }
1030
1031 /* Build a new input file node for the language.  There are several
1032    ways in which we treat an input file, eg, we only look at symbols,
1033    or prefix it with a -l etc.
1034
1035    We can be supplied with requests for input files more than once;
1036    they may, for example be split over several lines like foo.o(.text)
1037    foo.o(.data) etc, so when asked for a file we check that we haven't
1038    got it already so we don't duplicate the bfd.  */
1039
1040 static lang_input_statement_type *
1041 new_afile (const char *name,
1042            lang_input_file_enum_type file_type,
1043            const char *target,
1044            bfd_boolean add_to_list)
1045 {
1046   lang_input_statement_type *p;
1047
1048   lang_has_input_file = TRUE;
1049
1050   if (add_to_list)
1051     p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
1052   else
1053     {
1054       p = (lang_input_statement_type *)
1055           stat_alloc (sizeof (lang_input_statement_type));
1056       p->header.type = lang_input_statement_enum;
1057       p->header.next = NULL;
1058     }
1059
1060   memset (&p->the_bfd, 0,
1061           sizeof (*p) - offsetof (lang_input_statement_type, the_bfd));
1062   p->target = target;
1063   p->flags.dynamic = input_flags.dynamic;
1064   p->flags.add_DT_NEEDED_for_dynamic = input_flags.add_DT_NEEDED_for_dynamic;
1065   p->flags.add_DT_NEEDED_for_regular = input_flags.add_DT_NEEDED_for_regular;
1066   p->flags.whole_archive = input_flags.whole_archive;
1067   p->flags.sysrooted = input_flags.sysrooted;
1068
1069   switch (file_type)
1070     {
1071     case lang_input_file_is_symbols_only_enum:
1072       p->filename = name;
1073       p->local_sym_name = name;
1074       p->flags.real = TRUE;
1075       p->flags.just_syms = TRUE;
1076       break;
1077     case lang_input_file_is_fake_enum:
1078       p->filename = name;
1079       p->local_sym_name = name;
1080       break;
1081     case lang_input_file_is_l_enum:
1082       if (name[0] == ':' && name[1] != '\0')
1083         {
1084           p->filename = name + 1;
1085           p->flags.full_name_provided = TRUE;
1086         }
1087       else
1088         p->filename = name;
1089       p->local_sym_name = concat ("-l", name, (const char *) NULL);
1090       p->flags.maybe_archive = TRUE;
1091       p->flags.real = TRUE;
1092       p->flags.search_dirs = TRUE;
1093       break;
1094     case lang_input_file_is_marker_enum:
1095       p->filename = name;
1096       p->local_sym_name = name;
1097       p->flags.search_dirs = TRUE;
1098       break;
1099     case lang_input_file_is_search_file_enum:
1100       p->filename = name;
1101       p->local_sym_name = name;
1102       p->flags.real = TRUE;
1103       p->flags.search_dirs = TRUE;
1104       break;
1105     case lang_input_file_is_file_enum:
1106       p->filename = name;
1107       p->local_sym_name = name;
1108       p->flags.real = TRUE;
1109       break;
1110     default:
1111       FAIL ();
1112     }
1113
1114   lang_statement_append (&input_file_chain,
1115                          (lang_statement_union_type *) p,
1116                          &p->next_real_file);
1117   return p;
1118 }
1119
1120 lang_input_statement_type *
1121 lang_add_input_file (const char *name,
1122                      lang_input_file_enum_type file_type,
1123                      const char *target)
1124 {
1125   if (name != NULL && *name == '=')
1126     {
1127       lang_input_statement_type *ret;
1128       char *sysrooted_name
1129         = concat (ld_sysroot, name + 1, (const char *) NULL);
1130
1131       /* We've now forcibly prepended the sysroot, making the input
1132          file independent of the context.  Therefore, temporarily
1133          force a non-sysrooted context for this statement, so it won't
1134          get the sysroot prepended again when opened.  (N.B. if it's a
1135          script, any child nodes with input files starting with "/"
1136          will be handled as "sysrooted" as they'll be found to be
1137          within the sysroot subdirectory.)  */
1138       unsigned int outer_sysrooted = input_flags.sysrooted;
1139       input_flags.sysrooted = 0;
1140       ret = new_afile (sysrooted_name, file_type, target, TRUE);
1141       input_flags.sysrooted = outer_sysrooted;
1142       return ret;
1143     }
1144
1145   return new_afile (name, file_type, target, TRUE);
1146 }
1147
1148 struct out_section_hash_entry
1149 {
1150   struct bfd_hash_entry root;
1151   lang_statement_union_type s;
1152 };
1153
1154 /* The hash table.  */
1155
1156 static struct bfd_hash_table output_section_statement_table;
1157
1158 /* Support routines for the hash table used by lang_output_section_find,
1159    initialize the table, fill in an entry and remove the table.  */
1160
1161 static struct bfd_hash_entry *
1162 output_section_statement_newfunc (struct bfd_hash_entry *entry,
1163                                   struct bfd_hash_table *table,
1164                                   const char *string)
1165 {
1166   lang_output_section_statement_type **nextp;
1167   struct out_section_hash_entry *ret;
1168
1169   if (entry == NULL)
1170     {
1171       entry = (struct bfd_hash_entry *) bfd_hash_allocate (table,
1172                                                            sizeof (*ret));
1173       if (entry == NULL)
1174         return entry;
1175     }
1176
1177   entry = bfd_hash_newfunc (entry, table, string);
1178   if (entry == NULL)
1179     return entry;
1180
1181   ret = (struct out_section_hash_entry *) entry;
1182   memset (&ret->s, 0, sizeof (ret->s));
1183   ret->s.header.type = lang_output_section_statement_enum;
1184   ret->s.output_section_statement.subsection_alignment = -1;
1185   ret->s.output_section_statement.section_alignment = -1;
1186   ret->s.output_section_statement.block_value = 1;
1187   lang_list_init (&ret->s.output_section_statement.children);
1188   lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
1189
1190   /* For every output section statement added to the list, except the
1191      first one, lang_output_section_statement.tail points to the "next"
1192      field of the last element of the list.  */
1193   if (lang_output_section_statement.head != NULL)
1194     ret->s.output_section_statement.prev
1195       = ((lang_output_section_statement_type *)
1196          ((char *) lang_output_section_statement.tail
1197           - offsetof (lang_output_section_statement_type, next)));
1198
1199   /* GCC's strict aliasing rules prevent us from just casting the
1200      address, so we store the pointer in a variable and cast that
1201      instead.  */
1202   nextp = &ret->s.output_section_statement.next;
1203   lang_statement_append (&lang_output_section_statement,
1204                          &ret->s,
1205                          (lang_statement_union_type **) nextp);
1206   return &ret->root;
1207 }
1208
1209 static void
1210 output_section_statement_table_init (void)
1211 {
1212   if (!bfd_hash_table_init_n (&output_section_statement_table,
1213                               output_section_statement_newfunc,
1214                               sizeof (struct out_section_hash_entry),
1215                               61))
1216     einfo (_("%P%F: can not create hash table: %E\n"));
1217 }
1218
1219 static void
1220 output_section_statement_table_free (void)
1221 {
1222   bfd_hash_table_free (&output_section_statement_table);
1223 }
1224
1225 /* Build enough state so that the parser can build its tree.  */
1226
1227 void
1228 lang_init (void)
1229 {
1230   obstack_begin (&stat_obstack, 1000);
1231
1232   stat_ptr = &statement_list;
1233
1234   output_section_statement_table_init ();
1235
1236   lang_list_init (stat_ptr);
1237
1238   lang_list_init (&input_file_chain);
1239   lang_list_init (&lang_output_section_statement);
1240   lang_list_init (&file_chain);
1241   first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
1242                                     NULL);
1243   abs_output_section =
1244     lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
1245
1246   abs_output_section->bfd_section = bfd_abs_section_ptr;
1247
1248   asneeded_list_head = NULL;
1249   asneeded_list_tail = &asneeded_list_head;
1250 }
1251
1252 void
1253 lang_finish (void)
1254 {
1255   output_section_statement_table_free ();
1256 }
1257
1258 /*----------------------------------------------------------------------
1259   A region is an area of memory declared with the
1260   MEMORY {  name:org=exp, len=exp ... }
1261   syntax.
1262
1263   We maintain a list of all the regions here.
1264
1265   If no regions are specified in the script, then the default is used
1266   which is created when looked up to be the entire data space.
1267
1268   If create is true we are creating a region inside a MEMORY block.
1269   In this case it is probably an error to create a region that has
1270   already been created.  If we are not inside a MEMORY block it is
1271   dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
1272   and so we issue a warning.
1273
1274   Each region has at least one name.  The first name is either
1275   DEFAULT_MEMORY_REGION or the name given in the MEMORY block.  You can add
1276   alias names to an existing region within a script with
1277   REGION_ALIAS (alias, region_name).  Each name corresponds to at most one
1278   region.  */
1279
1280 static lang_memory_region_type *lang_memory_region_list;
1281 static lang_memory_region_type **lang_memory_region_list_tail
1282   = &lang_memory_region_list;
1283
1284 lang_memory_region_type *
1285 lang_memory_region_lookup (const char *const name, bfd_boolean create)
1286 {
1287   lang_memory_region_name *n;
1288   lang_memory_region_type *r;
1289   lang_memory_region_type *new_region;
1290
1291   /* NAME is NULL for LMA memspecs if no region was specified.  */
1292   if (name == NULL)
1293     return NULL;
1294
1295   for (r = lang_memory_region_list; r != NULL; r = r->next)
1296     for (n = &r->name_list; n != NULL; n = n->next)
1297       if (strcmp (n->name, name) == 0)
1298         {
1299           if (create)
1300             einfo (_("%P:%S: warning: redeclaration of memory region `%s'\n"),
1301                    NULL, name);
1302           return r;
1303         }
1304
1305   if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
1306     einfo (_("%P:%S: warning: memory region `%s' not declared\n"),
1307            NULL, name);
1308
1309   new_region = (lang_memory_region_type *)
1310       stat_alloc (sizeof (lang_memory_region_type));
1311
1312   new_region->name_list.name = xstrdup (name);
1313   new_region->name_list.next = NULL;
1314   new_region->next = NULL;
1315   new_region->origin_exp = NULL;
1316   new_region->origin = 0;
1317   new_region->length_exp = NULL;
1318   new_region->length = ~(bfd_size_type) 0;
1319   new_region->current = 0;
1320   new_region->last_os = NULL;
1321   new_region->flags = 0;
1322   new_region->not_flags = 0;
1323   new_region->had_full_message = FALSE;
1324
1325   *lang_memory_region_list_tail = new_region;
1326   lang_memory_region_list_tail = &new_region->next;
1327
1328   return new_region;
1329 }
1330
1331 void
1332 lang_memory_region_alias (const char *alias, const char *region_name)
1333 {
1334   lang_memory_region_name *n;
1335   lang_memory_region_type *r;
1336   lang_memory_region_type *region;
1337
1338   /* The default region must be unique.  This ensures that it is not necessary
1339      to iterate through the name list if someone wants the check if a region is
1340      the default memory region.  */
1341   if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0
1342       || strcmp (alias, DEFAULT_MEMORY_REGION) == 0)
1343     einfo (_("%F%P:%S: error: alias for default memory region\n"), NULL);
1344
1345   /* Look for the target region and check if the alias is not already
1346      in use.  */
1347   region = NULL;
1348   for (r = lang_memory_region_list; r != NULL; r = r->next)
1349     for (n = &r->name_list; n != NULL; n = n->next)
1350       {
1351         if (region == NULL && strcmp (n->name, region_name) == 0)
1352           region = r;
1353         if (strcmp (n->name, alias) == 0)
1354           einfo (_("%F%P:%S: error: redefinition of memory region "
1355                    "alias `%s'\n"),
1356                  NULL, alias);
1357       }
1358
1359   /* Check if the target region exists.  */
1360   if (region == NULL)
1361     einfo (_("%F%P:%S: error: memory region `%s' "
1362              "for alias `%s' does not exist\n"),
1363            NULL, region_name, alias);
1364
1365   /* Add alias to region name list.  */
1366   n = (lang_memory_region_name *) stat_alloc (sizeof (lang_memory_region_name));
1367   n->name = xstrdup (alias);
1368   n->next = region->name_list.next;
1369   region->name_list.next = n;
1370 }
1371
1372 static lang_memory_region_type *
1373 lang_memory_default (asection *section)
1374 {
1375   lang_memory_region_type *p;
1376
1377   flagword sec_flags = section->flags;
1378
1379   /* Override SEC_DATA to mean a writable section.  */
1380   if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
1381     sec_flags |= SEC_DATA;
1382
1383   for (p = lang_memory_region_list; p != NULL; p = p->next)
1384     {
1385       if ((p->flags & sec_flags) != 0
1386           && (p->not_flags & sec_flags) == 0)
1387         {
1388           return p;
1389         }
1390     }
1391   return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
1392 }
1393
1394 /* Get the output section statement directly from the userdata.  */
1395
1396 lang_output_section_statement_type *
1397 lang_output_section_get (const asection *output_section)
1398 {
1399   return get_userdata (output_section);
1400 }
1401
1402 /* Find or create an output_section_statement with the given NAME.
1403    If CONSTRAINT is non-zero match one with that constraint, otherwise
1404    match any non-negative constraint.  If CREATE, always make a
1405    new output_section_statement for SPECIAL CONSTRAINT.  */
1406
1407 lang_output_section_statement_type *
1408 lang_output_section_statement_lookup (const char *name,
1409                                       int constraint,
1410                                       bfd_boolean create)
1411 {
1412   struct out_section_hash_entry *entry;
1413
1414   entry = ((struct out_section_hash_entry *)
1415            bfd_hash_lookup (&output_section_statement_table, name,
1416                             create, FALSE));
1417   if (entry == NULL)
1418     {
1419       if (create)
1420         einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1421       return NULL;
1422     }
1423
1424   if (entry->s.output_section_statement.name != NULL)
1425     {
1426       /* We have a section of this name, but it might not have the correct
1427          constraint.  */
1428       struct out_section_hash_entry *last_ent;
1429
1430       name = entry->s.output_section_statement.name;
1431       if (create && constraint == SPECIAL)
1432         /* Not traversing to the end reverses the order of the second
1433            and subsequent SPECIAL sections in the hash table chain,
1434            but that shouldn't matter.  */
1435         last_ent = entry;
1436       else
1437         do
1438           {
1439             if (constraint == entry->s.output_section_statement.constraint
1440                 || (constraint == 0
1441                     && entry->s.output_section_statement.constraint >= 0))
1442               return &entry->s.output_section_statement;
1443             last_ent = entry;
1444             entry = (struct out_section_hash_entry *) entry->root.next;
1445           }
1446         while (entry != NULL
1447                && name == entry->s.output_section_statement.name);
1448
1449       if (!create)
1450         return NULL;
1451
1452       entry
1453         = ((struct out_section_hash_entry *)
1454            output_section_statement_newfunc (NULL,
1455                                              &output_section_statement_table,
1456                                              name));
1457       if (entry == NULL)
1458         {
1459           einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1460           return NULL;
1461         }
1462       entry->root = last_ent->root;
1463       last_ent->root.next = &entry->root;
1464     }
1465
1466   entry->s.output_section_statement.name = name;
1467   entry->s.output_section_statement.constraint = constraint;
1468   return &entry->s.output_section_statement;
1469 }
1470
1471 /* Find the next output_section_statement with the same name as OS.
1472    If CONSTRAINT is non-zero, find one with that constraint otherwise
1473    match any non-negative constraint.  */
1474
1475 lang_output_section_statement_type *
1476 next_matching_output_section_statement (lang_output_section_statement_type *os,
1477                                         int constraint)
1478 {
1479   /* All output_section_statements are actually part of a
1480      struct out_section_hash_entry.  */
1481   struct out_section_hash_entry *entry = (struct out_section_hash_entry *)
1482     ((char *) os
1483      - offsetof (struct out_section_hash_entry, s.output_section_statement));
1484   const char *name = os->name;
1485
1486   ASSERT (name == entry->root.string);
1487   do
1488     {
1489       entry = (struct out_section_hash_entry *) entry->root.next;
1490       if (entry == NULL
1491           || name != entry->s.output_section_statement.name)
1492         return NULL;
1493     }
1494   while (constraint != entry->s.output_section_statement.constraint
1495          && (constraint != 0
1496              || entry->s.output_section_statement.constraint < 0));
1497
1498   return &entry->s.output_section_statement;
1499 }
1500
1501 /* A variant of lang_output_section_find used by place_orphan.
1502    Returns the output statement that should precede a new output
1503    statement for SEC.  If an exact match is found on certain flags,
1504    sets *EXACT too.  */
1505
1506 lang_output_section_statement_type *
1507 lang_output_section_find_by_flags (const asection *sec,
1508                                    flagword sec_flags,
1509                                    lang_output_section_statement_type **exact,
1510                                    lang_match_sec_type_func match_type)
1511 {
1512   lang_output_section_statement_type *first, *look, *found;
1513   flagword look_flags, differ;
1514
1515   /* We know the first statement on this list is *ABS*.  May as well
1516      skip it.  */
1517   first = &lang_output_section_statement.head->output_section_statement;
1518   first = first->next;
1519
1520   /* First try for an exact match.  */
1521   found = NULL;
1522   for (look = first; look; look = look->next)
1523     {
1524       look_flags = look->flags;
1525       if (look->bfd_section != NULL)
1526         {
1527           look_flags = look->bfd_section->flags;
1528           if (match_type && !match_type (link_info.output_bfd,
1529                                          look->bfd_section,
1530                                          sec->owner, sec))
1531             continue;
1532         }
1533       differ = look_flags ^ sec_flags;
1534       if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1535                       | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1536         found = look;
1537     }
1538   if (found != NULL)
1539     {
1540       if (exact != NULL)
1541         *exact = found;
1542       return found;
1543     }
1544
1545   if ((sec_flags & SEC_CODE) != 0
1546       && (sec_flags & SEC_ALLOC) != 0)
1547     {
1548       /* Try for a rw code section.  */
1549       for (look = first; look; look = look->next)
1550         {
1551           look_flags = look->flags;
1552           if (look->bfd_section != NULL)
1553             {
1554               look_flags = look->bfd_section->flags;
1555               if (match_type && !match_type (link_info.output_bfd,
1556                                              look->bfd_section,
1557                                              sec->owner, sec))
1558                 continue;
1559             }
1560           differ = look_flags ^ sec_flags;
1561           if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1562                           | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1563             found = look;
1564         }
1565     }
1566   else if ((sec_flags & SEC_READONLY) != 0
1567            && (sec_flags & SEC_ALLOC) != 0)
1568     {
1569       /* .rodata can go after .text, .sdata2 after .rodata.  */
1570       for (look = first; look; look = look->next)
1571         {
1572           look_flags = look->flags;
1573           if (look->bfd_section != NULL)
1574             {
1575               look_flags = look->bfd_section->flags;
1576               if (match_type && !match_type (link_info.output_bfd,
1577                                              look->bfd_section,
1578                                              sec->owner, sec))
1579                 continue;
1580             }
1581           differ = look_flags ^ sec_flags;
1582           if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1583                           | SEC_READONLY | SEC_SMALL_DATA))
1584               || (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1585                               | SEC_READONLY))
1586                   && !(look_flags & SEC_SMALL_DATA)))
1587             found = look;
1588         }
1589     }
1590   else if ((sec_flags & SEC_THREAD_LOCAL) != 0
1591            && (sec_flags & SEC_ALLOC) != 0)
1592     {
1593       /* .tdata can go after .data, .tbss after .tdata.  Treat .tbss
1594          as if it were a loaded section, and don't use match_type.  */
1595       bfd_boolean seen_thread_local = FALSE;
1596
1597       match_type = NULL;
1598       for (look = first; look; look = look->next)
1599         {
1600           look_flags = look->flags;
1601           if (look->bfd_section != NULL)
1602             look_flags = look->bfd_section->flags;
1603
1604           differ = look_flags ^ (sec_flags | SEC_LOAD | SEC_HAS_CONTENTS);
1605           if (!(differ & (SEC_THREAD_LOCAL | SEC_ALLOC)))
1606             {
1607               /* .tdata and .tbss must be adjacent and in that order.  */
1608               if (!(look_flags & SEC_LOAD)
1609                   && (sec_flags & SEC_LOAD))
1610                 /* ..so if we're at a .tbss section and we're placing
1611                    a .tdata section stop looking and return the
1612                    previous section.  */
1613                 break;
1614               found = look;
1615               seen_thread_local = TRUE;
1616             }
1617           else if (seen_thread_local)
1618             break;
1619           else if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD)))
1620             found = look;
1621         }
1622     }
1623   else if ((sec_flags & SEC_SMALL_DATA) != 0
1624            && (sec_flags & SEC_ALLOC) != 0)
1625     {
1626       /* .sdata goes after .data, .sbss after .sdata.  */
1627       for (look = first; look; look = look->next)
1628         {
1629           look_flags = look->flags;
1630           if (look->bfd_section != NULL)
1631             {
1632               look_flags = look->bfd_section->flags;
1633               if (match_type && !match_type (link_info.output_bfd,
1634                                              look->bfd_section,
1635                                              sec->owner, sec))
1636                 continue;
1637             }
1638           differ = look_flags ^ sec_flags;
1639           if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1640                           | SEC_THREAD_LOCAL))
1641               || ((look_flags & SEC_SMALL_DATA)
1642                   && !(sec_flags & SEC_HAS_CONTENTS)))
1643             found = look;
1644         }
1645     }
1646   else if ((sec_flags & SEC_HAS_CONTENTS) != 0
1647            && (sec_flags & SEC_ALLOC) != 0)
1648     {
1649       /* .data goes after .rodata.  */
1650       for (look = first; look; look = look->next)
1651         {
1652           look_flags = look->flags;
1653           if (look->bfd_section != NULL)
1654             {
1655               look_flags = look->bfd_section->flags;
1656               if (match_type && !match_type (link_info.output_bfd,
1657                                              look->bfd_section,
1658                                              sec->owner, sec))
1659                 continue;
1660             }
1661           differ = look_flags ^ sec_flags;
1662           if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1663                           | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1664             found = look;
1665         }
1666     }
1667   else if ((sec_flags & SEC_ALLOC) != 0)
1668     {
1669       /* .bss goes after any other alloc section.  */
1670       for (look = first; look; look = look->next)
1671         {
1672           look_flags = look->flags;
1673           if (look->bfd_section != NULL)
1674             {
1675               look_flags = look->bfd_section->flags;
1676               if (match_type && !match_type (link_info.output_bfd,
1677                                              look->bfd_section,
1678                                              sec->owner, sec))
1679                 continue;
1680             }
1681           differ = look_flags ^ sec_flags;
1682           if (!(differ & SEC_ALLOC))
1683             found = look;
1684         }
1685     }
1686   else
1687     {
1688       /* non-alloc go last.  */
1689       for (look = first; look; look = look->next)
1690         {
1691           look_flags = look->flags;
1692           if (look->bfd_section != NULL)
1693             look_flags = look->bfd_section->flags;
1694           differ = look_flags ^ sec_flags;
1695           if (!(differ & SEC_DEBUGGING))
1696             found = look;
1697         }
1698       return found;
1699     }
1700
1701   if (found || !match_type)
1702     return found;
1703
1704   return lang_output_section_find_by_flags (sec, sec_flags, NULL, NULL);
1705 }
1706
1707 /* Find the last output section before given output statement.
1708    Used by place_orphan.  */
1709
1710 static asection *
1711 output_prev_sec_find (lang_output_section_statement_type *os)
1712 {
1713   lang_output_section_statement_type *lookup;
1714
1715   for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
1716     {
1717       if (lookup->constraint < 0)
1718         continue;
1719
1720       if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1721         return lookup->bfd_section;
1722     }
1723
1724   return NULL;
1725 }
1726
1727 /* Look for a suitable place for a new output section statement.  The
1728    idea is to skip over anything that might be inside a SECTIONS {}
1729    statement in a script, before we find another output section
1730    statement.  Assignments to "dot" before an output section statement
1731    are assumed to belong to it, except in two cases;  The first
1732    assignment to dot, and assignments before non-alloc sections.
1733    Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
1734    similar assignments that set the initial address, or we might
1735    insert non-alloc note sections among assignments setting end of
1736    image symbols.  */
1737
1738 static lang_statement_union_type **
1739 insert_os_after (lang_output_section_statement_type *after)
1740 {
1741   lang_statement_union_type **where;
1742   lang_statement_union_type **assign = NULL;
1743   bfd_boolean ignore_first;
1744
1745   ignore_first
1746     = after == &lang_output_section_statement.head->output_section_statement;
1747
1748   for (where = &after->header.next;
1749        *where != NULL;
1750        where = &(*where)->header.next)
1751     {
1752       switch ((*where)->header.type)
1753         {
1754         case lang_assignment_statement_enum:
1755           if (assign == NULL)
1756             {
1757               lang_assignment_statement_type *ass;
1758
1759               ass = &(*where)->assignment_statement;
1760               if (ass->exp->type.node_class != etree_assert
1761                   && ass->exp->assign.dst[0] == '.'
1762                   && ass->exp->assign.dst[1] == 0
1763                   && !ignore_first)
1764                 assign = where;
1765             }
1766           ignore_first = FALSE;
1767           continue;
1768         case lang_wild_statement_enum:
1769         case lang_input_section_enum:
1770         case lang_object_symbols_statement_enum:
1771         case lang_fill_statement_enum:
1772         case lang_data_statement_enum:
1773         case lang_reloc_statement_enum:
1774         case lang_padding_statement_enum:
1775         case lang_constructors_statement_enum:
1776           assign = NULL;
1777           continue;
1778         case lang_output_section_statement_enum:
1779           if (assign != NULL)
1780             {
1781               asection *s = (*where)->output_section_statement.bfd_section;
1782
1783               if (s == NULL
1784                   || s->map_head.s == NULL
1785                   || (s->flags & SEC_ALLOC) != 0)
1786                 where = assign;
1787             }
1788           break;
1789         case lang_input_statement_enum:
1790         case lang_address_statement_enum:
1791         case lang_target_statement_enum:
1792         case lang_output_statement_enum:
1793         case lang_group_statement_enum:
1794         case lang_insert_statement_enum:
1795           continue;
1796         }
1797       break;
1798     }
1799
1800   return where;
1801 }
1802
1803 lang_output_section_statement_type *
1804 lang_insert_orphan (asection *s,
1805                     const char *secname,
1806                     int constraint,
1807                     lang_output_section_statement_type *after,
1808                     struct orphan_save *place,
1809                     etree_type *address,
1810                     lang_statement_list_type *add_child)
1811 {
1812   lang_statement_list_type add;
1813   const char *ps;
1814   lang_assignment_statement_type *start_assign;
1815   lang_output_section_statement_type *os;
1816   lang_output_section_statement_type **os_tail;
1817
1818   /* If we have found an appropriate place for the output section
1819      statements for this orphan, add them to our own private list,
1820      inserting them later into the global statement list.  */
1821   if (after != NULL)
1822     {
1823       lang_list_init (&add);
1824       push_stat_ptr (&add);
1825     }
1826
1827   if (bfd_link_relocatable (&link_info)
1828       || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1829     address = exp_intop (0);
1830
1831   os_tail = ((lang_output_section_statement_type **)
1832              lang_output_section_statement.tail);
1833   os = lang_enter_output_section_statement (secname, address, normal_section,
1834                                             NULL, NULL, NULL, constraint, 0);
1835
1836   ps = NULL;
1837   start_assign = NULL;
1838   if (config.build_constructors && *os_tail == os)
1839     {
1840       /* If the name of the section is representable in C, then create
1841          symbols to mark the start and the end of the section.  */
1842       for (ps = secname; *ps != '\0'; ps++)
1843         if (!ISALNUM ((unsigned char) *ps) && *ps != '_')
1844           break;
1845       if (*ps == '\0')
1846         {
1847           char *symname;
1848
1849           symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1850           symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1851           sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1852           start_assign
1853             = lang_add_assignment (exp_provide (symname,
1854                                                 exp_nameop (NAME, "."),
1855                                                 FALSE));
1856         }
1857     }
1858
1859   if (add_child == NULL)
1860     add_child = &os->children;
1861   lang_add_section (add_child, s, NULL, os);
1862
1863   if (after && (s->flags & (SEC_LOAD | SEC_ALLOC)) != 0)
1864     {
1865       const char *region = (after->region
1866                             ? after->region->name_list.name
1867                             : DEFAULT_MEMORY_REGION);
1868       const char *lma_region = (after->lma_region
1869                                 ? after->lma_region->name_list.name
1870                                 : NULL);
1871       lang_leave_output_section_statement (NULL, region, after->phdrs,
1872                                            lma_region);
1873     }
1874   else
1875     lang_leave_output_section_statement (NULL, DEFAULT_MEMORY_REGION, NULL,
1876                                          NULL);
1877
1878   if (start_assign != NULL)
1879     {
1880       char *symname;
1881       lang_assignment_statement_type *stop_assign;
1882       bfd_vma dot;
1883
1884       symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
1885       symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1886       sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
1887       stop_assign
1888         = lang_add_assignment (exp_provide (symname,
1889                                             exp_nameop (NAME, "."),
1890                                             FALSE));
1891       /* Evaluate the expression to define the symbol if referenced,
1892          before sizing dynamic sections.  */
1893       dot = os->bfd_section->vma;
1894       exp_fold_tree (start_assign->exp, os->bfd_section, &dot);
1895       dot += TO_ADDR (s->size);
1896       exp_fold_tree (stop_assign->exp, os->bfd_section, &dot);
1897     }
1898
1899   /* Restore the global list pointer.  */
1900   if (after != NULL)
1901     pop_stat_ptr ();
1902
1903   if (after != NULL && os->bfd_section != NULL)
1904     {
1905       asection *snew, *as;
1906
1907       snew = os->bfd_section;
1908
1909       /* Shuffle the bfd section list to make the output file look
1910          neater.  This is really only cosmetic.  */
1911       if (place->section == NULL
1912           && after != (&lang_output_section_statement.head
1913                        ->output_section_statement))
1914         {
1915           asection *bfd_section = after->bfd_section;
1916
1917           /* If the output statement hasn't been used to place any input
1918              sections (and thus doesn't have an output bfd_section),
1919              look for the closest prior output statement having an
1920              output section.  */
1921           if (bfd_section == NULL)
1922             bfd_section = output_prev_sec_find (after);
1923
1924           if (bfd_section != NULL && bfd_section != snew)
1925             place->section = &bfd_section->next;
1926         }
1927
1928       if (place->section == NULL)
1929         place->section = &link_info.output_bfd->sections;
1930
1931       as = *place->section;
1932
1933       if (!as)
1934         {
1935           /* Put the section at the end of the list.  */
1936
1937           /* Unlink the section.  */
1938           bfd_section_list_remove (link_info.output_bfd, snew);
1939
1940           /* Now tack it back on in the right place.  */
1941           bfd_section_list_append (link_info.output_bfd, snew);
1942         }
1943       else if (as != snew && as->prev != snew)
1944         {
1945           /* Unlink the section.  */
1946           bfd_section_list_remove (link_info.output_bfd, snew);
1947
1948           /* Now tack it back on in the right place.  */
1949           bfd_section_list_insert_before (link_info.output_bfd, as, snew);
1950         }
1951
1952       /* Save the end of this list.  Further ophans of this type will
1953          follow the one we've just added.  */
1954       place->section = &snew->next;
1955
1956       /* The following is non-cosmetic.  We try to put the output
1957          statements in some sort of reasonable order here, because they
1958          determine the final load addresses of the orphan sections.
1959          In addition, placing output statements in the wrong order may
1960          require extra segments.  For instance, given a typical
1961          situation of all read-only sections placed in one segment and
1962          following that a segment containing all the read-write
1963          sections, we wouldn't want to place an orphan read/write
1964          section before or amongst the read-only ones.  */
1965       if (add.head != NULL)
1966         {
1967           lang_output_section_statement_type *newly_added_os;
1968
1969           if (place->stmt == NULL)
1970             {
1971               lang_statement_union_type **where = insert_os_after (after);
1972
1973               *add.tail = *where;
1974               *where = add.head;
1975
1976               place->os_tail = &after->next;
1977             }
1978           else
1979             {
1980               /* Put it after the last orphan statement we added.  */
1981               *add.tail = *place->stmt;
1982               *place->stmt = add.head;
1983             }
1984
1985           /* Fix the global list pointer if we happened to tack our
1986              new list at the tail.  */
1987           if (*stat_ptr->tail == add.head)
1988             stat_ptr->tail = add.tail;
1989
1990           /* Save the end of this list.  */
1991           place->stmt = add.tail;
1992
1993           /* Do the same for the list of output section statements.  */
1994           newly_added_os = *os_tail;
1995           *os_tail = NULL;
1996           newly_added_os->prev = (lang_output_section_statement_type *)
1997             ((char *) place->os_tail
1998              - offsetof (lang_output_section_statement_type, next));
1999           newly_added_os->next = *place->os_tail;
2000           if (newly_added_os->next != NULL)
2001             newly_added_os->next->prev = newly_added_os;
2002           *place->os_tail = newly_added_os;
2003           place->os_tail = &newly_added_os->next;
2004
2005           /* Fixing the global list pointer here is a little different.
2006              We added to the list in lang_enter_output_section_statement,
2007              trimmed off the new output_section_statment above when
2008              assigning *os_tail = NULL, but possibly added it back in
2009              the same place when assigning *place->os_tail.  */
2010           if (*os_tail == NULL)
2011             lang_output_section_statement.tail
2012               = (lang_statement_union_type **) os_tail;
2013         }
2014     }
2015   return os;
2016 }
2017
2018 static void
2019 lang_print_asneeded (void)
2020 {
2021   struct asneeded_minfo *m;
2022   char buf[100];
2023
2024   if (asneeded_list_head == NULL)
2025     return;
2026
2027   sprintf (buf, _("\nAs-needed library included "
2028                   "to satisfy reference by file (symbol)\n\n"));
2029   minfo ("%s", buf);
2030
2031   for (m = asneeded_list_head; m != NULL; m = m->next)
2032     {
2033       size_t len;
2034
2035       minfo ("%s", m->soname);
2036       len = strlen (m->soname);
2037
2038       if (len >= 29)
2039         {
2040           print_nl ();
2041           len = 0;
2042         }
2043       while (len < 30)
2044         {
2045           print_space ();
2046           ++len;
2047         }
2048
2049       if (m->ref != NULL)
2050         minfo ("%B ", m->ref);
2051       minfo ("(%T)\n", m->name);
2052     }
2053 }
2054
2055 static void
2056 lang_map_flags (flagword flag)
2057 {
2058   if (flag & SEC_ALLOC)
2059     minfo ("a");
2060
2061   if (flag & SEC_CODE)
2062     minfo ("x");
2063
2064   if (flag & SEC_READONLY)
2065     minfo ("r");
2066
2067   if (flag & SEC_DATA)
2068     minfo ("w");
2069
2070   if (flag & SEC_LOAD)
2071     minfo ("l");
2072 }
2073
2074 void
2075 lang_map (void)
2076 {
2077   lang_memory_region_type *m;
2078   bfd_boolean dis_header_printed = FALSE;
2079
2080   LANG_FOR_EACH_INPUT_STATEMENT (file)
2081     {
2082       asection *s;
2083
2084       if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
2085           || file->flags.just_syms)
2086         continue;
2087
2088       for (s = file->the_bfd->sections; s != NULL; s = s->next)
2089         if ((s->output_section == NULL
2090              || s->output_section->owner != link_info.output_bfd)
2091             && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
2092           {
2093             if (!dis_header_printed)
2094               {
2095                 fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
2096                 dis_header_printed = TRUE;
2097               }
2098
2099             print_input_section (s, TRUE);
2100           }
2101     }
2102
2103   minfo (_("\nMemory Configuration\n\n"));
2104   fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
2105            _("Name"), _("Origin"), _("Length"), _("Attributes"));
2106
2107   for (m = lang_memory_region_list; m != NULL; m = m->next)
2108     {
2109       char buf[100];
2110       int len;
2111
2112       fprintf (config.map_file, "%-16s ", m->name_list.name);
2113
2114       sprintf_vma (buf, m->origin);
2115       minfo ("0x%s ", buf);
2116       len = strlen (buf);
2117       while (len < 16)
2118         {
2119           print_space ();
2120           ++len;
2121         }
2122
2123       minfo ("0x%V", m->length);
2124       if (m->flags || m->not_flags)
2125         {
2126 #ifndef BFD64
2127           minfo ("        ");
2128 #endif
2129           if (m->flags)
2130             {
2131               print_space ();
2132               lang_map_flags (m->flags);
2133             }
2134
2135           if (m->not_flags)
2136             {
2137               minfo (" !");
2138               lang_map_flags (m->not_flags);
2139             }
2140         }
2141
2142       print_nl ();
2143     }
2144
2145   fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
2146
2147   if (!link_info.reduce_memory_overheads)
2148     {
2149       obstack_begin (&map_obstack, 1000);
2150       bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
2151     }
2152   lang_statement_iteration++;
2153   print_statements ();
2154
2155   ldemul_extra_map_file_text (link_info.output_bfd, &link_info,
2156                               config.map_file);
2157 }
2158
2159 static bfd_boolean
2160 sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
2161                  void *info ATTRIBUTE_UNUSED)
2162 {
2163   if ((hash_entry->type == bfd_link_hash_defined
2164        || hash_entry->type == bfd_link_hash_defweak)
2165       && hash_entry->u.def.section->owner != link_info.output_bfd
2166       && hash_entry->u.def.section->owner != NULL)
2167     {
2168       input_section_userdata_type *ud;
2169       struct map_symbol_def *def;
2170
2171       ud = ((input_section_userdata_type *)
2172             get_userdata (hash_entry->u.def.section));
2173       if (!ud)
2174         {
2175           ud = (input_section_userdata_type *) stat_alloc (sizeof (*ud));
2176           get_userdata (hash_entry->u.def.section) = ud;
2177           ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2178           ud->map_symbol_def_count = 0;
2179         }
2180       else if (!ud->map_symbol_def_tail)
2181         ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2182
2183       def = (struct map_symbol_def *) obstack_alloc (&map_obstack, sizeof *def);
2184       def->entry = hash_entry;
2185       *(ud->map_symbol_def_tail) = def;
2186       ud->map_symbol_def_tail = &def->next;
2187       ud->map_symbol_def_count++;
2188     }
2189   return TRUE;
2190 }
2191
2192 /* Initialize an output section.  */
2193
2194 static void
2195 init_os (lang_output_section_statement_type *s, flagword flags)
2196 {
2197   if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
2198     einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
2199
2200   if (s->constraint != SPECIAL)
2201     s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
2202   if (s->bfd_section == NULL)
2203     s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
2204                                                          s->name, flags);
2205   if (s->bfd_section == NULL)
2206     {
2207       einfo (_("%P%F: output format %s cannot represent section"
2208                " called %s: %E\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               && file->the_bfd->my_archive != NULL)
2504             {
2505               fn = bfd_get_filename (file->the_bfd->my_archive);
2506               fa = TRUE;
2507             }
2508           else
2509             {
2510               fn = file->filename;
2511               fa = FALSE;
2512             }
2513
2514           if (ls->section->owner->my_archive != NULL)
2515             {
2516               ln = bfd_get_filename (ls->section->owner->my_archive);
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       /* Get the chosen target.  */
3117       const bfd_target *target
3118         = bfd_iterate_over_targets (get_target, (void *) output_target);
3119
3120       /* If the target is not supported, we cannot do anything.  */
3121       if (target != NULL)
3122         {
3123           enum bfd_endian desired_endian;
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_iterate_over_targets (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,
4176                      ud->map_symbol_def_count * sizeof (*entries));
4177
4178   for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4179     entries[i] = def->entry;
4180
4181   qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4182          hash_entry_addr_cmp);
4183
4184   /* Print the symbols.  */
4185   for (i = 0; i < ud->map_symbol_def_count; i++)
4186     print_one_symbol (entries[i], sec);
4187
4188   obstack_free (&map_obstack, entries);
4189 }
4190
4191 /* Print information about an input section to the map file.  */
4192
4193 static void
4194 print_input_section (asection *i, bfd_boolean is_discarded)
4195 {
4196   bfd_size_type size = i->size;
4197   int len;
4198   bfd_vma addr;
4199
4200   init_opb ();
4201
4202   print_space ();
4203   minfo ("%s", i->name);
4204
4205   len = 1 + strlen (i->name);
4206   if (len >= SECTION_NAME_MAP_LENGTH - 1)
4207     {
4208       print_nl ();
4209       len = 0;
4210     }
4211   while (len < SECTION_NAME_MAP_LENGTH)
4212     {
4213       print_space ();
4214       ++len;
4215     }
4216
4217   if (i->output_section != NULL
4218       && i->output_section->owner == link_info.output_bfd)
4219     addr = i->output_section->vma + i->output_offset;
4220   else
4221     {
4222       addr = print_dot;
4223       if (!is_discarded)
4224         size = 0;
4225     }
4226
4227   minfo ("0x%V %W %B\n", addr, size, i->owner);
4228
4229   if (size != i->rawsize && i->rawsize != 0)
4230     {
4231       len = SECTION_NAME_MAP_LENGTH + 3;
4232 #ifdef BFD64
4233       len += 16;
4234 #else
4235       len += 8;
4236 #endif
4237       while (len > 0)
4238         {
4239           print_space ();
4240           --len;
4241         }
4242
4243       minfo (_("%W (size before relaxing)\n"), i->rawsize);
4244     }
4245
4246   if (i->output_section != NULL
4247       && i->output_section->owner == link_info.output_bfd)
4248     {
4249       if (link_info.reduce_memory_overheads)
4250         bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4251       else
4252         print_all_symbols (i);
4253
4254       /* Update print_dot, but make sure that we do not move it
4255          backwards - this could happen if we have overlays and a
4256          later overlay is shorter than an earier one.  */
4257       if (addr + TO_ADDR (size) > print_dot)
4258         print_dot = addr + TO_ADDR (size);
4259     }
4260 }
4261
4262 static void
4263 print_fill_statement (lang_fill_statement_type *fill)
4264 {
4265   size_t size;
4266   unsigned char *p;
4267   fputs (" FILL mask 0x", config.map_file);
4268   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4269     fprintf (config.map_file, "%02x", *p);
4270   fputs ("\n", config.map_file);
4271 }
4272
4273 static void
4274 print_data_statement (lang_data_statement_type *data)
4275 {
4276   int i;
4277   bfd_vma addr;
4278   bfd_size_type size;
4279   const char *name;
4280
4281   init_opb ();
4282   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4283     print_space ();
4284
4285   addr = data->output_offset;
4286   if (data->output_section != NULL)
4287     addr += data->output_section->vma;
4288
4289   switch (data->type)
4290     {
4291     default:
4292       abort ();
4293     case BYTE:
4294       size = BYTE_SIZE;
4295       name = "BYTE";
4296       break;
4297     case SHORT:
4298       size = SHORT_SIZE;
4299       name = "SHORT";
4300       break;
4301     case LONG:
4302       size = LONG_SIZE;
4303       name = "LONG";
4304       break;
4305     case QUAD:
4306       size = QUAD_SIZE;
4307       name = "QUAD";
4308       break;
4309     case SQUAD:
4310       size = QUAD_SIZE;
4311       name = "SQUAD";
4312       break;
4313     }
4314
4315   if (size < TO_SIZE ((unsigned) 1))
4316     size = TO_SIZE ((unsigned) 1);
4317   minfo ("0x%V %W %s 0x%v", addr, TO_ADDR (size), name, data->value);
4318
4319   if (data->exp->type.node_class != etree_value)
4320     {
4321       print_space ();
4322       exp_print_tree (data->exp);
4323     }
4324
4325   print_nl ();
4326
4327   print_dot = addr + TO_ADDR (size);
4328 }
4329
4330 /* Print an address statement.  These are generated by options like
4331    -Ttext.  */
4332
4333 static void
4334 print_address_statement (lang_address_statement_type *address)
4335 {
4336   minfo (_("Address of section %s set to "), address->section_name);
4337   exp_print_tree (address->address);
4338   print_nl ();
4339 }
4340
4341 /* Print a reloc statement.  */
4342
4343 static void
4344 print_reloc_statement (lang_reloc_statement_type *reloc)
4345 {
4346   int i;
4347   bfd_vma addr;
4348   bfd_size_type size;
4349
4350   init_opb ();
4351   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4352     print_space ();
4353
4354   addr = reloc->output_offset;
4355   if (reloc->output_section != NULL)
4356     addr += reloc->output_section->vma;
4357
4358   size = bfd_get_reloc_size (reloc->howto);
4359
4360   minfo ("0x%V %W RELOC %s ", addr, TO_ADDR (size), reloc->howto->name);
4361
4362   if (reloc->name != NULL)
4363     minfo ("%s+", reloc->name);
4364   else
4365     minfo ("%s+", reloc->section->name);
4366
4367   exp_print_tree (reloc->addend_exp);
4368
4369   print_nl ();
4370
4371   print_dot = addr + TO_ADDR (size);
4372 }
4373
4374 static void
4375 print_padding_statement (lang_padding_statement_type *s)
4376 {
4377   int len;
4378   bfd_vma addr;
4379
4380   init_opb ();
4381   minfo (" *fill*");
4382
4383   len = sizeof " *fill*" - 1;
4384   while (len < SECTION_NAME_MAP_LENGTH)
4385     {
4386       print_space ();
4387       ++len;
4388     }
4389
4390   addr = s->output_offset;
4391   if (s->output_section != NULL)
4392     addr += s->output_section->vma;
4393   minfo ("0x%V %W ", addr, TO_ADDR (s->size));
4394
4395   if (s->fill->size != 0)
4396     {
4397       size_t size;
4398       unsigned char *p;
4399       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4400         fprintf (config.map_file, "%02x", *p);
4401     }
4402
4403   print_nl ();
4404
4405   print_dot = addr + TO_ADDR (s->size);
4406 }
4407
4408 static void
4409 print_wild_statement (lang_wild_statement_type *w,
4410                       lang_output_section_statement_type *os)
4411 {
4412   struct wildcard_list *sec;
4413
4414   print_space ();
4415
4416   if (w->filenames_sorted)
4417     minfo ("SORT(");
4418   if (w->filename != NULL)
4419     minfo ("%s", w->filename);
4420   else
4421     minfo ("*");
4422   if (w->filenames_sorted)
4423     minfo (")");
4424
4425   minfo ("(");
4426   for (sec = w->section_list; sec; sec = sec->next)
4427     {
4428       if (sec->spec.sorted)
4429         minfo ("SORT(");
4430       if (sec->spec.exclude_name_list != NULL)
4431         {
4432           name_list *tmp;
4433           minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4434           for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4435             minfo (" %s", tmp->name);
4436           minfo (") ");
4437         }
4438       if (sec->spec.name != NULL)
4439         minfo ("%s", sec->spec.name);
4440       else
4441         minfo ("*");
4442       if (sec->spec.sorted)
4443         minfo (")");
4444       if (sec->next)
4445         minfo (" ");
4446     }
4447   minfo (")");
4448
4449   print_nl ();
4450
4451   print_statement_list (w->children.head, os);
4452 }
4453
4454 /* Print a group statement.  */
4455
4456 static void
4457 print_group (lang_group_statement_type *s,
4458              lang_output_section_statement_type *os)
4459 {
4460   fprintf (config.map_file, "START GROUP\n");
4461   print_statement_list (s->children.head, os);
4462   fprintf (config.map_file, "END GROUP\n");
4463 }
4464
4465 /* Print the list of statements in S.
4466    This can be called for any statement type.  */
4467
4468 static void
4469 print_statement_list (lang_statement_union_type *s,
4470                       lang_output_section_statement_type *os)
4471 {
4472   while (s != NULL)
4473     {
4474       print_statement (s, os);
4475       s = s->header.next;
4476     }
4477 }
4478
4479 /* Print the first statement in statement list S.
4480    This can be called for any statement type.  */
4481
4482 static void
4483 print_statement (lang_statement_union_type *s,
4484                  lang_output_section_statement_type *os)
4485 {
4486   switch (s->header.type)
4487     {
4488     default:
4489       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4490       FAIL ();
4491       break;
4492     case lang_constructors_statement_enum:
4493       if (constructor_list.head != NULL)
4494         {
4495           if (constructors_sorted)
4496             minfo (" SORT (CONSTRUCTORS)\n");
4497           else
4498             minfo (" CONSTRUCTORS\n");
4499           print_statement_list (constructor_list.head, os);
4500         }
4501       break;
4502     case lang_wild_statement_enum:
4503       print_wild_statement (&s->wild_statement, os);
4504       break;
4505     case lang_address_statement_enum:
4506       print_address_statement (&s->address_statement);
4507       break;
4508     case lang_object_symbols_statement_enum:
4509       minfo (" CREATE_OBJECT_SYMBOLS\n");
4510       break;
4511     case lang_fill_statement_enum:
4512       print_fill_statement (&s->fill_statement);
4513       break;
4514     case lang_data_statement_enum:
4515       print_data_statement (&s->data_statement);
4516       break;
4517     case lang_reloc_statement_enum:
4518       print_reloc_statement (&s->reloc_statement);
4519       break;
4520     case lang_input_section_enum:
4521       print_input_section (s->input_section.section, FALSE);
4522       break;
4523     case lang_padding_statement_enum:
4524       print_padding_statement (&s->padding_statement);
4525       break;
4526     case lang_output_section_statement_enum:
4527       print_output_section_statement (&s->output_section_statement);
4528       break;
4529     case lang_assignment_statement_enum:
4530       print_assignment (&s->assignment_statement, os);
4531       break;
4532     case lang_target_statement_enum:
4533       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4534       break;
4535     case lang_output_statement_enum:
4536       minfo ("OUTPUT(%s", s->output_statement.name);
4537       if (output_target != NULL)
4538         minfo (" %s", output_target);
4539       minfo (")\n");
4540       break;
4541     case lang_input_statement_enum:
4542       print_input_statement (&s->input_statement);
4543       break;
4544     case lang_group_statement_enum:
4545       print_group (&s->group_statement, os);
4546       break;
4547     case lang_insert_statement_enum:
4548       minfo ("INSERT %s %s\n",
4549              s->insert_statement.is_before ? "BEFORE" : "AFTER",
4550              s->insert_statement.where);
4551       break;
4552     }
4553 }
4554
4555 static void
4556 print_statements (void)
4557 {
4558   print_statement_list (statement_list.head, abs_output_section);
4559 }
4560
4561 /* Print the first N statements in statement list S to STDERR.
4562    If N == 0, nothing is printed.
4563    If N < 0, the entire list is printed.
4564    Intended to be called from GDB.  */
4565
4566 void
4567 dprint_statement (lang_statement_union_type *s, int n)
4568 {
4569   FILE *map_save = config.map_file;
4570
4571   config.map_file = stderr;
4572
4573   if (n < 0)
4574     print_statement_list (s, abs_output_section);
4575   else
4576     {
4577       while (s && --n >= 0)
4578         {
4579           print_statement (s, abs_output_section);
4580           s = s->header.next;
4581         }
4582     }
4583
4584   config.map_file = map_save;
4585 }
4586
4587 static void
4588 insert_pad (lang_statement_union_type **ptr,
4589             fill_type *fill,
4590             bfd_size_type alignment_needed,
4591             asection *output_section,
4592             bfd_vma dot)
4593 {
4594   static fill_type zero_fill;
4595   lang_statement_union_type *pad = NULL;
4596
4597   if (ptr != &statement_list.head)
4598     pad = ((lang_statement_union_type *)
4599            ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4600   if (pad != NULL
4601       && pad->header.type == lang_padding_statement_enum
4602       && pad->padding_statement.output_section == output_section)
4603     {
4604       /* Use the existing pad statement.  */
4605     }
4606   else if ((pad = *ptr) != NULL
4607            && pad->header.type == lang_padding_statement_enum
4608            && pad->padding_statement.output_section == output_section)
4609     {
4610       /* Use the existing pad statement.  */
4611     }
4612   else
4613     {
4614       /* Make a new padding statement, linked into existing chain.  */
4615       pad = (lang_statement_union_type *)
4616           stat_alloc (sizeof (lang_padding_statement_type));
4617       pad->header.next = *ptr;
4618       *ptr = pad;
4619       pad->header.type = lang_padding_statement_enum;
4620       pad->padding_statement.output_section = output_section;
4621       if (fill == NULL)
4622         fill = &zero_fill;
4623       pad->padding_statement.fill = fill;
4624     }
4625   pad->padding_statement.output_offset = dot - output_section->vma;
4626   pad->padding_statement.size = alignment_needed;
4627   output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
4628                                   - output_section->vma);
4629 }
4630
4631 /* Work out how much this section will move the dot point.  */
4632
4633 static bfd_vma
4634 size_input_section
4635   (lang_statement_union_type **this_ptr,
4636    lang_output_section_statement_type *output_section_statement,
4637    fill_type *fill,
4638    bfd_vma dot)
4639 {
4640   lang_input_section_type *is = &((*this_ptr)->input_section);
4641   asection *i = is->section;
4642   asection *o = output_section_statement->bfd_section;
4643
4644   if (i->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4645     i->output_offset = i->vma - o->vma;
4646   else if ((i->flags & SEC_EXCLUDE) != 0)
4647     i->output_offset = dot - o->vma;
4648   else
4649     {
4650       bfd_size_type alignment_needed;
4651
4652       /* Align this section first to the input sections requirement,
4653          then to the output section's requirement.  If this alignment
4654          is greater than any seen before, then record it too.  Perform
4655          the alignment by inserting a magic 'padding' statement.  */
4656
4657       if (output_section_statement->subsection_alignment != -1)
4658         i->alignment_power = output_section_statement->subsection_alignment;
4659
4660       if (o->alignment_power < i->alignment_power)
4661         o->alignment_power = i->alignment_power;
4662
4663       alignment_needed = align_power (dot, i->alignment_power) - dot;
4664
4665       if (alignment_needed != 0)
4666         {
4667           insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4668           dot += alignment_needed;
4669         }
4670
4671       /* Remember where in the output section this input section goes.  */
4672       i->output_offset = dot - o->vma;
4673
4674       /* Mark how big the output section must be to contain this now.  */
4675       dot += TO_ADDR (i->size);
4676       o->size = TO_SIZE (dot - o->vma);
4677     }
4678
4679   return dot;
4680 }
4681
4682 struct check_sec
4683 {
4684   asection *sec;
4685   bfd_boolean warned;
4686 };
4687
4688 static int
4689 sort_sections_by_lma (const void *arg1, const void *arg2)
4690 {
4691   const asection *sec1 = ((const struct check_sec *) arg1)->sec;
4692   const asection *sec2 = ((const struct check_sec *) arg2)->sec;
4693
4694   if (sec1->lma < sec2->lma)
4695     return -1;
4696   else if (sec1->lma > sec2->lma)
4697     return 1;
4698   else if (sec1->id < sec2->id)
4699     return -1;
4700   else if (sec1->id > sec2->id)
4701     return 1;
4702
4703   return 0;
4704 }
4705
4706 static int
4707 sort_sections_by_vma (const void *arg1, const void *arg2)
4708 {
4709   const asection *sec1 = ((const struct check_sec *) arg1)->sec;
4710   const asection *sec2 = ((const struct check_sec *) arg2)->sec;
4711
4712   if (sec1->vma < sec2->vma)
4713     return -1;
4714   else if (sec1->vma > sec2->vma)
4715     return 1;
4716   else if (sec1->id < sec2->id)
4717     return -1;
4718   else if (sec1->id > sec2->id)
4719     return 1;
4720
4721   return 0;
4722 }
4723
4724 #define IS_TBSS(s) \
4725   ((s->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == SEC_THREAD_LOCAL)
4726
4727 #define IGNORE_SECTION(s) \
4728   ((s->flags & SEC_ALLOC) == 0 || IS_TBSS (s))
4729
4730 /* Check to see if any allocated sections overlap with other allocated
4731    sections.  This can happen if a linker script specifies the output
4732    section addresses of the two sections.  Also check whether any memory
4733    region has overflowed.  */
4734
4735 static void
4736 lang_check_section_addresses (void)
4737 {
4738   asection *s, *p;
4739   struct check_sec *sections;
4740   size_t i, count;
4741   bfd_vma s_start;
4742   bfd_vma s_end;
4743   bfd_vma p_start = 0;
4744   bfd_vma p_end = 0;
4745   lang_memory_region_type *m;
4746   bfd_boolean overlays;
4747
4748   if (bfd_count_sections (link_info.output_bfd) <= 1)
4749     return;
4750
4751   count = bfd_count_sections (link_info.output_bfd);
4752   sections = XNEWVEC (struct check_sec, count);
4753
4754   /* Scan all sections in the output list.  */
4755   count = 0;
4756   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4757     {
4758       if (IGNORE_SECTION (s)
4759           || s->size == 0)
4760         continue;
4761
4762       sections[count].sec = s;
4763       sections[count].warned = FALSE;
4764       count++;
4765     }
4766
4767   if (count <= 1)
4768     {
4769       free (sections);
4770       return;
4771     }
4772
4773   qsort (sections, count, sizeof (*sections), sort_sections_by_lma);
4774
4775   /* First check section LMAs.  There should be no overlap of LMAs on
4776      loadable sections, even with overlays.  */
4777   for (p = NULL, i = 0; i < count; i++)
4778     {
4779       s = sections[i].sec;
4780       if ((s->flags & SEC_LOAD) != 0)
4781         {
4782           s_start = s->lma;
4783           s_end = s_start + TO_ADDR (s->size) - 1;
4784
4785           /* Look for an overlap.  We have sorted sections by lma, so
4786              we know that s_start >= p_start.  Besides the obvious
4787              case of overlap when the current section starts before
4788              the previous one ends, we also must have overlap if the
4789              previous section wraps around the address space.  */
4790           if (p != NULL
4791               && (s_start <= p_end
4792                   || p_end < p_start))
4793             {
4794               einfo (_("%X%P: section %s LMA [%V,%V]"
4795                        " overlaps section %s LMA [%V,%V]\n"),
4796                      s->name, s_start, s_end, p->name, p_start, p_end);
4797               sections[i].warned = TRUE;
4798             }
4799           p = s;
4800           p_start = s_start;
4801           p_end = s_end;
4802         }
4803     }
4804
4805   /* If any non-zero size allocated section (excluding tbss) starts at
4806      exactly the same VMA as another such section, then we have
4807      overlays.  Overlays generated by the OVERLAY keyword will have
4808      this property.  It is possible to intentionally generate overlays
4809      that fail this test, but it would be unusual.  */
4810   qsort (sections, count, sizeof (*sections), sort_sections_by_vma);
4811   overlays = FALSE;
4812   p_start = sections[0].sec->vma;
4813   for (i = 1; i < count; i++)
4814     {
4815       s_start = sections[i].sec->vma;
4816       if (p_start == s_start)
4817         {
4818           overlays = TRUE;
4819           break;
4820         }
4821       p_start = s_start;
4822     }
4823
4824   /* Now check section VMAs if no overlays were detected.  */
4825   if (!overlays)
4826     {
4827       for (p = NULL, i = 0; i < count; i++)
4828         {
4829           s = sections[i].sec;
4830           s_start = s->vma;
4831           s_end = s_start + TO_ADDR (s->size) - 1;
4832
4833           if (p != NULL
4834               && !sections[i].warned
4835               && (s_start <= p_end
4836                   || p_end < p_start))
4837             einfo (_("%X%P: section %s VMA [%V,%V]"
4838                      " overlaps section %s VMA [%V,%V]\n"),
4839                    s->name, s_start, s_end, p->name, p_start, p_end);
4840           p = s;
4841           p_start = s_start;
4842           p_end = s_end;
4843         }
4844     }
4845
4846   free (sections);
4847
4848   /* If any memory region has overflowed, report by how much.
4849      We do not issue this diagnostic for regions that had sections
4850      explicitly placed outside their bounds; os_region_check's
4851      diagnostics are adequate for that case.
4852
4853      FIXME: It is conceivable that m->current - (m->origin + m->length)
4854      might overflow a 32-bit integer.  There is, alas, no way to print
4855      a bfd_vma quantity in decimal.  */
4856   for (m = lang_memory_region_list; m; m = m->next)
4857     if (m->had_full_message)
4858       einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4859              m->name_list.name, (long)(m->current - (m->origin + m->length)));
4860 }
4861
4862 /* Make sure the new address is within the region.  We explicitly permit the
4863    current address to be at the exact end of the region when the address is
4864    non-zero, in case the region is at the end of addressable memory and the
4865    calculation wraps around.  */
4866
4867 static void
4868 os_region_check (lang_output_section_statement_type *os,
4869                  lang_memory_region_type *region,
4870                  etree_type *tree,
4871                  bfd_vma rbase)
4872 {
4873   if ((region->current < region->origin
4874        || (region->current - region->origin > region->length))
4875       && ((region->current != region->origin + region->length)
4876           || rbase == 0))
4877     {
4878       if (tree != NULL)
4879         {
4880           einfo (_("%X%P: address 0x%v of %B section `%s'"
4881                    " is not within region `%s'\n"),
4882                  region->current,
4883                  os->bfd_section->owner,
4884                  os->bfd_section->name,
4885                  region->name_list.name);
4886         }
4887       else if (!region->had_full_message)
4888         {
4889           region->had_full_message = TRUE;
4890
4891           einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4892                  os->bfd_section->owner,
4893                  os->bfd_section->name,
4894                  region->name_list.name);
4895         }
4896     }
4897 }
4898
4899 /* Set the sizes for all the output sections.  */
4900
4901 static bfd_vma
4902 lang_size_sections_1
4903   (lang_statement_union_type **prev,
4904    lang_output_section_statement_type *output_section_statement,
4905    fill_type *fill,
4906    bfd_vma dot,
4907    bfd_boolean *relax,
4908    bfd_boolean check_regions)
4909 {
4910   lang_statement_union_type *s;
4911
4912   /* Size up the sections from their constituent parts.  */
4913   for (s = *prev; s != NULL; s = s->header.next)
4914     {
4915       switch (s->header.type)
4916         {
4917         case lang_output_section_statement_enum:
4918           {
4919             bfd_vma newdot, after, dotdelta;
4920             lang_output_section_statement_type *os;
4921             lang_memory_region_type *r;
4922             int section_alignment = 0;
4923
4924             os = &s->output_section_statement;
4925             if (os->constraint == -1)
4926               break;
4927
4928             /* FIXME: We shouldn't need to zero section vmas for ld -r
4929                here, in lang_insert_orphan, or in the default linker scripts.
4930                This is covering for coff backend linker bugs.  See PR6945.  */
4931             if (os->addr_tree == NULL
4932                 && bfd_link_relocatable (&link_info)
4933                 && (bfd_get_flavour (link_info.output_bfd)
4934                     == bfd_target_coff_flavour))
4935               os->addr_tree = exp_intop (0);
4936             if (os->addr_tree != NULL)
4937               {
4938                 os->processed_vma = FALSE;
4939                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4940
4941                 if (expld.result.valid_p)
4942                   {
4943                     dot = expld.result.value;
4944                     if (expld.result.section != NULL)
4945                       dot += expld.result.section->vma;
4946                   }
4947                 else if (expld.phase != lang_mark_phase_enum)
4948                   einfo (_("%F%S: non constant or forward reference"
4949                            " address expression for section %s\n"),
4950                          os->addr_tree, os->name);
4951               }
4952
4953             if (os->bfd_section == NULL)
4954               /* This section was removed or never actually created.  */
4955               break;
4956
4957             /* If this is a COFF shared library section, use the size and
4958                address from the input section.  FIXME: This is COFF
4959                specific; it would be cleaner if there were some other way
4960                to do this, but nothing simple comes to mind.  */
4961             if (((bfd_get_flavour (link_info.output_bfd)
4962                   == bfd_target_ecoff_flavour)
4963                  || (bfd_get_flavour (link_info.output_bfd)
4964                      == bfd_target_coff_flavour))
4965                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4966               {
4967                 asection *input;
4968
4969                 if (os->children.head == NULL
4970                     || os->children.head->header.next != NULL
4971                     || (os->children.head->header.type
4972                         != lang_input_section_enum))
4973                   einfo (_("%P%X: Internal error on COFF shared library"
4974                            " section %s\n"), os->name);
4975
4976                 input = os->children.head->input_section.section;
4977                 bfd_set_section_vma (os->bfd_section->owner,
4978                                      os->bfd_section,
4979                                      bfd_section_vma (input->owner, input));
4980                 os->bfd_section->size = input->size;
4981                 break;
4982               }
4983
4984             newdot = dot;
4985             dotdelta = 0;
4986             if (bfd_is_abs_section (os->bfd_section))
4987               {
4988                 /* No matter what happens, an abs section starts at zero.  */
4989                 ASSERT (os->bfd_section->vma == 0);
4990               }
4991             else
4992               {
4993                 if (os->addr_tree == NULL)
4994                   {
4995                     /* No address specified for this section, get one
4996                        from the region specification.  */
4997                     if (os->region == NULL
4998                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4999                             && os->region->name_list.name[0] == '*'
5000                             && strcmp (os->region->name_list.name,
5001                                        DEFAULT_MEMORY_REGION) == 0))
5002                       {
5003                         os->region = lang_memory_default (os->bfd_section);
5004                       }
5005
5006                     /* If a loadable section is using the default memory
5007                        region, and some non default memory regions were
5008                        defined, issue an error message.  */
5009                     if (!os->ignored
5010                         && !IGNORE_SECTION (os->bfd_section)
5011                         && !bfd_link_relocatable (&link_info)
5012                         && check_regions
5013                         && strcmp (os->region->name_list.name,
5014                                    DEFAULT_MEMORY_REGION) == 0
5015                         && lang_memory_region_list != NULL
5016                         && (strcmp (lang_memory_region_list->name_list.name,
5017                                     DEFAULT_MEMORY_REGION) != 0
5018                             || lang_memory_region_list->next != NULL)
5019                         && expld.phase != lang_mark_phase_enum)
5020                       {
5021                         /* By default this is an error rather than just a
5022                            warning because if we allocate the section to the
5023                            default memory region we can end up creating an
5024                            excessively large binary, or even seg faulting when
5025                            attempting to perform a negative seek.  See
5026                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
5027                            for an example of this.  This behaviour can be
5028                            overridden by the using the --no-check-sections
5029                            switch.  */
5030                         if (command_line.check_section_addresses)
5031                           einfo (_("%P%F: error: no memory region specified"
5032                                    " for loadable section `%s'\n"),
5033                                  bfd_get_section_name (link_info.output_bfd,
5034                                                        os->bfd_section));
5035                         else
5036                           einfo (_("%P: warning: no memory region specified"
5037                                    " for loadable section `%s'\n"),
5038                                  bfd_get_section_name (link_info.output_bfd,
5039                                                        os->bfd_section));
5040                       }
5041
5042                     newdot = os->region->current;
5043                     section_alignment = os->bfd_section->alignment_power;
5044                   }
5045                 else
5046                   section_alignment = os->section_alignment;
5047
5048                 /* Align to what the section needs.  */
5049                 if (section_alignment > 0)
5050                   {
5051                     bfd_vma savedot = newdot;
5052                     newdot = align_power (newdot, section_alignment);
5053
5054                     dotdelta = newdot - savedot;
5055                     if (dotdelta != 0
5056                         && (config.warn_section_align
5057                             || os->addr_tree != NULL)
5058                         && expld.phase != lang_mark_phase_enum)
5059                       einfo (_("%P: warning: changing start of section"
5060                                " %s by %lu bytes\n"),
5061                              os->name, (unsigned long) dotdelta);
5062                   }
5063
5064                 bfd_set_section_vma (0, os->bfd_section, newdot);
5065
5066                 os->bfd_section->output_offset = 0;
5067               }
5068
5069             lang_size_sections_1 (&os->children.head, os,
5070                                   os->fill, newdot, relax, check_regions);
5071
5072             os->processed_vma = TRUE;
5073
5074             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5075               /* Except for some special linker created sections,
5076                  no output section should change from zero size
5077                  after strip_excluded_output_sections.  A non-zero
5078                  size on an ignored section indicates that some
5079                  input section was not sized early enough.  */
5080               ASSERT (os->bfd_section->size == 0);
5081             else
5082               {
5083                 dot = os->bfd_section->vma;
5084
5085                 /* Put the section within the requested block size, or
5086                    align at the block boundary.  */
5087                 after = ((dot
5088                           + TO_ADDR (os->bfd_section->size)
5089                           + os->block_value - 1)
5090                          & - (bfd_vma) os->block_value);
5091
5092                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
5093               }
5094
5095             /* Set section lma.  */
5096             r = os->region;
5097             if (r == NULL)
5098               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
5099
5100             if (os->load_base)
5101               {
5102                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
5103                 os->bfd_section->lma = lma;
5104               }
5105             else if (os->lma_region != NULL)
5106               {
5107                 bfd_vma lma = os->lma_region->current;
5108
5109                 if (os->align_lma_with_input)
5110                   lma += dotdelta;
5111                 else
5112                   {
5113                     /* When LMA_REGION is the same as REGION, align the LMA
5114                        as we did for the VMA, possibly including alignment
5115                        from the bfd section.  If a different region, then
5116                        only align according to the value in the output
5117                        statement.  */
5118                     if (os->lma_region != os->region)
5119                       section_alignment = os->section_alignment;
5120                     if (section_alignment > 0)
5121                       lma = align_power (lma, section_alignment);
5122                   }
5123                 os->bfd_section->lma = lma;
5124               }
5125             else if (r->last_os != NULL
5126                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
5127               {
5128                 bfd_vma lma;
5129                 asection *last;
5130
5131                 last = r->last_os->output_section_statement.bfd_section;
5132
5133                 /* A backwards move of dot should be accompanied by
5134                    an explicit assignment to the section LMA (ie.
5135                    os->load_base set) because backwards moves can
5136                    create overlapping LMAs.  */
5137                 if (dot < last->vma
5138                     && os->bfd_section->size != 0
5139                     && dot + TO_ADDR (os->bfd_section->size) <= last->vma)
5140                   {
5141                     /* If dot moved backwards then leave lma equal to
5142                        vma.  This is the old default lma, which might
5143                        just happen to work when the backwards move is
5144                        sufficiently large.  Nag if this changes anything,
5145                        so people can fix their linker scripts.  */
5146
5147                     if (last->vma != last->lma)
5148                       einfo (_("%P: warning: dot moved backwards "
5149                                "before `%s'\n"), os->name);
5150                   }
5151                 else
5152                   {
5153                     /* If this is an overlay, set the current lma to that
5154                        at the end of the previous section.  */
5155                     if (os->sectype == overlay_section)
5156                       lma = last->lma + TO_ADDR (last->size);
5157
5158                     /* Otherwise, keep the same lma to vma relationship
5159                        as the previous section.  */
5160                     else
5161                       lma = dot + last->lma - last->vma;
5162
5163                     if (section_alignment > 0)
5164                       lma = align_power (lma, section_alignment);
5165                     os->bfd_section->lma = lma;
5166                   }
5167               }
5168             os->processed_lma = TRUE;
5169
5170             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5171               break;
5172
5173             /* Keep track of normal sections using the default
5174                lma region.  We use this to set the lma for
5175                following sections.  Overlays or other linker
5176                script assignment to lma might mean that the
5177                default lma == vma is incorrect.
5178                To avoid warnings about dot moving backwards when using
5179                -Ttext, don't start tracking sections until we find one
5180                of non-zero size or with lma set differently to vma.  */
5181             if (!IGNORE_SECTION (os->bfd_section)
5182                 && (os->bfd_section->size != 0
5183                     || (r->last_os == NULL
5184                         && os->bfd_section->vma != os->bfd_section->lma)
5185                     || (r->last_os != NULL
5186                         && dot >= (r->last_os->output_section_statement
5187                                    .bfd_section->vma)))
5188                 && os->lma_region == NULL
5189                 && !bfd_link_relocatable (&link_info))
5190               r->last_os = s;
5191
5192             /* .tbss sections effectively have zero size.  */
5193             if (!IS_TBSS (os->bfd_section)
5194                 || bfd_link_relocatable (&link_info))
5195               dotdelta = TO_ADDR (os->bfd_section->size);
5196             else
5197               dotdelta = 0;
5198             dot += dotdelta;
5199
5200             if (os->update_dot_tree != 0)
5201               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5202
5203             /* Update dot in the region ?
5204                We only do this if the section is going to be allocated,
5205                since unallocated sections do not contribute to the region's
5206                overall size in memory.  */
5207             if (os->region != NULL
5208                 && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5209               {
5210                 os->region->current = dot;
5211
5212                 if (check_regions)
5213                   /* Make sure the new address is within the region.  */
5214                   os_region_check (os, os->region, os->addr_tree,
5215                                    os->bfd_section->vma);
5216
5217                 if (os->lma_region != NULL && os->lma_region != os->region
5218                     && ((os->bfd_section->flags & SEC_LOAD)
5219                         || os->align_lma_with_input))
5220                   {
5221                     os->lma_region->current = os->bfd_section->lma + dotdelta;
5222
5223                     if (check_regions)
5224                       os_region_check (os, os->lma_region, NULL,
5225                                        os->bfd_section->lma);
5226                   }
5227               }
5228           }
5229           break;
5230
5231         case lang_constructors_statement_enum:
5232           dot = lang_size_sections_1 (&constructor_list.head,
5233                                       output_section_statement,
5234                                       fill, dot, relax, check_regions);
5235           break;
5236
5237         case lang_data_statement_enum:
5238           {
5239             unsigned int size = 0;
5240
5241             s->data_statement.output_offset =
5242               dot - output_section_statement->bfd_section->vma;
5243             s->data_statement.output_section =
5244               output_section_statement->bfd_section;
5245
5246             /* We might refer to provided symbols in the expression, and
5247                need to mark them as needed.  */
5248             exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5249
5250             switch (s->data_statement.type)
5251               {
5252               default:
5253                 abort ();
5254               case QUAD:
5255               case SQUAD:
5256                 size = QUAD_SIZE;
5257                 break;
5258               case LONG:
5259                 size = LONG_SIZE;
5260                 break;
5261               case SHORT:
5262                 size = SHORT_SIZE;
5263                 break;
5264               case BYTE:
5265                 size = BYTE_SIZE;
5266                 break;
5267               }
5268             if (size < TO_SIZE ((unsigned) 1))
5269               size = TO_SIZE ((unsigned) 1);
5270             dot += TO_ADDR (size);
5271             output_section_statement->bfd_section->size
5272               = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5273
5274           }
5275           break;
5276
5277         case lang_reloc_statement_enum:
5278           {
5279             int size;
5280
5281             s->reloc_statement.output_offset =
5282               dot - output_section_statement->bfd_section->vma;
5283             s->reloc_statement.output_section =
5284               output_section_statement->bfd_section;
5285             size = bfd_get_reloc_size (s->reloc_statement.howto);
5286             dot += TO_ADDR (size);
5287             output_section_statement->bfd_section->size
5288               = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5289           }
5290           break;
5291
5292         case lang_wild_statement_enum:
5293           dot = lang_size_sections_1 (&s->wild_statement.children.head,
5294                                       output_section_statement,
5295                                       fill, dot, relax, check_regions);
5296           break;
5297
5298         case lang_object_symbols_statement_enum:
5299           link_info.create_object_symbols_section =
5300             output_section_statement->bfd_section;
5301           break;
5302
5303         case lang_output_statement_enum:
5304         case lang_target_statement_enum:
5305           break;
5306
5307         case lang_input_section_enum:
5308           {
5309             asection *i;
5310
5311             i = s->input_section.section;
5312             if (relax)
5313               {
5314                 bfd_boolean again;
5315
5316                 if (!bfd_relax_section (i->owner, i, &link_info, &again))
5317                   einfo (_("%P%F: can't relax section: %E\n"));
5318                 if (again)
5319                   *relax = TRUE;
5320               }
5321             dot = size_input_section (prev, output_section_statement,
5322                                       fill, dot);
5323           }
5324           break;
5325
5326         case lang_input_statement_enum:
5327           break;
5328
5329         case lang_fill_statement_enum:
5330           s->fill_statement.output_section =
5331             output_section_statement->bfd_section;
5332
5333           fill = s->fill_statement.fill;
5334           break;
5335
5336         case lang_assignment_statement_enum:
5337           {
5338             bfd_vma newdot = dot;
5339             etree_type *tree = s->assignment_statement.exp;
5340
5341             expld.dataseg.relro = exp_dataseg_relro_none;
5342
5343             exp_fold_tree (tree,
5344                            output_section_statement->bfd_section,
5345                            &newdot);
5346
5347             if (expld.dataseg.relro == exp_dataseg_relro_start)
5348               {
5349                 if (!expld.dataseg.relro_start_stat)
5350                   expld.dataseg.relro_start_stat = s;
5351                 else
5352                   {
5353                     ASSERT (expld.dataseg.relro_start_stat == s);
5354                   }
5355               }
5356             else if (expld.dataseg.relro == exp_dataseg_relro_end)
5357               {
5358                 if (!expld.dataseg.relro_end_stat)
5359                   expld.dataseg.relro_end_stat = s;
5360                 else
5361                   {
5362                     ASSERT (expld.dataseg.relro_end_stat == s);
5363                   }
5364               }
5365             expld.dataseg.relro = exp_dataseg_relro_none;
5366
5367             /* This symbol may be relative to this section.  */
5368             if ((tree->type.node_class == etree_provided
5369                  || tree->type.node_class == etree_assign)
5370                 && (tree->assign.dst [0] != '.'
5371                     || tree->assign.dst [1] != '\0'))
5372               output_section_statement->update_dot = 1;
5373
5374             if (!output_section_statement->ignored)
5375               {
5376                 if (output_section_statement == abs_output_section)
5377                   {
5378                     /* If we don't have an output section, then just adjust
5379                        the default memory address.  */
5380                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5381                                                FALSE)->current = newdot;
5382                   }
5383                 else if (newdot != dot)
5384                   {
5385                     /* Insert a pad after this statement.  We can't
5386                        put the pad before when relaxing, in case the
5387                        assignment references dot.  */
5388                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5389                                 output_section_statement->bfd_section, dot);
5390
5391                     /* Don't neuter the pad below when relaxing.  */
5392                     s = s->header.next;
5393
5394                     /* If dot is advanced, this implies that the section
5395                        should have space allocated to it, unless the
5396                        user has explicitly stated that the section
5397                        should not be allocated.  */
5398                     if (output_section_statement->sectype != noalloc_section
5399                         && (output_section_statement->sectype != noload_section
5400                             || (bfd_get_flavour (link_info.output_bfd)
5401                                 == bfd_target_elf_flavour)))
5402                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
5403                   }
5404                 dot = newdot;
5405               }
5406           }
5407           break;
5408
5409         case lang_padding_statement_enum:
5410           /* If this is the first time lang_size_sections is called,
5411              we won't have any padding statements.  If this is the
5412              second or later passes when relaxing, we should allow
5413              padding to shrink.  If padding is needed on this pass, it
5414              will be added back in.  */
5415           s->padding_statement.size = 0;
5416
5417           /* Make sure output_offset is valid.  If relaxation shrinks
5418              the section and this pad isn't needed, it's possible to
5419              have output_offset larger than the final size of the
5420              section.  bfd_set_section_contents will complain even for
5421              a pad size of zero.  */
5422           s->padding_statement.output_offset
5423             = dot - output_section_statement->bfd_section->vma;
5424           break;
5425
5426         case lang_group_statement_enum:
5427           dot = lang_size_sections_1 (&s->group_statement.children.head,
5428                                       output_section_statement,
5429                                       fill, dot, relax, check_regions);
5430           break;
5431
5432         case lang_insert_statement_enum:
5433           break;
5434
5435           /* We can only get here when relaxing is turned on.  */
5436         case lang_address_statement_enum:
5437           break;
5438
5439         default:
5440           FAIL ();
5441           break;
5442         }
5443       prev = &s->header.next;
5444     }
5445   return dot;
5446 }
5447
5448 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5449    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5450    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5451    segments.  We are allowed an opportunity to override this decision.  */
5452
5453 bfd_boolean
5454 ldlang_override_segment_assignment (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5455                                     bfd *abfd ATTRIBUTE_UNUSED,
5456                                     asection *current_section,
5457                                     asection *previous_section,
5458                                     bfd_boolean new_segment)
5459 {
5460   lang_output_section_statement_type *cur;
5461   lang_output_section_statement_type *prev;
5462
5463   /* The checks below are only necessary when the BFD library has decided
5464      that the two sections ought to be placed into the same segment.  */
5465   if (new_segment)
5466     return TRUE;
5467
5468   /* Paranoia checks.  */
5469   if (current_section == NULL || previous_section == NULL)
5470     return new_segment;
5471
5472   /* If this flag is set, the target never wants code and non-code
5473      sections comingled in the same segment.  */
5474   if (config.separate_code
5475       && ((current_section->flags ^ previous_section->flags) & SEC_CODE))
5476     return TRUE;
5477
5478   /* Find the memory regions associated with the two sections.
5479      We call lang_output_section_find() here rather than scanning the list
5480      of output sections looking for a matching section pointer because if
5481      we have a large number of sections then a hash lookup is faster.  */
5482   cur  = lang_output_section_find (current_section->name);
5483   prev = lang_output_section_find (previous_section->name);
5484
5485   /* More paranoia.  */
5486   if (cur == NULL || prev == NULL)
5487     return new_segment;
5488
5489   /* If the regions are different then force the sections to live in
5490      different segments.  See the email thread starting at the following
5491      URL for the reasons why this is necessary:
5492      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5493   return cur->region != prev->region;
5494 }
5495
5496 void
5497 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5498 {
5499   lang_statement_iteration++;
5500   lang_size_sections_1 (&statement_list.head, abs_output_section,
5501                         0, 0, relax, check_regions);
5502 }
5503
5504 void
5505 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5506 {
5507   expld.phase = lang_allocating_phase_enum;
5508   expld.dataseg.phase = exp_dataseg_none;
5509
5510   one_lang_size_sections_pass (relax, check_regions);
5511   if (expld.dataseg.phase == exp_dataseg_end_seen
5512       && link_info.relro && expld.dataseg.relro_end)
5513     {
5514       bfd_vma initial_base, relro_end, desired_end;
5515       asection *sec;
5516
5517       /* Compute the expected PT_GNU_RELRO segment end.  */
5518       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5519                    & ~(expld.dataseg.pagesize - 1));
5520
5521       /* Adjust by the offset arg of DATA_SEGMENT_RELRO_END.  */
5522       desired_end = relro_end - expld.dataseg.relro_offset;
5523
5524       /* For sections in the relro segment..  */
5525       for (sec = link_info.output_bfd->section_last; sec; sec = sec->prev)
5526         if ((sec->flags & SEC_ALLOC) != 0
5527             && sec->vma >= expld.dataseg.base
5528             && sec->vma < expld.dataseg.relro_end - expld.dataseg.relro_offset)
5529           {
5530             /* Where do we want to put this section so that it ends as
5531                desired?  */
5532             bfd_vma start, end, bump;
5533
5534             end = start = sec->vma;
5535             if (!IS_TBSS (sec))
5536               end += TO_ADDR (sec->size);
5537             bump = desired_end - end;
5538             /* We'd like to increase START by BUMP, but we must heed
5539                alignment so the increase might be less than optimum.  */
5540             start += bump;
5541             start &= ~(((bfd_vma) 1 << sec->alignment_power) - 1);
5542             /* This is now the desired end for the previous section.  */
5543             desired_end = start;
5544           }
5545
5546       expld.dataseg.phase = exp_dataseg_relro_adjust;
5547       ASSERT (desired_end >= expld.dataseg.base);
5548       initial_base = expld.dataseg.base;
5549       expld.dataseg.base = desired_end;
5550       lang_reset_memory_regions ();
5551       one_lang_size_sections_pass (relax, check_regions);
5552
5553       if (expld.dataseg.relro_end > relro_end)
5554         {
5555           /* Assignments to dot, or to output section address in a
5556              user script have increased padding over the original.
5557              Revert.  */
5558           expld.dataseg.base = initial_base;
5559           lang_reset_memory_regions ();
5560           one_lang_size_sections_pass (relax, check_regions);
5561         }
5562
5563       link_info.relro_start = expld.dataseg.base;
5564       link_info.relro_end = expld.dataseg.relro_end;
5565     }
5566   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5567     {
5568       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5569          a page could be saved in the data segment.  */
5570       bfd_vma first, last;
5571
5572       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5573       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5574       if (first && last
5575           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5576               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5577           && first + last <= expld.dataseg.pagesize)
5578         {
5579           expld.dataseg.phase = exp_dataseg_adjust;
5580           lang_reset_memory_regions ();
5581           one_lang_size_sections_pass (relax, check_regions);
5582         }
5583       else
5584         expld.dataseg.phase = exp_dataseg_done;
5585     }
5586   else
5587     expld.dataseg.phase = exp_dataseg_done;
5588 }
5589
5590 static lang_output_section_statement_type *current_section;
5591 static lang_assignment_statement_type *current_assign;
5592 static bfd_boolean prefer_next_section;
5593
5594 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5595
5596 static bfd_vma
5597 lang_do_assignments_1 (lang_statement_union_type *s,
5598                        lang_output_section_statement_type *current_os,
5599                        fill_type *fill,
5600                        bfd_vma dot,
5601                        bfd_boolean *found_end)
5602 {
5603   for (; s != NULL; s = s->header.next)
5604     {
5605       switch (s->header.type)
5606         {
5607         case lang_constructors_statement_enum:
5608           dot = lang_do_assignments_1 (constructor_list.head,
5609                                        current_os, fill, dot, found_end);
5610           break;
5611
5612         case lang_output_section_statement_enum:
5613           {
5614             lang_output_section_statement_type *os;
5615
5616             os = &(s->output_section_statement);
5617             os->after_end = *found_end;
5618             if (os->bfd_section != NULL && !os->ignored)
5619               {
5620                 if ((os->bfd_section->flags & SEC_ALLOC) != 0)
5621                   {
5622                     current_section = os;
5623                     prefer_next_section = FALSE;
5624                   }
5625                 dot = os->bfd_section->vma;
5626
5627                 lang_do_assignments_1 (os->children.head,
5628                                        os, os->fill, dot, found_end);
5629
5630                 /* .tbss sections effectively have zero size.  */
5631                 if (!IS_TBSS (os->bfd_section)
5632                     || bfd_link_relocatable (&link_info))
5633                   dot += TO_ADDR (os->bfd_section->size);
5634
5635                 if (os->update_dot_tree != NULL)
5636                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr,
5637                                  &dot);
5638               }
5639           }
5640           break;
5641
5642         case lang_wild_statement_enum:
5643
5644           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5645                                        current_os, fill, dot, found_end);
5646           break;
5647
5648         case lang_object_symbols_statement_enum:
5649         case lang_output_statement_enum:
5650         case lang_target_statement_enum:
5651           break;
5652
5653         case lang_data_statement_enum:
5654           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5655           if (expld.result.valid_p)
5656             {
5657               s->data_statement.value = expld.result.value;
5658               if (expld.result.section != NULL)
5659                 s->data_statement.value += expld.result.section->vma;
5660             }
5661           else
5662             einfo (_("%F%P: invalid data statement\n"));
5663           {
5664             unsigned int size;
5665             switch (s->data_statement.type)
5666               {
5667               default:
5668                 abort ();
5669               case QUAD:
5670               case SQUAD:
5671                 size = QUAD_SIZE;
5672                 break;
5673               case LONG:
5674                 size = LONG_SIZE;
5675                 break;
5676               case SHORT:
5677                 size = SHORT_SIZE;
5678                 break;
5679               case BYTE:
5680                 size = BYTE_SIZE;
5681                 break;
5682               }
5683             if (size < TO_SIZE ((unsigned) 1))
5684               size = TO_SIZE ((unsigned) 1);
5685             dot += TO_ADDR (size);
5686           }
5687           break;
5688
5689         case lang_reloc_statement_enum:
5690           exp_fold_tree (s->reloc_statement.addend_exp,
5691                          bfd_abs_section_ptr, &dot);
5692           if (expld.result.valid_p)
5693             s->reloc_statement.addend_value = expld.result.value;
5694           else
5695             einfo (_("%F%P: invalid reloc statement\n"));
5696           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5697           break;
5698
5699         case lang_input_section_enum:
5700           {
5701             asection *in = s->input_section.section;
5702
5703             if ((in->flags & SEC_EXCLUDE) == 0)
5704               dot += TO_ADDR (in->size);
5705           }
5706           break;
5707
5708         case lang_input_statement_enum:
5709           break;
5710
5711         case lang_fill_statement_enum:
5712           fill = s->fill_statement.fill;
5713           break;
5714
5715         case lang_assignment_statement_enum:
5716           current_assign = &s->assignment_statement;
5717           if (current_assign->exp->type.node_class != etree_assert)
5718             {
5719               const char *p = current_assign->exp->assign.dst;
5720
5721               if (current_os == abs_output_section && p[0] == '.' && p[1] == 0)
5722                 prefer_next_section = TRUE;
5723
5724               while (*p == '_')
5725                 ++p;
5726               if (strcmp (p, "end") == 0)
5727                 *found_end = TRUE;
5728             }
5729           exp_fold_tree (s->assignment_statement.exp,
5730                          current_os->bfd_section,
5731                          &dot);
5732           break;
5733
5734         case lang_padding_statement_enum:
5735           dot += TO_ADDR (s->padding_statement.size);
5736           break;
5737
5738         case lang_group_statement_enum:
5739           dot = lang_do_assignments_1 (s->group_statement.children.head,
5740                                        current_os, fill, dot, found_end);
5741           break;
5742
5743         case lang_insert_statement_enum:
5744           break;
5745
5746         case lang_address_statement_enum:
5747           break;
5748
5749         default:
5750           FAIL ();
5751           break;
5752         }
5753     }
5754   return dot;
5755 }
5756
5757 void
5758 lang_do_assignments (lang_phase_type phase)
5759 {
5760   bfd_boolean found_end = FALSE;
5761
5762   current_section = NULL;
5763   prefer_next_section = FALSE;
5764   expld.phase = phase;
5765   lang_statement_iteration++;
5766   lang_do_assignments_1 (statement_list.head,
5767                          abs_output_section, NULL, 0, &found_end);
5768 }
5769
5770 /* For an assignment statement outside of an output section statement,
5771    choose the best of neighbouring output sections to use for values
5772    of "dot".  */
5773
5774 asection *
5775 section_for_dot (void)
5776 {
5777   asection *s;
5778
5779   /* Assignments belong to the previous output section, unless there
5780      has been an assignment to "dot", in which case following
5781      assignments belong to the next output section.  (The assumption
5782      is that an assignment to "dot" is setting up the address for the
5783      next output section.)  Except that past the assignment to "_end"
5784      we always associate with the previous section.  This exception is
5785      for targets like SH that define an alloc .stack or other
5786      weirdness after non-alloc sections.  */
5787   if (current_section == NULL || prefer_next_section)
5788     {
5789       lang_statement_union_type *stmt;
5790       lang_output_section_statement_type *os;
5791
5792       for (stmt = (lang_statement_union_type *) current_assign;
5793            stmt != NULL;
5794            stmt = stmt->header.next)
5795         if (stmt->header.type == lang_output_section_statement_enum)
5796           break;
5797
5798       os = &stmt->output_section_statement;
5799       while (os != NULL
5800              && !os->after_end
5801              && (os->bfd_section == NULL
5802                  || (os->bfd_section->flags & SEC_EXCLUDE) != 0
5803                  || bfd_section_removed_from_list (link_info.output_bfd,
5804                                                    os->bfd_section)))
5805         os = os->next;
5806
5807       if (current_section == NULL || os == NULL || !os->after_end)
5808         {
5809           if (os != NULL)
5810             s = os->bfd_section;
5811           else
5812             s = link_info.output_bfd->section_last;
5813           while (s != NULL
5814                  && ((s->flags & SEC_ALLOC) == 0
5815                      || (s->flags & SEC_THREAD_LOCAL) != 0))
5816             s = s->prev;
5817           if (s != NULL)
5818             return s;
5819
5820           return bfd_abs_section_ptr;
5821         }
5822     }
5823
5824   s = current_section->bfd_section;
5825
5826   /* The section may have been stripped.  */
5827   while (s != NULL
5828          && ((s->flags & SEC_EXCLUDE) != 0
5829              || (s->flags & SEC_ALLOC) == 0
5830              || (s->flags & SEC_THREAD_LOCAL) != 0
5831              || bfd_section_removed_from_list (link_info.output_bfd, s)))
5832     s = s->prev;
5833   if (s == NULL)
5834     s = link_info.output_bfd->sections;
5835   while (s != NULL
5836          && ((s->flags & SEC_ALLOC) == 0
5837              || (s->flags & SEC_THREAD_LOCAL) != 0))
5838     s = s->next;
5839   if (s != NULL)
5840     return s;
5841
5842   return bfd_abs_section_ptr;
5843 }
5844
5845 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5846    operator .startof. (section_name), it produces an undefined symbol
5847    .startof.section_name.  Similarly, when it sees
5848    .sizeof. (section_name), it produces an undefined symbol
5849    .sizeof.section_name.  For all the output sections, we look for
5850    such symbols, and set them to the correct value.  */
5851
5852 static void
5853 lang_set_startof (void)
5854 {
5855   asection *s;
5856
5857   if (bfd_link_relocatable (&link_info))
5858     return;
5859
5860   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5861     {
5862       const char *secname;
5863       char *buf;
5864       struct bfd_link_hash_entry *h;
5865
5866       secname = bfd_get_section_name (link_info.output_bfd, s);
5867       buf = (char *) xmalloc (10 + strlen (secname));
5868
5869       sprintf (buf, ".startof.%s", secname);
5870       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5871       if (h != NULL && h->type == bfd_link_hash_undefined)
5872         {
5873           h->type = bfd_link_hash_defined;
5874           h->u.def.value = 0;
5875           h->u.def.section = s;
5876         }
5877
5878       sprintf (buf, ".sizeof.%s", secname);
5879       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5880       if (h != NULL && h->type == bfd_link_hash_undefined)
5881         {
5882           h->type = bfd_link_hash_defined;
5883           h->u.def.value = TO_ADDR (s->size);
5884           h->u.def.section = bfd_abs_section_ptr;
5885         }
5886
5887       free (buf);
5888     }
5889 }
5890
5891 static void
5892 lang_end (void)
5893 {
5894   struct bfd_link_hash_entry *h;
5895   bfd_boolean warn;
5896
5897   if ((bfd_link_relocatable (&link_info) && !link_info.gc_sections)
5898       || bfd_link_dll (&link_info))
5899     warn = entry_from_cmdline;
5900   else
5901     warn = TRUE;
5902
5903   /* Force the user to specify a root when generating a relocatable with
5904      --gc-sections.  */
5905   if (link_info.gc_sections && bfd_link_relocatable (&link_info)
5906       && !(entry_from_cmdline || undef_from_cmdline))
5907     einfo (_("%P%F: gc-sections requires either an entry or "
5908              "an undefined symbol\n"));
5909
5910   if (entry_symbol.name == NULL)
5911     {
5912       /* No entry has been specified.  Look for the default entry, but
5913          don't warn if we don't find it.  */
5914       entry_symbol.name = entry_symbol_default;
5915       warn = FALSE;
5916     }
5917
5918   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5919                             FALSE, FALSE, TRUE);
5920   if (h != NULL
5921       && (h->type == bfd_link_hash_defined
5922           || h->type == bfd_link_hash_defweak)
5923       && h->u.def.section->output_section != NULL)
5924     {
5925       bfd_vma val;
5926
5927       val = (h->u.def.value
5928              + bfd_get_section_vma (link_info.output_bfd,
5929                                     h->u.def.section->output_section)
5930              + h->u.def.section->output_offset);
5931       if (!bfd_set_start_address (link_info.output_bfd, val))
5932         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5933     }
5934   else
5935     {
5936       bfd_vma val;
5937       const char *send;
5938
5939       /* We couldn't find the entry symbol.  Try parsing it as a
5940          number.  */
5941       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5942       if (*send == '\0')
5943         {
5944           if (!bfd_set_start_address (link_info.output_bfd, val))
5945             einfo (_("%P%F: can't set start address\n"));
5946         }
5947       else
5948         {
5949           asection *ts;
5950
5951           /* Can't find the entry symbol, and it's not a number.  Use
5952              the first address in the text section.  */
5953           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5954           if (ts != NULL)
5955             {
5956               if (warn)
5957                 einfo (_("%P: warning: cannot find entry symbol %s;"
5958                          " defaulting to %V\n"),
5959                        entry_symbol.name,
5960                        bfd_get_section_vma (link_info.output_bfd, ts));
5961               if (!(bfd_set_start_address
5962                     (link_info.output_bfd,
5963                      bfd_get_section_vma (link_info.output_bfd, ts))))
5964                 einfo (_("%P%F: can't set start address\n"));
5965             }
5966           else
5967             {
5968               if (warn)
5969                 einfo (_("%P: warning: cannot find entry symbol %s;"
5970                          " not setting start address\n"),
5971                        entry_symbol.name);
5972             }
5973         }
5974     }
5975 }
5976
5977 /* This is a small function used when we want to ignore errors from
5978    BFD.  */
5979
5980 static void
5981 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5982 {
5983   /* Don't do anything.  */
5984 }
5985
5986 /* Check that the architecture of all the input files is compatible
5987    with the output file.  Also call the backend to let it do any
5988    other checking that is needed.  */
5989
5990 static void
5991 lang_check (void)
5992 {
5993   lang_statement_union_type *file;
5994   bfd *input_bfd;
5995   const bfd_arch_info_type *compatible;
5996
5997   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5998     {
5999 #ifdef ENABLE_PLUGINS
6000       /* Don't check format of files claimed by plugin.  */
6001       if (file->input_statement.flags.claimed)
6002         continue;
6003 #endif /* ENABLE_PLUGINS */
6004       input_bfd = file->input_statement.the_bfd;
6005       compatible
6006         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
6007                                    command_line.accept_unknown_input_arch);
6008
6009       /* In general it is not possible to perform a relocatable
6010          link between differing object formats when the input
6011          file has relocations, because the relocations in the
6012          input format may not have equivalent representations in
6013          the output format (and besides BFD does not translate
6014          relocs for other link purposes than a final link).  */
6015       if ((bfd_link_relocatable (&link_info)
6016            || link_info.emitrelocations)
6017           && (compatible == NULL
6018               || (bfd_get_flavour (input_bfd)
6019                   != bfd_get_flavour (link_info.output_bfd)))
6020           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
6021         {
6022           einfo (_("%P%F: Relocatable linking with relocations from"
6023                    " format %s (%B) to format %s (%B) is not supported\n"),
6024                  bfd_get_target (input_bfd), input_bfd,
6025                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
6026           /* einfo with %F exits.  */
6027         }
6028
6029       if (compatible == NULL)
6030         {
6031           if (command_line.warn_mismatch)
6032             einfo (_("%P%X: %s architecture of input file `%B'"
6033                      " is incompatible with %s output\n"),
6034                    bfd_printable_name (input_bfd), input_bfd,
6035                    bfd_printable_name (link_info.output_bfd));
6036         }
6037       else if (bfd_count_sections (input_bfd))
6038         {
6039           /* If the input bfd has no contents, it shouldn't set the
6040              private data of the output bfd.  */
6041
6042           bfd_error_handler_type pfn = NULL;
6043
6044           /* If we aren't supposed to warn about mismatched input
6045              files, temporarily set the BFD error handler to a
6046              function which will do nothing.  We still want to call
6047              bfd_merge_private_bfd_data, since it may set up
6048              information which is needed in the output file.  */
6049           if (!command_line.warn_mismatch)
6050             pfn = bfd_set_error_handler (ignore_bfd_errors);
6051           if (!bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
6052             {
6053               if (command_line.warn_mismatch)
6054                 einfo (_("%P%X: failed to merge target specific data"
6055                          " of file %B\n"), input_bfd);
6056             }
6057           if (!command_line.warn_mismatch)
6058             bfd_set_error_handler (pfn);
6059         }
6060     }
6061 }
6062
6063 /* Look through all the global common symbols and attach them to the
6064    correct section.  The -sort-common command line switch may be used
6065    to roughly sort the entries by alignment.  */
6066
6067 static void
6068 lang_common (void)
6069 {
6070   if (command_line.inhibit_common_definition)
6071     return;
6072   if (bfd_link_relocatable (&link_info)
6073       && !command_line.force_common_definition)
6074     return;
6075
6076   if (!config.sort_common)
6077     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
6078   else
6079     {
6080       unsigned int power;
6081
6082       if (config.sort_common == sort_descending)
6083         {
6084           for (power = 4; power > 0; power--)
6085             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6086
6087           power = 0;
6088           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6089         }
6090       else
6091         {
6092           for (power = 0; power <= 4; power++)
6093             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6094
6095           power = (unsigned int) -1;
6096           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6097         }
6098     }
6099 }
6100
6101 /* Place one common symbol in the correct section.  */
6102
6103 static bfd_boolean
6104 lang_one_common (struct bfd_link_hash_entry *h, void *info)
6105 {
6106   unsigned int power_of_two;
6107   bfd_vma size;
6108   asection *section;
6109
6110   if (h->type != bfd_link_hash_common)
6111     return TRUE;
6112
6113   size = h->u.c.size;
6114   power_of_two = h->u.c.p->alignment_power;
6115
6116   if (config.sort_common == sort_descending
6117       && power_of_two < *(unsigned int *) info)
6118     return TRUE;
6119   else if (config.sort_common == sort_ascending
6120            && power_of_two > *(unsigned int *) info)
6121     return TRUE;
6122
6123   section = h->u.c.p->section;
6124   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
6125     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
6126            h->root.string);
6127
6128   if (config.map_file != NULL)
6129     {
6130       static bfd_boolean header_printed;
6131       int len;
6132       char *name;
6133       char buf[50];
6134
6135       if (!header_printed)
6136         {
6137           minfo (_("\nAllocating common symbols\n"));
6138           minfo (_("Common symbol       size              file\n\n"));
6139           header_printed = TRUE;
6140         }
6141
6142       name = bfd_demangle (link_info.output_bfd, h->root.string,
6143                            DMGL_ANSI | DMGL_PARAMS);
6144       if (name == NULL)
6145         {
6146           minfo ("%s", h->root.string);
6147           len = strlen (h->root.string);
6148         }
6149       else
6150         {
6151           minfo ("%s", name);
6152           len = strlen (name);
6153           free (name);
6154         }
6155
6156       if (len >= 19)
6157         {
6158           print_nl ();
6159           len = 0;
6160         }
6161       while (len < 20)
6162         {
6163           print_space ();
6164           ++len;
6165         }
6166
6167       minfo ("0x");
6168       if (size <= 0xffffffff)
6169         sprintf (buf, "%lx", (unsigned long) size);
6170       else
6171         sprintf_vma (buf, size);
6172       minfo ("%s", buf);
6173       len = strlen (buf);
6174
6175       while (len < 16)
6176         {
6177           print_space ();
6178           ++len;
6179         }
6180
6181       minfo ("%B\n", section->owner);
6182     }
6183
6184   return TRUE;
6185 }
6186
6187 /* Handle a single orphan section S, placing the orphan into an appropriate
6188    output section.  The effects of the --orphan-handling command line
6189    option are handled here.  */
6190
6191 static void
6192 ldlang_place_orphan (asection *s)
6193 {
6194   if (config.orphan_handling == orphan_handling_discard)
6195     {
6196       lang_output_section_statement_type *os;
6197       os = lang_output_section_statement_lookup (DISCARD_SECTION_NAME, 0,
6198                                                  TRUE);
6199       if (os->addr_tree == NULL
6200           && (bfd_link_relocatable (&link_info)
6201               || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6202         os->addr_tree = exp_intop (0);
6203       lang_add_section (&os->children, s, NULL, os);
6204     }
6205   else
6206     {
6207       lang_output_section_statement_type *os;
6208       const char *name = s->name;
6209       int constraint = 0;
6210
6211       if (config.orphan_handling == orphan_handling_error)
6212         einfo ("%X%P: error: unplaced orphan section `%A' from `%B'.\n",
6213                s, s->owner);
6214
6215       if (config.unique_orphan_sections || unique_section_p (s, NULL))
6216         constraint = SPECIAL;
6217
6218       os = ldemul_place_orphan (s, name, constraint);
6219       if (os == NULL)
6220         {
6221           os = lang_output_section_statement_lookup (name, constraint, TRUE);
6222           if (os->addr_tree == NULL
6223               && (bfd_link_relocatable (&link_info)
6224                   || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6225             os->addr_tree = exp_intop (0);
6226           lang_add_section (&os->children, s, NULL, os);
6227         }
6228
6229       if (config.orphan_handling == orphan_handling_warn)
6230         einfo ("%P: warning: orphan section `%A' from `%B' being "
6231                "placed in section `%s'.\n",
6232                s, s->owner, os->name);
6233     }
6234 }
6235
6236 /* Run through the input files and ensure that every input section has
6237    somewhere to go.  If one is found without a destination then create
6238    an input request and place it into the statement tree.  */
6239
6240 static void
6241 lang_place_orphans (void)
6242 {
6243   LANG_FOR_EACH_INPUT_STATEMENT (file)
6244     {
6245       asection *s;
6246
6247       for (s = file->the_bfd->sections; s != NULL; s = s->next)
6248         {
6249           if (s->output_section == NULL)
6250             {
6251               /* This section of the file is not attached, root
6252                  around for a sensible place for it to go.  */
6253
6254               if (file->flags.just_syms)
6255                 bfd_link_just_syms (file->the_bfd, s, &link_info);
6256               else if ((s->flags & SEC_EXCLUDE) != 0)
6257                 s->output_section = bfd_abs_section_ptr;
6258               else if (strcmp (s->name, "COMMON") == 0)
6259                 {
6260                   /* This is a lonely common section which must have
6261                      come from an archive.  We attach to the section
6262                      with the wildcard.  */
6263                   if (!bfd_link_relocatable (&link_info)
6264                       || command_line.force_common_definition)
6265                     {
6266                       if (default_common_section == NULL)
6267                         default_common_section
6268                           = lang_output_section_statement_lookup (".bss", 0,
6269                                                                   TRUE);
6270                       lang_add_section (&default_common_section->children, s,
6271                                         NULL, default_common_section);
6272                     }
6273                 }
6274               else
6275                 ldlang_place_orphan (s);
6276             }
6277         }
6278     }
6279 }
6280
6281 void
6282 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
6283 {
6284   flagword *ptr_flags;
6285
6286   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6287
6288   while (*flags)
6289     {
6290       switch (*flags)
6291         {
6292           /* PR 17900: An exclamation mark in the attributes reverses
6293              the sense of any of the attributes that follow.  */
6294         case '!':
6295           invert = !invert;
6296           ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6297           break;
6298
6299         case 'A': case 'a':
6300           *ptr_flags |= SEC_ALLOC;
6301           break;
6302
6303         case 'R': case 'r':
6304           *ptr_flags |= SEC_READONLY;
6305           break;
6306
6307         case 'W': case 'w':
6308           *ptr_flags |= SEC_DATA;
6309           break;
6310
6311         case 'X': case 'x':
6312           *ptr_flags |= SEC_CODE;
6313           break;
6314
6315         case 'L': case 'l':
6316         case 'I': case 'i':
6317           *ptr_flags |= SEC_LOAD;
6318           break;
6319
6320         default:
6321           einfo (_("%P%F: invalid character %c (%d) in flags\n"),
6322                  *flags, *flags);
6323           break;
6324         }
6325       flags++;
6326     }
6327 }
6328
6329 /* Call a function on each input file.  This function will be called
6330    on an archive, but not on the elements.  */
6331
6332 void
6333 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6334 {
6335   lang_input_statement_type *f;
6336
6337   for (f = (lang_input_statement_type *) input_file_chain.head;
6338        f != NULL;
6339        f = (lang_input_statement_type *) f->next_real_file)
6340     func (f);
6341 }
6342
6343 /* Call a function on each file.  The function will be called on all
6344    the elements of an archive which are included in the link, but will
6345    not be called on the archive file itself.  */
6346
6347 void
6348 lang_for_each_file (void (*func) (lang_input_statement_type *))
6349 {
6350   LANG_FOR_EACH_INPUT_STATEMENT (f)
6351     {
6352       func (f);
6353     }
6354 }
6355
6356 void
6357 ldlang_add_file (lang_input_statement_type *entry)
6358 {
6359   lang_statement_append (&file_chain,
6360                          (lang_statement_union_type *) entry,
6361                          &entry->next);
6362
6363   /* The BFD linker needs to have a list of all input BFDs involved in
6364      a link.  */
6365   ASSERT (entry->the_bfd->link.next == NULL);
6366   ASSERT (entry->the_bfd != link_info.output_bfd);
6367
6368   *link_info.input_bfds_tail = entry->the_bfd;
6369   link_info.input_bfds_tail = &entry->the_bfd->link.next;
6370   entry->the_bfd->usrdata = entry;
6371   bfd_set_gp_size (entry->the_bfd, g_switch_value);
6372
6373   /* Look through the sections and check for any which should not be
6374      included in the link.  We need to do this now, so that we can
6375      notice when the backend linker tries to report multiple
6376      definition errors for symbols which are in sections we aren't
6377      going to link.  FIXME: It might be better to entirely ignore
6378      symbols which are defined in sections which are going to be
6379      discarded.  This would require modifying the backend linker for
6380      each backend which might set the SEC_LINK_ONCE flag.  If we do
6381      this, we should probably handle SEC_EXCLUDE in the same way.  */
6382
6383   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6384 }
6385
6386 void
6387 lang_add_output (const char *name, int from_script)
6388 {
6389   /* Make -o on command line override OUTPUT in script.  */
6390   if (!had_output_filename || !from_script)
6391     {
6392       output_filename = name;
6393       had_output_filename = TRUE;
6394     }
6395 }
6396
6397 static int
6398 topower (int x)
6399 {
6400   unsigned int i = 1;
6401   int l;
6402
6403   if (x < 0)
6404     return -1;
6405
6406   for (l = 0; l < 32; l++)
6407     {
6408       if (i >= (unsigned int) x)
6409         return l;
6410       i <<= 1;
6411     }
6412
6413   return 0;
6414 }
6415
6416 lang_output_section_statement_type *
6417 lang_enter_output_section_statement (const char *output_section_statement_name,
6418                                      etree_type *address_exp,
6419                                      enum section_type sectype,
6420                                      etree_type *align,
6421                                      etree_type *subalign,
6422                                      etree_type *ebase,
6423                                      int constraint,
6424                                      int align_with_input)
6425 {
6426   lang_output_section_statement_type *os;
6427
6428   os = lang_output_section_statement_lookup (output_section_statement_name,
6429                                              constraint, TRUE);
6430   current_section = os;
6431
6432   if (os->addr_tree == NULL)
6433     {
6434       os->addr_tree = address_exp;
6435     }
6436   os->sectype = sectype;
6437   if (sectype != noload_section)
6438     os->flags = SEC_NO_FLAGS;
6439   else
6440     os->flags = SEC_NEVER_LOAD;
6441   os->block_value = 1;
6442
6443   /* Make next things chain into subchain of this.  */
6444   push_stat_ptr (&os->children);
6445
6446   os->align_lma_with_input = align_with_input == ALIGN_WITH_INPUT;
6447   if (os->align_lma_with_input && align != NULL)
6448     einfo (_("%F%P:%S: error: align with input and explicit align specified\n"),
6449            NULL);
6450
6451   os->subsection_alignment =
6452     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6453   os->section_alignment =
6454     topower (exp_get_value_int (align, -1, "section alignment"));
6455
6456   os->load_base = ebase;
6457   return os;
6458 }
6459
6460 void
6461 lang_final (void)
6462 {
6463   lang_output_statement_type *new_stmt;
6464
6465   new_stmt = new_stat (lang_output_statement, stat_ptr);
6466   new_stmt->name = output_filename;
6467 }
6468
6469 /* Reset the current counters in the regions.  */
6470
6471 void
6472 lang_reset_memory_regions (void)
6473 {
6474   lang_memory_region_type *p = lang_memory_region_list;
6475   asection *o;
6476   lang_output_section_statement_type *os;
6477
6478   for (p = lang_memory_region_list; p != NULL; p = p->next)
6479     {
6480       p->current = p->origin;
6481       p->last_os = NULL;
6482     }
6483
6484   for (os = &lang_output_section_statement.head->output_section_statement;
6485        os != NULL;
6486        os = os->next)
6487     {
6488       os->processed_vma = FALSE;
6489       os->processed_lma = FALSE;
6490     }
6491
6492   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6493     {
6494       /* Save the last size for possible use by bfd_relax_section.  */
6495       o->rawsize = o->size;
6496       o->size = 0;
6497     }
6498 }
6499
6500 /* Worker for lang_gc_sections_1.  */
6501
6502 static void
6503 gc_section_callback (lang_wild_statement_type *ptr,
6504                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
6505                      asection *section,
6506                      struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6507                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
6508                      void *data ATTRIBUTE_UNUSED)
6509 {
6510   /* If the wild pattern was marked KEEP, the member sections
6511      should be as well.  */
6512   if (ptr->keep_sections)
6513     section->flags |= SEC_KEEP;
6514 }
6515
6516 /* Iterate over sections marking them against GC.  */
6517
6518 static void
6519 lang_gc_sections_1 (lang_statement_union_type *s)
6520 {
6521   for (; s != NULL; s = s->header.next)
6522     {
6523       switch (s->header.type)
6524         {
6525         case lang_wild_statement_enum:
6526           walk_wild (&s->wild_statement, gc_section_callback, NULL);
6527           break;
6528         case lang_constructors_statement_enum:
6529           lang_gc_sections_1 (constructor_list.head);
6530           break;
6531         case lang_output_section_statement_enum:
6532           lang_gc_sections_1 (s->output_section_statement.children.head);
6533           break;
6534         case lang_group_statement_enum:
6535           lang_gc_sections_1 (s->group_statement.children.head);
6536           break;
6537         default:
6538           break;
6539         }
6540     }
6541 }
6542
6543 static void
6544 lang_gc_sections (void)
6545 {
6546   /* Keep all sections so marked in the link script.  */
6547   lang_gc_sections_1 (statement_list.head);
6548
6549   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6550      the special case of debug info.  (See bfd/stabs.c)
6551      Twiddle the flag here, to simplify later linker code.  */
6552   if (bfd_link_relocatable (&link_info))
6553     {
6554       LANG_FOR_EACH_INPUT_STATEMENT (f)
6555         {
6556           asection *sec;
6557 #ifdef ENABLE_PLUGINS
6558           if (f->flags.claimed)
6559             continue;
6560 #endif
6561           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6562             if ((sec->flags & SEC_DEBUGGING) == 0)
6563               sec->flags &= ~SEC_EXCLUDE;
6564         }
6565     }
6566
6567   if (link_info.gc_sections)
6568     bfd_gc_sections (link_info.output_bfd, &link_info);
6569 }
6570
6571 /* Worker for lang_find_relro_sections_1.  */
6572
6573 static void
6574 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6575                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
6576                              asection *section,
6577                              struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6578                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
6579                              void *data)
6580 {
6581   /* Discarded, excluded and ignored sections effectively have zero
6582      size.  */
6583   if (section->output_section != NULL
6584       && section->output_section->owner == link_info.output_bfd
6585       && (section->output_section->flags & SEC_EXCLUDE) == 0
6586       && !IGNORE_SECTION (section)
6587       && section->size != 0)
6588     {
6589       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6590       *has_relro_section = TRUE;
6591     }
6592 }
6593
6594 /* Iterate over sections for relro sections.  */
6595
6596 static void
6597 lang_find_relro_sections_1 (lang_statement_union_type *s,
6598                             bfd_boolean *has_relro_section)
6599 {
6600   if (*has_relro_section)
6601     return;
6602
6603   for (; s != NULL; s = s->header.next)
6604     {
6605       if (s == expld.dataseg.relro_end_stat)
6606         break;
6607
6608       switch (s->header.type)
6609         {
6610         case lang_wild_statement_enum:
6611           walk_wild (&s->wild_statement,
6612                      find_relro_section_callback,
6613                      has_relro_section);
6614           break;
6615         case lang_constructors_statement_enum:
6616           lang_find_relro_sections_1 (constructor_list.head,
6617                                       has_relro_section);
6618           break;
6619         case lang_output_section_statement_enum:
6620           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6621                                       has_relro_section);
6622           break;
6623         case lang_group_statement_enum:
6624           lang_find_relro_sections_1 (s->group_statement.children.head,
6625                                       has_relro_section);
6626           break;
6627         default:
6628           break;
6629         }
6630     }
6631 }
6632
6633 static void
6634 lang_find_relro_sections (void)
6635 {
6636   bfd_boolean has_relro_section = FALSE;
6637
6638   /* Check all sections in the link script.  */
6639
6640   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6641                               &has_relro_section);
6642
6643   if (!has_relro_section)
6644     link_info.relro = FALSE;
6645 }
6646
6647 /* Relax all sections until bfd_relax_section gives up.  */
6648
6649 void
6650 lang_relax_sections (bfd_boolean need_layout)
6651 {
6652   if (RELAXATION_ENABLED)
6653     {
6654       /* We may need more than one relaxation pass.  */
6655       int i = link_info.relax_pass;
6656
6657       /* The backend can use it to determine the current pass.  */
6658       link_info.relax_pass = 0;
6659
6660       while (i--)
6661         {
6662           /* Keep relaxing until bfd_relax_section gives up.  */
6663           bfd_boolean relax_again;
6664
6665           link_info.relax_trip = -1;
6666           do
6667             {
6668               link_info.relax_trip++;
6669
6670               /* Note: pe-dll.c does something like this also.  If you find
6671                  you need to change this code, you probably need to change
6672                  pe-dll.c also.  DJ  */
6673
6674               /* Do all the assignments with our current guesses as to
6675                  section sizes.  */
6676               lang_do_assignments (lang_assigning_phase_enum);
6677
6678               /* We must do this after lang_do_assignments, because it uses
6679                  size.  */
6680               lang_reset_memory_regions ();
6681
6682               /* Perform another relax pass - this time we know where the
6683                  globals are, so can make a better guess.  */
6684               relax_again = FALSE;
6685               lang_size_sections (&relax_again, FALSE);
6686             }
6687           while (relax_again);
6688
6689           link_info.relax_pass++;
6690         }
6691       need_layout = TRUE;
6692     }
6693
6694   if (need_layout)
6695     {
6696       /* Final extra sizing to report errors.  */
6697       lang_do_assignments (lang_assigning_phase_enum);
6698       lang_reset_memory_regions ();
6699       lang_size_sections (NULL, TRUE);
6700     }
6701 }
6702
6703 #ifdef ENABLE_PLUGINS
6704 /* Find the insert point for the plugin's replacement files.  We
6705    place them after the first claimed real object file, or if the
6706    first claimed object is an archive member, after the last real
6707    object file immediately preceding the archive.  In the event
6708    no objects have been claimed at all, we return the first dummy
6709    object file on the list as the insert point; that works, but
6710    the callee must be careful when relinking the file_chain as it
6711    is not actually on that chain, only the statement_list and the
6712    input_file list; in that case, the replacement files must be
6713    inserted at the head of the file_chain.  */
6714
6715 static lang_input_statement_type *
6716 find_replacements_insert_point (void)
6717 {
6718   lang_input_statement_type *claim1, *lastobject;
6719   lastobject = &input_file_chain.head->input_statement;
6720   for (claim1 = &file_chain.head->input_statement;
6721        claim1 != NULL;
6722        claim1 = &claim1->next->input_statement)
6723     {
6724       if (claim1->flags.claimed)
6725         return claim1->flags.claim_archive ? lastobject : claim1;
6726       /* Update lastobject if this is a real object file.  */
6727       if (claim1->the_bfd != NULL && claim1->the_bfd->my_archive == NULL)
6728         lastobject = claim1;
6729     }
6730   /* No files were claimed by the plugin.  Choose the last object
6731      file found on the list (maybe the first, dummy entry) as the
6732      insert point.  */
6733   return lastobject;
6734 }
6735
6736 /* Insert SRCLIST into DESTLIST after given element by chaining
6737    on FIELD as the next-pointer.  (Counterintuitively does not need
6738    a pointer to the actual after-node itself, just its chain field.)  */
6739
6740 static void
6741 lang_list_insert_after (lang_statement_list_type *destlist,
6742                         lang_statement_list_type *srclist,
6743                         lang_statement_union_type **field)
6744 {
6745   *(srclist->tail) = *field;
6746   *field = srclist->head;
6747   if (destlist->tail == field)
6748     destlist->tail = srclist->tail;
6749 }
6750
6751 /* Detach new nodes added to DESTLIST since the time ORIGLIST
6752    was taken as a copy of it and leave them in ORIGLIST.  */
6753
6754 static void
6755 lang_list_remove_tail (lang_statement_list_type *destlist,
6756                        lang_statement_list_type *origlist)
6757 {
6758   union lang_statement_union **savetail;
6759   /* Check that ORIGLIST really is an earlier state of DESTLIST.  */
6760   ASSERT (origlist->head == destlist->head);
6761   savetail = origlist->tail;
6762   origlist->head = *(savetail);
6763   origlist->tail = destlist->tail;
6764   destlist->tail = savetail;
6765   *savetail = NULL;
6766 }
6767 #endif /* ENABLE_PLUGINS */
6768
6769 /* Add NAME to the list of garbage collection entry points.  */
6770
6771 void
6772 lang_add_gc_name (const char *name)
6773 {
6774   struct bfd_sym_chain *sym;
6775
6776   if (name == NULL)
6777     return;
6778
6779   sym = (struct bfd_sym_chain *) stat_alloc (sizeof (*sym));
6780
6781   sym->next = link_info.gc_sym_list;
6782   sym->name = name;
6783   link_info.gc_sym_list = sym;
6784 }
6785
6786 /* Check relocations.  */
6787
6788 static void
6789 lang_check_relocs (void)
6790 {
6791   if (link_info.check_relocs_after_open_input)
6792     {
6793       bfd *abfd;
6794
6795       for (abfd = link_info.input_bfds;
6796            abfd != (bfd *) NULL; abfd = abfd->link.next)
6797         if (!bfd_link_check_relocs (abfd, &link_info))
6798           {
6799             /* No object output, fail return.  */
6800             config.make_executable = FALSE;
6801             /* Note: we do not abort the loop, but rather
6802                continue the scan in case there are other
6803                bad relocations to report.  */
6804           }
6805     }
6806 }
6807
6808 void
6809 lang_process (void)
6810 {
6811   /* Finalize dynamic list.  */
6812   if (link_info.dynamic_list)
6813     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6814
6815   current_target = default_target;
6816
6817   /* Open the output file.  */
6818   lang_for_each_statement (ldlang_open_output);
6819   init_opb ();
6820
6821   ldemul_create_output_section_statements ();
6822
6823   /* Add to the hash table all undefineds on the command line.  */
6824   lang_place_undefineds ();
6825
6826   if (!bfd_section_already_linked_table_init ())
6827     einfo (_("%P%F: Failed to create hash table\n"));
6828
6829   /* Create a bfd for each input file.  */
6830   current_target = default_target;
6831   open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
6832
6833 #ifdef ENABLE_PLUGINS
6834   if (link_info.lto_plugin_active)
6835     {
6836       lang_statement_list_type added;
6837       lang_statement_list_type files, inputfiles;
6838
6839       /* Now all files are read, let the plugin(s) decide if there
6840          are any more to be added to the link before we call the
6841          emulation's after_open hook.  We create a private list of
6842          input statements for this purpose, which we will eventually
6843          insert into the global statment list after the first claimed
6844          file.  */
6845       added = *stat_ptr;
6846       /* We need to manipulate all three chains in synchrony.  */
6847       files = file_chain;
6848       inputfiles = input_file_chain;
6849       if (plugin_call_all_symbols_read ())
6850         einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6851                plugin_error_plugin ());
6852       /* Open any newly added files, updating the file chains.  */
6853       open_input_bfds (*added.tail, OPEN_BFD_NORMAL);
6854       /* Restore the global list pointer now they have all been added.  */
6855       lang_list_remove_tail (stat_ptr, &added);
6856       /* And detach the fresh ends of the file lists.  */
6857       lang_list_remove_tail (&file_chain, &files);
6858       lang_list_remove_tail (&input_file_chain, &inputfiles);
6859       /* Were any new files added?  */
6860       if (added.head != NULL)
6861         {
6862           /* If so, we will insert them into the statement list immediately
6863              after the first input file that was claimed by the plugin.  */
6864           plugin_insert = find_replacements_insert_point ();
6865           /* If a plugin adds input files without having claimed any, we
6866              don't really have a good idea where to place them.  Just putting
6867              them at the start or end of the list is liable to leave them
6868              outside the crtbegin...crtend range.  */
6869           ASSERT (plugin_insert != NULL);
6870           /* Splice the new statement list into the old one.  */
6871           lang_list_insert_after (stat_ptr, &added,
6872                                   &plugin_insert->header.next);
6873           /* Likewise for the file chains.  */
6874           lang_list_insert_after (&input_file_chain, &inputfiles,
6875                                   &plugin_insert->next_real_file);
6876           /* We must be careful when relinking file_chain; we may need to
6877              insert the new files at the head of the list if the insert
6878              point chosen is the dummy first input file.  */
6879           if (plugin_insert->filename)
6880             lang_list_insert_after (&file_chain, &files, &plugin_insert->next);
6881           else
6882             lang_list_insert_after (&file_chain, &files, &file_chain.head);
6883
6884           /* Rescan archives in case new undefined symbols have appeared.  */
6885           open_input_bfds (statement_list.head, OPEN_BFD_RESCAN);
6886         }
6887     }
6888 #endif /* ENABLE_PLUGINS */
6889
6890   /* Make sure that nobody has tried to add a symbol to this list
6891      before now.  */
6892   ASSERT (link_info.gc_sym_list == NULL);
6893
6894   link_info.gc_sym_list = &entry_symbol;
6895
6896   if (entry_symbol.name == NULL)
6897     {
6898       link_info.gc_sym_list = ldlang_undef_chain_list_head;
6899
6900       /* entry_symbol is normally initialied by a ENTRY definition in the
6901          linker script or the -e command line option.  But if neither of
6902          these have been used, the target specific backend may still have
6903          provided an entry symbol via a call to lang_default_entry().
6904          Unfortunately this value will not be processed until lang_end()
6905          is called, long after this function has finished.  So detect this
6906          case here and add the target's entry symbol to the list of starting
6907          points for garbage collection resolution.  */
6908       lang_add_gc_name (entry_symbol_default);
6909     }
6910
6911   lang_add_gc_name (link_info.init_function);
6912   lang_add_gc_name (link_info.fini_function);
6913
6914   ldemul_after_open ();
6915   if (config.map_file != NULL)
6916     lang_print_asneeded ();
6917
6918   bfd_section_already_linked_table_free ();
6919
6920   /* Make sure that we're not mixing architectures.  We call this
6921      after all the input files have been opened, but before we do any
6922      other processing, so that any operations merge_private_bfd_data
6923      does on the output file will be known during the rest of the
6924      link.  */
6925   lang_check ();
6926
6927   /* Handle .exports instead of a version script if we're told to do so.  */
6928   if (command_line.version_exports_section)
6929     lang_do_version_exports_section ();
6930
6931   /* Build all sets based on the information gathered from the input
6932      files.  */
6933   ldctor_build_sets ();
6934
6935   /* PR 13683: We must rerun the assignments prior to running garbage
6936      collection in order to make sure that all symbol aliases are resolved.  */
6937   lang_do_assignments (lang_mark_phase_enum);
6938
6939   lang_do_memory_regions();
6940   expld.phase = lang_first_phase_enum;
6941
6942   /* Size up the common data.  */
6943   lang_common ();
6944
6945   /* Remove unreferenced sections if asked to.  */
6946   lang_gc_sections ();
6947
6948   /* Check relocations.  */
6949   lang_check_relocs ();
6950
6951   /* Update wild statements.  */
6952   update_wild_statements (statement_list.head);
6953
6954   /* Run through the contours of the script and attach input sections
6955      to the correct output sections.  */
6956   lang_statement_iteration++;
6957   map_input_to_output_sections (statement_list.head, NULL, NULL);
6958
6959   process_insert_statements ();
6960
6961   /* Find any sections not attached explicitly and handle them.  */
6962   lang_place_orphans ();
6963
6964   if (!bfd_link_relocatable (&link_info))
6965     {
6966       asection *found;
6967
6968       /* Merge SEC_MERGE sections.  This has to be done after GC of
6969          sections, so that GCed sections are not merged, but before
6970          assigning dynamic symbols, since removing whole input sections
6971          is hard then.  */
6972       bfd_merge_sections (link_info.output_bfd, &link_info);
6973
6974       /* Look for a text section and set the readonly attribute in it.  */
6975       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6976
6977       if (found != NULL)
6978         {
6979           if (config.text_read_only)
6980             found->flags |= SEC_READONLY;
6981           else
6982             found->flags &= ~SEC_READONLY;
6983         }
6984     }
6985
6986   /* Do anything special before sizing sections.  This is where ELF
6987      and other back-ends size dynamic sections.  */
6988   ldemul_before_allocation ();
6989
6990   /* We must record the program headers before we try to fix the
6991      section positions, since they will affect SIZEOF_HEADERS.  */
6992   lang_record_phdrs ();
6993
6994   /* Check relro sections.  */
6995   if (link_info.relro && !bfd_link_relocatable (&link_info))
6996     lang_find_relro_sections ();
6997
6998   /* Size up the sections.  */
6999   lang_size_sections (NULL, !RELAXATION_ENABLED);
7000
7001   /* See if anything special should be done now we know how big
7002      everything is.  This is where relaxation is done.  */
7003   ldemul_after_allocation ();
7004
7005   /* Fix any .startof. or .sizeof. symbols.  */
7006   lang_set_startof ();
7007
7008   /* Do all the assignments, now that we know the final resting places
7009      of all the symbols.  */
7010   lang_do_assignments (lang_final_phase_enum);
7011
7012   ldemul_finish ();
7013
7014   /* Convert absolute symbols to section relative.  */
7015   ldexp_finalize_syms ();
7016
7017   /* Make sure that the section addresses make sense.  */
7018   if (command_line.check_section_addresses)
7019     lang_check_section_addresses ();
7020
7021   /* Check any required symbols are known.  */
7022   ldlang_check_require_defined_symbols ();
7023
7024   lang_end ();
7025 }
7026
7027 /* EXPORTED TO YACC */
7028
7029 void
7030 lang_add_wild (struct wildcard_spec *filespec,
7031                struct wildcard_list *section_list,
7032                bfd_boolean keep_sections)
7033 {
7034   struct wildcard_list *curr, *next;
7035   lang_wild_statement_type *new_stmt;
7036
7037   /* Reverse the list as the parser puts it back to front.  */
7038   for (curr = section_list, section_list = NULL;
7039        curr != NULL;
7040        section_list = curr, curr = next)
7041     {
7042       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
7043         placed_commons = TRUE;
7044
7045       next = curr->next;
7046       curr->next = section_list;
7047     }
7048
7049   if (filespec != NULL && filespec->name != NULL)
7050     {
7051       if (strcmp (filespec->name, "*") == 0)
7052         filespec->name = NULL;
7053       else if (!wildcardp (filespec->name))
7054         lang_has_input_file = TRUE;
7055     }
7056
7057   new_stmt = new_stat (lang_wild_statement, stat_ptr);
7058   new_stmt->filename = NULL;
7059   new_stmt->filenames_sorted = FALSE;
7060   new_stmt->section_flag_list = NULL;
7061   if (filespec != NULL)
7062     {
7063       new_stmt->filename = filespec->name;
7064       new_stmt->filenames_sorted = filespec->sorted == by_name;
7065       new_stmt->section_flag_list = filespec->section_flag_list;
7066     }
7067   new_stmt->section_list = section_list;
7068   new_stmt->keep_sections = keep_sections;
7069   lang_list_init (&new_stmt->children);
7070   analyze_walk_wild_section_handler (new_stmt);
7071 }
7072
7073 void
7074 lang_section_start (const char *name, etree_type *address,
7075                     const segment_type *segment)
7076 {
7077   lang_address_statement_type *ad;
7078
7079   ad = new_stat (lang_address_statement, stat_ptr);
7080   ad->section_name = name;
7081   ad->address = address;
7082   ad->segment = segment;
7083 }
7084
7085 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
7086    because of a -e argument on the command line, or zero if this is
7087    called by ENTRY in a linker script.  Command line arguments take
7088    precedence.  */
7089
7090 void
7091 lang_add_entry (const char *name, bfd_boolean cmdline)
7092 {
7093   if (entry_symbol.name == NULL
7094       || cmdline
7095       || !entry_from_cmdline)
7096     {
7097       entry_symbol.name = name;
7098       entry_from_cmdline = cmdline;
7099     }
7100 }
7101
7102 /* Set the default start symbol to NAME.  .em files should use this,
7103    not lang_add_entry, to override the use of "start" if neither the
7104    linker script nor the command line specifies an entry point.  NAME
7105    must be permanently allocated.  */
7106 void
7107 lang_default_entry (const char *name)
7108 {
7109   entry_symbol_default = name;
7110 }
7111
7112 void
7113 lang_add_target (const char *name)
7114 {
7115   lang_target_statement_type *new_stmt;
7116
7117   new_stmt = new_stat (lang_target_statement, stat_ptr);
7118   new_stmt->target = name;
7119 }
7120
7121 void
7122 lang_add_map (const char *name)
7123 {
7124   while (*name)
7125     {
7126       switch (*name)
7127         {
7128         case 'F':
7129           map_option_f = TRUE;
7130           break;
7131         }
7132       name++;
7133     }
7134 }
7135
7136 void
7137 lang_add_fill (fill_type *fill)
7138 {
7139   lang_fill_statement_type *new_stmt;
7140
7141   new_stmt = new_stat (lang_fill_statement, stat_ptr);
7142   new_stmt->fill = fill;
7143 }
7144
7145 void
7146 lang_add_data (int type, union etree_union *exp)
7147 {
7148   lang_data_statement_type *new_stmt;
7149
7150   new_stmt = new_stat (lang_data_statement, stat_ptr);
7151   new_stmt->exp = exp;
7152   new_stmt->type = type;
7153 }
7154
7155 /* Create a new reloc statement.  RELOC is the BFD relocation type to
7156    generate.  HOWTO is the corresponding howto structure (we could
7157    look this up, but the caller has already done so).  SECTION is the
7158    section to generate a reloc against, or NAME is the name of the
7159    symbol to generate a reloc against.  Exactly one of SECTION and
7160    NAME must be NULL.  ADDEND is an expression for the addend.  */
7161
7162 void
7163 lang_add_reloc (bfd_reloc_code_real_type reloc,
7164                 reloc_howto_type *howto,
7165                 asection *section,
7166                 const char *name,
7167                 union etree_union *addend)
7168 {
7169   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
7170
7171   p->reloc = reloc;
7172   p->howto = howto;
7173   p->section = section;
7174   p->name = name;
7175   p->addend_exp = addend;
7176
7177   p->addend_value = 0;
7178   p->output_section = NULL;
7179   p->output_offset = 0;
7180 }
7181
7182 lang_assignment_statement_type *
7183 lang_add_assignment (etree_type *exp)
7184 {
7185   lang_assignment_statement_type *new_stmt;
7186
7187   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
7188   new_stmt->exp = exp;
7189   return new_stmt;
7190 }
7191
7192 void
7193 lang_add_attribute (enum statement_enum attribute)
7194 {
7195   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
7196 }
7197
7198 void
7199 lang_startup (const char *name)
7200 {
7201   if (first_file->filename != NULL)
7202     {
7203       einfo (_("%P%F: multiple STARTUP files\n"));
7204     }
7205   first_file->filename = name;
7206   first_file->local_sym_name = name;
7207   first_file->flags.real = TRUE;
7208 }
7209
7210 void
7211 lang_float (bfd_boolean maybe)
7212 {
7213   lang_float_flag = maybe;
7214 }
7215
7216
7217 /* Work out the load- and run-time regions from a script statement, and
7218    store them in *LMA_REGION and *REGION respectively.
7219
7220    MEMSPEC is the name of the run-time region, or the value of
7221    DEFAULT_MEMORY_REGION if the statement didn't specify one.
7222    LMA_MEMSPEC is the name of the load-time region, or null if the
7223    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
7224    had an explicit load address.
7225
7226    It is an error to specify both a load region and a load address.  */
7227
7228 static void
7229 lang_get_regions (lang_memory_region_type **region,
7230                   lang_memory_region_type **lma_region,
7231                   const char *memspec,
7232                   const char *lma_memspec,
7233                   bfd_boolean have_lma,
7234                   bfd_boolean have_vma)
7235 {
7236   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
7237
7238   /* If no runtime region or VMA has been specified, but the load region
7239      has been specified, then use the load region for the runtime region
7240      as well.  */
7241   if (lma_memspec != NULL
7242       && !have_vma
7243       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
7244     *region = *lma_region;
7245   else
7246     *region = lang_memory_region_lookup (memspec, FALSE);
7247
7248   if (have_lma && lma_memspec != 0)
7249     einfo (_("%X%P:%S: section has both a load address and a load region\n"),
7250            NULL);
7251 }
7252
7253 void
7254 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
7255                                      lang_output_section_phdr_list *phdrs,
7256                                      const char *lma_memspec)
7257 {
7258   lang_get_regions (&current_section->region,
7259                     &current_section->lma_region,
7260                     memspec, lma_memspec,
7261                     current_section->load_base != NULL,
7262                     current_section->addr_tree != NULL);
7263
7264   /* If this section has no load region or base, but uses the same
7265      region as the previous section, then propagate the previous
7266      section's load region.  */
7267
7268   if (current_section->lma_region == NULL
7269       && current_section->load_base == NULL
7270       && current_section->addr_tree == NULL
7271       && current_section->region == current_section->prev->region)
7272     current_section->lma_region = current_section->prev->lma_region;
7273
7274   current_section->fill = fill;
7275   current_section->phdrs = phdrs;
7276   pop_stat_ptr ();
7277 }
7278
7279 void
7280 lang_statement_append (lang_statement_list_type *list,
7281                        lang_statement_union_type *element,
7282                        lang_statement_union_type **field)
7283 {
7284   *(list->tail) = element;
7285   list->tail = field;
7286 }
7287
7288 /* Set the output format type.  -oformat overrides scripts.  */
7289
7290 void
7291 lang_add_output_format (const char *format,
7292                         const char *big,
7293                         const char *little,
7294                         int from_script)
7295 {
7296   if (output_target == NULL || !from_script)
7297     {
7298       if (command_line.endian == ENDIAN_BIG
7299           && big != NULL)
7300         format = big;
7301       else if (command_line.endian == ENDIAN_LITTLE
7302                && little != NULL)
7303         format = little;
7304
7305       output_target = format;
7306     }
7307 }
7308
7309 void
7310 lang_add_insert (const char *where, int is_before)
7311 {
7312   lang_insert_statement_type *new_stmt;
7313
7314   new_stmt = new_stat (lang_insert_statement, stat_ptr);
7315   new_stmt->where = where;
7316   new_stmt->is_before = is_before;
7317   saved_script_handle = previous_script_handle;
7318 }
7319
7320 /* Enter a group.  This creates a new lang_group_statement, and sets
7321    stat_ptr to build new statements within the group.  */
7322
7323 void
7324 lang_enter_group (void)
7325 {
7326   lang_group_statement_type *g;
7327
7328   g = new_stat (lang_group_statement, stat_ptr);
7329   lang_list_init (&g->children);
7330   push_stat_ptr (&g->children);
7331 }
7332
7333 /* Leave a group.  This just resets stat_ptr to start writing to the
7334    regular list of statements again.  Note that this will not work if
7335    groups can occur inside anything else which can adjust stat_ptr,
7336    but currently they can't.  */
7337
7338 void
7339 lang_leave_group (void)
7340 {
7341   pop_stat_ptr ();
7342 }
7343
7344 /* Add a new program header.  This is called for each entry in a PHDRS
7345    command in a linker script.  */
7346
7347 void
7348 lang_new_phdr (const char *name,
7349                etree_type *type,
7350                bfd_boolean filehdr,
7351                bfd_boolean phdrs,
7352                etree_type *at,
7353                etree_type *flags)
7354 {
7355   struct lang_phdr *n, **pp;
7356   bfd_boolean hdrs;
7357
7358   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
7359   n->next = NULL;
7360   n->name = name;
7361   n->type = exp_get_value_int (type, 0, "program header type");
7362   n->filehdr = filehdr;
7363   n->phdrs = phdrs;
7364   n->at = at;
7365   n->flags = flags;
7366
7367   hdrs = n->type == 1 && (phdrs || filehdr);
7368
7369   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
7370     if (hdrs
7371         && (*pp)->type == 1
7372         && !((*pp)->filehdr || (*pp)->phdrs))
7373       {
7374         einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported"
7375                  " when prior PT_LOAD headers lack them\n"), NULL);
7376         hdrs = FALSE;
7377       }
7378
7379   *pp = n;
7380 }
7381
7382 /* Record the program header information in the output BFD.  FIXME: We
7383    should not be calling an ELF specific function here.  */
7384
7385 static void
7386 lang_record_phdrs (void)
7387 {
7388   unsigned int alc;
7389   asection **secs;
7390   lang_output_section_phdr_list *last;
7391   struct lang_phdr *l;
7392   lang_output_section_statement_type *os;
7393
7394   alc = 10;
7395   secs = (asection **) xmalloc (alc * sizeof (asection *));
7396   last = NULL;
7397
7398   for (l = lang_phdr_list; l != NULL; l = l->next)
7399     {
7400       unsigned int c;
7401       flagword flags;
7402       bfd_vma at;
7403
7404       c = 0;
7405       for (os = &lang_output_section_statement.head->output_section_statement;
7406            os != NULL;
7407            os = os->next)
7408         {
7409           lang_output_section_phdr_list *pl;
7410
7411           if (os->constraint < 0)
7412             continue;
7413
7414           pl = os->phdrs;
7415           if (pl != NULL)
7416             last = pl;
7417           else
7418             {
7419               if (os->sectype == noload_section
7420                   || os->bfd_section == NULL
7421                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
7422                 continue;
7423
7424               /* Don't add orphans to PT_INTERP header.  */
7425               if (l->type == 3)
7426                 continue;
7427
7428               if (last == NULL)
7429                 {
7430                   lang_output_section_statement_type *tmp_os;
7431
7432                   /* If we have not run across a section with a program
7433                      header assigned to it yet, then scan forwards to find
7434                      one.  This prevents inconsistencies in the linker's
7435                      behaviour when a script has specified just a single
7436                      header and there are sections in that script which are
7437                      not assigned to it, and which occur before the first
7438                      use of that header. See here for more details:
7439                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7440                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7441                     if (tmp_os->phdrs)
7442                       {
7443                         last = tmp_os->phdrs;
7444                         break;
7445                       }
7446                   if (last == NULL)
7447                     einfo (_("%F%P: no sections assigned to phdrs\n"));
7448                 }
7449               pl = last;
7450             }
7451
7452           if (os->bfd_section == NULL)
7453             continue;
7454
7455           for (; pl != NULL; pl = pl->next)
7456             {
7457               if (strcmp (pl->name, l->name) == 0)
7458                 {
7459                   if (c >= alc)
7460                     {
7461                       alc *= 2;
7462                       secs = (asection **) xrealloc (secs,
7463                                                      alc * sizeof (asection *));
7464                     }
7465                   secs[c] = os->bfd_section;
7466                   ++c;
7467                   pl->used = TRUE;
7468                 }
7469             }
7470         }
7471
7472       if (l->flags == NULL)
7473         flags = 0;
7474       else
7475         flags = exp_get_vma (l->flags, 0, "phdr flags");
7476
7477       if (l->at == NULL)
7478         at = 0;
7479       else
7480         at = exp_get_vma (l->at, 0, "phdr load address");
7481
7482       if (!bfd_record_phdr (link_info.output_bfd, l->type,
7483                             l->flags != NULL, flags, l->at != NULL,
7484                             at, l->filehdr, l->phdrs, c, secs))
7485         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7486     }
7487
7488   free (secs);
7489
7490   /* Make sure all the phdr assignments succeeded.  */
7491   for (os = &lang_output_section_statement.head->output_section_statement;
7492        os != NULL;
7493        os = os->next)
7494     {
7495       lang_output_section_phdr_list *pl;
7496
7497       if (os->constraint < 0
7498           || os->bfd_section == NULL)
7499         continue;
7500
7501       for (pl = os->phdrs;
7502            pl != NULL;
7503            pl = pl->next)
7504         if (!pl->used && strcmp (pl->name, "NONE") != 0)
7505           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7506                  os->name, pl->name);
7507     }
7508 }
7509
7510 /* Record a list of sections which may not be cross referenced.  */
7511
7512 void
7513 lang_add_nocrossref (lang_nocrossref_type *l)
7514 {
7515   struct lang_nocrossrefs *n;
7516
7517   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7518   n->next = nocrossref_list;
7519   n->list = l;
7520   n->onlyfirst = FALSE;
7521   nocrossref_list = n;
7522
7523   /* Set notice_all so that we get informed about all symbols.  */
7524   link_info.notice_all = TRUE;
7525 }
7526
7527 /* Record a section that cannot be referenced from a list of sections.  */
7528
7529 void
7530 lang_add_nocrossref_to (lang_nocrossref_type *l)
7531 {
7532   lang_add_nocrossref (l);
7533   nocrossref_list->onlyfirst = TRUE;
7534 }
7535 \f
7536 /* Overlay handling.  We handle overlays with some static variables.  */
7537
7538 /* The overlay virtual address.  */
7539 static etree_type *overlay_vma;
7540 /* And subsection alignment.  */
7541 static etree_type *overlay_subalign;
7542
7543 /* An expression for the maximum section size seen so far.  */
7544 static etree_type *overlay_max;
7545
7546 /* A list of all the sections in this overlay.  */
7547
7548 struct overlay_list {
7549   struct overlay_list *next;
7550   lang_output_section_statement_type *os;
7551 };
7552
7553 static struct overlay_list *overlay_list;
7554
7555 /* Start handling an overlay.  */
7556
7557 void
7558 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7559 {
7560   /* The grammar should prevent nested overlays from occurring.  */
7561   ASSERT (overlay_vma == NULL
7562           && overlay_subalign == NULL
7563           && overlay_max == NULL);
7564
7565   overlay_vma = vma_expr;
7566   overlay_subalign = subalign;
7567 }
7568
7569 /* Start a section in an overlay.  We handle this by calling
7570    lang_enter_output_section_statement with the correct VMA.
7571    lang_leave_overlay sets up the LMA and memory regions.  */
7572
7573 void
7574 lang_enter_overlay_section (const char *name)
7575 {
7576   struct overlay_list *n;
7577   etree_type *size;
7578
7579   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7580                                        0, overlay_subalign, 0, 0, 0);
7581
7582   /* If this is the first section, then base the VMA of future
7583      sections on this one.  This will work correctly even if `.' is
7584      used in the addresses.  */
7585   if (overlay_list == NULL)
7586     overlay_vma = exp_nameop (ADDR, name);
7587
7588   /* Remember the section.  */
7589   n = (struct overlay_list *) xmalloc (sizeof *n);
7590   n->os = current_section;
7591   n->next = overlay_list;
7592   overlay_list = n;
7593
7594   size = exp_nameop (SIZEOF, name);
7595
7596   /* Arrange to work out the maximum section end address.  */
7597   if (overlay_max == NULL)
7598     overlay_max = size;
7599   else
7600     overlay_max = exp_binop (MAX_K, overlay_max, size);
7601 }
7602
7603 /* Finish a section in an overlay.  There isn't any special to do
7604    here.  */
7605
7606 void
7607 lang_leave_overlay_section (fill_type *fill,
7608                             lang_output_section_phdr_list *phdrs)
7609 {
7610   const char *name;
7611   char *clean, *s2;
7612   const char *s1;
7613   char *buf;
7614
7615   name = current_section->name;
7616
7617   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7618      region and that no load-time region has been specified.  It doesn't
7619      really matter what we say here, since lang_leave_overlay will
7620      override it.  */
7621   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7622
7623   /* Define the magic symbols.  */
7624
7625   clean = (char *) xmalloc (strlen (name) + 1);
7626   s2 = clean;
7627   for (s1 = name; *s1 != '\0'; s1++)
7628     if (ISALNUM (*s1) || *s1 == '_')
7629       *s2++ = *s1;
7630   *s2 = '\0';
7631
7632   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7633   sprintf (buf, "__load_start_%s", clean);
7634   lang_add_assignment (exp_provide (buf,
7635                                     exp_nameop (LOADADDR, name),
7636                                     FALSE));
7637
7638   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7639   sprintf (buf, "__load_stop_%s", clean);
7640   lang_add_assignment (exp_provide (buf,
7641                                     exp_binop ('+',
7642                                                exp_nameop (LOADADDR, name),
7643                                                exp_nameop (SIZEOF, name)),
7644                                     FALSE));
7645
7646   free (clean);
7647 }
7648
7649 /* Finish an overlay.  If there are any overlay wide settings, this
7650    looks through all the sections in the overlay and sets them.  */
7651
7652 void
7653 lang_leave_overlay (etree_type *lma_expr,
7654                     int nocrossrefs,
7655                     fill_type *fill,
7656                     const char *memspec,
7657                     lang_output_section_phdr_list *phdrs,
7658                     const char *lma_memspec)
7659 {
7660   lang_memory_region_type *region;
7661   lang_memory_region_type *lma_region;
7662   struct overlay_list *l;
7663   lang_nocrossref_type *nocrossref;
7664
7665   lang_get_regions (&region, &lma_region,
7666                     memspec, lma_memspec,
7667                     lma_expr != NULL, FALSE);
7668
7669   nocrossref = NULL;
7670
7671   /* After setting the size of the last section, set '.' to end of the
7672      overlay region.  */
7673   if (overlay_list != NULL)
7674     {
7675       overlay_list->os->update_dot = 1;
7676       overlay_list->os->update_dot_tree
7677         = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max), FALSE);
7678     }
7679
7680   l = overlay_list;
7681   while (l != NULL)
7682     {
7683       struct overlay_list *next;
7684
7685       if (fill != NULL && l->os->fill == NULL)
7686         l->os->fill = fill;
7687
7688       l->os->region = region;
7689       l->os->lma_region = lma_region;
7690
7691       /* The first section has the load address specified in the
7692          OVERLAY statement.  The rest are worked out from that.
7693          The base address is not needed (and should be null) if
7694          an LMA region was specified.  */
7695       if (l->next == 0)
7696         {
7697           l->os->load_base = lma_expr;
7698           l->os->sectype = normal_section;
7699         }
7700       if (phdrs != NULL && l->os->phdrs == NULL)
7701         l->os->phdrs = phdrs;
7702
7703       if (nocrossrefs)
7704         {
7705           lang_nocrossref_type *nc;
7706
7707           nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7708           nc->name = l->os->name;
7709           nc->next = nocrossref;
7710           nocrossref = nc;
7711         }
7712
7713       next = l->next;
7714       free (l);
7715       l = next;
7716     }
7717
7718   if (nocrossref != NULL)
7719     lang_add_nocrossref (nocrossref);
7720
7721   overlay_vma = NULL;
7722   overlay_list = NULL;
7723   overlay_max = NULL;
7724 }
7725 \f
7726 /* Version handling.  This is only useful for ELF.  */
7727
7728 /* If PREV is NULL, return first version pattern matching particular symbol.
7729    If PREV is non-NULL, return first version pattern matching particular
7730    symbol after PREV (previously returned by lang_vers_match).  */
7731
7732 static struct bfd_elf_version_expr *
7733 lang_vers_match (struct bfd_elf_version_expr_head *head,
7734                  struct bfd_elf_version_expr *prev,
7735                  const char *sym)
7736 {
7737   const char *c_sym;
7738   const char *cxx_sym = sym;
7739   const char *java_sym = sym;
7740   struct bfd_elf_version_expr *expr = NULL;
7741   enum demangling_styles curr_style;
7742
7743   curr_style = CURRENT_DEMANGLING_STYLE;
7744   cplus_demangle_set_style (no_demangling);
7745   c_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_NO_OPTS);
7746   if (!c_sym)
7747     c_sym = sym;
7748   cplus_demangle_set_style (curr_style);
7749
7750   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7751     {
7752       cxx_sym = bfd_demangle (link_info.output_bfd, sym,
7753                               DMGL_PARAMS | DMGL_ANSI);
7754       if (!cxx_sym)
7755         cxx_sym = sym;
7756     }
7757   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7758     {
7759       java_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_JAVA);
7760       if (!java_sym)
7761         java_sym = sym;
7762     }
7763
7764   if (head->htab && (prev == NULL || prev->literal))
7765     {
7766       struct bfd_elf_version_expr e;
7767
7768       switch (prev ? prev->mask : 0)
7769         {
7770         case 0:
7771           if (head->mask & BFD_ELF_VERSION_C_TYPE)
7772             {
7773               e.pattern = c_sym;
7774               expr = (struct bfd_elf_version_expr *)
7775                   htab_find ((htab_t) head->htab, &e);
7776               while (expr && strcmp (expr->pattern, c_sym) == 0)
7777                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7778                   goto out_ret;
7779                 else
7780                   expr = expr->next;
7781             }
7782           /* Fallthrough */
7783         case BFD_ELF_VERSION_C_TYPE:
7784           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7785             {
7786               e.pattern = cxx_sym;
7787               expr = (struct bfd_elf_version_expr *)
7788                   htab_find ((htab_t) head->htab, &e);
7789               while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7790                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7791                   goto out_ret;
7792                 else
7793                   expr = expr->next;
7794             }
7795           /* Fallthrough */
7796         case BFD_ELF_VERSION_CXX_TYPE:
7797           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7798             {
7799               e.pattern = java_sym;
7800               expr = (struct bfd_elf_version_expr *)
7801                   htab_find ((htab_t) head->htab, &e);
7802               while (expr && strcmp (expr->pattern, java_sym) == 0)
7803                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7804                   goto out_ret;
7805                 else
7806                   expr = expr->next;
7807             }
7808           /* Fallthrough */
7809         default:
7810           break;
7811         }
7812     }
7813
7814   /* Finally, try the wildcards.  */
7815   if (prev == NULL || prev->literal)
7816     expr = head->remaining;
7817   else
7818     expr = prev->next;
7819   for (; expr; expr = expr->next)
7820     {
7821       const char *s;
7822
7823       if (!expr->pattern)
7824         continue;
7825
7826       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7827         break;
7828
7829       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7830         s = java_sym;
7831       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7832         s = cxx_sym;
7833       else
7834         s = c_sym;
7835       if (fnmatch (expr->pattern, s, 0) == 0)
7836         break;
7837     }
7838
7839  out_ret:
7840   if (c_sym != sym)
7841     free ((char *) c_sym);
7842   if (cxx_sym != sym)
7843     free ((char *) cxx_sym);
7844   if (java_sym != sym)
7845     free ((char *) java_sym);
7846   return expr;
7847 }
7848
7849 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7850    return a pointer to the symbol name with any backslash quotes removed.  */
7851
7852 static const char *
7853 realsymbol (const char *pattern)
7854 {
7855   const char *p;
7856   bfd_boolean changed = FALSE, backslash = FALSE;
7857   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7858
7859   for (p = pattern, s = symbol; *p != '\0'; ++p)
7860     {
7861       /* It is a glob pattern only if there is no preceding
7862          backslash.  */
7863       if (backslash)
7864         {
7865           /* Remove the preceding backslash.  */
7866           *(s - 1) = *p;
7867           backslash = FALSE;
7868           changed = TRUE;
7869         }
7870       else
7871         {
7872           if (*p == '?' || *p == '*' || *p == '[')
7873             {
7874               free (symbol);
7875               return NULL;
7876             }
7877
7878           *s++ = *p;
7879           backslash = *p == '\\';
7880         }
7881     }
7882
7883   if (changed)
7884     {
7885       *s = '\0';
7886       return symbol;
7887     }
7888   else
7889     {
7890       free (symbol);
7891       return pattern;
7892     }
7893 }
7894
7895 /* This is called for each variable name or match expression.  NEW_NAME is
7896    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7897    pattern to be matched against symbol names.  */
7898
7899 struct bfd_elf_version_expr *
7900 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7901                        const char *new_name,
7902                        const char *lang,
7903                        bfd_boolean literal_p)
7904 {
7905   struct bfd_elf_version_expr *ret;
7906
7907   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7908   ret->next = orig;
7909   ret->symver = 0;
7910   ret->script = 0;
7911   ret->literal = TRUE;
7912   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7913   if (ret->pattern == NULL)
7914     {
7915       ret->pattern = new_name;
7916       ret->literal = FALSE;
7917     }
7918
7919   if (lang == NULL || strcasecmp (lang, "C") == 0)
7920     ret->mask = BFD_ELF_VERSION_C_TYPE;
7921   else if (strcasecmp (lang, "C++") == 0)
7922     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7923   else if (strcasecmp (lang, "Java") == 0)
7924     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7925   else
7926     {
7927       einfo (_("%X%P: unknown language `%s' in version information\n"),
7928              lang);
7929       ret->mask = BFD_ELF_VERSION_C_TYPE;
7930     }
7931
7932   return ldemul_new_vers_pattern (ret);
7933 }
7934
7935 /* This is called for each set of variable names and match
7936    expressions.  */
7937
7938 struct bfd_elf_version_tree *
7939 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7940                     struct bfd_elf_version_expr *locals)
7941 {
7942   struct bfd_elf_version_tree *ret;
7943
7944   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7945   ret->globals.list = globals;
7946   ret->locals.list = locals;
7947   ret->match = lang_vers_match;
7948   ret->name_indx = (unsigned int) -1;
7949   return ret;
7950 }
7951
7952 /* This static variable keeps track of version indices.  */
7953
7954 static int version_index;
7955
7956 static hashval_t
7957 version_expr_head_hash (const void *p)
7958 {
7959   const struct bfd_elf_version_expr *e =
7960       (const struct bfd_elf_version_expr *) p;
7961
7962   return htab_hash_string (e->pattern);
7963 }
7964
7965 static int
7966 version_expr_head_eq (const void *p1, const void *p2)
7967 {
7968   const struct bfd_elf_version_expr *e1 =
7969       (const struct bfd_elf_version_expr *) p1;
7970   const struct bfd_elf_version_expr *e2 =
7971       (const struct bfd_elf_version_expr *) p2;
7972
7973   return strcmp (e1->pattern, e2->pattern) == 0;
7974 }
7975
7976 static void
7977 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7978 {
7979   size_t count = 0;
7980   struct bfd_elf_version_expr *e, *next;
7981   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7982
7983   for (e = head->list; e; e = e->next)
7984     {
7985       if (e->literal)
7986         count++;
7987       head->mask |= e->mask;
7988     }
7989
7990   if (count)
7991     {
7992       head->htab = htab_create (count * 2, version_expr_head_hash,
7993                                 version_expr_head_eq, NULL);
7994       list_loc = &head->list;
7995       remaining_loc = &head->remaining;
7996       for (e = head->list; e; e = next)
7997         {
7998           next = e->next;
7999           if (!e->literal)
8000             {
8001               *remaining_loc = e;
8002               remaining_loc = &e->next;
8003             }
8004           else
8005             {
8006               void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
8007
8008               if (*loc)
8009                 {
8010                   struct bfd_elf_version_expr *e1, *last;
8011
8012                   e1 = (struct bfd_elf_version_expr *) *loc;
8013                   last = NULL;
8014                   do
8015                     {
8016                       if (e1->mask == e->mask)
8017                         {
8018                           last = NULL;
8019                           break;
8020                         }
8021                       last = e1;
8022                       e1 = e1->next;
8023                     }
8024                   while (e1 && strcmp (e1->pattern, e->pattern) == 0);
8025
8026                   if (last == NULL)
8027                     {
8028                       /* This is a duplicate.  */
8029                       /* FIXME: Memory leak.  Sometimes pattern is not
8030                          xmalloced alone, but in larger chunk of memory.  */
8031                       /* free (e->pattern); */
8032                       free (e);
8033                     }
8034                   else
8035                     {
8036                       e->next = last->next;
8037                       last->next = e;
8038                     }
8039                 }
8040               else
8041                 {
8042                   *loc = e;
8043                   *list_loc = e;
8044                   list_loc = &e->next;
8045                 }
8046             }
8047         }
8048       *remaining_loc = NULL;
8049       *list_loc = head->remaining;
8050     }
8051   else
8052     head->remaining = head->list;
8053 }
8054
8055 /* This is called when we know the name and dependencies of the
8056    version.  */
8057
8058 void
8059 lang_register_vers_node (const char *name,
8060                          struct bfd_elf_version_tree *version,
8061                          struct bfd_elf_version_deps *deps)
8062 {
8063   struct bfd_elf_version_tree *t, **pp;
8064   struct bfd_elf_version_expr *e1;
8065
8066   if (name == NULL)
8067     name = "";
8068
8069   if (link_info.version_info != NULL
8070       && (name[0] == '\0' || link_info.version_info->name[0] == '\0'))
8071     {
8072       einfo (_("%X%P: anonymous version tag cannot be combined"
8073                " with other version tags\n"));
8074       free (version);
8075       return;
8076     }
8077
8078   /* Make sure this node has a unique name.  */
8079   for (t = link_info.version_info; t != NULL; t = t->next)
8080     if (strcmp (t->name, name) == 0)
8081       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
8082
8083   lang_finalize_version_expr_head (&version->globals);
8084   lang_finalize_version_expr_head (&version->locals);
8085
8086   /* Check the global and local match names, and make sure there
8087      aren't any duplicates.  */
8088
8089   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
8090     {
8091       for (t = link_info.version_info; t != NULL; t = t->next)
8092         {
8093           struct bfd_elf_version_expr *e2;
8094
8095           if (t->locals.htab && e1->literal)
8096             {
8097               e2 = (struct bfd_elf_version_expr *)
8098                   htab_find ((htab_t) t->locals.htab, e1);
8099               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
8100                 {
8101                   if (e1->mask == e2->mask)
8102                     einfo (_("%X%P: duplicate expression `%s'"
8103                              " in version information\n"), e1->pattern);
8104                   e2 = e2->next;
8105                 }
8106             }
8107           else if (!e1->literal)
8108             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
8109               if (strcmp (e1->pattern, e2->pattern) == 0
8110                   && e1->mask == e2->mask)
8111                 einfo (_("%X%P: duplicate expression `%s'"
8112                          " in version information\n"), e1->pattern);
8113         }
8114     }
8115
8116   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
8117     {
8118       for (t = link_info.version_info; t != NULL; t = t->next)
8119         {
8120           struct bfd_elf_version_expr *e2;
8121
8122           if (t->globals.htab && e1->literal)
8123             {
8124               e2 = (struct bfd_elf_version_expr *)
8125                   htab_find ((htab_t) t->globals.htab, e1);
8126               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
8127                 {
8128                   if (e1->mask == e2->mask)
8129                     einfo (_("%X%P: duplicate expression `%s'"
8130                              " in version information\n"),
8131                            e1->pattern);
8132                   e2 = e2->next;
8133                 }
8134             }
8135           else if (!e1->literal)
8136             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
8137               if (strcmp (e1->pattern, e2->pattern) == 0
8138                   && e1->mask == e2->mask)
8139                 einfo (_("%X%P: duplicate expression `%s'"
8140                          " in version information\n"), e1->pattern);
8141         }
8142     }
8143
8144   version->deps = deps;
8145   version->name = name;
8146   if (name[0] != '\0')
8147     {
8148       ++version_index;
8149       version->vernum = version_index;
8150     }
8151   else
8152     version->vernum = 0;
8153
8154   for (pp = &link_info.version_info; *pp != NULL; pp = &(*pp)->next)
8155     ;
8156   *pp = version;
8157 }
8158
8159 /* This is called when we see a version dependency.  */
8160
8161 struct bfd_elf_version_deps *
8162 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
8163 {
8164   struct bfd_elf_version_deps *ret;
8165   struct bfd_elf_version_tree *t;
8166
8167   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
8168   ret->next = list;
8169
8170   for (t = link_info.version_info; t != NULL; t = t->next)
8171     {
8172       if (strcmp (t->name, name) == 0)
8173         {
8174           ret->version_needed = t;
8175           return ret;
8176         }
8177     }
8178
8179   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
8180
8181   ret->version_needed = NULL;
8182   return ret;
8183 }
8184
8185 static void
8186 lang_do_version_exports_section (void)
8187 {
8188   struct bfd_elf_version_expr *greg = NULL, *lreg;
8189
8190   LANG_FOR_EACH_INPUT_STATEMENT (is)
8191     {
8192       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
8193       char *contents, *p;
8194       bfd_size_type len;
8195
8196       if (sec == NULL)
8197         continue;
8198
8199       len = sec->size;
8200       contents = (char *) xmalloc (len);
8201       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
8202         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
8203
8204       p = contents;
8205       while (p < contents + len)
8206         {
8207           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
8208           p = strchr (p, '\0') + 1;
8209         }
8210
8211       /* Do not free the contents, as we used them creating the regex.  */
8212
8213       /* Do not include this section in the link.  */
8214       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
8215     }
8216
8217   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
8218   lang_register_vers_node (command_line.version_exports_section,
8219                            lang_new_vers_node (greg, lreg), NULL);
8220 }
8221
8222 /* Evaluate LENGTH and ORIGIN parts of MEMORY spec */
8223
8224 static void
8225 lang_do_memory_regions (void)
8226 {
8227   lang_memory_region_type *r = lang_memory_region_list;
8228
8229   for (; r != NULL; r = r->next)
8230     {
8231       if (r->origin_exp)
8232         {
8233           exp_fold_tree_no_dot (r->origin_exp);
8234           if (expld.result.valid_p)
8235             {
8236               r->origin = expld.result.value;
8237               r->current = r->origin;
8238             }
8239           else
8240             einfo (_("%F%P: invalid origin for memory region %s\n"),
8241                    r->name_list.name);
8242         }
8243       if (r->length_exp)
8244         {
8245           exp_fold_tree_no_dot (r->length_exp);
8246           if (expld.result.valid_p)
8247             r->length = expld.result.value;
8248           else
8249             einfo (_("%F%P: invalid length for memory region %s\n"),
8250                    r->name_list.name);
8251         }
8252     }
8253 }
8254
8255 void
8256 lang_add_unique (const char *name)
8257 {
8258   struct unique_sections *ent;
8259
8260   for (ent = unique_section_list; ent; ent = ent->next)
8261     if (strcmp (ent->name, name) == 0)
8262       return;
8263
8264   ent = (struct unique_sections *) xmalloc (sizeof *ent);
8265   ent->name = xstrdup (name);
8266   ent->next = unique_section_list;
8267   unique_section_list = ent;
8268 }
8269
8270 /* Append the list of dynamic symbols to the existing one.  */
8271
8272 void
8273 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
8274 {
8275   if (link_info.dynamic_list)
8276     {
8277       struct bfd_elf_version_expr *tail;
8278       for (tail = dynamic; tail->next != NULL; tail = tail->next)
8279         ;
8280       tail->next = link_info.dynamic_list->head.list;
8281       link_info.dynamic_list->head.list = dynamic;
8282     }
8283   else
8284     {
8285       struct bfd_elf_dynamic_list *d;
8286
8287       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
8288       d->head.list = dynamic;
8289       d->match = lang_vers_match;
8290       link_info.dynamic_list = d;
8291     }
8292 }
8293
8294 /* Append the list of C++ typeinfo dynamic symbols to the existing
8295    one.  */
8296
8297 void
8298 lang_append_dynamic_list_cpp_typeinfo (void)
8299 {
8300   const char *symbols[] =
8301     {
8302       "typeinfo name for*",
8303       "typeinfo for*"
8304     };
8305   struct bfd_elf_version_expr *dynamic = NULL;
8306   unsigned int i;
8307
8308   for (i = 0; i < ARRAY_SIZE (symbols); i++)
8309     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8310                                      FALSE);
8311
8312   lang_append_dynamic_list (dynamic);
8313 }
8314
8315 /* Append the list of C++ operator new and delete dynamic symbols to the
8316    existing one.  */
8317
8318 void
8319 lang_append_dynamic_list_cpp_new (void)
8320 {
8321   const char *symbols[] =
8322     {
8323       "operator new*",
8324       "operator delete*"
8325     };
8326   struct bfd_elf_version_expr *dynamic = NULL;
8327   unsigned int i;
8328
8329   for (i = 0; i < ARRAY_SIZE (symbols); i++)
8330     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8331                                      FALSE);
8332
8333   lang_append_dynamic_list (dynamic);
8334 }
8335
8336 /* Scan a space and/or comma separated string of features.  */
8337
8338 void
8339 lang_ld_feature (char *str)
8340 {
8341   char *p, *q;
8342
8343   p = str;
8344   while (*p)
8345     {
8346       char sep;
8347       while (*p == ',' || ISSPACE (*p))
8348         ++p;
8349       if (!*p)
8350         break;
8351       q = p + 1;
8352       while (*q && *q != ',' && !ISSPACE (*q))
8353         ++q;
8354       sep = *q;
8355       *q = 0;
8356       if (strcasecmp (p, "SANE_EXPR") == 0)
8357         config.sane_expr = TRUE;
8358       else
8359         einfo (_("%X%P: unknown feature `%s'\n"), p);
8360       *q = sep;
8361       p = q;
8362     }
8363 }
8364
8365 /* Pretty print memory amount.  */
8366
8367 static void
8368 lang_print_memory_size (bfd_vma sz)
8369 {
8370   if ((sz & 0x3fffffff) == 0)
8371     printf ("%10" BFD_VMA_FMT "u GB", sz >> 30);
8372   else if ((sz & 0xfffff) == 0)
8373     printf ("%10" BFD_VMA_FMT "u MB", sz >> 20);
8374   else if ((sz & 0x3ff) == 0)
8375     printf ("%10" BFD_VMA_FMT "u KB", sz >> 10);
8376   else
8377     printf (" %10" BFD_VMA_FMT "u B", sz);
8378 }
8379
8380 /* Implement --print-memory-usage: disply per region memory usage.  */
8381
8382 void
8383 lang_print_memory_usage (void)
8384 {
8385   lang_memory_region_type *r;
8386
8387   printf ("Memory region         Used Size  Region Size  %%age Used\n");
8388   for (r = lang_memory_region_list; r->next != NULL; r = r->next)
8389     {
8390       bfd_vma used_length = r->current - r->origin;
8391       double percent;
8392
8393       printf ("%16s: ",r->name_list.name);
8394       lang_print_memory_size (used_length);
8395       lang_print_memory_size ((bfd_vma) r->length);
8396
8397       percent = used_length * 100.0 / r->length;
8398
8399       printf ("    %6.2f%%\n", percent);
8400     }
8401 }