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