Remove startup_file from ldlang.c.
[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
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 "safe-ctype.h"
27 #include "obstack.h"
28 #include "bfdlink.h"
29
30 #include "ld.h"
31 #include "ldmain.h"
32 #include "ldexp.h"
33 #include "ldlang.h"
34 #include <ldgram.h>
35 #include "ldlex.h"
36 #include "ldmisc.h"
37 #include "ldctor.h"
38 #include "ldfile.h"
39 #include "ldemul.h"
40 #include "fnmatch.h"
41 #include "demangle.h"
42 #include "hashtab.h"
43 #include "libbfd.h"
44 #ifdef ENABLE_PLUGINS
45 #include "plugin.h"
46 #endif /* ENABLE_PLUGINS */
47
48 #ifndef offsetof
49 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
50 #endif
51
52 /* Locals variables.  */
53 static struct obstack stat_obstack;
54 static struct obstack map_obstack;
55
56 #define obstack_chunk_alloc xmalloc
57 #define obstack_chunk_free free
58 static const char *entry_symbol_default = "start";
59 static bfd_boolean placed_commons = FALSE;
60 static bfd_boolean stripped_excluded_sections = FALSE;
61 static lang_output_section_statement_type *default_common_section;
62 static bfd_boolean map_option_f;
63 static bfd_vma print_dot;
64 static lang_input_statement_type *first_file;
65 static const char *current_target;
66 static lang_statement_list_type statement_list;
67 static struct bfd_hash_table lang_definedness_table;
68 static lang_statement_list_type *stat_save[10];
69 static lang_statement_list_type **stat_save_ptr = &stat_save[0];
70 static struct unique_sections *unique_section_list;
71 static bfd_boolean ldlang_sysrooted_script = FALSE;
72
73 /* Forward declarations.  */
74 static void exp_init_os (etree_type *);
75 static void init_map_userdata (bfd *, asection *, void *);
76 static lang_input_statement_type *lookup_name (const char *);
77 static struct bfd_hash_entry *lang_definedness_newfunc
78  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
79 static void insert_undefined (const char *);
80 static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
81 static void print_statement (lang_statement_union_type *,
82                              lang_output_section_statement_type *);
83 static void print_statement_list (lang_statement_union_type *,
84                                   lang_output_section_statement_type *);
85 static void print_statements (void);
86 static void print_input_section (asection *, bfd_boolean);
87 static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
88 static void lang_record_phdrs (void);
89 static void lang_do_version_exports_section (void);
90 static void lang_finalize_version_expr_head
91   (struct bfd_elf_version_expr_head *);
92
93 /* Exported variables.  */
94 const char *output_target;
95 lang_output_section_statement_type *abs_output_section;
96 lang_statement_list_type lang_output_section_statement;
97 lang_statement_list_type *stat_ptr = &statement_list;
98 lang_statement_list_type file_chain = { NULL, NULL };
99 lang_statement_list_type input_file_chain;
100 struct bfd_sym_chain entry_symbol = { NULL, NULL };
101 const char *entry_section = ".text";
102 bfd_boolean entry_from_cmdline;
103 bfd_boolean undef_from_cmdline;
104 bfd_boolean lang_has_input_file = FALSE;
105 bfd_boolean had_output_filename = FALSE;
106 bfd_boolean lang_float_flag = FALSE;
107 bfd_boolean delete_output_file_on_failure = FALSE;
108 struct lang_phdr *lang_phdr_list;
109 struct lang_nocrossrefs *nocrossref_list;
110 bfd_boolean missing_file = FALSE;
111 int ld_compatibility;
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_assop ('=', ".", 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_defined
2094       || hash_entry->type == bfd_link_hash_defweak)
2095     {
2096       struct fat_user_section_struct *ud;
2097       struct map_symbol_def *def;
2098
2099       ud = (struct fat_user_section_struct *)
2100           get_userdata (hash_entry->u.def.section);
2101       if  (! ud)
2102         {
2103           /* ??? What do we have to do to initialize this beforehand?  */
2104           /* The first time we get here is bfd_abs_section...  */
2105           init_map_userdata (0, hash_entry->u.def.section, 0);
2106           ud = (struct fat_user_section_struct *)
2107               get_userdata (hash_entry->u.def.section);
2108         }
2109       else if  (!ud->map_symbol_def_tail)
2110         ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2111
2112       def = (struct map_symbol_def *) obstack_alloc (&map_obstack, sizeof *def);
2113       def->entry = hash_entry;
2114       *(ud->map_symbol_def_tail) = def;
2115       ud->map_symbol_def_tail = &def->next;
2116       ud->map_symbol_def_count++;
2117     }
2118   return TRUE;
2119 }
2120
2121 /* Initialize an output section.  */
2122
2123 static void
2124 init_os (lang_output_section_statement_type *s, flagword flags)
2125 {
2126   if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
2127     einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
2128
2129   if (s->constraint != SPECIAL)
2130     s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
2131   if (s->bfd_section == NULL)
2132     s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
2133                                                          s->name, flags);
2134   if (s->bfd_section == NULL)
2135     {
2136       einfo (_("%P%F: output format %s cannot represent section called %s\n"),
2137              link_info.output_bfd->xvec->name, s->name);
2138     }
2139   s->bfd_section->output_section = s->bfd_section;
2140   s->bfd_section->output_offset = 0;
2141
2142   if (!link_info.reduce_memory_overheads)
2143     {
2144       fat_section_userdata_type *new_userdata = (fat_section_userdata_type *)
2145         stat_alloc (sizeof (fat_section_userdata_type));
2146       memset (new_userdata, 0, sizeof (fat_section_userdata_type));
2147       get_userdata (s->bfd_section) = new_userdata;
2148     }
2149
2150   /* If there is a base address, make sure that any sections it might
2151      mention are initialized.  */
2152   if (s->addr_tree != NULL)
2153     exp_init_os (s->addr_tree);
2154
2155   if (s->load_base != NULL)
2156     exp_init_os (s->load_base);
2157
2158   /* If supplied an alignment, set it.  */
2159   if (s->section_alignment != -1)
2160     s->bfd_section->alignment_power = s->section_alignment;
2161 }
2162
2163 /* Make sure that all output sections mentioned in an expression are
2164    initialized.  */
2165
2166 static void
2167 exp_init_os (etree_type *exp)
2168 {
2169   switch (exp->type.node_class)
2170     {
2171     case etree_assign:
2172     case etree_provide:
2173       exp_init_os (exp->assign.src);
2174       break;
2175
2176     case etree_binary:
2177       exp_init_os (exp->binary.lhs);
2178       exp_init_os (exp->binary.rhs);
2179       break;
2180
2181     case etree_trinary:
2182       exp_init_os (exp->trinary.cond);
2183       exp_init_os (exp->trinary.lhs);
2184       exp_init_os (exp->trinary.rhs);
2185       break;
2186
2187     case etree_assert:
2188       exp_init_os (exp->assert_s.child);
2189       break;
2190
2191     case etree_unary:
2192       exp_init_os (exp->unary.child);
2193       break;
2194
2195     case etree_name:
2196       switch (exp->type.node_code)
2197         {
2198         case ADDR:
2199         case LOADADDR:
2200         case SIZEOF:
2201           {
2202             lang_output_section_statement_type *os;
2203
2204             os = lang_output_section_find (exp->name.name);
2205             if (os != NULL && os->bfd_section == NULL)
2206               init_os (os, 0);
2207           }
2208         }
2209       break;
2210
2211     default:
2212       break;
2213     }
2214 }
2215 \f
2216 static void
2217 section_already_linked (bfd *abfd, asection *sec, void *data)
2218 {
2219   lang_input_statement_type *entry = (lang_input_statement_type *) data;
2220
2221   /* If we are only reading symbols from this object, then we want to
2222      discard all sections.  */
2223   if (entry->just_syms_flag)
2224     {
2225       bfd_link_just_syms (abfd, sec, &link_info);
2226       return;
2227     }
2228
2229   if (!(abfd->flags & DYNAMIC))
2230     bfd_section_already_linked (abfd, sec, &link_info);
2231 }
2232 \f
2233 /* The wild routines.
2234
2235    These expand statements like *(.text) and foo.o to a list of
2236    explicit actions, like foo.o(.text), bar.o(.text) and
2237    foo.o(.text, .data).  */
2238
2239 /* Add SECTION to the output section OUTPUT.  Do this by creating a
2240    lang_input_section statement which is placed at PTR.  FILE is the
2241    input file which holds SECTION.  */
2242
2243 void
2244 lang_add_section (lang_statement_list_type *ptr,
2245                   asection *section,
2246                   lang_output_section_statement_type *output)
2247 {
2248   flagword flags = section->flags;
2249   bfd_boolean discard;
2250   lang_input_section_type *new_section;
2251
2252   /* Discard sections marked with SEC_EXCLUDE.  */
2253   discard = (flags & SEC_EXCLUDE) != 0;
2254
2255   /* Discard input sections which are assigned to a section named
2256      DISCARD_SECTION_NAME.  */
2257   if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
2258     discard = TRUE;
2259
2260   /* Discard debugging sections if we are stripping debugging
2261      information.  */
2262   if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
2263       && (flags & SEC_DEBUGGING) != 0)
2264     discard = TRUE;
2265
2266   if (discard)
2267     {
2268       if (section->output_section == NULL)
2269         {
2270           /* This prevents future calls from assigning this section.  */
2271           section->output_section = bfd_abs_section_ptr;
2272         }
2273       return;
2274     }
2275
2276   if (section->output_section != NULL)
2277     return;
2278
2279   /* We don't copy the SEC_NEVER_LOAD flag from an input section
2280      to an output section, because we want to be able to include a
2281      SEC_NEVER_LOAD section in the middle of an otherwise loaded
2282      section (I don't know why we want to do this, but we do).
2283      build_link_order in ldwrite.c handles this case by turning
2284      the embedded SEC_NEVER_LOAD section into a fill.  */
2285   flags &= ~ SEC_NEVER_LOAD;
2286
2287   /* If final link, don't copy the SEC_LINK_ONCE flags, they've
2288      already been processed.  One reason to do this is that on pe
2289      format targets, .text$foo sections go into .text and it's odd
2290      to see .text with SEC_LINK_ONCE set.  */
2291
2292   if (!link_info.relocatable)
2293     flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC);
2294
2295   switch (output->sectype)
2296     {
2297     case normal_section:
2298     case overlay_section:
2299       break;
2300     case noalloc_section:
2301       flags &= ~SEC_ALLOC;
2302       break;
2303     case noload_section:
2304       flags &= ~SEC_LOAD;
2305       flags |= SEC_NEVER_LOAD;
2306       /* Unfortunately GNU ld has managed to evolve two different
2307          meanings to NOLOAD in scripts.  ELF gets a .bss style noload,
2308          alloc, no contents section.  All others get a noload, noalloc
2309          section.  */
2310       if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
2311         flags &= ~SEC_HAS_CONTENTS;
2312       else
2313         flags &= ~SEC_ALLOC;
2314       break;
2315     }
2316
2317   if (output->bfd_section == NULL)
2318     init_os (output, flags);
2319
2320   /* If SEC_READONLY is not set in the input section, then clear
2321      it from the output section.  */
2322   output->bfd_section->flags &= flags | ~SEC_READONLY;
2323
2324   if (output->bfd_section->linker_has_input)
2325     {
2326       /* Only set SEC_READONLY flag on the first input section.  */
2327       flags &= ~ SEC_READONLY;
2328
2329       /* Keep SEC_MERGE and SEC_STRINGS only if they are the same.  */
2330       if ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
2331           != (flags & (SEC_MERGE | SEC_STRINGS))
2332           || ((flags & SEC_MERGE) != 0
2333               && output->bfd_section->entsize != section->entsize))
2334         {
2335           output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
2336           flags &= ~ (SEC_MERGE | SEC_STRINGS);
2337         }
2338     }
2339   output->bfd_section->flags |= flags;
2340
2341   if (!output->bfd_section->linker_has_input)
2342     {
2343       output->bfd_section->linker_has_input = 1;
2344       /* This must happen after flags have been updated.  The output
2345          section may have been created before we saw its first input
2346          section, eg. for a data statement.  */
2347       bfd_init_private_section_data (section->owner, section,
2348                                      link_info.output_bfd,
2349                                      output->bfd_section,
2350                                      &link_info);
2351       if ((flags & SEC_MERGE) != 0)
2352         output->bfd_section->entsize = section->entsize;
2353     }
2354
2355   if ((flags & SEC_TIC54X_BLOCK) != 0
2356       && bfd_get_arch (section->owner) == bfd_arch_tic54x)
2357     {
2358       /* FIXME: This value should really be obtained from the bfd...  */
2359       output->block_value = 128;
2360     }
2361
2362   if (section->alignment_power > output->bfd_section->alignment_power)
2363     output->bfd_section->alignment_power = section->alignment_power;
2364
2365   section->output_section = output->bfd_section;
2366
2367   if (!link_info.relocatable
2368       && !stripped_excluded_sections)
2369     {
2370       asection *s = output->bfd_section->map_tail.s;
2371       output->bfd_section->map_tail.s = section;
2372       section->map_head.s = NULL;
2373       section->map_tail.s = s;
2374       if (s != NULL)
2375         s->map_head.s = section;
2376       else
2377         output->bfd_section->map_head.s = section;
2378     }
2379
2380   /* Add a section reference to the list.  */
2381   new_section = new_stat (lang_input_section, ptr);
2382   new_section->section = section;
2383 }
2384
2385 /* Handle wildcard sorting.  This returns the lang_input_section which
2386    should follow the one we are going to create for SECTION and FILE,
2387    based on the sorting requirements of WILD.  It returns NULL if the
2388    new section should just go at the end of the current list.  */
2389
2390 static lang_statement_union_type *
2391 wild_sort (lang_wild_statement_type *wild,
2392            struct wildcard_list *sec,
2393            lang_input_statement_type *file,
2394            asection *section)
2395 {
2396   lang_statement_union_type *l;
2397
2398   if (!wild->filenames_sorted
2399       && (sec == NULL || sec->spec.sorted == none))
2400     return NULL;
2401
2402   for (l = wild->children.head; l != NULL; l = l->header.next)
2403     {
2404       lang_input_section_type *ls;
2405
2406       if (l->header.type != lang_input_section_enum)
2407         continue;
2408       ls = &l->input_section;
2409
2410       /* Sorting by filename takes precedence over sorting by section
2411          name.  */
2412
2413       if (wild->filenames_sorted)
2414         {
2415           const char *fn, *ln;
2416           bfd_boolean fa, la;
2417           int i;
2418
2419           /* The PE support for the .idata section as generated by
2420              dlltool assumes that files will be sorted by the name of
2421              the archive and then the name of the file within the
2422              archive.  */
2423
2424           if (file->the_bfd != NULL
2425               && bfd_my_archive (file->the_bfd) != NULL)
2426             {
2427               fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
2428               fa = TRUE;
2429             }
2430           else
2431             {
2432               fn = file->filename;
2433               fa = FALSE;
2434             }
2435
2436           if (bfd_my_archive (ls->section->owner) != NULL)
2437             {
2438               ln = bfd_get_filename (bfd_my_archive (ls->section->owner));
2439               la = TRUE;
2440             }
2441           else
2442             {
2443               ln = ls->section->owner->filename;
2444               la = FALSE;
2445             }
2446
2447           i = strcmp (fn, ln);
2448           if (i > 0)
2449             continue;
2450           else if (i < 0)
2451             break;
2452
2453           if (fa || la)
2454             {
2455               if (fa)
2456                 fn = file->filename;
2457               if (la)
2458                 ln = ls->section->owner->filename;
2459
2460               i = strcmp (fn, ln);
2461               if (i > 0)
2462                 continue;
2463               else if (i < 0)
2464                 break;
2465             }
2466         }
2467
2468       /* Here either the files are not sorted by name, or we are
2469          looking at the sections for this file.  */
2470
2471       if (sec != NULL && sec->spec.sorted != none)
2472         if (compare_section (sec->spec.sorted, section, ls->section) < 0)
2473           break;
2474     }
2475
2476   return l;
2477 }
2478
2479 /* Expand a wild statement for a particular FILE.  SECTION may be
2480    NULL, in which case it is a wild card.  */
2481
2482 static void
2483 output_section_callback (lang_wild_statement_type *ptr,
2484                          struct wildcard_list *sec,
2485                          asection *section,
2486                          lang_input_statement_type *file,
2487                          void *output)
2488 {
2489   lang_statement_union_type *before;
2490   lang_output_section_statement_type *os;
2491
2492   os = (lang_output_section_statement_type *) output;
2493
2494   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2495   if (unique_section_p (section, os))
2496     return;
2497
2498   before = wild_sort (ptr, sec, file, section);
2499
2500   /* Here BEFORE points to the lang_input_section which
2501      should follow the one we are about to add.  If BEFORE
2502      is NULL, then the section should just go at the end
2503      of the current list.  */
2504
2505   if (before == NULL)
2506     lang_add_section (&ptr->children, section, os);
2507   else
2508     {
2509       lang_statement_list_type list;
2510       lang_statement_union_type **pp;
2511
2512       lang_list_init (&list);
2513       lang_add_section (&list, section, os);
2514
2515       /* If we are discarding the section, LIST.HEAD will
2516          be NULL.  */
2517       if (list.head != NULL)
2518         {
2519           ASSERT (list.head->header.next == NULL);
2520
2521           for (pp = &ptr->children.head;
2522                *pp != before;
2523                pp = &(*pp)->header.next)
2524             ASSERT (*pp != NULL);
2525
2526           list.head->header.next = *pp;
2527           *pp = list.head;
2528         }
2529     }
2530 }
2531
2532 /* Check if all sections in a wild statement for a particular FILE
2533    are readonly.  */
2534
2535 static void
2536 check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2537                         struct wildcard_list *sec ATTRIBUTE_UNUSED,
2538                         asection *section,
2539                         lang_input_statement_type *file ATTRIBUTE_UNUSED,
2540                         void *output)
2541 {
2542   lang_output_section_statement_type *os;
2543
2544   os = (lang_output_section_statement_type *) output;
2545
2546   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2547   if (unique_section_p (section, os))
2548     return;
2549
2550   if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2551     os->all_input_readonly = FALSE;
2552 }
2553
2554 /* This is passed a file name which must have been seen already and
2555    added to the statement tree.  We will see if it has been opened
2556    already and had its symbols read.  If not then we'll read it.  */
2557
2558 static lang_input_statement_type *
2559 lookup_name (const char *name)
2560 {
2561   lang_input_statement_type *search;
2562
2563   for (search = (lang_input_statement_type *) input_file_chain.head;
2564        search != NULL;
2565        search = (lang_input_statement_type *) search->next_real_file)
2566     {
2567       /* Use the local_sym_name as the name of the file that has
2568          already been loaded as filename might have been transformed
2569          via the search directory lookup mechanism.  */
2570       const char *filename = search->local_sym_name;
2571
2572       if (filename != NULL
2573           && strcmp (filename, name) == 0)
2574         break;
2575     }
2576
2577   if (search == NULL)
2578     search = new_afile (name, lang_input_file_is_search_file_enum,
2579                         default_target, FALSE);
2580
2581   /* If we have already added this file, or this file is not real
2582      don't add this file.  */
2583   if (search->loaded || !search->real)
2584     return search;
2585
2586   if (! load_symbols (search, NULL))
2587     return NULL;
2588
2589   return search;
2590 }
2591
2592 /* Save LIST as a list of libraries whose symbols should not be exported.  */
2593
2594 struct excluded_lib
2595 {
2596   char *name;
2597   struct excluded_lib *next;
2598 };
2599 static struct excluded_lib *excluded_libs;
2600
2601 void
2602 add_excluded_libs (const char *list)
2603 {
2604   const char *p = list, *end;
2605
2606   while (*p != '\0')
2607     {
2608       struct excluded_lib *entry;
2609       end = strpbrk (p, ",:");
2610       if (end == NULL)
2611         end = p + strlen (p);
2612       entry = (struct excluded_lib *) xmalloc (sizeof (*entry));
2613       entry->next = excluded_libs;
2614       entry->name = (char *) xmalloc (end - p + 1);
2615       memcpy (entry->name, p, end - p);
2616       entry->name[end - p] = '\0';
2617       excluded_libs = entry;
2618       if (*end == '\0')
2619         break;
2620       p = end + 1;
2621     }
2622 }
2623
2624 static void
2625 check_excluded_libs (bfd *abfd)
2626 {
2627   struct excluded_lib *lib = excluded_libs;
2628
2629   while (lib)
2630     {
2631       int len = strlen (lib->name);
2632       const char *filename = lbasename (abfd->filename);
2633
2634       if (strcmp (lib->name, "ALL") == 0)
2635         {
2636           abfd->no_export = TRUE;
2637           return;
2638         }
2639
2640       if (strncmp (lib->name, filename, len) == 0
2641           && (filename[len] == '\0'
2642               || (filename[len] == '.' && filename[len + 1] == 'a'
2643                   && filename[len + 2] == '\0')))
2644         {
2645           abfd->no_export = TRUE;
2646           return;
2647         }
2648
2649       lib = lib->next;
2650     }
2651 }
2652
2653 /* Get the symbols for an input file.  */
2654
2655 bfd_boolean
2656 load_symbols (lang_input_statement_type *entry,
2657               lang_statement_list_type *place)
2658 {
2659   char **matching;
2660
2661   if (entry->loaded)
2662     return TRUE;
2663
2664   ldfile_open_file (entry);
2665
2666   /* Do not process further if the file was missing.  */
2667   if (entry->missing_file)
2668     return TRUE;
2669
2670   if (! bfd_check_format (entry->the_bfd, bfd_archive)
2671       && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2672     {
2673       bfd_error_type err;
2674       bfd_boolean save_ldlang_sysrooted_script;
2675       bfd_boolean save_add_DT_NEEDED_for_regular;
2676       bfd_boolean save_add_DT_NEEDED_for_dynamic;
2677       bfd_boolean save_whole_archive;
2678
2679       err = bfd_get_error ();
2680
2681       /* See if the emulation has some special knowledge.  */
2682       if (ldemul_unrecognized_file (entry))
2683         return TRUE;
2684
2685       if (err == bfd_error_file_ambiguously_recognized)
2686         {
2687           char **p;
2688
2689           einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2690           einfo (_("%B: matching formats:"), entry->the_bfd);
2691           for (p = matching; *p != NULL; p++)
2692             einfo (" %s", *p);
2693           einfo ("%F\n");
2694         }
2695       else if (err != bfd_error_file_not_recognized
2696                || place == NULL)
2697         einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2698
2699       bfd_close (entry->the_bfd);
2700       entry->the_bfd = NULL;
2701
2702       /* Try to interpret the file as a linker script.  */
2703       ldfile_open_command_file (entry->filename);
2704
2705       push_stat_ptr (place);
2706       save_ldlang_sysrooted_script = ldlang_sysrooted_script;
2707       ldlang_sysrooted_script = entry->sysrooted;
2708       save_add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
2709       add_DT_NEEDED_for_regular = entry->add_DT_NEEDED_for_regular;
2710       save_add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
2711       add_DT_NEEDED_for_dynamic = entry->add_DT_NEEDED_for_dynamic;
2712       save_whole_archive = whole_archive;
2713       whole_archive = entry->whole_archive;
2714
2715       ldfile_assumed_script = TRUE;
2716       parser_input = input_script;
2717       /* We want to use the same -Bdynamic/-Bstatic as the one for
2718          ENTRY.  */
2719       config.dynamic_link = entry->dynamic;
2720       yyparse ();
2721       ldfile_assumed_script = FALSE;
2722
2723       ldlang_sysrooted_script = save_ldlang_sysrooted_script;
2724       add_DT_NEEDED_for_regular = save_add_DT_NEEDED_for_regular;
2725       add_DT_NEEDED_for_dynamic = save_add_DT_NEEDED_for_dynamic;
2726       whole_archive = save_whole_archive;
2727       pop_stat_ptr ();
2728
2729       return TRUE;
2730     }
2731
2732   if (ldemul_recognized_file (entry))
2733     return TRUE;
2734
2735   /* We don't call ldlang_add_file for an archive.  Instead, the
2736      add_symbols entry point will call ldlang_add_file, via the
2737      add_archive_element callback, for each element of the archive
2738      which is used.  */
2739   switch (bfd_get_format (entry->the_bfd))
2740     {
2741     default:
2742       break;
2743
2744     case bfd_object:
2745       ldlang_add_file (entry);
2746       if (trace_files || trace_file_tries)
2747         info_msg ("%I\n", entry);
2748       break;
2749
2750     case bfd_archive:
2751       check_excluded_libs (entry->the_bfd);
2752
2753       if (entry->whole_archive)
2754         {
2755           bfd *member = NULL;
2756           bfd_boolean loaded = TRUE;
2757
2758           for (;;)
2759             {
2760               bfd *subsbfd;
2761               member = bfd_openr_next_archived_file (entry->the_bfd, member);
2762
2763               if (member == NULL)
2764                 break;
2765
2766               if (! bfd_check_format (member, bfd_object))
2767                 {
2768                   einfo (_("%F%B: member %B in archive is not an object\n"),
2769                          entry->the_bfd, member);
2770                   loaded = FALSE;
2771                 }
2772
2773               subsbfd = member;
2774               if (!(*link_info.callbacks
2775                     ->add_archive_element) (&link_info, member,
2776                                             "--whole-archive", &subsbfd))
2777                 abort ();
2778
2779               /* Potentially, the add_archive_element hook may have set a
2780                  substitute BFD for us.  */
2781               if (!bfd_link_add_symbols (subsbfd, &link_info))
2782                 {
2783                   einfo (_("%F%B: could not read symbols: %E\n"), member);
2784                   loaded = FALSE;
2785                 }
2786             }
2787
2788           entry->loaded = loaded;
2789           return loaded;
2790         }
2791       break;
2792     }
2793
2794   if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2795     entry->loaded = TRUE;
2796   else
2797     einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
2798
2799   return entry->loaded;
2800 }
2801
2802 /* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
2803    may be NULL, indicating that it is a wildcard.  Separate
2804    lang_input_section statements are created for each part of the
2805    expansion; they are added after the wild statement S.  OUTPUT is
2806    the output section.  */
2807
2808 static void
2809 wild (lang_wild_statement_type *s,
2810       const char *target ATTRIBUTE_UNUSED,
2811       lang_output_section_statement_type *output)
2812 {
2813   struct wildcard_list *sec;
2814
2815   if (s->handler_data[0]
2816       && s->handler_data[0]->spec.sorted == by_name
2817       && !s->filenames_sorted)
2818     {
2819       lang_section_bst_type *tree;
2820
2821       walk_wild (s, output_section_callback_fast, output);
2822
2823       tree = s->tree;
2824       if (tree)
2825         {
2826           output_section_callback_tree_to_list (s, tree, output);
2827           s->tree = NULL;
2828         }
2829     }
2830   else
2831     walk_wild (s, output_section_callback, output);
2832
2833   if (default_common_section == NULL)
2834     for (sec = s->section_list; sec != NULL; sec = sec->next)
2835       if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2836         {
2837           /* Remember the section that common is going to in case we
2838              later get something which doesn't know where to put it.  */
2839           default_common_section = output;
2840           break;
2841         }
2842 }
2843
2844 /* Return TRUE iff target is the sought target.  */
2845
2846 static int
2847 get_target (const bfd_target *target, void *data)
2848 {
2849   const char *sought = (const char *) data;
2850
2851   return strcmp (target->name, sought) == 0;
2852 }
2853
2854 /* Like strcpy() but convert to lower case as well.  */
2855
2856 static void
2857 stricpy (char *dest, char *src)
2858 {
2859   char c;
2860
2861   while ((c = *src++) != 0)
2862     *dest++ = TOLOWER (c);
2863
2864   *dest = 0;
2865 }
2866
2867 /* Remove the first occurrence of needle (if any) in haystack
2868    from haystack.  */
2869
2870 static void
2871 strcut (char *haystack, char *needle)
2872 {
2873   haystack = strstr (haystack, needle);
2874
2875   if (haystack)
2876     {
2877       char *src;
2878
2879       for (src = haystack + strlen (needle); *src;)
2880         *haystack++ = *src++;
2881
2882       *haystack = 0;
2883     }
2884 }
2885
2886 /* Compare two target format name strings.
2887    Return a value indicating how "similar" they are.  */
2888
2889 static int
2890 name_compare (char *first, char *second)
2891 {
2892   char *copy1;
2893   char *copy2;
2894   int result;
2895
2896   copy1 = (char *) xmalloc (strlen (first) + 1);
2897   copy2 = (char *) xmalloc (strlen (second) + 1);
2898
2899   /* Convert the names to lower case.  */
2900   stricpy (copy1, first);
2901   stricpy (copy2, second);
2902
2903   /* Remove size and endian strings from the name.  */
2904   strcut (copy1, "big");
2905   strcut (copy1, "little");
2906   strcut (copy2, "big");
2907   strcut (copy2, "little");
2908
2909   /* Return a value based on how many characters match,
2910      starting from the beginning.   If both strings are
2911      the same then return 10 * their length.  */
2912   for (result = 0; copy1[result] == copy2[result]; result++)
2913     if (copy1[result] == 0)
2914       {
2915         result *= 10;
2916         break;
2917       }
2918
2919   free (copy1);
2920   free (copy2);
2921
2922   return result;
2923 }
2924
2925 /* Set by closest_target_match() below.  */
2926 static const bfd_target *winner;
2927
2928 /* Scan all the valid bfd targets looking for one that has the endianness
2929    requirement that was specified on the command line, and is the nearest
2930    match to the original output target.  */
2931
2932 static int
2933 closest_target_match (const bfd_target *target, void *data)
2934 {
2935   const bfd_target *original = (const bfd_target *) data;
2936
2937   if (command_line.endian == ENDIAN_BIG
2938       && target->byteorder != BFD_ENDIAN_BIG)
2939     return 0;
2940
2941   if (command_line.endian == ENDIAN_LITTLE
2942       && target->byteorder != BFD_ENDIAN_LITTLE)
2943     return 0;
2944
2945   /* Must be the same flavour.  */
2946   if (target->flavour != original->flavour)
2947     return 0;
2948
2949   /* Ignore generic big and little endian elf vectors.  */
2950   if (strcmp (target->name, "elf32-big") == 0
2951       || strcmp (target->name, "elf64-big") == 0
2952       || strcmp (target->name, "elf32-little") == 0
2953       || strcmp (target->name, "elf64-little") == 0)
2954     return 0;
2955
2956   /* If we have not found a potential winner yet, then record this one.  */
2957   if (winner == NULL)
2958     {
2959       winner = target;
2960       return 0;
2961     }
2962
2963   /* Oh dear, we now have two potential candidates for a successful match.
2964      Compare their names and choose the better one.  */
2965   if (name_compare (target->name, original->name)
2966       > name_compare (winner->name, original->name))
2967     winner = target;
2968
2969   /* Keep on searching until wqe have checked them all.  */
2970   return 0;
2971 }
2972
2973 /* Return the BFD target format of the first input file.  */
2974
2975 static char *
2976 get_first_input_target (void)
2977 {
2978   char *target = NULL;
2979
2980   LANG_FOR_EACH_INPUT_STATEMENT (s)
2981     {
2982       if (s->header.type == lang_input_statement_enum
2983           && s->real)
2984         {
2985           ldfile_open_file (s);
2986
2987           if (s->the_bfd != NULL
2988               && bfd_check_format (s->the_bfd, bfd_object))
2989             {
2990               target = bfd_get_target (s->the_bfd);
2991
2992               if (target != NULL)
2993                 break;
2994             }
2995         }
2996     }
2997
2998   return target;
2999 }
3000
3001 const char *
3002 lang_get_output_target (void)
3003 {
3004   const char *target;
3005
3006   /* Has the user told us which output format to use?  */
3007   if (output_target != NULL)
3008     return output_target;
3009
3010   /* No - has the current target been set to something other than
3011      the default?  */
3012   if (current_target != default_target)
3013     return current_target;
3014
3015   /* No - can we determine the format of the first input file?  */
3016   target = get_first_input_target ();
3017   if (target != NULL)
3018     return target;
3019
3020   /* Failed - use the default output target.  */
3021   return default_target;
3022 }
3023
3024 /* Open the output file.  */
3025
3026 static void
3027 open_output (const char *name)
3028 {
3029   output_target = lang_get_output_target ();
3030
3031   /* Has the user requested a particular endianness on the command
3032      line?  */
3033   if (command_line.endian != ENDIAN_UNSET)
3034     {
3035       const bfd_target *target;
3036       enum bfd_endian desired_endian;
3037
3038       /* Get the chosen target.  */
3039       target = bfd_search_for_target (get_target, (void *) output_target);
3040
3041       /* If the target is not supported, we cannot do anything.  */
3042       if (target != NULL)
3043         {
3044           if (command_line.endian == ENDIAN_BIG)
3045             desired_endian = BFD_ENDIAN_BIG;
3046           else
3047             desired_endian = BFD_ENDIAN_LITTLE;
3048
3049           /* See if the target has the wrong endianness.  This should
3050              not happen if the linker script has provided big and
3051              little endian alternatives, but some scrips don't do
3052              this.  */
3053           if (target->byteorder != desired_endian)
3054             {
3055               /* If it does, then see if the target provides
3056                  an alternative with the correct endianness.  */
3057               if (target->alternative_target != NULL
3058                   && (target->alternative_target->byteorder == desired_endian))
3059                 output_target = target->alternative_target->name;
3060               else
3061                 {
3062                   /* Try to find a target as similar as possible to
3063                      the default target, but which has the desired
3064                      endian characteristic.  */
3065                   bfd_search_for_target (closest_target_match,
3066                                          (void *) target);
3067
3068                   /* Oh dear - we could not find any targets that
3069                      satisfy our requirements.  */
3070                   if (winner == NULL)
3071                     einfo (_("%P: warning: could not find any targets"
3072                              " that match endianness requirement\n"));
3073                   else
3074                     output_target = winner->name;
3075                 }
3076             }
3077         }
3078     }
3079
3080   link_info.output_bfd = bfd_openw (name, output_target);
3081
3082   if (link_info.output_bfd == NULL)
3083     {
3084       if (bfd_get_error () == bfd_error_invalid_target)
3085         einfo (_("%P%F: target %s not found\n"), output_target);
3086
3087       einfo (_("%P%F: cannot open output file %s: %E\n"), name);
3088     }
3089
3090   delete_output_file_on_failure = TRUE;
3091
3092   if (! bfd_set_format (link_info.output_bfd, bfd_object))
3093     einfo (_("%P%F:%s: can not make object file: %E\n"), name);
3094   if (! bfd_set_arch_mach (link_info.output_bfd,
3095                            ldfile_output_architecture,
3096                            ldfile_output_machine))
3097     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
3098
3099   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
3100   if (link_info.hash == NULL)
3101     einfo (_("%P%F: can not create hash table: %E\n"));
3102
3103   bfd_set_gp_size (link_info.output_bfd, g_switch_value);
3104 }
3105
3106 static void
3107 ldlang_open_output (lang_statement_union_type *statement)
3108 {
3109   switch (statement->header.type)
3110     {
3111     case lang_output_statement_enum:
3112       ASSERT (link_info.output_bfd == NULL);
3113       open_output (statement->output_statement.name);
3114       ldemul_set_output_arch ();
3115       if (config.magic_demand_paged && !link_info.relocatable)
3116         link_info.output_bfd->flags |= D_PAGED;
3117       else
3118         link_info.output_bfd->flags &= ~D_PAGED;
3119       if (config.text_read_only)
3120         link_info.output_bfd->flags |= WP_TEXT;
3121       else
3122         link_info.output_bfd->flags &= ~WP_TEXT;
3123       if (link_info.traditional_format)
3124         link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
3125       else
3126         link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
3127       break;
3128
3129     case lang_target_statement_enum:
3130       current_target = statement->target_statement.target;
3131       break;
3132     default:
3133       break;
3134     }
3135 }
3136
3137 /* Convert between addresses in bytes and sizes in octets.
3138    For currently supported targets, octets_per_byte is always a power
3139    of two, so we can use shifts.  */
3140 #define TO_ADDR(X) ((X) >> opb_shift)
3141 #define TO_SIZE(X) ((X) << opb_shift)
3142
3143 /* Support the above.  */
3144 static unsigned int opb_shift = 0;
3145
3146 static void
3147 init_opb (void)
3148 {
3149   unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3150                                               ldfile_output_machine);
3151   opb_shift = 0;
3152   if (x > 1)
3153     while ((x & 1) == 0)
3154       {
3155         x >>= 1;
3156         ++opb_shift;
3157       }
3158   ASSERT (x == 1);
3159 }
3160
3161 /* Open all the input files.  */
3162
3163 static void
3164 open_input_bfds (lang_statement_union_type *s, bfd_boolean force)
3165 {
3166   for (; s != NULL; s = s->header.next)
3167     {
3168       switch (s->header.type)
3169         {
3170         case lang_constructors_statement_enum:
3171           open_input_bfds (constructor_list.head, force);
3172           break;
3173         case lang_output_section_statement_enum:
3174           open_input_bfds (s->output_section_statement.children.head, force);
3175           break;
3176         case lang_wild_statement_enum:
3177           /* Maybe we should load the file's symbols.  */
3178           if (s->wild_statement.filename
3179               && !wildcardp (s->wild_statement.filename)
3180               && !archive_path (s->wild_statement.filename))
3181             lookup_name (s->wild_statement.filename);
3182           open_input_bfds (s->wild_statement.children.head, force);
3183           break;
3184         case lang_group_statement_enum:
3185           {
3186             struct bfd_link_hash_entry *undefs;
3187
3188             /* We must continually search the entries in the group
3189                until no new symbols are added to the list of undefined
3190                symbols.  */
3191
3192             do
3193               {
3194                 undefs = link_info.hash->undefs_tail;
3195                 open_input_bfds (s->group_statement.children.head, TRUE);
3196               }
3197             while (undefs != link_info.hash->undefs_tail);
3198           }
3199           break;
3200         case lang_target_statement_enum:
3201           current_target = s->target_statement.target;
3202           break;
3203         case lang_input_statement_enum:
3204           if (s->input_statement.real)
3205             {
3206               lang_statement_union_type **os_tail;
3207               lang_statement_list_type add;
3208
3209               s->input_statement.target = current_target;
3210
3211               /* If we are being called from within a group, and this
3212                  is an archive which has already been searched, then
3213                  force it to be researched unless the whole archive
3214                  has been loaded already.  */
3215               if (force
3216                   && !s->input_statement.whole_archive
3217                   && s->input_statement.loaded
3218                   && bfd_check_format (s->input_statement.the_bfd,
3219                                        bfd_archive))
3220                 s->input_statement.loaded = FALSE;
3221
3222               os_tail = lang_output_section_statement.tail;
3223               lang_list_init (&add);
3224
3225               if (! load_symbols (&s->input_statement, &add))
3226                 config.make_executable = FALSE;
3227
3228               if (add.head != NULL)
3229                 {
3230                   /* If this was a script with output sections then
3231                      tack any added statements on to the end of the
3232                      list.  This avoids having to reorder the output
3233                      section statement list.  Very likely the user
3234                      forgot -T, and whatever we do here will not meet
3235                      naive user expectations.  */
3236                   if (os_tail != lang_output_section_statement.tail)
3237                     {
3238                       einfo (_("%P: warning: %s contains output sections;"
3239                                " did you forget -T?\n"),
3240                              s->input_statement.filename);
3241                       *stat_ptr->tail = add.head;
3242                       stat_ptr->tail = add.tail;
3243                     }
3244                   else
3245                     {
3246                       *add.tail = s->header.next;
3247                       s->header.next = add.head;
3248                     }
3249                 }
3250             }
3251           break;
3252         case lang_assignment_statement_enum:
3253           exp_fold_tree_no_dot (s->assignment_statement.exp);
3254           break;
3255         default:
3256           break;
3257         }
3258     }
3259
3260   /* Exit if any of the files were missing.  */
3261   if (missing_file)
3262     einfo ("%F");
3263 }
3264
3265 /* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions.  */
3266
3267 void
3268 lang_track_definedness (const char *name)
3269 {
3270   if (bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE) == NULL)
3271     einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
3272 }
3273
3274 /* New-function for the definedness hash table.  */
3275
3276 static struct bfd_hash_entry *
3277 lang_definedness_newfunc (struct bfd_hash_entry *entry,
3278                           struct bfd_hash_table *table ATTRIBUTE_UNUSED,
3279                           const char *name ATTRIBUTE_UNUSED)
3280 {
3281   struct lang_definedness_hash_entry *ret
3282     = (struct lang_definedness_hash_entry *) entry;
3283
3284   if (ret == NULL)
3285     ret = (struct lang_definedness_hash_entry *)
3286       bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
3287
3288   if (ret == NULL)
3289     einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
3290
3291   ret->iteration = -1;
3292   return &ret->root;
3293 }
3294
3295 /* Return the iteration when the definition of NAME was last updated.  A
3296    value of -1 means that the symbol is not defined in the linker script
3297    or the command line, but may be defined in the linker symbol table.  */
3298
3299 int
3300 lang_symbol_definition_iteration (const char *name)
3301 {
3302   struct lang_definedness_hash_entry *defentry
3303     = (struct lang_definedness_hash_entry *)
3304     bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3305
3306   /* We've already created this one on the presence of DEFINED in the
3307      script, so it can't be NULL unless something is borked elsewhere in
3308      the code.  */
3309   if (defentry == NULL)
3310     FAIL ();
3311
3312   return defentry->iteration;
3313 }
3314
3315 /* Update the definedness state of NAME.  */
3316
3317 void
3318 lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
3319 {
3320   struct lang_definedness_hash_entry *defentry
3321     = (struct lang_definedness_hash_entry *)
3322     bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3323
3324   /* We don't keep track of symbols not tested with DEFINED.  */
3325   if (defentry == NULL)
3326     return;
3327
3328   /* If the symbol was already defined, and not from an earlier statement
3329      iteration, don't update the definedness iteration, because that'd
3330      make the symbol seem defined in the linker script at this point, and
3331      it wasn't; it was defined in some object.  If we do anyway, DEFINED
3332      would start to yield false before this point and the construct "sym =
3333      DEFINED (sym) ? sym : X;" would change sym to X despite being defined
3334      in an object.  */
3335   if (h->type != bfd_link_hash_undefined
3336       && h->type != bfd_link_hash_common
3337       && h->type != bfd_link_hash_new
3338       && defentry->iteration == -1)
3339     return;
3340
3341   defentry->iteration = lang_statement_iteration;
3342 }
3343
3344 /* Add the supplied name to the symbol table as an undefined reference.
3345    This is a two step process as the symbol table doesn't even exist at
3346    the time the ld command line is processed.  First we put the name
3347    on a list, then, once the output file has been opened, transfer the
3348    name to the symbol table.  */
3349
3350 typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
3351
3352 #define ldlang_undef_chain_list_head entry_symbol.next
3353
3354 void
3355 ldlang_add_undef (const char *const name, bfd_boolean cmdline)
3356 {
3357   ldlang_undef_chain_list_type *new_undef;
3358
3359   undef_from_cmdline = undef_from_cmdline || cmdline;
3360   new_undef = (ldlang_undef_chain_list_type *) stat_alloc (sizeof (*new_undef));
3361   new_undef->next = ldlang_undef_chain_list_head;
3362   ldlang_undef_chain_list_head = new_undef;
3363
3364   new_undef->name = xstrdup (name);
3365
3366   if (link_info.output_bfd != NULL)
3367     insert_undefined (new_undef->name);
3368 }
3369
3370 /* Insert NAME as undefined in the symbol table.  */
3371
3372 static void
3373 insert_undefined (const char *name)
3374 {
3375   struct bfd_link_hash_entry *h;
3376
3377   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
3378   if (h == NULL)
3379     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3380   if (h->type == bfd_link_hash_new)
3381     {
3382       h->type = bfd_link_hash_undefined;
3383       h->u.undef.abfd = NULL;
3384       bfd_link_add_undef (link_info.hash, h);
3385     }
3386 }
3387
3388 /* Run through the list of undefineds created above and place them
3389    into the linker hash table as undefined symbols belonging to the
3390    script file.  */
3391
3392 static void
3393 lang_place_undefineds (void)
3394 {
3395   ldlang_undef_chain_list_type *ptr;
3396
3397   for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
3398     insert_undefined (ptr->name);
3399 }
3400
3401 /* Check for all readonly or some readwrite sections.  */
3402
3403 static void
3404 check_input_sections
3405   (lang_statement_union_type *s,
3406    lang_output_section_statement_type *output_section_statement)
3407 {
3408   for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3409     {
3410       switch (s->header.type)
3411         {
3412         case lang_wild_statement_enum:
3413           walk_wild (&s->wild_statement, check_section_callback,
3414                      output_section_statement);
3415           if (! output_section_statement->all_input_readonly)
3416             return;
3417           break;
3418         case lang_constructors_statement_enum:
3419           check_input_sections (constructor_list.head,
3420                                 output_section_statement);
3421           if (! output_section_statement->all_input_readonly)
3422             return;
3423           break;
3424         case lang_group_statement_enum:
3425           check_input_sections (s->group_statement.children.head,
3426                                 output_section_statement);
3427           if (! output_section_statement->all_input_readonly)
3428             return;
3429           break;
3430         default:
3431           break;
3432         }
3433     }
3434 }
3435
3436 /* Update wildcard statements if needed.  */
3437
3438 static void
3439 update_wild_statements (lang_statement_union_type *s)
3440 {
3441   struct wildcard_list *sec;
3442
3443   switch (sort_section)
3444     {
3445     default:
3446       FAIL ();
3447
3448     case none:
3449       break;
3450
3451     case by_name:
3452     case by_alignment:
3453       for (; s != NULL; s = s->header.next)
3454         {
3455           switch (s->header.type)
3456             {
3457             default:
3458               break;
3459
3460             case lang_wild_statement_enum:
3461               sec = s->wild_statement.section_list;
3462               for (sec = s->wild_statement.section_list; sec != NULL;
3463                    sec = sec->next)
3464                 {
3465                   switch (sec->spec.sorted)
3466                     {
3467                     case none:
3468                       sec->spec.sorted = sort_section;
3469                       break;
3470                     case by_name:
3471                       if (sort_section == by_alignment)
3472                         sec->spec.sorted = by_name_alignment;
3473                       break;
3474                     case by_alignment:
3475                       if (sort_section == by_name)
3476                         sec->spec.sorted = by_alignment_name;
3477                       break;
3478                     default:
3479                       break;
3480                     }
3481                 }
3482               break;
3483
3484             case lang_constructors_statement_enum:
3485               update_wild_statements (constructor_list.head);
3486               break;
3487
3488             case lang_output_section_statement_enum:
3489               update_wild_statements
3490                 (s->output_section_statement.children.head);
3491               break;
3492
3493             case lang_group_statement_enum:
3494               update_wild_statements (s->group_statement.children.head);
3495               break;
3496             }
3497         }
3498       break;
3499     }
3500 }
3501
3502 /* Open input files and attach to output sections.  */
3503
3504 static void
3505 map_input_to_output_sections
3506   (lang_statement_union_type *s, const char *target,
3507    lang_output_section_statement_type *os)
3508 {
3509   for (; s != NULL; s = s->header.next)
3510     {
3511       lang_output_section_statement_type *tos;
3512       flagword flags;
3513
3514       switch (s->header.type)
3515         {
3516         case lang_wild_statement_enum:
3517           wild (&s->wild_statement, target, os);
3518           break;
3519         case lang_constructors_statement_enum:
3520           map_input_to_output_sections (constructor_list.head,
3521                                         target,
3522                                         os);
3523           break;
3524         case lang_output_section_statement_enum:
3525           tos = &s->output_section_statement;
3526           if (tos->constraint != 0)
3527             {
3528               if (tos->constraint != ONLY_IF_RW
3529                   && tos->constraint != ONLY_IF_RO)
3530                 break;
3531               tos->all_input_readonly = TRUE;
3532               check_input_sections (tos->children.head, tos);
3533               if (tos->all_input_readonly != (tos->constraint == ONLY_IF_RO))
3534                 {
3535                   tos->constraint = -1;
3536                   break;
3537                 }
3538             }
3539           map_input_to_output_sections (tos->children.head,
3540                                         target,
3541                                         tos);
3542           break;
3543         case lang_output_statement_enum:
3544           break;
3545         case lang_target_statement_enum:
3546           target = s->target_statement.target;
3547           break;
3548         case lang_group_statement_enum:
3549           map_input_to_output_sections (s->group_statement.children.head,
3550                                         target,
3551                                         os);
3552           break;
3553         case lang_data_statement_enum:
3554           /* Make sure that any sections mentioned in the expression
3555              are initialized.  */
3556           exp_init_os (s->data_statement.exp);
3557           /* The output section gets CONTENTS, ALLOC and LOAD, but
3558              these may be overridden by the script.  */
3559           flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
3560           switch (os->sectype)
3561             {
3562             case normal_section:
3563             case overlay_section:
3564               break;
3565             case noalloc_section:
3566               flags = SEC_HAS_CONTENTS;
3567               break;
3568             case noload_section:
3569               if (bfd_get_flavour (link_info.output_bfd)
3570                   == bfd_target_elf_flavour)
3571                 flags = SEC_NEVER_LOAD | SEC_ALLOC;
3572               else
3573                 flags = SEC_NEVER_LOAD | SEC_HAS_CONTENTS;
3574               break;
3575             }
3576           if (os->bfd_section == NULL)
3577             init_os (os, flags);
3578           else
3579             os->bfd_section->flags |= flags;
3580           break;
3581         case lang_input_section_enum:
3582           break;
3583         case lang_fill_statement_enum:
3584         case lang_object_symbols_statement_enum:
3585         case lang_reloc_statement_enum:
3586         case lang_padding_statement_enum:
3587         case lang_input_statement_enum:
3588           if (os != NULL && os->bfd_section == NULL)
3589             init_os (os, 0);
3590           break;
3591         case lang_assignment_statement_enum:
3592           if (os != NULL && os->bfd_section == NULL)
3593             init_os (os, 0);
3594
3595           /* Make sure that any sections mentioned in the assignment
3596              are initialized.  */
3597           exp_init_os (s->assignment_statement.exp);
3598           break;
3599         case lang_address_statement_enum:
3600           /* Mark the specified section with the supplied address.
3601              If this section was actually a segment marker, then the
3602              directive is ignored if the linker script explicitly
3603              processed the segment marker.  Originally, the linker
3604              treated segment directives (like -Ttext on the
3605              command-line) as section directives.  We honor the
3606              section directive semantics for backwards compatibilty;
3607              linker scripts that do not specifically check for
3608              SEGMENT_START automatically get the old semantics.  */
3609           if (!s->address_statement.segment
3610               || !s->address_statement.segment->used)
3611             {
3612               const char *name = s->address_statement.section_name;
3613
3614               /* Create the output section statement here so that
3615                  orphans with a set address will be placed after other
3616                  script sections.  If we let the orphan placement code
3617                  place them in amongst other sections then the address
3618                  will affect following script sections, which is
3619                  likely to surprise naive users.  */
3620               tos = lang_output_section_statement_lookup (name, 0, TRUE);
3621               tos->addr_tree = s->address_statement.address;
3622               if (tos->bfd_section == NULL)
3623                 init_os (tos, 0);
3624             }
3625           break;
3626         case lang_insert_statement_enum:
3627           break;
3628         }
3629     }
3630 }
3631
3632 /* An insert statement snips out all the linker statements from the
3633    start of the list and places them after the output section
3634    statement specified by the insert.  This operation is complicated
3635    by the fact that we keep a doubly linked list of output section
3636    statements as well as the singly linked list of all statements.  */
3637
3638 static void
3639 process_insert_statements (void)
3640 {
3641   lang_statement_union_type **s;
3642   lang_output_section_statement_type *first_os = NULL;
3643   lang_output_section_statement_type *last_os = NULL;
3644   lang_output_section_statement_type *os;
3645
3646   /* "start of list" is actually the statement immediately after
3647      the special abs_section output statement, so that it isn't
3648      reordered.  */
3649   s = &lang_output_section_statement.head;
3650   while (*(s = &(*s)->header.next) != NULL)
3651     {
3652       if ((*s)->header.type == lang_output_section_statement_enum)
3653         {
3654           /* Keep pointers to the first and last output section
3655              statement in the sequence we may be about to move.  */
3656           os = &(*s)->output_section_statement;
3657
3658           ASSERT (last_os == NULL || last_os->next == os);
3659           last_os = os;
3660
3661           /* Set constraint negative so that lang_output_section_find
3662              won't match this output section statement.  At this
3663              stage in linking constraint has values in the range
3664              [-1, ONLY_IN_RW].  */
3665           last_os->constraint = -2 - last_os->constraint;
3666           if (first_os == NULL)
3667             first_os = last_os;
3668         }
3669       else if ((*s)->header.type == lang_insert_statement_enum)
3670         {
3671           lang_insert_statement_type *i = &(*s)->insert_statement;
3672           lang_output_section_statement_type *where;
3673           lang_statement_union_type **ptr;
3674           lang_statement_union_type *first;
3675
3676           where = lang_output_section_find (i->where);
3677           if (where != NULL && i->is_before)
3678             {
3679               do
3680                 where = where->prev;
3681               while (where != NULL && where->constraint < 0);
3682             }
3683           if (where == NULL)
3684             {
3685               einfo (_("%F%P: %s not found for insert\n"), i->where);
3686               return;
3687             }
3688
3689           /* Deal with reordering the output section statement list.  */
3690           if (last_os != NULL)
3691             {
3692               asection *first_sec, *last_sec;
3693               struct lang_output_section_statement_struct **next;
3694
3695               /* Snip out the output sections we are moving.  */
3696               first_os->prev->next = last_os->next;
3697               if (last_os->next == NULL)
3698                 {
3699                   next = &first_os->prev->next;
3700                   lang_output_section_statement.tail
3701                     = (lang_statement_union_type **) next;
3702                 }
3703               else
3704                 last_os->next->prev = first_os->prev;
3705               /* Add them in at the new position.  */
3706               last_os->next = where->next;
3707               if (where->next == NULL)
3708                 {
3709                   next = &last_os->next;
3710                   lang_output_section_statement.tail
3711                     = (lang_statement_union_type **) next;
3712                 }
3713               else
3714                 where->next->prev = last_os;
3715               first_os->prev = where;
3716               where->next = first_os;
3717
3718               /* Move the bfd sections in the same way.  */
3719               first_sec = NULL;
3720               last_sec = NULL;
3721               for (os = first_os; os != NULL; os = os->next)
3722                 {
3723                   os->constraint = -2 - os->constraint;
3724                   if (os->bfd_section != NULL
3725                       && os->bfd_section->owner != NULL)
3726                     {
3727                       last_sec = os->bfd_section;
3728                       if (first_sec == NULL)
3729                         first_sec = last_sec;
3730                     }
3731                   if (os == last_os)
3732                     break;
3733                 }
3734               if (last_sec != NULL)
3735                 {
3736                   asection *sec = where->bfd_section;
3737                   if (sec == NULL)
3738                     sec = output_prev_sec_find (where);
3739
3740                   /* The place we want to insert must come after the
3741                      sections we are moving.  So if we find no
3742                      section or if the section is the same as our
3743                      last section, then no move is needed.  */
3744                   if (sec != NULL && sec != last_sec)
3745                     {
3746                       /* Trim them off.  */
3747                       if (first_sec->prev != NULL)
3748                         first_sec->prev->next = last_sec->next;
3749                       else
3750                         link_info.output_bfd->sections = last_sec->next;
3751                       if (last_sec->next != NULL)
3752                         last_sec->next->prev = first_sec->prev;
3753                       else
3754                         link_info.output_bfd->section_last = first_sec->prev;
3755                       /* Add back.  */
3756                       last_sec->next = sec->next;
3757                       if (sec->next != NULL)
3758                         sec->next->prev = last_sec;
3759                       else
3760                         link_info.output_bfd->section_last = last_sec;
3761                       first_sec->prev = sec;
3762                       sec->next = first_sec;
3763                     }
3764                 }
3765
3766               first_os = NULL;
3767               last_os = NULL;
3768             }
3769
3770           ptr = insert_os_after (where);
3771           /* Snip everything after the abs_section output statement we
3772              know is at the start of the list, up to and including
3773              the insert statement we are currently processing.  */
3774           first = lang_output_section_statement.head->header.next;
3775           lang_output_section_statement.head->header.next = (*s)->header.next;
3776           /* Add them back where they belong.  */
3777           *s = *ptr;
3778           if (*s == NULL)
3779             statement_list.tail = s;
3780           *ptr = first;
3781           s = &lang_output_section_statement.head;
3782         }
3783     }
3784
3785   /* Undo constraint twiddling.  */
3786   for (os = first_os; os != NULL; os = os->next)
3787     {
3788       os->constraint = -2 - os->constraint;
3789       if (os == last_os)
3790         break;
3791     }
3792 }
3793
3794 /* An output section might have been removed after its statement was
3795    added.  For example, ldemul_before_allocation can remove dynamic
3796    sections if they turn out to be not needed.  Clean them up here.  */
3797
3798 void
3799 strip_excluded_output_sections (void)
3800 {
3801   lang_output_section_statement_type *os;
3802
3803   /* Run lang_size_sections (if not already done).  */
3804   if (expld.phase != lang_mark_phase_enum)
3805     {
3806       expld.phase = lang_mark_phase_enum;
3807       expld.dataseg.phase = exp_dataseg_none;
3808       one_lang_size_sections_pass (NULL, FALSE);
3809       lang_reset_memory_regions ();
3810     }
3811
3812   for (os = &lang_output_section_statement.head->output_section_statement;
3813        os != NULL;
3814        os = os->next)
3815     {
3816       asection *output_section;
3817       bfd_boolean exclude;
3818
3819       if (os->constraint < 0)
3820         continue;
3821
3822       output_section = os->bfd_section;
3823       if (output_section == NULL)
3824         continue;
3825
3826       exclude = (output_section->rawsize == 0
3827                  && (output_section->flags & SEC_KEEP) == 0
3828                  && !bfd_section_removed_from_list (link_info.output_bfd,
3829                                                     output_section));
3830
3831       /* Some sections have not yet been sized, notably .gnu.version,
3832          .dynsym, .dynstr and .hash.  These all have SEC_LINKER_CREATED
3833          input sections, so don't drop output sections that have such
3834          input sections unless they are also marked SEC_EXCLUDE.  */
3835       if (exclude && output_section->map_head.s != NULL)
3836         {
3837           asection *s;
3838
3839           for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
3840             if ((s->flags & SEC_LINKER_CREATED) != 0
3841                 && (s->flags & SEC_EXCLUDE) == 0)
3842               {
3843                 exclude = FALSE;
3844                 break;
3845               }
3846         }
3847
3848       /* TODO: Don't just junk map_head.s, turn them into link_orders.  */
3849       output_section->map_head.link_order = NULL;
3850       output_section->map_tail.link_order = NULL;
3851
3852       if (exclude)
3853         {
3854           /* We don't set bfd_section to NULL since bfd_section of the
3855              removed output section statement may still be used.  */
3856           if (!os->section_relative_symbol
3857               && !os->update_dot_tree)
3858             os->ignored = TRUE;
3859           output_section->flags |= SEC_EXCLUDE;
3860           bfd_section_list_remove (link_info.output_bfd, output_section);
3861           link_info.output_bfd->section_count--;
3862         }
3863     }
3864
3865   /* Stop future calls to lang_add_section from messing with map_head
3866      and map_tail link_order fields.  */
3867   stripped_excluded_sections = TRUE;
3868 }
3869
3870 static void
3871 print_output_section_statement
3872   (lang_output_section_statement_type *output_section_statement)
3873 {
3874   asection *section = output_section_statement->bfd_section;
3875   int len;
3876
3877   if (output_section_statement != abs_output_section)
3878     {
3879       minfo ("\n%s", output_section_statement->name);
3880
3881       if (section != NULL)
3882         {
3883           print_dot = section->vma;
3884
3885           len = strlen (output_section_statement->name);
3886           if (len >= SECTION_NAME_MAP_LENGTH - 1)
3887             {
3888               print_nl ();
3889               len = 0;
3890             }
3891           while (len < SECTION_NAME_MAP_LENGTH)
3892             {
3893               print_space ();
3894               ++len;
3895             }
3896
3897           minfo ("0x%V %W", section->vma, section->size);
3898
3899           if (section->vma != section->lma)
3900             minfo (_(" load address 0x%V"), section->lma);
3901
3902           if (output_section_statement->update_dot_tree != NULL)
3903             exp_fold_tree (output_section_statement->update_dot_tree,
3904                            bfd_abs_section_ptr, &print_dot);
3905         }
3906
3907       print_nl ();
3908     }
3909
3910   print_statement_list (output_section_statement->children.head,
3911                         output_section_statement);
3912 }
3913
3914 /* Scan for the use of the destination in the right hand side
3915    of an expression.  In such cases we will not compute the
3916    correct expression, since the value of DST that is used on
3917    the right hand side will be its final value, not its value
3918    just before this expression is evaluated.  */
3919
3920 static bfd_boolean
3921 scan_for_self_assignment (const char * dst, etree_type * rhs)
3922 {
3923   if (rhs == NULL || dst == NULL)
3924     return FALSE;
3925
3926   switch (rhs->type.node_class)
3927     {
3928     case etree_binary:
3929       return (scan_for_self_assignment (dst, rhs->binary.lhs)
3930               || scan_for_self_assignment (dst, rhs->binary.rhs));
3931
3932     case etree_trinary:
3933       return (scan_for_self_assignment (dst, rhs->trinary.lhs)
3934               || scan_for_self_assignment (dst, rhs->trinary.rhs));
3935
3936     case etree_assign:
3937     case etree_provided:
3938     case etree_provide:
3939       if (strcmp (dst, rhs->assign.dst) == 0)
3940         return TRUE;
3941       return scan_for_self_assignment (dst, rhs->assign.src);
3942
3943     case etree_unary:
3944       return scan_for_self_assignment (dst, rhs->unary.child);
3945
3946     case etree_value:
3947       if (rhs->value.str)
3948         return strcmp (dst, rhs->value.str) == 0;
3949       return FALSE;
3950
3951     case etree_name:
3952       if (rhs->name.name)
3953         return strcmp (dst, rhs->name.name) == 0;
3954       return FALSE;
3955
3956     default:
3957       break;
3958     }
3959
3960   return FALSE;
3961 }
3962
3963
3964 static void
3965 print_assignment (lang_assignment_statement_type *assignment,
3966                   lang_output_section_statement_type *output_section)
3967 {
3968   unsigned int i;
3969   bfd_boolean is_dot;
3970   bfd_boolean computation_is_valid = TRUE;
3971   etree_type *tree;
3972   asection *osec;
3973
3974   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
3975     print_space ();
3976
3977   if (assignment->exp->type.node_class == etree_assert)
3978     {
3979       is_dot = FALSE;
3980       tree = assignment->exp->assert_s.child;
3981       computation_is_valid = TRUE;
3982     }
3983   else
3984     {
3985       const char *dst = assignment->exp->assign.dst;
3986
3987       is_dot = (dst[0] == '.' && dst[1] == 0);
3988       tree = assignment->exp->assign.src;
3989       computation_is_valid = is_dot || !scan_for_self_assignment (dst, tree);
3990     }
3991
3992   osec = output_section->bfd_section;
3993   if (osec == NULL)
3994     osec = bfd_abs_section_ptr;
3995   exp_fold_tree (tree, osec, &print_dot);
3996   if (expld.result.valid_p)
3997     {
3998       bfd_vma value;
3999
4000       if (computation_is_valid)
4001         {
4002           value = expld.result.value;
4003
4004           if (expld.result.section != NULL)
4005             value += expld.result.section->vma;
4006
4007           minfo ("0x%V", value);
4008           if (is_dot)
4009             print_dot = value;
4010         }
4011       else
4012         {
4013           struct bfd_link_hash_entry *h;
4014
4015           h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
4016                                     FALSE, FALSE, TRUE);
4017           if (h)
4018             {
4019               value = h->u.def.value;
4020
4021               if (expld.result.section != NULL)
4022                 value += expld.result.section->vma;
4023
4024               minfo ("[0x%V]", value);
4025             }
4026           else
4027             minfo ("[unresolved]");
4028         }
4029     }
4030   else
4031     {
4032       minfo ("*undef*   ");
4033 #ifdef BFD64
4034       minfo ("        ");
4035 #endif
4036     }
4037
4038   minfo ("                ");
4039   exp_print_tree (assignment->exp);
4040   print_nl ();
4041 }
4042
4043 static void
4044 print_input_statement (lang_input_statement_type *statm)
4045 {
4046   if (statm->filename != NULL
4047       && (statm->the_bfd == NULL
4048           || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4049     fprintf (config.map_file, "LOAD %s\n", statm->filename);
4050 }
4051
4052 /* Print all symbols defined in a particular section.  This is called
4053    via bfd_link_hash_traverse, or by print_all_symbols.  */
4054
4055 static bfd_boolean
4056 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4057 {
4058   asection *sec = (asection *) ptr;
4059
4060   if ((hash_entry->type == bfd_link_hash_defined
4061        || hash_entry->type == bfd_link_hash_defweak)
4062       && sec == hash_entry->u.def.section)
4063     {
4064       int i;
4065
4066       for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4067         print_space ();
4068       minfo ("0x%V   ",
4069              (hash_entry->u.def.value
4070               + hash_entry->u.def.section->output_offset
4071               + hash_entry->u.def.section->output_section->vma));
4072
4073       minfo ("             %T\n", hash_entry->root.string);
4074     }
4075
4076   return TRUE;
4077 }
4078
4079 static int
4080 hash_entry_addr_cmp (const void *a, const void *b)
4081 {
4082   const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4083   const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4084
4085   if (l->u.def.value < r->u.def.value)
4086     return -1;
4087   else if (l->u.def.value > r->u.def.value)
4088     return 1;
4089   else
4090     return 0;
4091 }
4092
4093 static void
4094 print_all_symbols (asection *sec)
4095 {
4096   struct fat_user_section_struct *ud =
4097       (struct fat_user_section_struct *) get_userdata (sec);
4098   struct map_symbol_def *def;
4099   struct bfd_link_hash_entry **entries;
4100   unsigned int i;
4101
4102   if (!ud)
4103     return;
4104
4105   *ud->map_symbol_def_tail = 0;
4106
4107   /* Sort the symbols by address.  */
4108   entries = (struct bfd_link_hash_entry **)
4109       obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
4110
4111   for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4112     entries[i] = def->entry;
4113
4114   qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4115          hash_entry_addr_cmp);
4116
4117   /* Print the symbols.  */
4118   for (i = 0; i < ud->map_symbol_def_count; i++)
4119     print_one_symbol (entries[i], sec);
4120
4121   obstack_free (&map_obstack, entries);
4122 }
4123
4124 /* Print information about an input section to the map file.  */
4125
4126 static void
4127 print_input_section (asection *i, bfd_boolean is_discarded)
4128 {
4129   bfd_size_type size = i->size;
4130   int len;
4131   bfd_vma addr;
4132
4133   init_opb ();
4134
4135   print_space ();
4136   minfo ("%s", i->name);
4137
4138   len = 1 + strlen (i->name);
4139   if (len >= SECTION_NAME_MAP_LENGTH - 1)
4140     {
4141       print_nl ();
4142       len = 0;
4143     }
4144   while (len < SECTION_NAME_MAP_LENGTH)
4145     {
4146       print_space ();
4147       ++len;
4148     }
4149
4150   if (i->output_section != NULL
4151       && i->output_section->owner == link_info.output_bfd)
4152     addr = i->output_section->vma + i->output_offset;
4153   else
4154     {
4155       addr = print_dot;
4156       if (!is_discarded)
4157         size = 0;
4158     }
4159
4160   minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
4161
4162   if (size != i->rawsize && i->rawsize != 0)
4163     {
4164       len = SECTION_NAME_MAP_LENGTH + 3;
4165 #ifdef BFD64
4166       len += 16;
4167 #else
4168       len += 8;
4169 #endif
4170       while (len > 0)
4171         {
4172           print_space ();
4173           --len;
4174         }
4175
4176       minfo (_("%W (size before relaxing)\n"), i->rawsize);
4177     }
4178
4179   if (i->output_section != NULL
4180       && i->output_section->owner == link_info.output_bfd)
4181     {
4182       if (link_info.reduce_memory_overheads)
4183         bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4184       else
4185         print_all_symbols (i);
4186
4187       /* Update print_dot, but make sure that we do not move it
4188          backwards - this could happen if we have overlays and a
4189          later overlay is shorter than an earier one.  */
4190       if (addr + TO_ADDR (size) > print_dot)
4191         print_dot = addr + TO_ADDR (size);
4192     }
4193 }
4194
4195 static void
4196 print_fill_statement (lang_fill_statement_type *fill)
4197 {
4198   size_t size;
4199   unsigned char *p;
4200   fputs (" FILL mask 0x", config.map_file);
4201   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4202     fprintf (config.map_file, "%02x", *p);
4203   fputs ("\n", config.map_file);
4204 }
4205
4206 static void
4207 print_data_statement (lang_data_statement_type *data)
4208 {
4209   int i;
4210   bfd_vma addr;
4211   bfd_size_type size;
4212   const char *name;
4213
4214   init_opb ();
4215   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4216     print_space ();
4217
4218   addr = data->output_offset;
4219   if (data->output_section != NULL)
4220     addr += data->output_section->vma;
4221
4222   switch (data->type)
4223     {
4224     default:
4225       abort ();
4226     case BYTE:
4227       size = BYTE_SIZE;
4228       name = "BYTE";
4229       break;
4230     case SHORT:
4231       size = SHORT_SIZE;
4232       name = "SHORT";
4233       break;
4234     case LONG:
4235       size = LONG_SIZE;
4236       name = "LONG";
4237       break;
4238     case QUAD:
4239       size = QUAD_SIZE;
4240       name = "QUAD";
4241       break;
4242     case SQUAD:
4243       size = QUAD_SIZE;
4244       name = "SQUAD";
4245       break;
4246     }
4247
4248   minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
4249
4250   if (data->exp->type.node_class != etree_value)
4251     {
4252       print_space ();
4253       exp_print_tree (data->exp);
4254     }
4255
4256   print_nl ();
4257
4258   print_dot = addr + TO_ADDR (size);
4259 }
4260
4261 /* Print an address statement.  These are generated by options like
4262    -Ttext.  */
4263
4264 static void
4265 print_address_statement (lang_address_statement_type *address)
4266 {
4267   minfo (_("Address of section %s set to "), address->section_name);
4268   exp_print_tree (address->address);
4269   print_nl ();
4270 }
4271
4272 /* Print a reloc statement.  */
4273
4274 static void
4275 print_reloc_statement (lang_reloc_statement_type *reloc)
4276 {
4277   int i;
4278   bfd_vma addr;
4279   bfd_size_type size;
4280
4281   init_opb ();
4282   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4283     print_space ();
4284
4285   addr = reloc->output_offset;
4286   if (reloc->output_section != NULL)
4287     addr += reloc->output_section->vma;
4288
4289   size = bfd_get_reloc_size (reloc->howto);
4290
4291   minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
4292
4293   if (reloc->name != NULL)
4294     minfo ("%s+", reloc->name);
4295   else
4296     minfo ("%s+", reloc->section->name);
4297
4298   exp_print_tree (reloc->addend_exp);
4299
4300   print_nl ();
4301
4302   print_dot = addr + TO_ADDR (size);
4303 }
4304
4305 static void
4306 print_padding_statement (lang_padding_statement_type *s)
4307 {
4308   int len;
4309   bfd_vma addr;
4310
4311   init_opb ();
4312   minfo (" *fill*");
4313
4314   len = sizeof " *fill*" - 1;
4315   while (len < SECTION_NAME_MAP_LENGTH)
4316     {
4317       print_space ();
4318       ++len;
4319     }
4320
4321   addr = s->output_offset;
4322   if (s->output_section != NULL)
4323     addr += s->output_section->vma;
4324   minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4325
4326   if (s->fill->size != 0)
4327     {
4328       size_t size;
4329       unsigned char *p;
4330       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4331         fprintf (config.map_file, "%02x", *p);
4332     }
4333
4334   print_nl ();
4335
4336   print_dot = addr + TO_ADDR (s->size);
4337 }
4338
4339 static void
4340 print_wild_statement (lang_wild_statement_type *w,
4341                       lang_output_section_statement_type *os)
4342 {
4343   struct wildcard_list *sec;
4344
4345   print_space ();
4346
4347   if (w->filenames_sorted)
4348     minfo ("SORT(");
4349   if (w->filename != NULL)
4350     minfo ("%s", w->filename);
4351   else
4352     minfo ("*");
4353   if (w->filenames_sorted)
4354     minfo (")");
4355
4356   minfo ("(");
4357   for (sec = w->section_list; sec; sec = sec->next)
4358     {
4359       if (sec->spec.sorted)
4360         minfo ("SORT(");
4361       if (sec->spec.exclude_name_list != NULL)
4362         {
4363           name_list *tmp;
4364           minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4365           for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4366             minfo (" %s", tmp->name);
4367           minfo (") ");
4368         }
4369       if (sec->spec.name != NULL)
4370         minfo ("%s", sec->spec.name);
4371       else
4372         minfo ("*");
4373       if (sec->spec.sorted)
4374         minfo (")");
4375       if (sec->next)
4376         minfo (" ");
4377     }
4378   minfo (")");
4379
4380   print_nl ();
4381
4382   print_statement_list (w->children.head, os);
4383 }
4384
4385 /* Print a group statement.  */
4386
4387 static void
4388 print_group (lang_group_statement_type *s,
4389              lang_output_section_statement_type *os)
4390 {
4391   fprintf (config.map_file, "START GROUP\n");
4392   print_statement_list (s->children.head, os);
4393   fprintf (config.map_file, "END GROUP\n");
4394 }
4395
4396 /* Print the list of statements in S.
4397    This can be called for any statement type.  */
4398
4399 static void
4400 print_statement_list (lang_statement_union_type *s,
4401                       lang_output_section_statement_type *os)
4402 {
4403   while (s != NULL)
4404     {
4405       print_statement (s, os);
4406       s = s->header.next;
4407     }
4408 }
4409
4410 /* Print the first statement in statement list S.
4411    This can be called for any statement type.  */
4412
4413 static void
4414 print_statement (lang_statement_union_type *s,
4415                  lang_output_section_statement_type *os)
4416 {
4417   switch (s->header.type)
4418     {
4419     default:
4420       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4421       FAIL ();
4422       break;
4423     case lang_constructors_statement_enum:
4424       if (constructor_list.head != NULL)
4425         {
4426           if (constructors_sorted)
4427             minfo (" SORT (CONSTRUCTORS)\n");
4428           else
4429             minfo (" CONSTRUCTORS\n");
4430           print_statement_list (constructor_list.head, os);
4431         }
4432       break;
4433     case lang_wild_statement_enum:
4434       print_wild_statement (&s->wild_statement, os);
4435       break;
4436     case lang_address_statement_enum:
4437       print_address_statement (&s->address_statement);
4438       break;
4439     case lang_object_symbols_statement_enum:
4440       minfo (" CREATE_OBJECT_SYMBOLS\n");
4441       break;
4442     case lang_fill_statement_enum:
4443       print_fill_statement (&s->fill_statement);
4444       break;
4445     case lang_data_statement_enum:
4446       print_data_statement (&s->data_statement);
4447       break;
4448     case lang_reloc_statement_enum:
4449       print_reloc_statement (&s->reloc_statement);
4450       break;
4451     case lang_input_section_enum:
4452       print_input_section (s->input_section.section, FALSE);
4453       break;
4454     case lang_padding_statement_enum:
4455       print_padding_statement (&s->padding_statement);
4456       break;
4457     case lang_output_section_statement_enum:
4458       print_output_section_statement (&s->output_section_statement);
4459       break;
4460     case lang_assignment_statement_enum:
4461       print_assignment (&s->assignment_statement, os);
4462       break;
4463     case lang_target_statement_enum:
4464       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4465       break;
4466     case lang_output_statement_enum:
4467       minfo ("OUTPUT(%s", s->output_statement.name);
4468       if (output_target != NULL)
4469         minfo (" %s", output_target);
4470       minfo (")\n");
4471       break;
4472     case lang_input_statement_enum:
4473       print_input_statement (&s->input_statement);
4474       break;
4475     case lang_group_statement_enum:
4476       print_group (&s->group_statement, os);
4477       break;
4478     case lang_insert_statement_enum:
4479       minfo ("INSERT %s %s\n",
4480              s->insert_statement.is_before ? "BEFORE" : "AFTER",
4481              s->insert_statement.where);
4482       break;
4483     }
4484 }
4485
4486 static void
4487 print_statements (void)
4488 {
4489   print_statement_list (statement_list.head, abs_output_section);
4490 }
4491
4492 /* Print the first N statements in statement list S to STDERR.
4493    If N == 0, nothing is printed.
4494    If N < 0, the entire list is printed.
4495    Intended to be called from GDB.  */
4496
4497 void
4498 dprint_statement (lang_statement_union_type *s, int n)
4499 {
4500   FILE *map_save = config.map_file;
4501
4502   config.map_file = stderr;
4503
4504   if (n < 0)
4505     print_statement_list (s, abs_output_section);
4506   else
4507     {
4508       while (s && --n >= 0)
4509         {
4510           print_statement (s, abs_output_section);
4511           s = s->header.next;
4512         }
4513     }
4514
4515   config.map_file = map_save;
4516 }
4517
4518 static void
4519 insert_pad (lang_statement_union_type **ptr,
4520             fill_type *fill,
4521             unsigned int alignment_needed,
4522             asection *output_section,
4523             bfd_vma dot)
4524 {
4525   static fill_type zero_fill = { 1, { 0 } };
4526   lang_statement_union_type *pad = NULL;
4527
4528   if (ptr != &statement_list.head)
4529     pad = ((lang_statement_union_type *)
4530            ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4531   if (pad != NULL
4532       && pad->header.type == lang_padding_statement_enum
4533       && pad->padding_statement.output_section == output_section)
4534     {
4535       /* Use the existing pad statement.  */
4536     }
4537   else if ((pad = *ptr) != NULL
4538            && pad->header.type == lang_padding_statement_enum
4539            && pad->padding_statement.output_section == output_section)
4540     {
4541       /* Use the existing pad statement.  */
4542     }
4543   else
4544     {
4545       /* Make a new padding statement, linked into existing chain.  */
4546       pad = (lang_statement_union_type *)
4547           stat_alloc (sizeof (lang_padding_statement_type));
4548       pad->header.next = *ptr;
4549       *ptr = pad;
4550       pad->header.type = lang_padding_statement_enum;
4551       pad->padding_statement.output_section = output_section;
4552       if (fill == NULL)
4553         fill = &zero_fill;
4554       pad->padding_statement.fill = fill;
4555     }
4556   pad->padding_statement.output_offset = dot - output_section->vma;
4557   pad->padding_statement.size = alignment_needed;
4558   output_section->size += alignment_needed;
4559 }
4560
4561 /* Work out how much this section will move the dot point.  */
4562
4563 static bfd_vma
4564 size_input_section
4565   (lang_statement_union_type **this_ptr,
4566    lang_output_section_statement_type *output_section_statement,
4567    fill_type *fill,
4568    bfd_vma dot)
4569 {
4570   lang_input_section_type *is = &((*this_ptr)->input_section);
4571   asection *i = is->section;
4572
4573   if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
4574       && (i->flags & SEC_EXCLUDE) == 0)
4575     {
4576       unsigned int alignment_needed;
4577       asection *o;
4578
4579       /* Align this section first to the input sections requirement,
4580          then to the output section's requirement.  If this alignment
4581          is greater than any seen before, then record it too.  Perform
4582          the alignment by inserting a magic 'padding' statement.  */
4583
4584       if (output_section_statement->subsection_alignment != -1)
4585         i->alignment_power = output_section_statement->subsection_alignment;
4586
4587       o = output_section_statement->bfd_section;
4588       if (o->alignment_power < i->alignment_power)
4589         o->alignment_power = i->alignment_power;
4590
4591       alignment_needed = align_power (dot, i->alignment_power) - dot;
4592
4593       if (alignment_needed != 0)
4594         {
4595           insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4596           dot += alignment_needed;
4597         }
4598
4599       /* Remember where in the output section this input section goes.  */
4600
4601       i->output_offset = dot - o->vma;
4602
4603       /* Mark how big the output section must be to contain this now.  */
4604       dot += TO_ADDR (i->size);
4605       o->size = TO_SIZE (dot - o->vma);
4606     }
4607   else
4608     {
4609       i->output_offset = i->vma - output_section_statement->bfd_section->vma;
4610     }
4611
4612   return dot;
4613 }
4614
4615 static int
4616 sort_sections_by_lma (const void *arg1, const void *arg2)
4617 {
4618   const asection *sec1 = *(const asection **) arg1;
4619   const asection *sec2 = *(const asection **) arg2;
4620
4621   if (bfd_section_lma (sec1->owner, sec1)
4622       < bfd_section_lma (sec2->owner, sec2))
4623     return -1;
4624   else if (bfd_section_lma (sec1->owner, sec1)
4625            > bfd_section_lma (sec2->owner, sec2))
4626     return 1;
4627   else if (sec1->id < sec2->id)
4628     return -1;
4629   else if (sec1->id > sec2->id)
4630     return 1;
4631
4632   return 0;
4633 }
4634
4635 #define IGNORE_SECTION(s) \
4636   ((s->flags & SEC_ALLOC) == 0                          \
4637    || ((s->flags & SEC_THREAD_LOCAL) != 0               \
4638         && (s->flags & SEC_LOAD) == 0))
4639
4640 /* Check to see if any allocated sections overlap with other allocated
4641    sections.  This can happen if a linker script specifies the output
4642    section addresses of the two sections.  Also check whether any memory
4643    region has overflowed.  */
4644
4645 static void
4646 lang_check_section_addresses (void)
4647 {
4648   asection *s, *p;
4649   asection **sections, **spp;
4650   unsigned int count;
4651   bfd_vma s_start;
4652   bfd_vma s_end;
4653   bfd_vma p_start;
4654   bfd_vma p_end;
4655   bfd_size_type amt;
4656   lang_memory_region_type *m;
4657
4658   if (bfd_count_sections (link_info.output_bfd) <= 1)
4659     return;
4660
4661   amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4662   sections = (asection **) xmalloc (amt);
4663
4664   /* Scan all sections in the output list.  */
4665   count = 0;
4666   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4667     {
4668       /* Only consider loadable sections with real contents.  */
4669       if (!(s->flags & SEC_LOAD)
4670           || !(s->flags & SEC_ALLOC)
4671           || s->size == 0)
4672         continue;
4673
4674       sections[count] = s;
4675       count++;
4676     }
4677
4678   if (count <= 1)
4679     return;
4680
4681   qsort (sections, (size_t) count, sizeof (asection *),
4682          sort_sections_by_lma);
4683
4684   spp = sections;
4685   s = *spp++;
4686   s_start = s->lma;
4687   s_end = s_start + TO_ADDR (s->size) - 1;
4688   for (count--; count; count--)
4689     {
4690       /* We must check the sections' LMA addresses not their VMA
4691          addresses because overlay sections can have overlapping VMAs
4692          but they must have distinct LMAs.  */
4693       p = s;
4694       p_start = s_start;
4695       p_end = s_end;
4696       s = *spp++;
4697       s_start = s->lma;
4698       s_end = s_start + TO_ADDR (s->size) - 1;
4699
4700       /* Look for an overlap.  We have sorted sections by lma, so we
4701          know that s_start >= p_start.  Besides the obvious case of
4702          overlap when the current section starts before the previous
4703          one ends, we also must have overlap if the previous section
4704          wraps around the address space.  */
4705       if (s_start <= p_end
4706           || p_end < p_start)
4707         einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
4708                s->name, s_start, s_end, p->name, p_start, p_end);
4709     }
4710
4711   free (sections);
4712
4713   /* If any memory region has overflowed, report by how much.
4714      We do not issue this diagnostic for regions that had sections
4715      explicitly placed outside their bounds; os_region_check's
4716      diagnostics are adequate for that case.
4717
4718      FIXME: It is conceivable that m->current - (m->origin + m->length)
4719      might overflow a 32-bit integer.  There is, alas, no way to print
4720      a bfd_vma quantity in decimal.  */
4721   for (m = lang_memory_region_list; m; m = m->next)
4722     if (m->had_full_message)
4723       einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4724              m->name_list.name, (long)(m->current - (m->origin + m->length)));
4725
4726 }
4727
4728 /* Make sure the new address is within the region.  We explicitly permit the
4729    current address to be at the exact end of the region when the address is
4730    non-zero, in case the region is at the end of addressable memory and the
4731    calculation wraps around.  */
4732
4733 static void
4734 os_region_check (lang_output_section_statement_type *os,
4735                  lang_memory_region_type *region,
4736                  etree_type *tree,
4737                  bfd_vma rbase)
4738 {
4739   if ((region->current < region->origin
4740        || (region->current - region->origin > region->length))
4741       && ((region->current != region->origin + region->length)
4742           || rbase == 0))
4743     {
4744       if (tree != NULL)
4745         {
4746           einfo (_("%X%P: address 0x%v of %B section `%s'"
4747                    " is not within region `%s'\n"),
4748                  region->current,
4749                  os->bfd_section->owner,
4750                  os->bfd_section->name,
4751                  region->name_list.name);
4752         }
4753       else if (!region->had_full_message)
4754         {
4755           region->had_full_message = TRUE;
4756
4757           einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4758                  os->bfd_section->owner,
4759                  os->bfd_section->name,
4760                  region->name_list.name);
4761         }
4762     }
4763 }
4764
4765 /* Set the sizes for all the output sections.  */
4766
4767 static bfd_vma
4768 lang_size_sections_1
4769   (lang_statement_union_type **prev,
4770    lang_output_section_statement_type *output_section_statement,
4771    fill_type *fill,
4772    bfd_vma dot,
4773    bfd_boolean *relax,
4774    bfd_boolean check_regions)
4775 {
4776   lang_statement_union_type *s;
4777
4778   /* Size up the sections from their constituent parts.  */
4779   for (s = *prev; s != NULL; s = s->header.next)
4780     {
4781       switch (s->header.type)
4782         {
4783         case lang_output_section_statement_enum:
4784           {
4785             bfd_vma newdot, after;
4786             lang_output_section_statement_type *os;
4787             lang_memory_region_type *r;
4788             int section_alignment = 0;
4789
4790             os = &s->output_section_statement;
4791             if (os->constraint == -1)
4792               break;
4793
4794             /* FIXME: We shouldn't need to zero section vmas for ld -r
4795                here, in lang_insert_orphan, or in the default linker scripts.
4796                This is covering for coff backend linker bugs.  See PR6945.  */
4797             if (os->addr_tree == NULL
4798                 && link_info.relocatable
4799                 && (bfd_get_flavour (link_info.output_bfd)
4800                     == bfd_target_coff_flavour))
4801               os->addr_tree = exp_intop (0);
4802             if (os->addr_tree != NULL)
4803               {
4804                 os->processed_vma = FALSE;
4805                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4806
4807                 if (expld.result.valid_p)
4808                   {
4809                     dot = expld.result.value;
4810                     if (expld.result.section != NULL)
4811                       dot += expld.result.section->vma;
4812                   }
4813                 else if (expld.phase != lang_mark_phase_enum)
4814                   einfo (_("%F%S: non constant or forward reference"
4815                            " address expression for section %s\n"),
4816                          os->name);
4817               }
4818
4819             if (os->bfd_section == NULL)
4820               /* This section was removed or never actually created.  */
4821               break;
4822
4823             /* If this is a COFF shared library section, use the size and
4824                address from the input section.  FIXME: This is COFF
4825                specific; it would be cleaner if there were some other way
4826                to do this, but nothing simple comes to mind.  */
4827             if (((bfd_get_flavour (link_info.output_bfd)
4828                   == bfd_target_ecoff_flavour)
4829                  || (bfd_get_flavour (link_info.output_bfd)
4830                      == bfd_target_coff_flavour))
4831                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4832               {
4833                 asection *input;
4834
4835                 if (os->children.head == NULL
4836                     || os->children.head->header.next != NULL
4837                     || (os->children.head->header.type
4838                         != lang_input_section_enum))
4839                   einfo (_("%P%X: Internal error on COFF shared library"
4840                            " section %s\n"), os->name);
4841
4842                 input = os->children.head->input_section.section;
4843                 bfd_set_section_vma (os->bfd_section->owner,
4844                                      os->bfd_section,
4845                                      bfd_section_vma (input->owner, input));
4846                 os->bfd_section->size = input->size;
4847                 break;
4848               }
4849
4850             newdot = dot;
4851             if (bfd_is_abs_section (os->bfd_section))
4852               {
4853                 /* No matter what happens, an abs section starts at zero.  */
4854                 ASSERT (os->bfd_section->vma == 0);
4855               }
4856             else
4857               {
4858                 if (os->addr_tree == NULL)
4859                   {
4860                     /* No address specified for this section, get one
4861                        from the region specification.  */
4862                     if (os->region == NULL
4863                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4864                             && os->region->name_list.name[0] == '*'
4865                             && strcmp (os->region->name_list.name,
4866                                        DEFAULT_MEMORY_REGION) == 0))
4867                       {
4868                         os->region = lang_memory_default (os->bfd_section);
4869                       }
4870
4871                     /* If a loadable section is using the default memory
4872                        region, and some non default memory regions were
4873                        defined, issue an error message.  */
4874                     if (!os->ignored
4875                         && !IGNORE_SECTION (os->bfd_section)
4876                         && ! link_info.relocatable
4877                         && check_regions
4878                         && strcmp (os->region->name_list.name,
4879                                    DEFAULT_MEMORY_REGION) == 0
4880                         && lang_memory_region_list != NULL
4881                         && (strcmp (lang_memory_region_list->name_list.name,
4882                                     DEFAULT_MEMORY_REGION) != 0
4883                             || lang_memory_region_list->next != NULL)
4884                         && expld.phase != lang_mark_phase_enum)
4885                       {
4886                         /* By default this is an error rather than just a
4887                            warning because if we allocate the section to the
4888                            default memory region we can end up creating an
4889                            excessively large binary, or even seg faulting when
4890                            attempting to perform a negative seek.  See
4891                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
4892                            for an example of this.  This behaviour can be
4893                            overridden by the using the --no-check-sections
4894                            switch.  */
4895                         if (command_line.check_section_addresses)
4896                           einfo (_("%P%F: error: no memory region specified"
4897                                    " for loadable section `%s'\n"),
4898                                  bfd_get_section_name (link_info.output_bfd,
4899                                                        os->bfd_section));
4900                         else
4901                           einfo (_("%P: warning: no memory region specified"
4902                                    " for loadable section `%s'\n"),
4903                                  bfd_get_section_name (link_info.output_bfd,
4904                                                        os->bfd_section));
4905                       }
4906
4907                     newdot = os->region->current;
4908                     section_alignment = os->bfd_section->alignment_power;
4909                   }
4910                 else
4911                   section_alignment = os->section_alignment;
4912
4913                 /* Align to what the section needs.  */
4914                 if (section_alignment > 0)
4915                   {
4916                     bfd_vma savedot = newdot;
4917                     newdot = align_power (newdot, section_alignment);
4918
4919                     if (newdot != savedot
4920                         && (config.warn_section_align
4921                             || os->addr_tree != NULL)
4922                         && expld.phase != lang_mark_phase_enum)
4923                       einfo (_("%P: warning: changing start of section"
4924                                " %s by %lu bytes\n"),
4925                              os->name, (unsigned long) (newdot - savedot));
4926                   }
4927
4928                 bfd_set_section_vma (0, os->bfd_section, newdot);
4929
4930                 os->bfd_section->output_offset = 0;
4931               }
4932
4933             lang_size_sections_1 (&os->children.head, os,
4934                                   os->fill, newdot, relax, check_regions);
4935
4936             os->processed_vma = TRUE;
4937
4938             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4939               /* Except for some special linker created sections,
4940                  no output section should change from zero size
4941                  after strip_excluded_output_sections.  A non-zero
4942                  size on an ignored section indicates that some
4943                  input section was not sized early enough.  */
4944               ASSERT (os->bfd_section->size == 0);
4945             else
4946               {
4947                 dot = os->bfd_section->vma;
4948
4949                 /* Put the section within the requested block size, or
4950                    align at the block boundary.  */
4951                 after = ((dot
4952                           + TO_ADDR (os->bfd_section->size)
4953                           + os->block_value - 1)
4954                          & - (bfd_vma) os->block_value);
4955
4956                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4957               }
4958
4959             /* Set section lma.  */
4960             r = os->region;
4961             if (r == NULL)
4962               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4963
4964             if (os->load_base)
4965               {
4966                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4967                 os->bfd_section->lma = lma;
4968               }
4969             else if (os->lma_region != NULL)
4970               {
4971                 bfd_vma lma = os->lma_region->current;
4972
4973                 if (section_alignment > 0)
4974                   lma = align_power (lma, section_alignment);
4975                 os->bfd_section->lma = lma;
4976               }
4977             else if (r->last_os != NULL
4978                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
4979               {
4980                 bfd_vma lma;
4981                 asection *last;
4982
4983                 last = r->last_os->output_section_statement.bfd_section;
4984
4985                 /* A backwards move of dot should be accompanied by
4986                    an explicit assignment to the section LMA (ie.
4987                    os->load_base set) because backwards moves can
4988                    create overlapping LMAs.  */
4989                 if (dot < last->vma
4990                     && os->bfd_section->size != 0
4991                     && dot + os->bfd_section->size <= last->vma)
4992                   {
4993                     /* If dot moved backwards then leave lma equal to
4994                        vma.  This is the old default lma, which might
4995                        just happen to work when the backwards move is
4996                        sufficiently large.  Nag if this changes anything,
4997                        so people can fix their linker scripts.  */
4998
4999                     if (last->vma != last->lma)
5000                       einfo (_("%P: warning: dot moved backwards before `%s'\n"),
5001                              os->name);
5002                   }
5003                 else
5004                   {
5005                     /* If this is an overlay, set the current lma to that
5006                        at the end of the previous section.  */
5007                     if (os->sectype == overlay_section)
5008                       lma = last->lma + last->size;
5009
5010                     /* Otherwise, keep the same lma to vma relationship
5011                        as the previous section.  */
5012                     else
5013                       lma = dot + last->lma - last->vma;
5014
5015                     if (section_alignment > 0)
5016                       lma = align_power (lma, section_alignment);
5017                     os->bfd_section->lma = lma;
5018                   }
5019               }
5020             os->processed_lma = TRUE;
5021
5022             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5023               break;
5024
5025             /* Keep track of normal sections using the default
5026                lma region.  We use this to set the lma for
5027                following sections.  Overlays or other linker
5028                script assignment to lma might mean that the
5029                default lma == vma is incorrect.
5030                To avoid warnings about dot moving backwards when using
5031                -Ttext, don't start tracking sections until we find one
5032                of non-zero size or with lma set differently to vma.  */
5033             if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5034                  || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
5035                 && (os->bfd_section->flags & SEC_ALLOC) != 0
5036                 && (os->bfd_section->size != 0
5037                     || (r->last_os == NULL
5038                         && os->bfd_section->vma != os->bfd_section->lma)
5039                     || (r->last_os != NULL
5040                         && dot >= (r->last_os->output_section_statement
5041                                    .bfd_section->vma)))
5042                 && os->lma_region == NULL
5043                 && !link_info.relocatable)
5044               r->last_os = s;
5045
5046             /* .tbss sections effectively have zero size.  */
5047             if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5048                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5049                 || link_info.relocatable)
5050               dot += TO_ADDR (os->bfd_section->size);
5051
5052             if (os->update_dot_tree != 0)
5053               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5054
5055             /* Update dot in the region ?
5056                We only do this if the section is going to be allocated,
5057                since unallocated sections do not contribute to the region's
5058                overall size in memory.  */
5059             if (os->region != NULL
5060                 && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5061               {
5062                 os->region->current = dot;
5063
5064                 if (check_regions)
5065                   /* Make sure the new address is within the region.  */
5066                   os_region_check (os, os->region, os->addr_tree,
5067                                    os->bfd_section->vma);
5068
5069                 if (os->lma_region != NULL && os->lma_region != os->region
5070                     && (os->bfd_section->flags & SEC_LOAD))
5071                   {
5072                     os->lma_region->current
5073                       = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
5074
5075                     if (check_regions)
5076                       os_region_check (os, os->lma_region, NULL,
5077                                        os->bfd_section->lma);
5078                   }
5079               }
5080           }
5081           break;
5082
5083         case lang_constructors_statement_enum:
5084           dot = lang_size_sections_1 (&constructor_list.head,
5085                                       output_section_statement,
5086                                       fill, dot, relax, check_regions);
5087           break;
5088
5089         case lang_data_statement_enum:
5090           {
5091             unsigned int size = 0;
5092
5093             s->data_statement.output_offset =
5094               dot - output_section_statement->bfd_section->vma;
5095             s->data_statement.output_section =
5096               output_section_statement->bfd_section;
5097
5098             /* We might refer to provided symbols in the expression, and
5099                need to mark them as needed.  */
5100             exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5101
5102             switch (s->data_statement.type)
5103               {
5104               default:
5105                 abort ();
5106               case QUAD:
5107               case SQUAD:
5108                 size = QUAD_SIZE;
5109                 break;
5110               case LONG:
5111                 size = LONG_SIZE;
5112                 break;
5113               case SHORT:
5114                 size = SHORT_SIZE;
5115                 break;
5116               case BYTE:
5117                 size = BYTE_SIZE;
5118                 break;
5119               }
5120             if (size < TO_SIZE ((unsigned) 1))
5121               size = TO_SIZE ((unsigned) 1);
5122             dot += TO_ADDR (size);
5123             output_section_statement->bfd_section->size += size;
5124           }
5125           break;
5126
5127         case lang_reloc_statement_enum:
5128           {
5129             int size;
5130
5131             s->reloc_statement.output_offset =
5132               dot - output_section_statement->bfd_section->vma;
5133             s->reloc_statement.output_section =
5134               output_section_statement->bfd_section;
5135             size = bfd_get_reloc_size (s->reloc_statement.howto);
5136             dot += TO_ADDR (size);
5137             output_section_statement->bfd_section->size += size;
5138           }
5139           break;
5140
5141         case lang_wild_statement_enum:
5142           dot = lang_size_sections_1 (&s->wild_statement.children.head,
5143                                       output_section_statement,
5144                                       fill, dot, relax, check_regions);
5145           break;
5146
5147         case lang_object_symbols_statement_enum:
5148           link_info.create_object_symbols_section =
5149             output_section_statement->bfd_section;
5150           break;
5151
5152         case lang_output_statement_enum:
5153         case lang_target_statement_enum:
5154           break;
5155
5156         case lang_input_section_enum:
5157           {
5158             asection *i;
5159
5160             i = s->input_section.section;
5161             if (relax)
5162               {
5163                 bfd_boolean again;
5164
5165                 if (! bfd_relax_section (i->owner, i, &link_info, &again))
5166                   einfo (_("%P%F: can't relax section: %E\n"));
5167                 if (again)
5168                   *relax = TRUE;
5169               }
5170             dot = size_input_section (prev, output_section_statement,
5171                                       output_section_statement->fill, dot);
5172           }
5173           break;
5174
5175         case lang_input_statement_enum:
5176           break;
5177
5178         case lang_fill_statement_enum:
5179           s->fill_statement.output_section =
5180             output_section_statement->bfd_section;
5181
5182           fill = s->fill_statement.fill;
5183           break;
5184
5185         case lang_assignment_statement_enum:
5186           {
5187             bfd_vma newdot = dot;
5188             etree_type *tree = s->assignment_statement.exp;
5189
5190             expld.dataseg.relro = exp_dataseg_relro_none;
5191
5192             exp_fold_tree (tree,
5193                            output_section_statement->bfd_section,
5194                            &newdot);
5195
5196             if (expld.dataseg.relro == exp_dataseg_relro_start)
5197               {
5198                 if (!expld.dataseg.relro_start_stat)
5199                   expld.dataseg.relro_start_stat = s;
5200                 else
5201                   {
5202                     ASSERT (expld.dataseg.relro_start_stat == s);
5203                   }
5204               }
5205             else if (expld.dataseg.relro == exp_dataseg_relro_end)
5206               {
5207                 if (!expld.dataseg.relro_end_stat)
5208                   expld.dataseg.relro_end_stat = s;
5209                 else
5210                   {
5211                     ASSERT (expld.dataseg.relro_end_stat == s);
5212                   }
5213               }
5214             expld.dataseg.relro = exp_dataseg_relro_none;
5215
5216             /* This symbol is relative to this section.  */
5217             if ((tree->type.node_class == etree_provided
5218                  || tree->type.node_class == etree_assign)
5219                 && (tree->assign.dst [0] != '.'
5220                     || tree->assign.dst [1] != '\0'))
5221               output_section_statement->section_relative_symbol = 1;
5222
5223             if (!output_section_statement->ignored)
5224               {
5225                 if (output_section_statement == abs_output_section)
5226                   {
5227                     /* If we don't have an output section, then just adjust
5228                        the default memory address.  */
5229                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5230                                                FALSE)->current = newdot;
5231                   }
5232                 else if (newdot != dot)
5233                   {
5234                     /* Insert a pad after this statement.  We can't
5235                        put the pad before when relaxing, in case the
5236                        assignment references dot.  */
5237                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5238                                 output_section_statement->bfd_section, dot);
5239
5240                     /* Don't neuter the pad below when relaxing.  */
5241                     s = s->header.next;
5242
5243                     /* If dot is advanced, this implies that the section
5244                        should have space allocated to it, unless the
5245                        user has explicitly stated that the section
5246                        should not be allocated.  */
5247                     if (output_section_statement->sectype != noalloc_section
5248                         && (output_section_statement->sectype != noload_section
5249                             || (bfd_get_flavour (link_info.output_bfd)
5250                                 == bfd_target_elf_flavour)))
5251                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
5252                   }
5253                 dot = newdot;
5254               }
5255           }
5256           break;
5257
5258         case lang_padding_statement_enum:
5259           /* If this is the first time lang_size_sections is called,
5260              we won't have any padding statements.  If this is the
5261              second or later passes when relaxing, we should allow
5262              padding to shrink.  If padding is needed on this pass, it
5263              will be added back in.  */
5264           s->padding_statement.size = 0;
5265
5266           /* Make sure output_offset is valid.  If relaxation shrinks
5267              the section and this pad isn't needed, it's possible to
5268              have output_offset larger than the final size of the
5269              section.  bfd_set_section_contents will complain even for
5270              a pad size of zero.  */
5271           s->padding_statement.output_offset
5272             = dot - output_section_statement->bfd_section->vma;
5273           break;
5274
5275         case lang_group_statement_enum:
5276           dot = lang_size_sections_1 (&s->group_statement.children.head,
5277                                       output_section_statement,
5278                                       fill, dot, relax, check_regions);
5279           break;
5280
5281         case lang_insert_statement_enum:
5282           break;
5283
5284           /* We can only get here when relaxing is turned on.  */
5285         case lang_address_statement_enum:
5286           break;
5287
5288         default:
5289           FAIL ();
5290           break;
5291         }
5292       prev = &s->header.next;
5293     }
5294   return dot;
5295 }
5296
5297 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5298    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5299    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5300    segments.  We are allowed an opportunity to override this decision.  */
5301
5302 bfd_boolean
5303 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5304                                     bfd * abfd ATTRIBUTE_UNUSED,
5305                                     asection * current_section,
5306                                     asection * previous_section,
5307                                     bfd_boolean new_segment)
5308 {
5309   lang_output_section_statement_type * cur;
5310   lang_output_section_statement_type * prev;
5311
5312   /* The checks below are only necessary when the BFD library has decided
5313      that the two sections ought to be placed into the same segment.  */
5314   if (new_segment)
5315     return TRUE;
5316
5317   /* Paranoia checks.  */
5318   if (current_section == NULL || previous_section == NULL)
5319     return new_segment;
5320
5321   /* Find the memory regions associated with the two sections.
5322      We call lang_output_section_find() here rather than scanning the list
5323      of output sections looking for a matching section pointer because if
5324      we have a large number of sections then a hash lookup is faster.  */
5325   cur  = lang_output_section_find (current_section->name);
5326   prev = lang_output_section_find (previous_section->name);
5327
5328   /* More paranoia.  */
5329   if (cur == NULL || prev == NULL)
5330     return new_segment;
5331
5332   /* If the regions are different then force the sections to live in
5333      different segments.  See the email thread starting at the following
5334      URL for the reasons why this is necessary:
5335      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5336   return cur->region != prev->region;
5337 }
5338
5339 void
5340 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5341 {
5342   lang_statement_iteration++;
5343   lang_size_sections_1 (&statement_list.head, abs_output_section,
5344                         0, 0, relax, check_regions);
5345 }
5346
5347 void
5348 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5349 {
5350   expld.phase = lang_allocating_phase_enum;
5351   expld.dataseg.phase = exp_dataseg_none;
5352
5353   one_lang_size_sections_pass (relax, check_regions);
5354   if (expld.dataseg.phase == exp_dataseg_end_seen
5355       && link_info.relro && expld.dataseg.relro_end)
5356     {
5357       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5358          to put expld.dataseg.relro on a (common) page boundary.  */
5359       bfd_vma min_base, old_base, relro_end, maxpage;
5360
5361       expld.dataseg.phase = exp_dataseg_relro_adjust;
5362       maxpage = expld.dataseg.maxpagesize;
5363       /* MIN_BASE is the absolute minimum address we are allowed to start the
5364          read-write segment (byte before will be mapped read-only).  */
5365       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5366       /* OLD_BASE is the address for a feasible minimum address which will
5367          still not cause a data overlap inside MAXPAGE causing file offset skip
5368          by MAXPAGE.  */
5369       old_base = expld.dataseg.base;
5370       expld.dataseg.base += (-expld.dataseg.relro_end
5371                              & (expld.dataseg.pagesize - 1));
5372       /* Compute the expected PT_GNU_RELRO segment end.  */
5373       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5374                    & ~(expld.dataseg.pagesize - 1));
5375       if (min_base + maxpage < expld.dataseg.base)
5376         {
5377           expld.dataseg.base -= maxpage;
5378           relro_end -= maxpage;
5379         }
5380       lang_reset_memory_regions ();
5381       one_lang_size_sections_pass (relax, check_regions);
5382       if (expld.dataseg.relro_end > relro_end)
5383         {
5384           /* The alignment of sections between DATA_SEGMENT_ALIGN
5385              and DATA_SEGMENT_RELRO_END caused huge padding to be
5386              inserted at DATA_SEGMENT_RELRO_END.  Try to start a bit lower so
5387              that the section alignments will fit in.  */
5388           asection *sec;
5389           unsigned int max_alignment_power = 0;
5390
5391           /* Find maximum alignment power of sections between
5392              DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5393           for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5394             if (sec->vma >= expld.dataseg.base
5395                 && sec->vma < expld.dataseg.relro_end
5396                 && sec->alignment_power > max_alignment_power)
5397               max_alignment_power = sec->alignment_power;
5398
5399           if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5400             {
5401               if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
5402                 expld.dataseg.base += expld.dataseg.pagesize;
5403               expld.dataseg.base -= (1 << max_alignment_power);
5404               lang_reset_memory_regions ();
5405               one_lang_size_sections_pass (relax, check_regions);
5406             }
5407         }
5408       link_info.relro_start = expld.dataseg.base;
5409       link_info.relro_end = expld.dataseg.relro_end;
5410     }
5411   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5412     {
5413       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5414          a page could be saved in the data segment.  */
5415       bfd_vma first, last;
5416
5417       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5418       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5419       if (first && last
5420           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5421               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5422           && first + last <= expld.dataseg.pagesize)
5423         {
5424           expld.dataseg.phase = exp_dataseg_adjust;
5425           lang_reset_memory_regions ();
5426           one_lang_size_sections_pass (relax, check_regions);
5427         }
5428     }
5429
5430   expld.phase = lang_final_phase_enum;
5431 }
5432
5433 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5434
5435 static bfd_vma
5436 lang_do_assignments_1 (lang_statement_union_type *s,
5437                        lang_output_section_statement_type *current_os,
5438                        fill_type *fill,
5439                        bfd_vma dot)
5440 {
5441   for (; s != NULL; s = s->header.next)
5442     {
5443       switch (s->header.type)
5444         {
5445         case lang_constructors_statement_enum:
5446           dot = lang_do_assignments_1 (constructor_list.head,
5447                                        current_os, fill, dot);
5448           break;
5449
5450         case lang_output_section_statement_enum:
5451           {
5452             lang_output_section_statement_type *os;
5453
5454             os = &(s->output_section_statement);
5455             if (os->bfd_section != NULL && !os->ignored)
5456               {
5457                 dot = os->bfd_section->vma;
5458
5459                 lang_do_assignments_1 (os->children.head, os, os->fill, dot);
5460
5461                 /* .tbss sections effectively have zero size.  */
5462                 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5463                     || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5464                     || link_info.relocatable)
5465                   dot += TO_ADDR (os->bfd_section->size);
5466
5467                 if (os->update_dot_tree != NULL)
5468                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5469               }
5470           }
5471           break;
5472
5473         case lang_wild_statement_enum:
5474
5475           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5476                                        current_os, fill, dot);
5477           break;
5478
5479         case lang_object_symbols_statement_enum:
5480         case lang_output_statement_enum:
5481         case lang_target_statement_enum:
5482           break;
5483
5484         case lang_data_statement_enum:
5485           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5486           if (expld.result.valid_p)
5487             {
5488               s->data_statement.value = expld.result.value;
5489               if (expld.result.section != NULL)
5490                 s->data_statement.value += expld.result.section->vma;
5491             }
5492           else
5493             einfo (_("%F%P: invalid data statement\n"));
5494           {
5495             unsigned int size;
5496             switch (s->data_statement.type)
5497               {
5498               default:
5499                 abort ();
5500               case QUAD:
5501               case SQUAD:
5502                 size = QUAD_SIZE;
5503                 break;
5504               case LONG:
5505                 size = LONG_SIZE;
5506                 break;
5507               case SHORT:
5508                 size = SHORT_SIZE;
5509                 break;
5510               case BYTE:
5511                 size = BYTE_SIZE;
5512                 break;
5513               }
5514             if (size < TO_SIZE ((unsigned) 1))
5515               size = TO_SIZE ((unsigned) 1);
5516             dot += TO_ADDR (size);
5517           }
5518           break;
5519
5520         case lang_reloc_statement_enum:
5521           exp_fold_tree (s->reloc_statement.addend_exp,
5522                          bfd_abs_section_ptr, &dot);
5523           if (expld.result.valid_p)
5524             s->reloc_statement.addend_value = expld.result.value;
5525           else
5526             einfo (_("%F%P: invalid reloc statement\n"));
5527           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5528           break;
5529
5530         case lang_input_section_enum:
5531           {
5532             asection *in = s->input_section.section;
5533
5534             if ((in->flags & SEC_EXCLUDE) == 0)
5535               dot += TO_ADDR (in->size);
5536           }
5537           break;
5538
5539         case lang_input_statement_enum:
5540           break;
5541
5542         case lang_fill_statement_enum:
5543           fill = s->fill_statement.fill;
5544           break;
5545
5546         case lang_assignment_statement_enum:
5547           exp_fold_tree (s->assignment_statement.exp,
5548                          current_os->bfd_section,
5549                          &dot);
5550           break;
5551
5552         case lang_padding_statement_enum:
5553           dot += TO_ADDR (s->padding_statement.size);
5554           break;
5555
5556         case lang_group_statement_enum:
5557           dot = lang_do_assignments_1 (s->group_statement.children.head,
5558                                        current_os, fill, dot);
5559           break;
5560
5561         case lang_insert_statement_enum:
5562           break;
5563
5564         case lang_address_statement_enum:
5565           break;
5566
5567         default:
5568           FAIL ();
5569           break;
5570         }
5571     }
5572   return dot;
5573 }
5574
5575 void
5576 lang_do_assignments (void)
5577 {
5578   lang_statement_iteration++;
5579   lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
5580 }
5581
5582 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5583    operator .startof. (section_name), it produces an undefined symbol
5584    .startof.section_name.  Similarly, when it sees
5585    .sizeof. (section_name), it produces an undefined symbol
5586    .sizeof.section_name.  For all the output sections, we look for
5587    such symbols, and set them to the correct value.  */
5588
5589 static void
5590 lang_set_startof (void)
5591 {
5592   asection *s;
5593
5594   if (link_info.relocatable)
5595     return;
5596
5597   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5598     {
5599       const char *secname;
5600       char *buf;
5601       struct bfd_link_hash_entry *h;
5602
5603       secname = bfd_get_section_name (link_info.output_bfd, s);
5604       buf = (char *) xmalloc (10 + strlen (secname));
5605
5606       sprintf (buf, ".startof.%s", secname);
5607       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5608       if (h != NULL && h->type == bfd_link_hash_undefined)
5609         {
5610           h->type = bfd_link_hash_defined;
5611           h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5612           h->u.def.section = bfd_abs_section_ptr;
5613         }
5614
5615       sprintf (buf, ".sizeof.%s", secname);
5616       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5617       if (h != NULL && h->type == bfd_link_hash_undefined)
5618         {
5619           h->type = bfd_link_hash_defined;
5620           h->u.def.value = TO_ADDR (s->size);
5621           h->u.def.section = bfd_abs_section_ptr;
5622         }
5623
5624       free (buf);
5625     }
5626 }
5627
5628 static void
5629 lang_end (void)
5630 {
5631   struct bfd_link_hash_entry *h;
5632   bfd_boolean warn;
5633
5634   if ((link_info.relocatable && !link_info.gc_sections)
5635       || (link_info.shared && !link_info.executable))
5636     warn = entry_from_cmdline;
5637   else
5638     warn = TRUE;
5639
5640   /* Force the user to specify a root when generating a relocatable with
5641      --gc-sections.  */
5642   if (link_info.gc_sections && link_info.relocatable
5643       && !(entry_from_cmdline || undef_from_cmdline))
5644     einfo (_("%P%F: gc-sections requires either an entry or "
5645              "an undefined symbol\n"));
5646
5647   if (entry_symbol.name == NULL)
5648     {
5649       /* No entry has been specified.  Look for the default entry, but
5650          don't warn if we don't find it.  */
5651       entry_symbol.name = entry_symbol_default;
5652       warn = FALSE;
5653     }
5654
5655   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5656                             FALSE, FALSE, TRUE);
5657   if (h != NULL
5658       && (h->type == bfd_link_hash_defined
5659           || h->type == bfd_link_hash_defweak)
5660       && h->u.def.section->output_section != NULL)
5661     {
5662       bfd_vma val;
5663
5664       val = (h->u.def.value
5665              + bfd_get_section_vma (link_info.output_bfd,
5666                                     h->u.def.section->output_section)
5667              + h->u.def.section->output_offset);
5668       if (! bfd_set_start_address (link_info.output_bfd, val))
5669         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5670     }
5671   else
5672     {
5673       bfd_vma val;
5674       const char *send;
5675
5676       /* We couldn't find the entry symbol.  Try parsing it as a
5677          number.  */
5678       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5679       if (*send == '\0')
5680         {
5681           if (! bfd_set_start_address (link_info.output_bfd, val))
5682             einfo (_("%P%F: can't set start address\n"));
5683         }
5684       else
5685         {
5686           asection *ts;
5687
5688           /* Can't find the entry symbol, and it's not a number.  Use
5689              the first address in the text section.  */
5690           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5691           if (ts != NULL)
5692             {
5693               if (warn)
5694                 einfo (_("%P: warning: cannot find entry symbol %s;"
5695                          " defaulting to %V\n"),
5696                        entry_symbol.name,
5697                        bfd_get_section_vma (link_info.output_bfd, ts));
5698               if (!(bfd_set_start_address
5699                     (link_info.output_bfd,
5700                      bfd_get_section_vma (link_info.output_bfd, ts))))
5701                 einfo (_("%P%F: can't set start address\n"));
5702             }
5703           else
5704             {
5705               if (warn)
5706                 einfo (_("%P: warning: cannot find entry symbol %s;"
5707                          " not setting start address\n"),
5708                        entry_symbol.name);
5709             }
5710         }
5711     }
5712
5713   /* Don't bfd_hash_table_free (&lang_definedness_table);
5714      map file output may result in a call of lang_track_definedness.  */
5715 }
5716
5717 /* This is a small function used when we want to ignore errors from
5718    BFD.  */
5719
5720 static void
5721 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5722 {
5723   /* Don't do anything.  */
5724 }
5725
5726 /* Check that the architecture of all the input files is compatible
5727    with the output file.  Also call the backend to let it do any
5728    other checking that is needed.  */
5729
5730 static void
5731 lang_check (void)
5732 {
5733   lang_statement_union_type *file;
5734   bfd *input_bfd;
5735   const bfd_arch_info_type *compatible;
5736
5737   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5738     {
5739       input_bfd = file->input_statement.the_bfd;
5740       compatible
5741         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5742                                    command_line.accept_unknown_input_arch);
5743
5744       /* In general it is not possible to perform a relocatable
5745          link between differing object formats when the input
5746          file has relocations, because the relocations in the
5747          input format may not have equivalent representations in
5748          the output format (and besides BFD does not translate
5749          relocs for other link purposes than a final link).  */
5750       if ((link_info.relocatable || link_info.emitrelocations)
5751           && (compatible == NULL
5752               || (bfd_get_flavour (input_bfd)
5753                   != bfd_get_flavour (link_info.output_bfd)))
5754           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5755         {
5756           einfo (_("%P%F: Relocatable linking with relocations from"
5757                    " format %s (%B) to format %s (%B) is not supported\n"),
5758                  bfd_get_target (input_bfd), input_bfd,
5759                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5760           /* einfo with %F exits.  */
5761         }
5762
5763       if (compatible == NULL)
5764         {
5765           if (command_line.warn_mismatch)
5766             einfo (_("%P%X: %s architecture of input file `%B'"
5767                      " is incompatible with %s output\n"),
5768                    bfd_printable_name (input_bfd), input_bfd,
5769                    bfd_printable_name (link_info.output_bfd));
5770         }
5771       else if (bfd_count_sections (input_bfd))
5772         {
5773           /* If the input bfd has no contents, it shouldn't set the
5774              private data of the output bfd.  */
5775
5776           bfd_error_handler_type pfn = NULL;
5777
5778           /* If we aren't supposed to warn about mismatched input
5779              files, temporarily set the BFD error handler to a
5780              function which will do nothing.  We still want to call
5781              bfd_merge_private_bfd_data, since it may set up
5782              information which is needed in the output file.  */
5783           if (! command_line.warn_mismatch)
5784             pfn = bfd_set_error_handler (ignore_bfd_errors);
5785           if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5786             {
5787               if (command_line.warn_mismatch)
5788                 einfo (_("%P%X: failed to merge target specific data"
5789                          " of file %B\n"), input_bfd);
5790             }
5791           if (! command_line.warn_mismatch)
5792             bfd_set_error_handler (pfn);
5793         }
5794     }
5795 }
5796
5797 /* Look through all the global common symbols and attach them to the
5798    correct section.  The -sort-common command line switch may be used
5799    to roughly sort the entries by alignment.  */
5800
5801 static void
5802 lang_common (void)
5803 {
5804   if (command_line.inhibit_common_definition)
5805     return;
5806   if (link_info.relocatable
5807       && ! command_line.force_common_definition)
5808     return;
5809
5810   if (! config.sort_common)
5811     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5812   else
5813     {
5814       unsigned int power;
5815
5816       if (config.sort_common == sort_descending)
5817         {
5818           for (power = 4; power > 0; power--)
5819             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5820
5821           power = 0;
5822           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5823         }
5824       else
5825         {
5826           for (power = 0; power <= 4; power++)
5827             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5828
5829           power = UINT_MAX;
5830           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5831         }
5832     }
5833 }
5834
5835 /* Place one common symbol in the correct section.  */
5836
5837 static bfd_boolean
5838 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5839 {
5840   unsigned int power_of_two;
5841   bfd_vma size;
5842   asection *section;
5843
5844   if (h->type != bfd_link_hash_common)
5845     return TRUE;
5846
5847   size = h->u.c.size;
5848   power_of_two = h->u.c.p->alignment_power;
5849
5850   if (config.sort_common == sort_descending
5851       && power_of_two < *(unsigned int *) info)
5852     return TRUE;
5853   else if (config.sort_common == sort_ascending
5854            && power_of_two > *(unsigned int *) info)
5855     return TRUE;
5856
5857   section = h->u.c.p->section;
5858   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5859     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5860            h->root.string);
5861
5862   if (config.map_file != NULL)
5863     {
5864       static bfd_boolean header_printed;
5865       int len;
5866       char *name;
5867       char buf[50];
5868
5869       if (! header_printed)
5870         {
5871           minfo (_("\nAllocating common symbols\n"));
5872           minfo (_("Common symbol       size              file\n\n"));
5873           header_printed = TRUE;
5874         }
5875
5876       name = bfd_demangle (link_info.output_bfd, h->root.string,
5877                            DMGL_ANSI | DMGL_PARAMS);
5878       if (name == NULL)
5879         {
5880           minfo ("%s", h->root.string);
5881           len = strlen (h->root.string);
5882         }
5883       else
5884         {
5885           minfo ("%s", name);
5886           len = strlen (name);
5887           free (name);
5888         }
5889
5890       if (len >= 19)
5891         {
5892           print_nl ();
5893           len = 0;
5894         }
5895       while (len < 20)
5896         {
5897           print_space ();
5898           ++len;
5899         }
5900
5901       minfo ("0x");
5902       if (size <= 0xffffffff)
5903         sprintf (buf, "%lx", (unsigned long) size);
5904       else
5905         sprintf_vma (buf, size);
5906       minfo ("%s", buf);
5907       len = strlen (buf);
5908
5909       while (len < 16)
5910         {
5911           print_space ();
5912           ++len;
5913         }
5914
5915       minfo ("%B\n", section->owner);
5916     }
5917
5918   return TRUE;
5919 }
5920
5921 /* Run through the input files and ensure that every input section has
5922    somewhere to go.  If one is found without a destination then create
5923    an input request and place it into the statement tree.  */
5924
5925 static void
5926 lang_place_orphans (void)
5927 {
5928   LANG_FOR_EACH_INPUT_STATEMENT (file)
5929     {
5930       asection *s;
5931
5932       for (s = file->the_bfd->sections; s != NULL; s = s->next)
5933         {
5934           if (s->output_section == NULL)
5935             {
5936               /* This section of the file is not attached, root
5937                  around for a sensible place for it to go.  */
5938
5939               if (file->just_syms_flag)
5940                 bfd_link_just_syms (file->the_bfd, s, &link_info);
5941               else if ((s->flags & SEC_EXCLUDE) != 0)
5942                 s->output_section = bfd_abs_section_ptr;
5943               else if (strcmp (s->name, "COMMON") == 0)
5944                 {
5945                   /* This is a lonely common section which must have
5946                      come from an archive.  We attach to the section
5947                      with the wildcard.  */
5948                   if (! link_info.relocatable
5949                       || command_line.force_common_definition)
5950                     {
5951                       if (default_common_section == NULL)
5952                         default_common_section
5953                           = lang_output_section_statement_lookup (".bss", 0,
5954                                                                   TRUE);
5955                       lang_add_section (&default_common_section->children, s,
5956                                         default_common_section);
5957                     }
5958                 }
5959               else
5960                 {
5961                   const char *name = s->name;
5962                   int constraint = 0;
5963
5964                   if (config.unique_orphan_sections
5965                       || unique_section_p (s, NULL))
5966                     constraint = SPECIAL;
5967
5968                   if (!ldemul_place_orphan (s, name, constraint))
5969                     {
5970                       lang_output_section_statement_type *os;
5971                       os = lang_output_section_statement_lookup (name,
5972                                                                  constraint,
5973                                                                  TRUE);
5974                       if (os->addr_tree == NULL
5975                           && (link_info.relocatable
5976                               || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
5977                         os->addr_tree = exp_intop (0);
5978                       lang_add_section (&os->children, s, os);
5979                     }
5980                 }
5981             }
5982         }
5983     }
5984 }
5985
5986 void
5987 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
5988 {
5989   flagword *ptr_flags;
5990
5991   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
5992   while (*flags)
5993     {
5994       switch (*flags)
5995         {
5996         case 'A': case 'a':
5997           *ptr_flags |= SEC_ALLOC;
5998           break;
5999
6000         case 'R': case 'r':
6001           *ptr_flags |= SEC_READONLY;
6002           break;
6003
6004         case 'W': case 'w':
6005           *ptr_flags |= SEC_DATA;
6006           break;
6007
6008         case 'X': case 'x':
6009           *ptr_flags |= SEC_CODE;
6010           break;
6011
6012         case 'L': case 'l':
6013         case 'I': case 'i':
6014           *ptr_flags |= SEC_LOAD;
6015           break;
6016
6017         default:
6018           einfo (_("%P%F: invalid syntax in flags\n"));
6019           break;
6020         }
6021       flags++;
6022     }
6023 }
6024
6025 /* Call a function on each input file.  This function will be called
6026    on an archive, but not on the elements.  */
6027
6028 void
6029 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6030 {
6031   lang_input_statement_type *f;
6032
6033   for (f = (lang_input_statement_type *) input_file_chain.head;
6034        f != NULL;
6035        f = (lang_input_statement_type *) f->next_real_file)
6036     func (f);
6037 }
6038
6039 /* Call a function on each file.  The function will be called on all
6040    the elements of an archive which are included in the link, but will
6041    not be called on the archive file itself.  */
6042
6043 void
6044 lang_for_each_file (void (*func) (lang_input_statement_type *))
6045 {
6046   LANG_FOR_EACH_INPUT_STATEMENT (f)
6047     {
6048       func (f);
6049     }
6050 }
6051
6052 void
6053 ldlang_add_file (lang_input_statement_type *entry)
6054 {
6055   lang_statement_append (&file_chain,
6056                          (lang_statement_union_type *) entry,
6057                          &entry->next);
6058
6059   /* The BFD linker needs to have a list of all input BFDs involved in
6060      a link.  */
6061   ASSERT (entry->the_bfd->link_next == NULL);
6062   ASSERT (entry->the_bfd != link_info.output_bfd);
6063
6064   *link_info.input_bfds_tail = entry->the_bfd;
6065   link_info.input_bfds_tail = &entry->the_bfd->link_next;
6066   entry->the_bfd->usrdata = entry;
6067   bfd_set_gp_size (entry->the_bfd, g_switch_value);
6068
6069   /* Look through the sections and check for any which should not be
6070      included in the link.  We need to do this now, so that we can
6071      notice when the backend linker tries to report multiple
6072      definition errors for symbols which are in sections we aren't
6073      going to link.  FIXME: It might be better to entirely ignore
6074      symbols which are defined in sections which are going to be
6075      discarded.  This would require modifying the backend linker for
6076      each backend which might set the SEC_LINK_ONCE flag.  If we do
6077      this, we should probably handle SEC_EXCLUDE in the same way.  */
6078
6079   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6080 }
6081
6082 void
6083 lang_add_output (const char *name, int from_script)
6084 {
6085   /* Make -o on command line override OUTPUT in script.  */
6086   if (!had_output_filename || !from_script)
6087     {
6088       output_filename = name;
6089       had_output_filename = TRUE;
6090     }
6091 }
6092
6093 static lang_output_section_statement_type *current_section;
6094
6095 static int
6096 topower (int x)
6097 {
6098   unsigned int i = 1;
6099   int l;
6100
6101   if (x < 0)
6102     return -1;
6103
6104   for (l = 0; l < 32; l++)
6105     {
6106       if (i >= (unsigned int) x)
6107         return l;
6108       i <<= 1;
6109     }
6110
6111   return 0;
6112 }
6113
6114 lang_output_section_statement_type *
6115 lang_enter_output_section_statement (const char *output_section_statement_name,
6116                                      etree_type *address_exp,
6117                                      enum section_type sectype,
6118                                      etree_type *align,
6119                                      etree_type *subalign,
6120                                      etree_type *ebase,
6121                                      int constraint)
6122 {
6123   lang_output_section_statement_type *os;
6124
6125   os = lang_output_section_statement_lookup (output_section_statement_name,
6126                                              constraint, TRUE);
6127   current_section = os;
6128
6129   if (os->addr_tree == NULL)
6130     {
6131       os->addr_tree = address_exp;
6132     }
6133   os->sectype = sectype;
6134   if (sectype != noload_section)
6135     os->flags = SEC_NO_FLAGS;
6136   else
6137     os->flags = SEC_NEVER_LOAD;
6138   os->block_value = 1;
6139
6140   /* Make next things chain into subchain of this.  */
6141   push_stat_ptr (&os->children);
6142
6143   os->subsection_alignment =
6144     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6145   os->section_alignment =
6146     topower (exp_get_value_int (align, -1, "section alignment"));
6147
6148   os->load_base = ebase;
6149   return os;
6150 }
6151
6152 void
6153 lang_final (void)
6154 {
6155   lang_output_statement_type *new_stmt;
6156
6157   new_stmt = new_stat (lang_output_statement, stat_ptr);
6158   new_stmt->name = output_filename;
6159
6160 }
6161
6162 /* Reset the current counters in the regions.  */
6163
6164 void
6165 lang_reset_memory_regions (void)
6166 {
6167   lang_memory_region_type *p = lang_memory_region_list;
6168   asection *o;
6169   lang_output_section_statement_type *os;
6170
6171   for (p = lang_memory_region_list; p != NULL; p = p->next)
6172     {
6173       p->current = p->origin;
6174       p->last_os = NULL;
6175     }
6176
6177   for (os = &lang_output_section_statement.head->output_section_statement;
6178        os != NULL;
6179        os = os->next)
6180     {
6181       os->processed_vma = FALSE;
6182       os->processed_lma = FALSE;
6183     }
6184
6185   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6186     {
6187       /* Save the last size for possible use by bfd_relax_section.  */
6188       o->rawsize = o->size;
6189       o->size = 0;
6190     }
6191 }
6192
6193 /* Worker for lang_gc_sections_1.  */
6194
6195 static void
6196 gc_section_callback (lang_wild_statement_type *ptr,
6197                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
6198                      asection *section,
6199                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
6200                      void *data ATTRIBUTE_UNUSED)
6201 {
6202   /* If the wild pattern was marked KEEP, the member sections
6203      should be as well.  */
6204   if (ptr->keep_sections)
6205     section->flags |= SEC_KEEP;
6206 }
6207
6208 /* Iterate over sections marking them against GC.  */
6209
6210 static void
6211 lang_gc_sections_1 (lang_statement_union_type *s)
6212 {
6213   for (; s != NULL; s = s->header.next)
6214     {
6215       switch (s->header.type)
6216         {
6217         case lang_wild_statement_enum:
6218           walk_wild (&s->wild_statement, gc_section_callback, NULL);
6219           break;
6220         case lang_constructors_statement_enum:
6221           lang_gc_sections_1 (constructor_list.head);
6222           break;
6223         case lang_output_section_statement_enum:
6224           lang_gc_sections_1 (s->output_section_statement.children.head);
6225           break;
6226         case lang_group_statement_enum:
6227           lang_gc_sections_1 (s->group_statement.children.head);
6228           break;
6229         default:
6230           break;
6231         }
6232     }
6233 }
6234
6235 static void
6236 lang_gc_sections (void)
6237 {
6238   /* Keep all sections so marked in the link script.  */
6239
6240   lang_gc_sections_1 (statement_list.head);
6241
6242   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6243      the special case of debug info.  (See bfd/stabs.c)
6244      Twiddle the flag here, to simplify later linker code.  */
6245   if (link_info.relocatable)
6246     {
6247       LANG_FOR_EACH_INPUT_STATEMENT (f)
6248         {
6249           asection *sec;
6250           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6251             if ((sec->flags & SEC_DEBUGGING) == 0)
6252               sec->flags &= ~SEC_EXCLUDE;
6253         }
6254     }
6255
6256   if (link_info.gc_sections)
6257     bfd_gc_sections (link_info.output_bfd, &link_info);
6258 }
6259
6260 /* Worker for lang_find_relro_sections_1.  */
6261
6262 static void
6263 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6264                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
6265                              asection *section,
6266                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
6267                              void *data)
6268 {
6269   /* Discarded, excluded and ignored sections effectively have zero
6270      size.  */
6271   if (section->output_section != NULL
6272       && section->output_section->owner == link_info.output_bfd
6273       && (section->output_section->flags & SEC_EXCLUDE) == 0
6274       && !IGNORE_SECTION (section)
6275       && section->size != 0)
6276     {
6277       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6278       *has_relro_section = TRUE;
6279     }
6280 }
6281
6282 /* Iterate over sections for relro sections.  */
6283
6284 static void
6285 lang_find_relro_sections_1 (lang_statement_union_type *s,
6286                             bfd_boolean *has_relro_section)
6287 {
6288   if (*has_relro_section)
6289     return;
6290
6291   for (; s != NULL; s = s->header.next)
6292     {
6293       if (s == expld.dataseg.relro_end_stat)
6294         break;
6295
6296       switch (s->header.type)
6297         {
6298         case lang_wild_statement_enum:
6299           walk_wild (&s->wild_statement,
6300                      find_relro_section_callback,
6301                      has_relro_section);
6302           break;
6303         case lang_constructors_statement_enum:
6304           lang_find_relro_sections_1 (constructor_list.head,
6305                                       has_relro_section);
6306           break;
6307         case lang_output_section_statement_enum:
6308           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6309                                       has_relro_section);
6310           break;
6311         case lang_group_statement_enum:
6312           lang_find_relro_sections_1 (s->group_statement.children.head,
6313                                       has_relro_section);
6314           break;
6315         default:
6316           break;
6317         }
6318     }
6319 }
6320
6321 static void
6322 lang_find_relro_sections (void)
6323 {
6324   bfd_boolean has_relro_section = FALSE;
6325
6326   /* Check all sections in the link script.  */
6327
6328   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6329                               &has_relro_section);
6330
6331   if (!has_relro_section)
6332     link_info.relro = FALSE;
6333 }
6334
6335 /* Relax all sections until bfd_relax_section gives up.  */
6336
6337 void
6338 lang_relax_sections (bfd_boolean need_layout)
6339 {
6340   if (RELAXATION_ENABLED)
6341     {
6342       /* We may need more than one relaxation pass.  */
6343       int i = link_info.relax_pass;
6344
6345       /* The backend can use it to determine the current pass.  */
6346       link_info.relax_pass = 0;
6347
6348       while (i--)
6349         {
6350           /* Keep relaxing until bfd_relax_section gives up.  */
6351           bfd_boolean relax_again;
6352
6353           link_info.relax_trip = -1;
6354           do
6355             {
6356               link_info.relax_trip++;
6357
6358               /* Note: pe-dll.c does something like this also.  If you find
6359                  you need to change this code, you probably need to change
6360                  pe-dll.c also.  DJ  */
6361
6362               /* Do all the assignments with our current guesses as to
6363                  section sizes.  */
6364               lang_do_assignments ();
6365
6366               /* We must do this after lang_do_assignments, because it uses
6367                  size.  */
6368               lang_reset_memory_regions ();
6369
6370               /* Perform another relax pass - this time we know where the
6371                  globals are, so can make a better guess.  */
6372               relax_again = FALSE;
6373               lang_size_sections (&relax_again, FALSE);
6374             }
6375           while (relax_again);
6376
6377           link_info.relax_pass++;
6378         }
6379       need_layout = TRUE;
6380     }
6381
6382   if (need_layout)
6383     {
6384       /* Final extra sizing to report errors.  */
6385       lang_do_assignments ();
6386       lang_reset_memory_regions ();
6387       lang_size_sections (NULL, TRUE);
6388     }
6389 }
6390
6391 void
6392 lang_process (void)
6393 {
6394   /* Finalize dynamic list.  */
6395   if (link_info.dynamic_list)
6396     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6397
6398   current_target = default_target;
6399
6400   /* Open the output file.  */
6401   lang_for_each_statement (ldlang_open_output);
6402   init_opb ();
6403
6404   ldemul_create_output_section_statements ();
6405
6406   /* Add to the hash table all undefineds on the command line.  */
6407   lang_place_undefineds ();
6408
6409   if (!bfd_section_already_linked_table_init ())
6410     einfo (_("%P%F: Failed to create hash table\n"));
6411
6412   /* Create a bfd for each input file.  */
6413   current_target = default_target;
6414   open_input_bfds (statement_list.head, FALSE);
6415
6416 #ifdef ENABLE_PLUGINS
6417     {
6418       union lang_statement_union **listend;
6419       /* Now all files are read, let the plugin(s) decide if there
6420          are any more to be added to the link before we call the
6421          emulation's after_open hook.  */
6422       listend = statement_list.tail;
6423       ASSERT (!*listend);
6424       if (plugin_call_all_symbols_read ())
6425         einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6426                plugin_error_plugin ());
6427       /* If any new files were added, they will be on the end of the
6428          statement list, and we can open them now by getting open_input_bfds
6429          to carry on from where it ended last time.  */
6430       if (*listend)
6431         open_input_bfds (*listend, FALSE);
6432     }
6433 #endif /* ENABLE_PLUGINS */
6434
6435   link_info.gc_sym_list = &entry_symbol;
6436   if (entry_symbol.name == NULL)
6437     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6438
6439   ldemul_after_open ();
6440
6441   bfd_section_already_linked_table_free ();
6442
6443   /* Make sure that we're not mixing architectures.  We call this
6444      after all the input files have been opened, but before we do any
6445      other processing, so that any operations merge_private_bfd_data
6446      does on the output file will be known during the rest of the
6447      link.  */
6448   lang_check ();
6449
6450   /* Handle .exports instead of a version script if we're told to do so.  */
6451   if (command_line.version_exports_section)
6452     lang_do_version_exports_section ();
6453
6454   /* Build all sets based on the information gathered from the input
6455      files.  */
6456   ldctor_build_sets ();
6457
6458   /* Remove unreferenced sections if asked to.  */
6459   lang_gc_sections ();
6460
6461   /* Size up the common data.  */
6462   lang_common ();
6463
6464   /* Update wild statements.  */
6465   update_wild_statements (statement_list.head);
6466
6467   /* Run through the contours of the script and attach input sections
6468      to the correct output sections.  */
6469   lang_statement_iteration++;
6470   map_input_to_output_sections (statement_list.head, NULL, NULL);
6471
6472   process_insert_statements ();
6473
6474   /* Find any sections not attached explicitly and handle them.  */
6475   lang_place_orphans ();
6476
6477   if (! link_info.relocatable)
6478     {
6479       asection *found;
6480
6481       /* Merge SEC_MERGE sections.  This has to be done after GC of
6482          sections, so that GCed sections are not merged, but before
6483          assigning dynamic symbols, since removing whole input sections
6484          is hard then.  */
6485       bfd_merge_sections (link_info.output_bfd, &link_info);
6486
6487       /* Look for a text section and set the readonly attribute in it.  */
6488       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6489
6490       if (found != NULL)
6491         {
6492           if (config.text_read_only)
6493             found->flags |= SEC_READONLY;
6494           else
6495             found->flags &= ~SEC_READONLY;
6496         }
6497     }
6498
6499   /* Do anything special before sizing sections.  This is where ELF
6500      and other back-ends size dynamic sections.  */
6501   ldemul_before_allocation ();
6502
6503   /* We must record the program headers before we try to fix the
6504      section positions, since they will affect SIZEOF_HEADERS.  */
6505   lang_record_phdrs ();
6506
6507   /* Check relro sections.  */
6508   if (link_info.relro && ! link_info.relocatable)
6509     lang_find_relro_sections ();
6510
6511   /* Size up the sections.  */
6512   lang_size_sections (NULL, ! RELAXATION_ENABLED);
6513
6514   /* See if anything special should be done now we know how big
6515      everything is.  This is where relaxation is done.  */
6516   ldemul_after_allocation ();
6517
6518   /* Fix any .startof. or .sizeof. symbols.  */
6519   lang_set_startof ();
6520
6521   /* Do all the assignments, now that we know the final resting places
6522      of all the symbols.  */
6523
6524   lang_do_assignments ();
6525
6526   ldemul_finish ();
6527
6528   /* Make sure that the section addresses make sense.  */
6529   if (command_line.check_section_addresses)
6530     lang_check_section_addresses ();
6531
6532   lang_end ();
6533 }
6534
6535 /* EXPORTED TO YACC */
6536
6537 void
6538 lang_add_wild (struct wildcard_spec *filespec,
6539                struct wildcard_list *section_list,
6540                bfd_boolean keep_sections)
6541 {
6542   struct wildcard_list *curr, *next;
6543   lang_wild_statement_type *new_stmt;
6544
6545   /* Reverse the list as the parser puts it back to front.  */
6546   for (curr = section_list, section_list = NULL;
6547        curr != NULL;
6548        section_list = curr, curr = next)
6549     {
6550       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6551         placed_commons = TRUE;
6552
6553       next = curr->next;
6554       curr->next = section_list;
6555     }
6556
6557   if (filespec != NULL && filespec->name != NULL)
6558     {
6559       if (strcmp (filespec->name, "*") == 0)
6560         filespec->name = NULL;
6561       else if (! wildcardp (filespec->name))
6562         lang_has_input_file = TRUE;
6563     }
6564
6565   new_stmt = new_stat (lang_wild_statement, stat_ptr);
6566   new_stmt->filename = NULL;
6567   new_stmt->filenames_sorted = FALSE;
6568   if (filespec != NULL)
6569     {
6570       new_stmt->filename = filespec->name;
6571       new_stmt->filenames_sorted = filespec->sorted == by_name;
6572     }
6573   new_stmt->section_list = section_list;
6574   new_stmt->keep_sections = keep_sections;
6575   lang_list_init (&new_stmt->children);
6576   analyze_walk_wild_section_handler (new_stmt);
6577 }
6578
6579 void
6580 lang_section_start (const char *name, etree_type *address,
6581                     const segment_type *segment)
6582 {
6583   lang_address_statement_type *ad;
6584
6585   ad = new_stat (lang_address_statement, stat_ptr);
6586   ad->section_name = name;
6587   ad->address = address;
6588   ad->segment = segment;
6589 }
6590
6591 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6592    because of a -e argument on the command line, or zero if this is
6593    called by ENTRY in a linker script.  Command line arguments take
6594    precedence.  */
6595
6596 void
6597 lang_add_entry (const char *name, bfd_boolean cmdline)
6598 {
6599   if (entry_symbol.name == NULL
6600       || cmdline
6601       || ! entry_from_cmdline)
6602     {
6603       entry_symbol.name = name;
6604       entry_from_cmdline = cmdline;
6605     }
6606 }
6607
6608 /* Set the default start symbol to NAME.  .em files should use this,
6609    not lang_add_entry, to override the use of "start" if neither the
6610    linker script nor the command line specifies an entry point.  NAME
6611    must be permanently allocated.  */
6612 void
6613 lang_default_entry (const char *name)
6614 {
6615   entry_symbol_default = name;
6616 }
6617
6618 void
6619 lang_add_target (const char *name)
6620 {
6621   lang_target_statement_type *new_stmt;
6622
6623   new_stmt = new_stat (lang_target_statement, stat_ptr);
6624   new_stmt->target = name;
6625 }
6626
6627 void
6628 lang_add_map (const char *name)
6629 {
6630   while (*name)
6631     {
6632       switch (*name)
6633         {
6634         case 'F':
6635           map_option_f = TRUE;
6636           break;
6637         }
6638       name++;
6639     }
6640 }
6641
6642 void
6643 lang_add_fill (fill_type *fill)
6644 {
6645   lang_fill_statement_type *new_stmt;
6646
6647   new_stmt = new_stat (lang_fill_statement, stat_ptr);
6648   new_stmt->fill = fill;
6649 }
6650
6651 void
6652 lang_add_data (int type, union etree_union *exp)
6653 {
6654   lang_data_statement_type *new_stmt;
6655
6656   new_stmt = new_stat (lang_data_statement, stat_ptr);
6657   new_stmt->exp = exp;
6658   new_stmt->type = type;
6659 }
6660
6661 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6662    generate.  HOWTO is the corresponding howto structure (we could
6663    look this up, but the caller has already done so).  SECTION is the
6664    section to generate a reloc against, or NAME is the name of the
6665    symbol to generate a reloc against.  Exactly one of SECTION and
6666    NAME must be NULL.  ADDEND is an expression for the addend.  */
6667
6668 void
6669 lang_add_reloc (bfd_reloc_code_real_type reloc,
6670                 reloc_howto_type *howto,
6671                 asection *section,
6672                 const char *name,
6673                 union etree_union *addend)
6674 {
6675   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6676
6677   p->reloc = reloc;
6678   p->howto = howto;
6679   p->section = section;
6680   p->name = name;
6681   p->addend_exp = addend;
6682
6683   p->addend_value = 0;
6684   p->output_section = NULL;
6685   p->output_offset = 0;
6686 }
6687
6688 lang_assignment_statement_type *
6689 lang_add_assignment (etree_type *exp)
6690 {
6691   lang_assignment_statement_type *new_stmt;
6692
6693   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6694   new_stmt->exp = exp;
6695   return new_stmt;
6696 }
6697
6698 void
6699 lang_add_attribute (enum statement_enum attribute)
6700 {
6701   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6702 }
6703
6704 void
6705 lang_startup (const char *name)
6706 {
6707   if (first_file->filename != NULL)
6708     {
6709       einfo (_("%P%F: multiple STARTUP files\n"));
6710     }
6711   first_file->filename = name;
6712   first_file->local_sym_name = name;
6713   first_file->real = TRUE;
6714 }
6715
6716 void
6717 lang_float (bfd_boolean maybe)
6718 {
6719   lang_float_flag = maybe;
6720 }
6721
6722
6723 /* Work out the load- and run-time regions from a script statement, and
6724    store them in *LMA_REGION and *REGION respectively.
6725
6726    MEMSPEC is the name of the run-time region, or the value of
6727    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6728    LMA_MEMSPEC is the name of the load-time region, or null if the
6729    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6730    had an explicit load address.
6731
6732    It is an error to specify both a load region and a load address.  */
6733
6734 static void
6735 lang_get_regions (lang_memory_region_type **region,
6736                   lang_memory_region_type **lma_region,
6737                   const char *memspec,
6738                   const char *lma_memspec,
6739                   bfd_boolean have_lma,
6740                   bfd_boolean have_vma)
6741 {
6742   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6743
6744   /* If no runtime region or VMA has been specified, but the load region
6745      has been specified, then use the load region for the runtime region
6746      as well.  */
6747   if (lma_memspec != NULL
6748       && ! have_vma
6749       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6750     *region = *lma_region;
6751   else
6752     *region = lang_memory_region_lookup (memspec, FALSE);
6753
6754   if (have_lma && lma_memspec != 0)
6755     einfo (_("%X%P:%S: section has both a load address and a load region\n"));
6756 }
6757
6758 void
6759 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6760                                      lang_output_section_phdr_list *phdrs,
6761                                      const char *lma_memspec)
6762 {
6763   lang_get_regions (&current_section->region,
6764                     &current_section->lma_region,
6765                     memspec, lma_memspec,
6766                     current_section->load_base != NULL,
6767                     current_section->addr_tree != NULL);
6768
6769   /* If this section has no load region or base, but has the same
6770      region as the previous section, then propagate the previous
6771      section's load region.  */
6772
6773   if (!current_section->lma_region && !current_section->load_base
6774       && current_section->region == current_section->prev->region)
6775     current_section->lma_region = current_section->prev->lma_region;
6776
6777   current_section->fill = fill;
6778   current_section->phdrs = phdrs;
6779   pop_stat_ptr ();
6780 }
6781
6782 /* Create an absolute symbol with the given name with the value of the
6783    address of first byte of the section named.
6784
6785    If the symbol already exists, then do nothing.  */
6786
6787 void
6788 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
6789 {
6790   struct bfd_link_hash_entry *h;
6791
6792   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6793   if (h == NULL)
6794     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6795
6796   if (h->type == bfd_link_hash_new
6797       || h->type == bfd_link_hash_undefined)
6798     {
6799       asection *sec;
6800
6801       h->type = bfd_link_hash_defined;
6802
6803       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6804       if (sec == NULL)
6805         h->u.def.value = 0;
6806       else
6807         h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
6808
6809       h->u.def.section = bfd_abs_section_ptr;
6810     }
6811 }
6812
6813 /* Create an absolute symbol with the given name with the value of the
6814    address of the first byte after the end of the section named.
6815
6816    If the symbol already exists, then do nothing.  */
6817
6818 void
6819 lang_abs_symbol_at_end_of (const char *secname, const char *name)
6820 {
6821   struct bfd_link_hash_entry *h;
6822
6823   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6824   if (h == NULL)
6825     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6826
6827   if (h->type == bfd_link_hash_new
6828       || h->type == bfd_link_hash_undefined)
6829     {
6830       asection *sec;
6831
6832       h->type = bfd_link_hash_defined;
6833
6834       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6835       if (sec == NULL)
6836         h->u.def.value = 0;
6837       else
6838         h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
6839                           + TO_ADDR (sec->size));
6840
6841       h->u.def.section = bfd_abs_section_ptr;
6842     }
6843 }
6844
6845 void
6846 lang_statement_append (lang_statement_list_type *list,
6847                        lang_statement_union_type *element,
6848                        lang_statement_union_type **field)
6849 {
6850   *(list->tail) = element;
6851   list->tail = field;
6852 }
6853
6854 /* Set the output format type.  -oformat overrides scripts.  */
6855
6856 void
6857 lang_add_output_format (const char *format,
6858                         const char *big,
6859                         const char *little,
6860                         int from_script)
6861 {
6862   if (output_target == NULL || !from_script)
6863     {
6864       if (command_line.endian == ENDIAN_BIG
6865           && big != NULL)
6866         format = big;
6867       else if (command_line.endian == ENDIAN_LITTLE
6868                && little != NULL)
6869         format = little;
6870
6871       output_target = format;
6872     }
6873 }
6874
6875 void
6876 lang_add_insert (const char *where, int is_before)
6877 {
6878   lang_insert_statement_type *new_stmt;
6879
6880   new_stmt = new_stat (lang_insert_statement, stat_ptr);
6881   new_stmt->where = where;
6882   new_stmt->is_before = is_before;
6883   saved_script_handle = previous_script_handle;
6884 }
6885
6886 /* Enter a group.  This creates a new lang_group_statement, and sets
6887    stat_ptr to build new statements within the group.  */
6888
6889 void
6890 lang_enter_group (void)
6891 {
6892   lang_group_statement_type *g;
6893
6894   g = new_stat (lang_group_statement, stat_ptr);
6895   lang_list_init (&g->children);
6896   push_stat_ptr (&g->children);
6897 }
6898
6899 /* Leave a group.  This just resets stat_ptr to start writing to the
6900    regular list of statements again.  Note that this will not work if
6901    groups can occur inside anything else which can adjust stat_ptr,
6902    but currently they can't.  */
6903
6904 void
6905 lang_leave_group (void)
6906 {
6907   pop_stat_ptr ();
6908 }
6909
6910 /* Add a new program header.  This is called for each entry in a PHDRS
6911    command in a linker script.  */
6912
6913 void
6914 lang_new_phdr (const char *name,
6915                etree_type *type,
6916                bfd_boolean filehdr,
6917                bfd_boolean phdrs,
6918                etree_type *at,
6919                etree_type *flags)
6920 {
6921   struct lang_phdr *n, **pp;
6922   bfd_boolean hdrs;
6923
6924   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
6925   n->next = NULL;
6926   n->name = name;
6927   n->type = exp_get_value_int (type, 0, "program header type");
6928   n->filehdr = filehdr;
6929   n->phdrs = phdrs;
6930   n->at = at;
6931   n->flags = flags;
6932
6933   hdrs = n->type == 1 && (phdrs || filehdr);
6934
6935   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
6936     if (hdrs
6937         && (*pp)->type == 1
6938         && !((*pp)->filehdr || (*pp)->phdrs))
6939       {
6940         einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"));
6941         hdrs = FALSE;
6942       }
6943
6944   *pp = n;
6945 }
6946
6947 /* Record the program header information in the output BFD.  FIXME: We
6948    should not be calling an ELF specific function here.  */
6949
6950 static void
6951 lang_record_phdrs (void)
6952 {
6953   unsigned int alc;
6954   asection **secs;
6955   lang_output_section_phdr_list *last;
6956   struct lang_phdr *l;
6957   lang_output_section_statement_type *os;
6958
6959   alc = 10;
6960   secs = (asection **) xmalloc (alc * sizeof (asection *));
6961   last = NULL;
6962
6963   for (l = lang_phdr_list; l != NULL; l = l->next)
6964     {
6965       unsigned int c;
6966       flagword flags;
6967       bfd_vma at;
6968
6969       c = 0;
6970       for (os = &lang_output_section_statement.head->output_section_statement;
6971            os != NULL;
6972            os = os->next)
6973         {
6974           lang_output_section_phdr_list *pl;
6975
6976           if (os->constraint < 0)
6977             continue;
6978
6979           pl = os->phdrs;
6980           if (pl != NULL)
6981             last = pl;
6982           else
6983             {
6984               if (os->sectype == noload_section
6985                   || os->bfd_section == NULL
6986                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
6987                 continue;
6988
6989               /* Don't add orphans to PT_INTERP header.  */
6990               if (l->type == 3)
6991                 continue;
6992
6993               if (last == NULL)
6994                 {
6995                   lang_output_section_statement_type * tmp_os;
6996
6997                   /* If we have not run across a section with a program
6998                      header assigned to it yet, then scan forwards to find
6999                      one.  This prevents inconsistencies in the linker's
7000                      behaviour when a script has specified just a single
7001                      header and there are sections in that script which are
7002                      not assigned to it, and which occur before the first
7003                      use of that header. See here for more details:
7004                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7005                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7006                     if (tmp_os->phdrs)
7007                       {
7008                         last = tmp_os->phdrs;
7009                         break;
7010                       }
7011                   if (last == NULL)
7012                     einfo (_("%F%P: no sections assigned to phdrs\n"));
7013                 }
7014               pl = last;
7015             }
7016
7017           if (os->bfd_section == NULL)
7018             continue;
7019
7020           for (; pl != NULL; pl = pl->next)
7021             {
7022               if (strcmp (pl->name, l->name) == 0)
7023                 {
7024                   if (c >= alc)
7025                     {
7026                       alc *= 2;
7027                       secs = (asection **) xrealloc (secs,
7028                                                      alc * sizeof (asection *));
7029                     }
7030                   secs[c] = os->bfd_section;
7031                   ++c;
7032                   pl->used = TRUE;
7033                 }
7034             }
7035         }
7036
7037       if (l->flags == NULL)
7038         flags = 0;
7039       else
7040         flags = exp_get_vma (l->flags, 0, "phdr flags");
7041
7042       if (l->at == NULL)
7043         at = 0;
7044       else
7045         at = exp_get_vma (l->at, 0, "phdr load address");
7046
7047       if (! bfd_record_phdr (link_info.output_bfd, l->type,
7048                              l->flags != NULL, flags, l->at != NULL,
7049                              at, l->filehdr, l->phdrs, c, secs))
7050         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7051     }
7052
7053   free (secs);
7054
7055   /* Make sure all the phdr assignments succeeded.  */
7056   for (os = &lang_output_section_statement.head->output_section_statement;
7057        os != NULL;
7058        os = os->next)
7059     {
7060       lang_output_section_phdr_list *pl;
7061
7062       if (os->constraint < 0
7063           || os->bfd_section == NULL)
7064         continue;
7065
7066       for (pl = os->phdrs;
7067            pl != NULL;
7068            pl = pl->next)
7069         if (! pl->used && strcmp (pl->name, "NONE") != 0)
7070           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7071                  os->name, pl->name);
7072     }
7073 }
7074
7075 /* Record a list of sections which may not be cross referenced.  */
7076
7077 void
7078 lang_add_nocrossref (lang_nocrossref_type *l)
7079 {
7080   struct lang_nocrossrefs *n;
7081
7082   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7083   n->next = nocrossref_list;
7084   n->list = l;
7085   nocrossref_list = n;
7086
7087   /* Set notice_all so that we get informed about all symbols.  */
7088   link_info.notice_all = TRUE;
7089 }
7090 \f
7091 /* Overlay handling.  We handle overlays with some static variables.  */
7092
7093 /* The overlay virtual address.  */
7094 static etree_type *overlay_vma;
7095 /* And subsection alignment.  */
7096 static etree_type *overlay_subalign;
7097
7098 /* An expression for the maximum section size seen so far.  */
7099 static etree_type *overlay_max;
7100
7101 /* A list of all the sections in this overlay.  */
7102
7103 struct overlay_list {
7104   struct overlay_list *next;
7105   lang_output_section_statement_type *os;
7106 };
7107
7108 static struct overlay_list *overlay_list;
7109
7110 /* Start handling an overlay.  */
7111
7112 void
7113 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7114 {
7115   /* The grammar should prevent nested overlays from occurring.  */
7116   ASSERT (overlay_vma == NULL
7117           && overlay_subalign == NULL
7118           && overlay_max == NULL);
7119
7120   overlay_vma = vma_expr;
7121   overlay_subalign = subalign;
7122 }
7123
7124 /* Start a section in an overlay.  We handle this by calling
7125    lang_enter_output_section_statement with the correct VMA.
7126    lang_leave_overlay sets up the LMA and memory regions.  */
7127
7128 void
7129 lang_enter_overlay_section (const char *name)
7130 {
7131   struct overlay_list *n;
7132   etree_type *size;
7133
7134   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7135                                        0, overlay_subalign, 0, 0);
7136
7137   /* If this is the first section, then base the VMA of future
7138      sections on this one.  This will work correctly even if `.' is
7139      used in the addresses.  */
7140   if (overlay_list == NULL)
7141     overlay_vma = exp_nameop (ADDR, name);
7142
7143   /* Remember the section.  */
7144   n = (struct overlay_list *) xmalloc (sizeof *n);
7145   n->os = current_section;
7146   n->next = overlay_list;
7147   overlay_list = n;
7148
7149   size = exp_nameop (SIZEOF, name);
7150
7151   /* Arrange to work out the maximum section end address.  */
7152   if (overlay_max == NULL)
7153     overlay_max = size;
7154   else
7155     overlay_max = exp_binop (MAX_K, overlay_max, size);
7156 }
7157
7158 /* Finish a section in an overlay.  There isn't any special to do
7159    here.  */
7160
7161 void
7162 lang_leave_overlay_section (fill_type *fill,
7163                             lang_output_section_phdr_list *phdrs)
7164 {
7165   const char *name;
7166   char *clean, *s2;
7167   const char *s1;
7168   char *buf;
7169
7170   name = current_section->name;
7171
7172   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7173      region and that no load-time region has been specified.  It doesn't
7174      really matter what we say here, since lang_leave_overlay will
7175      override it.  */
7176   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7177
7178   /* Define the magic symbols.  */
7179
7180   clean = (char *) xmalloc (strlen (name) + 1);
7181   s2 = clean;
7182   for (s1 = name; *s1 != '\0'; s1++)
7183     if (ISALNUM (*s1) || *s1 == '_')
7184       *s2++ = *s1;
7185   *s2 = '\0';
7186
7187   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7188   sprintf (buf, "__load_start_%s", clean);
7189   lang_add_assignment (exp_provide (buf,
7190                                     exp_nameop (LOADADDR, name),
7191                                     FALSE));
7192
7193   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7194   sprintf (buf, "__load_stop_%s", clean);
7195   lang_add_assignment (exp_provide (buf,
7196                                     exp_binop ('+',
7197                                                exp_nameop (LOADADDR, name),
7198                                                exp_nameop (SIZEOF, name)),
7199                                     FALSE));
7200
7201   free (clean);
7202 }
7203
7204 /* Finish an overlay.  If there are any overlay wide settings, this
7205    looks through all the sections in the overlay and sets them.  */
7206
7207 void
7208 lang_leave_overlay (etree_type *lma_expr,
7209                     int nocrossrefs,
7210                     fill_type *fill,
7211                     const char *memspec,
7212                     lang_output_section_phdr_list *phdrs,
7213                     const char *lma_memspec)
7214 {
7215   lang_memory_region_type *region;
7216   lang_memory_region_type *lma_region;
7217   struct overlay_list *l;
7218   lang_nocrossref_type *nocrossref;
7219
7220   lang_get_regions (&region, &lma_region,
7221                     memspec, lma_memspec,
7222                     lma_expr != NULL, FALSE);
7223
7224   nocrossref = NULL;
7225
7226   /* After setting the size of the last section, set '.' to end of the
7227      overlay region.  */
7228   if (overlay_list != NULL)
7229     overlay_list->os->update_dot_tree
7230       = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
7231
7232   l = overlay_list;
7233   while (l != NULL)
7234     {
7235       struct overlay_list *next;
7236
7237       if (fill != NULL && l->os->fill == NULL)
7238         l->os->fill = fill;
7239
7240       l->os->region = region;
7241       l->os->lma_region = lma_region;
7242
7243       /* The first section has the load address specified in the
7244          OVERLAY statement.  The rest are worked out from that.
7245          The base address is not needed (and should be null) if
7246          an LMA region was specified.  */
7247       if (l->next == 0)
7248         {
7249           l->os->load_base = lma_expr;
7250           l->os->sectype = normal_section;
7251         }
7252       if (phdrs != NULL && l->os->phdrs == NULL)
7253         l->os->phdrs = phdrs;
7254
7255       if (nocrossrefs)
7256         {
7257           lang_nocrossref_type *nc;
7258
7259           nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7260           nc->name = l->os->name;
7261           nc->next = nocrossref;
7262           nocrossref = nc;
7263         }
7264
7265       next = l->next;
7266       free (l);
7267       l = next;
7268     }
7269
7270   if (nocrossref != NULL)
7271     lang_add_nocrossref (nocrossref);
7272
7273   overlay_vma = NULL;
7274   overlay_list = NULL;
7275   overlay_max = NULL;
7276 }
7277 \f
7278 /* Version handling.  This is only useful for ELF.  */
7279
7280 /* This global variable holds the version tree that we build.  */
7281
7282 struct bfd_elf_version_tree *lang_elf_version_info;
7283
7284 /* If PREV is NULL, return first version pattern matching particular symbol.
7285    If PREV is non-NULL, return first version pattern matching particular
7286    symbol after PREV (previously returned by lang_vers_match).  */
7287
7288 static struct bfd_elf_version_expr *
7289 lang_vers_match (struct bfd_elf_version_expr_head *head,
7290                  struct bfd_elf_version_expr *prev,
7291                  const char *sym)
7292 {
7293   const char *cxx_sym = sym;
7294   const char *java_sym = sym;
7295   struct bfd_elf_version_expr *expr = NULL;
7296
7297   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7298     {
7299       cxx_sym = cplus_demangle (sym, DMGL_PARAMS | DMGL_ANSI);
7300       if (!cxx_sym)
7301         cxx_sym = sym;
7302     }
7303   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7304     {
7305       java_sym = cplus_demangle (sym, DMGL_JAVA);
7306       if (!java_sym)
7307         java_sym = sym;
7308     }
7309
7310   if (head->htab && (prev == NULL || prev->literal))
7311     {
7312       struct bfd_elf_version_expr e;
7313
7314       switch (prev ? prev->mask : 0)
7315         {
7316         case 0:
7317           if (head->mask & BFD_ELF_VERSION_C_TYPE)
7318             {
7319               e.pattern = sym;
7320               expr = (struct bfd_elf_version_expr *)
7321                   htab_find ((htab_t) head->htab, &e);
7322               while (expr && strcmp (expr->pattern, sym) == 0)
7323                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7324                   goto out_ret;
7325                 else
7326                   expr = expr->next;
7327             }
7328           /* Fallthrough */
7329         case BFD_ELF_VERSION_C_TYPE:
7330           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7331             {
7332               e.pattern = cxx_sym;
7333               expr = (struct bfd_elf_version_expr *)
7334                   htab_find ((htab_t) head->htab, &e);
7335               while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7336                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7337                   goto out_ret;
7338                 else
7339                   expr = expr->next;
7340             }
7341           /* Fallthrough */
7342         case BFD_ELF_VERSION_CXX_TYPE:
7343           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7344             {
7345               e.pattern = java_sym;
7346               expr = (struct bfd_elf_version_expr *)
7347                   htab_find ((htab_t) head->htab, &e);
7348               while (expr && strcmp (expr->pattern, java_sym) == 0)
7349                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7350                   goto out_ret;
7351                 else
7352                   expr = expr->next;
7353             }
7354           /* Fallthrough */
7355         default:
7356           break;
7357         }
7358     }
7359
7360   /* Finally, try the wildcards.  */
7361   if (prev == NULL || prev->literal)
7362     expr = head->remaining;
7363   else
7364     expr = prev->next;
7365   for (; expr; expr = expr->next)
7366     {
7367       const char *s;
7368
7369       if (!expr->pattern)
7370         continue;
7371
7372       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7373         break;
7374
7375       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7376         s = java_sym;
7377       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7378         s = cxx_sym;
7379       else
7380         s = sym;
7381       if (fnmatch (expr->pattern, s, 0) == 0)
7382         break;
7383     }
7384
7385  out_ret:
7386   if (cxx_sym != sym)
7387     free ((char *) cxx_sym);
7388   if (java_sym != sym)
7389     free ((char *) java_sym);
7390   return expr;
7391 }
7392
7393 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7394    return a pointer to the symbol name with any backslash quotes removed.  */
7395
7396 static const char *
7397 realsymbol (const char *pattern)
7398 {
7399   const char *p;
7400   bfd_boolean changed = FALSE, backslash = FALSE;
7401   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7402
7403   for (p = pattern, s = symbol; *p != '\0'; ++p)
7404     {
7405       /* It is a glob pattern only if there is no preceding
7406          backslash.  */
7407       if (backslash)
7408         {
7409           /* Remove the preceding backslash.  */
7410           *(s - 1) = *p;
7411           backslash = FALSE;
7412           changed = TRUE;
7413         }
7414       else
7415         {
7416           if (*p == '?' || *p == '*' || *p == '[')
7417             {
7418               free (symbol);
7419               return NULL;
7420             }
7421
7422           *s++ = *p;
7423           backslash = *p == '\\';
7424         }
7425     }
7426
7427   if (changed)
7428     {
7429       *s = '\0';
7430       return symbol;
7431     }
7432   else
7433     {
7434       free (symbol);
7435       return pattern;
7436     }
7437 }
7438
7439 /* This is called for each variable name or match expression.  NEW_NAME is
7440    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7441    pattern to be matched against symbol names.  */
7442
7443 struct bfd_elf_version_expr *
7444 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7445                        const char *new_name,
7446                        const char *lang,
7447                        bfd_boolean literal_p)
7448 {
7449   struct bfd_elf_version_expr *ret;
7450
7451   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7452   ret->next = orig;
7453   ret->symver = 0;
7454   ret->script = 0;
7455   ret->literal = TRUE;
7456   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7457   if (ret->pattern == NULL)
7458     {
7459       ret->pattern = new_name;
7460       ret->literal = FALSE;
7461     }
7462
7463   if (lang == NULL || strcasecmp (lang, "C") == 0)
7464     ret->mask = BFD_ELF_VERSION_C_TYPE;
7465   else if (strcasecmp (lang, "C++") == 0)
7466     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7467   else if (strcasecmp (lang, "Java") == 0)
7468     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7469   else
7470     {
7471       einfo (_("%X%P: unknown language `%s' in version information\n"),
7472              lang);
7473       ret->mask = BFD_ELF_VERSION_C_TYPE;
7474     }
7475
7476   return ldemul_new_vers_pattern (ret);
7477 }
7478
7479 /* This is called for each set of variable names and match
7480    expressions.  */
7481
7482 struct bfd_elf_version_tree *
7483 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7484                     struct bfd_elf_version_expr *locals)
7485 {
7486   struct bfd_elf_version_tree *ret;
7487
7488   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7489   ret->globals.list = globals;
7490   ret->locals.list = locals;
7491   ret->match = lang_vers_match;
7492   ret->name_indx = (unsigned int) -1;
7493   return ret;
7494 }
7495
7496 /* This static variable keeps track of version indices.  */
7497
7498 static int version_index;
7499
7500 static hashval_t
7501 version_expr_head_hash (const void *p)
7502 {
7503   const struct bfd_elf_version_expr *e =
7504       (const struct bfd_elf_version_expr *) p;
7505
7506   return htab_hash_string (e->pattern);
7507 }
7508
7509 static int
7510 version_expr_head_eq (const void *p1, const void *p2)
7511 {
7512   const struct bfd_elf_version_expr *e1 =
7513       (const struct bfd_elf_version_expr *) p1;
7514   const struct bfd_elf_version_expr *e2 =
7515       (const struct bfd_elf_version_expr *) p2;
7516
7517   return strcmp (e1->pattern, e2->pattern) == 0;
7518 }
7519
7520 static void
7521 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7522 {
7523   size_t count = 0;
7524   struct bfd_elf_version_expr *e, *next;
7525   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7526
7527   for (e = head->list; e; e = e->next)
7528     {
7529       if (e->literal)
7530         count++;
7531       head->mask |= e->mask;
7532     }
7533
7534   if (count)
7535     {
7536       head->htab = htab_create (count * 2, version_expr_head_hash,
7537                                 version_expr_head_eq, NULL);
7538       list_loc = &head->list;
7539       remaining_loc = &head->remaining;
7540       for (e = head->list; e; e = next)
7541         {
7542           next = e->next;
7543           if (!e->literal)
7544             {
7545               *remaining_loc = e;
7546               remaining_loc = &e->next;
7547             }
7548           else
7549             {
7550               void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7551
7552               if (*loc)
7553                 {
7554                   struct bfd_elf_version_expr *e1, *last;
7555
7556                   e1 = (struct bfd_elf_version_expr *) *loc;
7557                   last = NULL;
7558                   do
7559                     {
7560                       if (e1->mask == e->mask)
7561                         {
7562                           last = NULL;
7563                           break;
7564                         }
7565                       last = e1;
7566                       e1 = e1->next;
7567                     }
7568                   while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7569
7570                   if (last == NULL)
7571                     {
7572                       /* This is a duplicate.  */
7573                       /* FIXME: Memory leak.  Sometimes pattern is not
7574                          xmalloced alone, but in larger chunk of memory.  */
7575                       /* free (e->pattern); */
7576                       free (e);
7577                     }
7578                   else
7579                     {
7580                       e->next = last->next;
7581                       last->next = e;
7582                     }
7583                 }
7584               else
7585                 {
7586                   *loc = e;
7587                   *list_loc = e;
7588                   list_loc = &e->next;
7589                 }
7590             }
7591         }
7592       *remaining_loc = NULL;
7593       *list_loc = head->remaining;
7594     }
7595   else
7596     head->remaining = head->list;
7597 }
7598
7599 /* This is called when we know the name and dependencies of the
7600    version.  */
7601
7602 void
7603 lang_register_vers_node (const char *name,
7604                          struct bfd_elf_version_tree *version,
7605                          struct bfd_elf_version_deps *deps)
7606 {
7607   struct bfd_elf_version_tree *t, **pp;
7608   struct bfd_elf_version_expr *e1;
7609
7610   if (name == NULL)
7611     name = "";
7612
7613   if ((name[0] == '\0' && lang_elf_version_info != NULL)
7614       || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
7615     {
7616       einfo (_("%X%P: anonymous version tag cannot be combined"
7617                " with other version tags\n"));
7618       free (version);
7619       return;
7620     }
7621
7622   /* Make sure this node has a unique name.  */
7623   for (t = lang_elf_version_info; t != NULL; t = t->next)
7624     if (strcmp (t->name, name) == 0)
7625       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7626
7627   lang_finalize_version_expr_head (&version->globals);
7628   lang_finalize_version_expr_head (&version->locals);
7629
7630   /* Check the global and local match names, and make sure there
7631      aren't any duplicates.  */
7632
7633   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7634     {
7635       for (t = lang_elf_version_info; t != NULL; t = t->next)
7636         {
7637           struct bfd_elf_version_expr *e2;
7638
7639           if (t->locals.htab && e1->literal)
7640             {
7641               e2 = (struct bfd_elf_version_expr *)
7642                   htab_find ((htab_t) t->locals.htab, e1);
7643               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7644                 {
7645                   if (e1->mask == e2->mask)
7646                     einfo (_("%X%P: duplicate expression `%s'"
7647                              " in version information\n"), e1->pattern);
7648                   e2 = e2->next;
7649                 }
7650             }
7651           else if (!e1->literal)
7652             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7653               if (strcmp (e1->pattern, e2->pattern) == 0
7654                   && e1->mask == e2->mask)
7655                 einfo (_("%X%P: duplicate expression `%s'"
7656                          " in version information\n"), e1->pattern);
7657         }
7658     }
7659
7660   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7661     {
7662       for (t = lang_elf_version_info; t != NULL; t = t->next)
7663         {
7664           struct bfd_elf_version_expr *e2;
7665
7666           if (t->globals.htab && e1->literal)
7667             {
7668               e2 = (struct bfd_elf_version_expr *)
7669                   htab_find ((htab_t) t->globals.htab, e1);
7670               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7671                 {
7672                   if (e1->mask == e2->mask)
7673                     einfo (_("%X%P: duplicate expression `%s'"
7674                              " in version information\n"),
7675                            e1->pattern);
7676                   e2 = e2->next;
7677                 }
7678             }
7679           else if (!e1->literal)
7680             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7681               if (strcmp (e1->pattern, e2->pattern) == 0
7682                   && e1->mask == e2->mask)
7683                 einfo (_("%X%P: duplicate expression `%s'"
7684                          " in version information\n"), e1->pattern);
7685         }
7686     }
7687
7688   version->deps = deps;
7689   version->name = name;
7690   if (name[0] != '\0')
7691     {
7692       ++version_index;
7693       version->vernum = version_index;
7694     }
7695   else
7696     version->vernum = 0;
7697
7698   for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
7699     ;
7700   *pp = version;
7701 }
7702
7703 /* This is called when we see a version dependency.  */
7704
7705 struct bfd_elf_version_deps *
7706 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7707 {
7708   struct bfd_elf_version_deps *ret;
7709   struct bfd_elf_version_tree *t;
7710
7711   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7712   ret->next = list;
7713
7714   for (t = lang_elf_version_info; t != NULL; t = t->next)
7715     {
7716       if (strcmp (t->name, name) == 0)
7717         {
7718           ret->version_needed = t;
7719           return ret;
7720         }
7721     }
7722
7723   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7724
7725   ret->version_needed = NULL;
7726   return ret;
7727 }
7728
7729 static void
7730 lang_do_version_exports_section (void)
7731 {
7732   struct bfd_elf_version_expr *greg = NULL, *lreg;
7733
7734   LANG_FOR_EACH_INPUT_STATEMENT (is)
7735     {
7736       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7737       char *contents, *p;
7738       bfd_size_type len;
7739
7740       if (sec == NULL)
7741         continue;
7742
7743       len = sec->size;
7744       contents = (char *) xmalloc (len);
7745       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7746         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7747
7748       p = contents;
7749       while (p < contents + len)
7750         {
7751           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7752           p = strchr (p, '\0') + 1;
7753         }
7754
7755       /* Do not free the contents, as we used them creating the regex.  */
7756
7757       /* Do not include this section in the link.  */
7758       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7759     }
7760
7761   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7762   lang_register_vers_node (command_line.version_exports_section,
7763                            lang_new_vers_node (greg, lreg), NULL);
7764 }
7765
7766 void
7767 lang_add_unique (const char *name)
7768 {
7769   struct unique_sections *ent;
7770
7771   for (ent = unique_section_list; ent; ent = ent->next)
7772     if (strcmp (ent->name, name) == 0)
7773       return;
7774
7775   ent = (struct unique_sections *) xmalloc (sizeof *ent);
7776   ent->name = xstrdup (name);
7777   ent->next = unique_section_list;
7778   unique_section_list = ent;
7779 }
7780
7781 /* Append the list of dynamic symbols to the existing one.  */
7782
7783 void
7784 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7785 {
7786   if (link_info.dynamic_list)
7787     {
7788       struct bfd_elf_version_expr *tail;
7789       for (tail = dynamic; tail->next != NULL; tail = tail->next)
7790         ;
7791       tail->next = link_info.dynamic_list->head.list;
7792       link_info.dynamic_list->head.list = dynamic;
7793     }
7794   else
7795     {
7796       struct bfd_elf_dynamic_list *d;
7797
7798       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
7799       d->head.list = dynamic;
7800       d->match = lang_vers_match;
7801       link_info.dynamic_list = d;
7802     }
7803 }
7804
7805 /* Append the list of C++ typeinfo dynamic symbols to the existing
7806    one.  */
7807
7808 void
7809 lang_append_dynamic_list_cpp_typeinfo (void)
7810 {
7811   const char * symbols [] =
7812     {
7813       "typeinfo name for*",
7814       "typeinfo for*"
7815     };
7816   struct bfd_elf_version_expr *dynamic = NULL;
7817   unsigned int i;
7818
7819   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7820     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7821                                      FALSE);
7822
7823   lang_append_dynamic_list (dynamic);
7824 }
7825
7826 /* Append the list of C++ operator new and delete dynamic symbols to the
7827    existing one.  */
7828
7829 void
7830 lang_append_dynamic_list_cpp_new (void)
7831 {
7832   const char * symbols [] =
7833     {
7834       "operator new*",
7835       "operator delete*"
7836     };
7837   struct bfd_elf_version_expr *dynamic = NULL;
7838   unsigned int i;
7839
7840   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7841     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7842                                      FALSE);
7843
7844   lang_append_dynamic_list (dynamic);
7845 }