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