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