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