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