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