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