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