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