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