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