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