OSDN Git Service

* ldlang.c (lang_size_sections_1): Align lma using same alignment
[pf3gnuchains/sourceware.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             int section_alignment = 0;
4792
4793             os = &s->output_section_statement;
4794             if (os->constraint == -1)
4795               break;
4796
4797             /* FIXME: We shouldn't need to zero section vmas for ld -r
4798                here, in lang_insert_orphan, or in the default linker scripts.
4799                This is covering for coff backend linker bugs.  See PR6945.  */
4800             if (os->addr_tree == NULL
4801                 && link_info.relocatable
4802                 && (bfd_get_flavour (link_info.output_bfd)
4803                     == bfd_target_coff_flavour))
4804               os->addr_tree = exp_intop (0);
4805             if (os->addr_tree != NULL)
4806               {
4807                 os->processed_vma = FALSE;
4808                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4809
4810                 if (expld.result.valid_p)
4811                   {
4812                     dot = expld.result.value;
4813                     if (expld.result.section != NULL)
4814                       dot += expld.result.section->vma;
4815                   }
4816                 else if (expld.phase != lang_mark_phase_enum)
4817                   einfo (_("%F%S: non constant or forward reference"
4818                            " address expression for section %s\n"),
4819                          os->name);
4820               }
4821
4822             if (os->bfd_section == NULL)
4823               /* This section was removed or never actually created.  */
4824               break;
4825
4826             /* If this is a COFF shared library section, use the size and
4827                address from the input section.  FIXME: This is COFF
4828                specific; it would be cleaner if there were some other way
4829                to do this, but nothing simple comes to mind.  */
4830             if (((bfd_get_flavour (link_info.output_bfd)
4831                   == bfd_target_ecoff_flavour)
4832                  || (bfd_get_flavour (link_info.output_bfd)
4833                      == bfd_target_coff_flavour))
4834                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4835               {
4836                 asection *input;
4837
4838                 if (os->children.head == NULL
4839                     || os->children.head->header.next != NULL
4840                     || (os->children.head->header.type
4841                         != lang_input_section_enum))
4842                   einfo (_("%P%X: Internal error on COFF shared library"
4843                            " section %s\n"), os->name);
4844
4845                 input = os->children.head->input_section.section;
4846                 bfd_set_section_vma (os->bfd_section->owner,
4847                                      os->bfd_section,
4848                                      bfd_section_vma (input->owner, input));
4849                 os->bfd_section->size = input->size;
4850                 break;
4851               }
4852
4853             newdot = dot;
4854             if (bfd_is_abs_section (os->bfd_section))
4855               {
4856                 /* No matter what happens, an abs section starts at zero.  */
4857                 ASSERT (os->bfd_section->vma == 0);
4858               }
4859             else
4860               {
4861                 if (os->addr_tree == NULL)
4862                   {
4863                     /* No address specified for this section, get one
4864                        from the region specification.  */
4865                     if (os->region == NULL
4866                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4867                             && os->region->name_list.name[0] == '*'
4868                             && strcmp (os->region->name_list.name,
4869                                        DEFAULT_MEMORY_REGION) == 0))
4870                       {
4871                         os->region = lang_memory_default (os->bfd_section);
4872                       }
4873
4874                     /* If a loadable section is using the default memory
4875                        region, and some non default memory regions were
4876                        defined, issue an error message.  */
4877                     if (!os->ignored
4878                         && !IGNORE_SECTION (os->bfd_section)
4879                         && ! link_info.relocatable
4880                         && check_regions
4881                         && strcmp (os->region->name_list.name,
4882                                    DEFAULT_MEMORY_REGION) == 0
4883                         && lang_memory_region_list != NULL
4884                         && (strcmp (lang_memory_region_list->name_list.name,
4885                                     DEFAULT_MEMORY_REGION) != 0
4886                             || lang_memory_region_list->next != NULL)
4887                         && expld.phase != lang_mark_phase_enum)
4888                       {
4889                         /* By default this is an error rather than just a
4890                            warning because if we allocate the section to the
4891                            default memory region we can end up creating an
4892                            excessively large binary, or even seg faulting when
4893                            attempting to perform a negative seek.  See
4894                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
4895                            for an example of this.  This behaviour can be
4896                            overridden by the using the --no-check-sections
4897                            switch.  */
4898                         if (command_line.check_section_addresses)
4899                           einfo (_("%P%F: error: no memory region specified"
4900                                    " for loadable section `%s'\n"),
4901                                  bfd_get_section_name (link_info.output_bfd,
4902                                                        os->bfd_section));
4903                         else
4904                           einfo (_("%P: warning: no memory region specified"
4905                                    " for loadable section `%s'\n"),
4906                                  bfd_get_section_name (link_info.output_bfd,
4907                                                        os->bfd_section));
4908                       }
4909
4910                     newdot = os->region->current;
4911                     section_alignment = os->bfd_section->alignment_power;
4912                   }
4913                 else
4914                   section_alignment = os->section_alignment;
4915
4916                 /* Align to what the section needs.  */
4917                 if (section_alignment > 0)
4918                   {
4919                     bfd_vma savedot = newdot;
4920                     newdot = align_power (newdot, section_alignment);
4921
4922                     if (newdot != savedot
4923                         && (config.warn_section_align
4924                             || os->addr_tree != NULL)
4925                         && expld.phase != lang_mark_phase_enum)
4926                       einfo (_("%P: warning: changing start of section"
4927                                " %s by %lu bytes\n"),
4928                              os->name, (unsigned long) (newdot - savedot));
4929                   }
4930
4931                 bfd_set_section_vma (0, os->bfd_section, newdot);
4932
4933                 os->bfd_section->output_offset = 0;
4934               }
4935
4936             lang_size_sections_1 (&os->children.head, os,
4937                                   os->fill, newdot, relax, check_regions);
4938
4939             os->processed_vma = TRUE;
4940
4941             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4942               /* Except for some special linker created sections,
4943                  no output section should change from zero size
4944                  after strip_excluded_output_sections.  A non-zero
4945                  size on an ignored section indicates that some
4946                  input section was not sized early enough.  */
4947               ASSERT (os->bfd_section->size == 0);
4948             else
4949               {
4950                 dot = os->bfd_section->vma;
4951
4952                 /* Put the section within the requested block size, or
4953                    align at the block boundary.  */
4954                 after = ((dot
4955                           + TO_ADDR (os->bfd_section->size)
4956                           + os->block_value - 1)
4957                          & - (bfd_vma) os->block_value);
4958
4959                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4960               }
4961
4962             /* Set section lma.  */
4963             r = os->region;
4964             if (r == NULL)
4965               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4966
4967             if (os->load_base)
4968               {
4969                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4970                 os->bfd_section->lma = lma;
4971               }
4972             else if (os->lma_region != NULL)
4973               {
4974                 bfd_vma lma = os->lma_region->current;
4975
4976                 if (section_alignment > 0)
4977                   lma = align_power (lma, section_alignment);
4978                 os->bfd_section->lma = lma;
4979               }
4980             else if (r->last_os != NULL
4981                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
4982               {
4983                 bfd_vma lma;
4984                 asection *last;
4985
4986                 last = r->last_os->output_section_statement.bfd_section;
4987
4988                 /* A backwards move of dot should be accompanied by
4989                    an explicit assignment to the section LMA (ie.
4990                    os->load_base set) because backwards moves can
4991                    create overlapping LMAs.  */
4992                 if (dot < last->vma
4993                     && os->bfd_section->size != 0
4994                     && dot + os->bfd_section->size <= last->vma)
4995                   {
4996                     /* If dot moved backwards then leave lma equal to
4997                        vma.  This is the old default lma, which might
4998                        just happen to work when the backwards move is
4999                        sufficiently large.  Nag if this changes anything,
5000                        so people can fix their linker scripts.  */
5001
5002                     if (last->vma != last->lma)
5003                       einfo (_("%P: warning: dot moved backwards before `%s'\n"),
5004                              os->name);
5005                   }
5006                 else
5007                   {
5008                     /* If this is an overlay, set the current lma to that
5009                        at the end of the previous section.  */
5010                     if (os->sectype == overlay_section)
5011                       lma = last->lma + last->size;
5012
5013                     /* Otherwise, keep the same lma to vma relationship
5014                        as the previous section.  */
5015                     else
5016                       lma = dot + last->lma - last->vma;
5017
5018                     if (section_alignment > 0)
5019                       lma = align_power (lma, section_alignment);
5020                     os->bfd_section->lma = lma;
5021                   }
5022               }
5023             os->processed_lma = TRUE;
5024
5025             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5026               break;
5027
5028             /* Keep track of normal sections using the default
5029                lma region.  We use this to set the lma for
5030                following sections.  Overlays or other linker
5031                script assignment to lma might mean that the
5032                default lma == vma is incorrect.
5033                To avoid warnings about dot moving backwards when using
5034                -Ttext, don't start tracking sections until we find one
5035                of non-zero size or with lma set differently to vma.  */
5036             if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5037                  || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
5038                 && (os->bfd_section->flags & SEC_ALLOC) != 0
5039                 && (os->bfd_section->size != 0
5040                     || (r->last_os == NULL
5041                         && os->bfd_section->vma != os->bfd_section->lma)
5042                     || (r->last_os != NULL
5043                         && dot >= (r->last_os->output_section_statement
5044                                    .bfd_section->vma)))
5045                 && os->lma_region == NULL
5046                 && !link_info.relocatable)
5047               r->last_os = s;
5048
5049             /* .tbss sections effectively have zero size.  */
5050             if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5051                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5052                 || link_info.relocatable)
5053               dot += TO_ADDR (os->bfd_section->size);
5054
5055             if (os->update_dot_tree != 0)
5056               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5057
5058             /* Update dot in the region ?
5059                We only do this if the section is going to be allocated,
5060                since unallocated sections do not contribute to the region's
5061                overall size in memory.  */
5062             if (os->region != NULL
5063                 && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5064               {
5065                 os->region->current = dot;
5066
5067                 if (check_regions)
5068                   /* Make sure the new address is within the region.  */
5069                   os_region_check (os, os->region, os->addr_tree,
5070                                    os->bfd_section->vma);
5071
5072                 if (os->lma_region != NULL && os->lma_region != os->region
5073                     && (os->bfd_section->flags & SEC_LOAD))
5074                   {
5075                     os->lma_region->current
5076                       = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
5077
5078                     if (check_regions)
5079                       os_region_check (os, os->lma_region, NULL,
5080                                        os->bfd_section->lma);
5081                   }
5082               }
5083           }
5084           break;
5085
5086         case lang_constructors_statement_enum:
5087           dot = lang_size_sections_1 (&constructor_list.head,
5088                                       output_section_statement,
5089                                       fill, dot, relax, check_regions);
5090           break;
5091
5092         case lang_data_statement_enum:
5093           {
5094             unsigned int size = 0;
5095
5096             s->data_statement.output_offset =
5097               dot - output_section_statement->bfd_section->vma;
5098             s->data_statement.output_section =
5099               output_section_statement->bfd_section;
5100
5101             /* We might refer to provided symbols in the expression, and
5102                need to mark them as needed.  */
5103             exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5104
5105             switch (s->data_statement.type)
5106               {
5107               default:
5108                 abort ();
5109               case QUAD:
5110               case SQUAD:
5111                 size = QUAD_SIZE;
5112                 break;
5113               case LONG:
5114                 size = LONG_SIZE;
5115                 break;
5116               case SHORT:
5117                 size = SHORT_SIZE;
5118                 break;
5119               case BYTE:
5120                 size = BYTE_SIZE;
5121                 break;
5122               }
5123             if (size < TO_SIZE ((unsigned) 1))
5124               size = TO_SIZE ((unsigned) 1);
5125             dot += TO_ADDR (size);
5126             output_section_statement->bfd_section->size += size;
5127           }
5128           break;
5129
5130         case lang_reloc_statement_enum:
5131           {
5132             int size;
5133
5134             s->reloc_statement.output_offset =
5135               dot - output_section_statement->bfd_section->vma;
5136             s->reloc_statement.output_section =
5137               output_section_statement->bfd_section;
5138             size = bfd_get_reloc_size (s->reloc_statement.howto);
5139             dot += TO_ADDR (size);
5140             output_section_statement->bfd_section->size += size;
5141           }
5142           break;
5143
5144         case lang_wild_statement_enum:
5145           dot = lang_size_sections_1 (&s->wild_statement.children.head,
5146                                       output_section_statement,
5147                                       fill, dot, relax, check_regions);
5148           break;
5149
5150         case lang_object_symbols_statement_enum:
5151           link_info.create_object_symbols_section =
5152             output_section_statement->bfd_section;
5153           break;
5154
5155         case lang_output_statement_enum:
5156         case lang_target_statement_enum:
5157           break;
5158
5159         case lang_input_section_enum:
5160           {
5161             asection *i;
5162
5163             i = s->input_section.section;
5164             if (relax)
5165               {
5166                 bfd_boolean again;
5167
5168                 if (! bfd_relax_section (i->owner, i, &link_info, &again))
5169                   einfo (_("%P%F: can't relax section: %E\n"));
5170                 if (again)
5171                   *relax = TRUE;
5172               }
5173             dot = size_input_section (prev, output_section_statement,
5174                                       output_section_statement->fill, dot);
5175           }
5176           break;
5177
5178         case lang_input_statement_enum:
5179           break;
5180
5181         case lang_fill_statement_enum:
5182           s->fill_statement.output_section =
5183             output_section_statement->bfd_section;
5184
5185           fill = s->fill_statement.fill;
5186           break;
5187
5188         case lang_assignment_statement_enum:
5189           {
5190             bfd_vma newdot = dot;
5191             etree_type *tree = s->assignment_statement.exp;
5192
5193             expld.dataseg.relro = exp_dataseg_relro_none;
5194
5195             exp_fold_tree (tree,
5196                            output_section_statement->bfd_section,
5197                            &newdot);
5198
5199             if (expld.dataseg.relro == exp_dataseg_relro_start)
5200               {
5201                 if (!expld.dataseg.relro_start_stat)
5202                   expld.dataseg.relro_start_stat = s;
5203                 else
5204                   {
5205                     ASSERT (expld.dataseg.relro_start_stat == s);
5206                   }
5207               }
5208             else if (expld.dataseg.relro == exp_dataseg_relro_end)
5209               {
5210                 if (!expld.dataseg.relro_end_stat)
5211                   expld.dataseg.relro_end_stat = s;
5212                 else
5213                   {
5214                     ASSERT (expld.dataseg.relro_end_stat == s);
5215                   }
5216               }
5217             expld.dataseg.relro = exp_dataseg_relro_none;
5218
5219             /* This symbol is relative to this section.  */
5220             if ((tree->type.node_class == etree_provided
5221                  || tree->type.node_class == etree_assign)
5222                 && (tree->assign.dst [0] != '.'
5223                     || tree->assign.dst [1] != '\0'))
5224               output_section_statement->section_relative_symbol = 1;
5225
5226             if (!output_section_statement->ignored)
5227               {
5228                 if (output_section_statement == abs_output_section)
5229                   {
5230                     /* If we don't have an output section, then just adjust
5231                        the default memory address.  */
5232                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5233                                                FALSE)->current = newdot;
5234                   }
5235                 else if (newdot != dot)
5236                   {
5237                     /* Insert a pad after this statement.  We can't
5238                        put the pad before when relaxing, in case the
5239                        assignment references dot.  */
5240                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5241                                 output_section_statement->bfd_section, dot);
5242
5243                     /* Don't neuter the pad below when relaxing.  */
5244                     s = s->header.next;
5245
5246                     /* If dot is advanced, this implies that the section
5247                        should have space allocated to it, unless the
5248                        user has explicitly stated that the section
5249                        should not be allocated.  */
5250                     if (output_section_statement->sectype != noalloc_section
5251                         && (output_section_statement->sectype != noload_section
5252                             || (bfd_get_flavour (link_info.output_bfd)
5253                                 == bfd_target_elf_flavour)))
5254                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
5255                   }
5256                 dot = newdot;
5257               }
5258           }
5259           break;
5260
5261         case lang_padding_statement_enum:
5262           /* If this is the first time lang_size_sections is called,
5263              we won't have any padding statements.  If this is the
5264              second or later passes when relaxing, we should allow
5265              padding to shrink.  If padding is needed on this pass, it
5266              will be added back in.  */
5267           s->padding_statement.size = 0;
5268
5269           /* Make sure output_offset is valid.  If relaxation shrinks
5270              the section and this pad isn't needed, it's possible to
5271              have output_offset larger than the final size of the
5272              section.  bfd_set_section_contents will complain even for
5273              a pad size of zero.  */
5274           s->padding_statement.output_offset
5275             = dot - output_section_statement->bfd_section->vma;
5276           break;
5277
5278         case lang_group_statement_enum:
5279           dot = lang_size_sections_1 (&s->group_statement.children.head,
5280                                       output_section_statement,
5281                                       fill, dot, relax, check_regions);
5282           break;
5283
5284         case lang_insert_statement_enum:
5285           break;
5286
5287           /* We can only get here when relaxing is turned on.  */
5288         case lang_address_statement_enum:
5289           break;
5290
5291         default:
5292           FAIL ();
5293           break;
5294         }
5295       prev = &s->header.next;
5296     }
5297   return dot;
5298 }
5299
5300 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5301    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5302    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5303    segments.  We are allowed an opportunity to override this decision.  */
5304
5305 bfd_boolean
5306 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5307                                     bfd * abfd ATTRIBUTE_UNUSED,
5308                                     asection * current_section,
5309                                     asection * previous_section,
5310                                     bfd_boolean new_segment)
5311 {
5312   lang_output_section_statement_type * cur;
5313   lang_output_section_statement_type * prev;
5314
5315   /* The checks below are only necessary when the BFD library has decided
5316      that the two sections ought to be placed into the same segment.  */
5317   if (new_segment)
5318     return TRUE;
5319
5320   /* Paranoia checks.  */
5321   if (current_section == NULL || previous_section == NULL)
5322     return new_segment;
5323
5324   /* Find the memory regions associated with the two sections.
5325      We call lang_output_section_find() here rather than scanning the list
5326      of output sections looking for a matching section pointer because if
5327      we have a large number of sections then a hash lookup is faster.  */
5328   cur  = lang_output_section_find (current_section->name);
5329   prev = lang_output_section_find (previous_section->name);
5330
5331   /* More paranoia.  */
5332   if (cur == NULL || prev == NULL)
5333     return new_segment;
5334
5335   /* If the regions are different then force the sections to live in
5336      different segments.  See the email thread starting at the following
5337      URL for the reasons why this is necessary:
5338      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5339   return cur->region != prev->region;
5340 }
5341
5342 void
5343 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5344 {
5345   lang_statement_iteration++;
5346   lang_size_sections_1 (&statement_list.head, abs_output_section,
5347                         0, 0, relax, check_regions);
5348 }
5349
5350 void
5351 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5352 {
5353   expld.phase = lang_allocating_phase_enum;
5354   expld.dataseg.phase = exp_dataseg_none;
5355
5356   one_lang_size_sections_pass (relax, check_regions);
5357   if (expld.dataseg.phase == exp_dataseg_end_seen
5358       && link_info.relro && expld.dataseg.relro_end)
5359     {
5360       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5361          to put expld.dataseg.relro on a (common) page boundary.  */
5362       bfd_vma min_base, old_base, relro_end, maxpage;
5363
5364       expld.dataseg.phase = exp_dataseg_relro_adjust;
5365       maxpage = expld.dataseg.maxpagesize;
5366       /* MIN_BASE is the absolute minimum address we are allowed to start the
5367          read-write segment (byte before will be mapped read-only).  */
5368       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5369       /* OLD_BASE is the address for a feasible minimum address which will
5370          still not cause a data overlap inside MAXPAGE causing file offset skip
5371          by MAXPAGE.  */
5372       old_base = expld.dataseg.base;
5373       expld.dataseg.base += (-expld.dataseg.relro_end
5374                              & (expld.dataseg.pagesize - 1));
5375       /* Compute the expected PT_GNU_RELRO segment end.  */
5376       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5377                    & ~(expld.dataseg.pagesize - 1));
5378       if (min_base + maxpage < expld.dataseg.base)
5379         {
5380           expld.dataseg.base -= maxpage;
5381           relro_end -= maxpage;
5382         }
5383       lang_reset_memory_regions ();
5384       one_lang_size_sections_pass (relax, check_regions);
5385       if (expld.dataseg.relro_end > relro_end)
5386         {
5387           /* The alignment of sections between DATA_SEGMENT_ALIGN
5388              and DATA_SEGMENT_RELRO_END caused huge padding to be
5389              inserted at DATA_SEGMENT_RELRO_END.  Try to start a bit lower so
5390              that the section alignments will fit in.  */
5391           asection *sec;
5392           unsigned int max_alignment_power = 0;
5393
5394           /* Find maximum alignment power of sections between
5395              DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5396           for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5397             if (sec->vma >= expld.dataseg.base
5398                 && sec->vma < expld.dataseg.relro_end
5399                 && sec->alignment_power > max_alignment_power)
5400               max_alignment_power = sec->alignment_power;
5401
5402           if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5403             {
5404               if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
5405                 expld.dataseg.base += expld.dataseg.pagesize;
5406               expld.dataseg.base -= (1 << max_alignment_power);
5407               lang_reset_memory_regions ();
5408               one_lang_size_sections_pass (relax, check_regions);
5409             }
5410         }
5411       link_info.relro_start = expld.dataseg.base;
5412       link_info.relro_end = expld.dataseg.relro_end;
5413     }
5414   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5415     {
5416       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5417          a page could be saved in the data segment.  */
5418       bfd_vma first, last;
5419
5420       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5421       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5422       if (first && last
5423           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5424               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5425           && first + last <= expld.dataseg.pagesize)
5426         {
5427           expld.dataseg.phase = exp_dataseg_adjust;
5428           lang_reset_memory_regions ();
5429           one_lang_size_sections_pass (relax, check_regions);
5430         }
5431     }
5432
5433   expld.phase = lang_final_phase_enum;
5434 }
5435
5436 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5437
5438 static bfd_vma
5439 lang_do_assignments_1 (lang_statement_union_type *s,
5440                        lang_output_section_statement_type *current_os,
5441                        fill_type *fill,
5442                        bfd_vma dot)
5443 {
5444   for (; s != NULL; s = s->header.next)
5445     {
5446       switch (s->header.type)
5447         {
5448         case lang_constructors_statement_enum:
5449           dot = lang_do_assignments_1 (constructor_list.head,
5450                                        current_os, fill, dot);
5451           break;
5452
5453         case lang_output_section_statement_enum:
5454           {
5455             lang_output_section_statement_type *os;
5456
5457             os = &(s->output_section_statement);
5458             if (os->bfd_section != NULL && !os->ignored)
5459               {
5460                 dot = os->bfd_section->vma;
5461
5462                 lang_do_assignments_1 (os->children.head, os, os->fill, dot);
5463
5464                 /* .tbss sections effectively have zero size.  */
5465                 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5466                     || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5467                     || link_info.relocatable)
5468                   dot += TO_ADDR (os->bfd_section->size);
5469
5470                 if (os->update_dot_tree != NULL)
5471                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5472               }
5473           }
5474           break;
5475
5476         case lang_wild_statement_enum:
5477
5478           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5479                                        current_os, fill, dot);
5480           break;
5481
5482         case lang_object_symbols_statement_enum:
5483         case lang_output_statement_enum:
5484         case lang_target_statement_enum:
5485           break;
5486
5487         case lang_data_statement_enum:
5488           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5489           if (expld.result.valid_p)
5490             {
5491               s->data_statement.value = expld.result.value;
5492               if (expld.result.section != NULL)
5493                 s->data_statement.value += expld.result.section->vma;
5494             }
5495           else
5496             einfo (_("%F%P: invalid data statement\n"));
5497           {
5498             unsigned int size;
5499             switch (s->data_statement.type)
5500               {
5501               default:
5502                 abort ();
5503               case QUAD:
5504               case SQUAD:
5505                 size = QUAD_SIZE;
5506                 break;
5507               case LONG:
5508                 size = LONG_SIZE;
5509                 break;
5510               case SHORT:
5511                 size = SHORT_SIZE;
5512                 break;
5513               case BYTE:
5514                 size = BYTE_SIZE;
5515                 break;
5516               }
5517             if (size < TO_SIZE ((unsigned) 1))
5518               size = TO_SIZE ((unsigned) 1);
5519             dot += TO_ADDR (size);
5520           }
5521           break;
5522
5523         case lang_reloc_statement_enum:
5524           exp_fold_tree (s->reloc_statement.addend_exp,
5525                          bfd_abs_section_ptr, &dot);
5526           if (expld.result.valid_p)
5527             s->reloc_statement.addend_value = expld.result.value;
5528           else
5529             einfo (_("%F%P: invalid reloc statement\n"));
5530           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5531           break;
5532
5533         case lang_input_section_enum:
5534           {
5535             asection *in = s->input_section.section;
5536
5537             if ((in->flags & SEC_EXCLUDE) == 0)
5538               dot += TO_ADDR (in->size);
5539           }
5540           break;
5541
5542         case lang_input_statement_enum:
5543           break;
5544
5545         case lang_fill_statement_enum:
5546           fill = s->fill_statement.fill;
5547           break;
5548
5549         case lang_assignment_statement_enum:
5550           exp_fold_tree (s->assignment_statement.exp,
5551                          current_os->bfd_section,
5552                          &dot);
5553           break;
5554
5555         case lang_padding_statement_enum:
5556           dot += TO_ADDR (s->padding_statement.size);
5557           break;
5558
5559         case lang_group_statement_enum:
5560           dot = lang_do_assignments_1 (s->group_statement.children.head,
5561                                        current_os, fill, dot);
5562           break;
5563
5564         case lang_insert_statement_enum:
5565           break;
5566
5567         case lang_address_statement_enum:
5568           break;
5569
5570         default:
5571           FAIL ();
5572           break;
5573         }
5574     }
5575   return dot;
5576 }
5577
5578 void
5579 lang_do_assignments (void)
5580 {
5581   lang_statement_iteration++;
5582   lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
5583 }
5584
5585 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5586    operator .startof. (section_name), it produces an undefined symbol
5587    .startof.section_name.  Similarly, when it sees
5588    .sizeof. (section_name), it produces an undefined symbol
5589    .sizeof.section_name.  For all the output sections, we look for
5590    such symbols, and set them to the correct value.  */
5591
5592 static void
5593 lang_set_startof (void)
5594 {
5595   asection *s;
5596
5597   if (link_info.relocatable)
5598     return;
5599
5600   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5601     {
5602       const char *secname;
5603       char *buf;
5604       struct bfd_link_hash_entry *h;
5605
5606       secname = bfd_get_section_name (link_info.output_bfd, s);
5607       buf = (char *) xmalloc (10 + strlen (secname));
5608
5609       sprintf (buf, ".startof.%s", secname);
5610       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5611       if (h != NULL && h->type == bfd_link_hash_undefined)
5612         {
5613           h->type = bfd_link_hash_defined;
5614           h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5615           h->u.def.section = bfd_abs_section_ptr;
5616         }
5617
5618       sprintf (buf, ".sizeof.%s", secname);
5619       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5620       if (h != NULL && h->type == bfd_link_hash_undefined)
5621         {
5622           h->type = bfd_link_hash_defined;
5623           h->u.def.value = TO_ADDR (s->size);
5624           h->u.def.section = bfd_abs_section_ptr;
5625         }
5626
5627       free (buf);
5628     }
5629 }
5630
5631 static void
5632 lang_end (void)
5633 {
5634   struct bfd_link_hash_entry *h;
5635   bfd_boolean warn;
5636
5637   if ((link_info.relocatable && !link_info.gc_sections)
5638       || (link_info.shared && !link_info.executable))
5639     warn = entry_from_cmdline;
5640   else
5641     warn = TRUE;
5642
5643   /* Force the user to specify a root when generating a relocatable with
5644      --gc-sections.  */
5645   if (link_info.gc_sections && link_info.relocatable
5646       && !(entry_from_cmdline || undef_from_cmdline))
5647     einfo (_("%P%F: gc-sections requires either an entry or "
5648              "an undefined symbol\n"));
5649
5650   if (entry_symbol.name == NULL)
5651     {
5652       /* No entry has been specified.  Look for the default entry, but
5653          don't warn if we don't find it.  */
5654       entry_symbol.name = entry_symbol_default;
5655       warn = FALSE;
5656     }
5657
5658   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5659                             FALSE, FALSE, TRUE);
5660   if (h != NULL
5661       && (h->type == bfd_link_hash_defined
5662           || h->type == bfd_link_hash_defweak)
5663       && h->u.def.section->output_section != NULL)
5664     {
5665       bfd_vma val;
5666
5667       val = (h->u.def.value
5668              + bfd_get_section_vma (link_info.output_bfd,
5669                                     h->u.def.section->output_section)
5670              + h->u.def.section->output_offset);
5671       if (! bfd_set_start_address (link_info.output_bfd, val))
5672         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5673     }
5674   else
5675     {
5676       bfd_vma val;
5677       const char *send;
5678
5679       /* We couldn't find the entry symbol.  Try parsing it as a
5680          number.  */
5681       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5682       if (*send == '\0')
5683         {
5684           if (! bfd_set_start_address (link_info.output_bfd, val))
5685             einfo (_("%P%F: can't set start address\n"));
5686         }
5687       else
5688         {
5689           asection *ts;
5690
5691           /* Can't find the entry symbol, and it's not a number.  Use
5692              the first address in the text section.  */
5693           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5694           if (ts != NULL)
5695             {
5696               if (warn)
5697                 einfo (_("%P: warning: cannot find entry symbol %s;"
5698                          " defaulting to %V\n"),
5699                        entry_symbol.name,
5700                        bfd_get_section_vma (link_info.output_bfd, ts));
5701               if (!(bfd_set_start_address
5702                     (link_info.output_bfd,
5703                      bfd_get_section_vma (link_info.output_bfd, ts))))
5704                 einfo (_("%P%F: can't set start address\n"));
5705             }
5706           else
5707             {
5708               if (warn)
5709                 einfo (_("%P: warning: cannot find entry symbol %s;"
5710                          " not setting start address\n"),
5711                        entry_symbol.name);
5712             }
5713         }
5714     }
5715
5716   /* Don't bfd_hash_table_free (&lang_definedness_table);
5717      map file output may result in a call of lang_track_definedness.  */
5718 }
5719
5720 /* This is a small function used when we want to ignore errors from
5721    BFD.  */
5722
5723 static void
5724 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5725 {
5726   /* Don't do anything.  */
5727 }
5728
5729 /* Check that the architecture of all the input files is compatible
5730    with the output file.  Also call the backend to let it do any
5731    other checking that is needed.  */
5732
5733 static void
5734 lang_check (void)
5735 {
5736   lang_statement_union_type *file;
5737   bfd *input_bfd;
5738   const bfd_arch_info_type *compatible;
5739
5740   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5741     {
5742       input_bfd = file->input_statement.the_bfd;
5743       compatible
5744         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5745                                    command_line.accept_unknown_input_arch);
5746
5747       /* In general it is not possible to perform a relocatable
5748          link between differing object formats when the input
5749          file has relocations, because the relocations in the
5750          input format may not have equivalent representations in
5751          the output format (and besides BFD does not translate
5752          relocs for other link purposes than a final link).  */
5753       if ((link_info.relocatable || link_info.emitrelocations)
5754           && (compatible == NULL
5755               || (bfd_get_flavour (input_bfd)
5756                   != bfd_get_flavour (link_info.output_bfd)))
5757           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5758         {
5759           einfo (_("%P%F: Relocatable linking with relocations from"
5760                    " format %s (%B) to format %s (%B) is not supported\n"),
5761                  bfd_get_target (input_bfd), input_bfd,
5762                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5763           /* einfo with %F exits.  */
5764         }
5765
5766       if (compatible == NULL)
5767         {
5768           if (command_line.warn_mismatch)
5769             einfo (_("%P%X: %s architecture of input file `%B'"
5770                      " is incompatible with %s output\n"),
5771                    bfd_printable_name (input_bfd), input_bfd,
5772                    bfd_printable_name (link_info.output_bfd));
5773         }
5774       else if (bfd_count_sections (input_bfd))
5775         {
5776           /* If the input bfd has no contents, it shouldn't set the
5777              private data of the output bfd.  */
5778
5779           bfd_error_handler_type pfn = NULL;
5780
5781           /* If we aren't supposed to warn about mismatched input
5782              files, temporarily set the BFD error handler to a
5783              function which will do nothing.  We still want to call
5784              bfd_merge_private_bfd_data, since it may set up
5785              information which is needed in the output file.  */
5786           if (! command_line.warn_mismatch)
5787             pfn = bfd_set_error_handler (ignore_bfd_errors);
5788           if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5789             {
5790               if (command_line.warn_mismatch)
5791                 einfo (_("%P%X: failed to merge target specific data"
5792                          " of file %B\n"), input_bfd);
5793             }
5794           if (! command_line.warn_mismatch)
5795             bfd_set_error_handler (pfn);
5796         }
5797     }
5798 }
5799
5800 /* Look through all the global common symbols and attach them to the
5801    correct section.  The -sort-common command line switch may be used
5802    to roughly sort the entries by alignment.  */
5803
5804 static void
5805 lang_common (void)
5806 {
5807   if (command_line.inhibit_common_definition)
5808     return;
5809   if (link_info.relocatable
5810       && ! command_line.force_common_definition)
5811     return;
5812
5813   if (! config.sort_common)
5814     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5815   else
5816     {
5817       unsigned int power;
5818
5819       if (config.sort_common == sort_descending)
5820         {
5821           for (power = 4; power > 0; power--)
5822             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5823
5824           power = 0;
5825           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5826         }
5827       else
5828         {
5829           for (power = 0; power <= 4; power++)
5830             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5831
5832           power = UINT_MAX;
5833           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5834         }
5835     }
5836 }
5837
5838 /* Place one common symbol in the correct section.  */
5839
5840 static bfd_boolean
5841 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5842 {
5843   unsigned int power_of_two;
5844   bfd_vma size;
5845   asection *section;
5846
5847   if (h->type != bfd_link_hash_common)
5848     return TRUE;
5849
5850   size = h->u.c.size;
5851   power_of_two = h->u.c.p->alignment_power;
5852
5853   if (config.sort_common == sort_descending
5854       && power_of_two < *(unsigned int *) info)
5855     return TRUE;
5856   else if (config.sort_common == sort_ascending
5857            && power_of_two > *(unsigned int *) info)
5858     return TRUE;
5859
5860   section = h->u.c.p->section;
5861   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5862     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5863            h->root.string);
5864
5865   if (config.map_file != NULL)
5866     {
5867       static bfd_boolean header_printed;
5868       int len;
5869       char *name;
5870       char buf[50];
5871
5872       if (! header_printed)
5873         {
5874           minfo (_("\nAllocating common symbols\n"));
5875           minfo (_("Common symbol       size              file\n\n"));
5876           header_printed = TRUE;
5877         }
5878
5879       name = bfd_demangle (link_info.output_bfd, h->root.string,
5880                            DMGL_ANSI | DMGL_PARAMS);
5881       if (name == NULL)
5882         {
5883           minfo ("%s", h->root.string);
5884           len = strlen (h->root.string);
5885         }
5886       else
5887         {
5888           minfo ("%s", name);
5889           len = strlen (name);
5890           free (name);
5891         }
5892
5893       if (len >= 19)
5894         {
5895           print_nl ();
5896           len = 0;
5897         }
5898       while (len < 20)
5899         {
5900           print_space ();
5901           ++len;
5902         }
5903
5904       minfo ("0x");
5905       if (size <= 0xffffffff)
5906         sprintf (buf, "%lx", (unsigned long) size);
5907       else
5908         sprintf_vma (buf, size);
5909       minfo ("%s", buf);
5910       len = strlen (buf);
5911
5912       while (len < 16)
5913         {
5914           print_space ();
5915           ++len;
5916         }
5917
5918       minfo ("%B\n", section->owner);
5919     }
5920
5921   return TRUE;
5922 }
5923
5924 /* Run through the input files and ensure that every input section has
5925    somewhere to go.  If one is found without a destination then create
5926    an input request and place it into the statement tree.  */
5927
5928 static void
5929 lang_place_orphans (void)
5930 {
5931   LANG_FOR_EACH_INPUT_STATEMENT (file)
5932     {
5933       asection *s;
5934
5935       for (s = file->the_bfd->sections; s != NULL; s = s->next)
5936         {
5937           if (s->output_section == NULL)
5938             {
5939               /* This section of the file is not attached, root
5940                  around for a sensible place for it to go.  */
5941
5942               if (file->just_syms_flag)
5943                 bfd_link_just_syms (file->the_bfd, s, &link_info);
5944               else if ((s->flags & SEC_EXCLUDE) != 0)
5945                 s->output_section = bfd_abs_section_ptr;
5946               else if (strcmp (s->name, "COMMON") == 0)
5947                 {
5948                   /* This is a lonely common section which must have
5949                      come from an archive.  We attach to the section
5950                      with the wildcard.  */
5951                   if (! link_info.relocatable
5952                       || command_line.force_common_definition)
5953                     {
5954                       if (default_common_section == NULL)
5955                         default_common_section
5956                           = lang_output_section_statement_lookup (".bss", 0,
5957                                                                   TRUE);
5958                       lang_add_section (&default_common_section->children, s,
5959                                         default_common_section);
5960                     }
5961                 }
5962               else
5963                 {
5964                   const char *name = s->name;
5965                   int constraint = 0;
5966
5967                   if (config.unique_orphan_sections
5968                       || unique_section_p (s, NULL))
5969                     constraint = SPECIAL;
5970
5971                   if (!ldemul_place_orphan (s, name, constraint))
5972                     {
5973                       lang_output_section_statement_type *os;
5974                       os = lang_output_section_statement_lookup (name,
5975                                                                  constraint,
5976                                                                  TRUE);
5977                       if (os->addr_tree == NULL
5978                           && (link_info.relocatable
5979                               || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
5980                         os->addr_tree = exp_intop (0);
5981                       lang_add_section (&os->children, s, os);
5982                     }
5983                 }
5984             }
5985         }
5986     }
5987 }
5988
5989 void
5990 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
5991 {
5992   flagword *ptr_flags;
5993
5994   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
5995   while (*flags)
5996     {
5997       switch (*flags)
5998         {
5999         case 'A': case 'a':
6000           *ptr_flags |= SEC_ALLOC;
6001           break;
6002
6003         case 'R': case 'r':
6004           *ptr_flags |= SEC_READONLY;
6005           break;
6006
6007         case 'W': case 'w':
6008           *ptr_flags |= SEC_DATA;
6009           break;
6010
6011         case 'X': case 'x':
6012           *ptr_flags |= SEC_CODE;
6013           break;
6014
6015         case 'L': case 'l':
6016         case 'I': case 'i':
6017           *ptr_flags |= SEC_LOAD;
6018           break;
6019
6020         default:
6021           einfo (_("%P%F: invalid syntax in flags\n"));
6022           break;
6023         }
6024       flags++;
6025     }
6026 }
6027
6028 /* Call a function on each input file.  This function will be called
6029    on an archive, but not on the elements.  */
6030
6031 void
6032 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6033 {
6034   lang_input_statement_type *f;
6035
6036   for (f = (lang_input_statement_type *) input_file_chain.head;
6037        f != NULL;
6038        f = (lang_input_statement_type *) f->next_real_file)
6039     func (f);
6040 }
6041
6042 /* Call a function on each file.  The function will be called on all
6043    the elements of an archive which are included in the link, but will
6044    not be called on the archive file itself.  */
6045
6046 void
6047 lang_for_each_file (void (*func) (lang_input_statement_type *))
6048 {
6049   LANG_FOR_EACH_INPUT_STATEMENT (f)
6050     {
6051       func (f);
6052     }
6053 }
6054
6055 void
6056 ldlang_add_file (lang_input_statement_type *entry)
6057 {
6058   lang_statement_append (&file_chain,
6059                          (lang_statement_union_type *) entry,
6060                          &entry->next);
6061
6062   /* The BFD linker needs to have a list of all input BFDs involved in
6063      a link.  */
6064   ASSERT (entry->the_bfd->link_next == NULL);
6065   ASSERT (entry->the_bfd != link_info.output_bfd);
6066
6067   *link_info.input_bfds_tail = entry->the_bfd;
6068   link_info.input_bfds_tail = &entry->the_bfd->link_next;
6069   entry->the_bfd->usrdata = entry;
6070   bfd_set_gp_size (entry->the_bfd, g_switch_value);
6071
6072   /* Look through the sections and check for any which should not be
6073      included in the link.  We need to do this now, so that we can
6074      notice when the backend linker tries to report multiple
6075      definition errors for symbols which are in sections we aren't
6076      going to link.  FIXME: It might be better to entirely ignore
6077      symbols which are defined in sections which are going to be
6078      discarded.  This would require modifying the backend linker for
6079      each backend which might set the SEC_LINK_ONCE flag.  If we do
6080      this, we should probably handle SEC_EXCLUDE in the same way.  */
6081
6082   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6083 }
6084
6085 void
6086 lang_add_output (const char *name, int from_script)
6087 {
6088   /* Make -o on command line override OUTPUT in script.  */
6089   if (!had_output_filename || !from_script)
6090     {
6091       output_filename = name;
6092       had_output_filename = TRUE;
6093     }
6094 }
6095
6096 static lang_output_section_statement_type *current_section;
6097
6098 static int
6099 topower (int x)
6100 {
6101   unsigned int i = 1;
6102   int l;
6103
6104   if (x < 0)
6105     return -1;
6106
6107   for (l = 0; l < 32; l++)
6108     {
6109       if (i >= (unsigned int) x)
6110         return l;
6111       i <<= 1;
6112     }
6113
6114   return 0;
6115 }
6116
6117 lang_output_section_statement_type *
6118 lang_enter_output_section_statement (const char *output_section_statement_name,
6119                                      etree_type *address_exp,
6120                                      enum section_type sectype,
6121                                      etree_type *align,
6122                                      etree_type *subalign,
6123                                      etree_type *ebase,
6124                                      int constraint)
6125 {
6126   lang_output_section_statement_type *os;
6127
6128   os = lang_output_section_statement_lookup (output_section_statement_name,
6129                                              constraint, TRUE);
6130   current_section = os;
6131
6132   if (os->addr_tree == NULL)
6133     {
6134       os->addr_tree = address_exp;
6135     }
6136   os->sectype = sectype;
6137   if (sectype != noload_section)
6138     os->flags = SEC_NO_FLAGS;
6139   else
6140     os->flags = SEC_NEVER_LOAD;
6141   os->block_value = 1;
6142
6143   /* Make next things chain into subchain of this.  */
6144   push_stat_ptr (&os->children);
6145
6146   os->subsection_alignment =
6147     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6148   os->section_alignment =
6149     topower (exp_get_value_int (align, -1, "section alignment"));
6150
6151   os->load_base = ebase;
6152   return os;
6153 }
6154
6155 void
6156 lang_final (void)
6157 {
6158   lang_output_statement_type *new_stmt;
6159
6160   new_stmt = new_stat (lang_output_statement, stat_ptr);
6161   new_stmt->name = output_filename;
6162
6163 }
6164
6165 /* Reset the current counters in the regions.  */
6166
6167 void
6168 lang_reset_memory_regions (void)
6169 {
6170   lang_memory_region_type *p = lang_memory_region_list;
6171   asection *o;
6172   lang_output_section_statement_type *os;
6173
6174   for (p = lang_memory_region_list; p != NULL; p = p->next)
6175     {
6176       p->current = p->origin;
6177       p->last_os = NULL;
6178     }
6179
6180   for (os = &lang_output_section_statement.head->output_section_statement;
6181        os != NULL;
6182        os = os->next)
6183     {
6184       os->processed_vma = FALSE;
6185       os->processed_lma = FALSE;
6186     }
6187
6188   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6189     {
6190       /* Save the last size for possible use by bfd_relax_section.  */
6191       o->rawsize = o->size;
6192       o->size = 0;
6193     }
6194 }
6195
6196 /* Worker for lang_gc_sections_1.  */
6197
6198 static void
6199 gc_section_callback (lang_wild_statement_type *ptr,
6200                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
6201                      asection *section,
6202                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
6203                      void *data ATTRIBUTE_UNUSED)
6204 {
6205   /* If the wild pattern was marked KEEP, the member sections
6206      should be as well.  */
6207   if (ptr->keep_sections)
6208     section->flags |= SEC_KEEP;
6209 }
6210
6211 /* Iterate over sections marking them against GC.  */
6212
6213 static void
6214 lang_gc_sections_1 (lang_statement_union_type *s)
6215 {
6216   for (; s != NULL; s = s->header.next)
6217     {
6218       switch (s->header.type)
6219         {
6220         case lang_wild_statement_enum:
6221           walk_wild (&s->wild_statement, gc_section_callback, NULL);
6222           break;
6223         case lang_constructors_statement_enum:
6224           lang_gc_sections_1 (constructor_list.head);
6225           break;
6226         case lang_output_section_statement_enum:
6227           lang_gc_sections_1 (s->output_section_statement.children.head);
6228           break;
6229         case lang_group_statement_enum:
6230           lang_gc_sections_1 (s->group_statement.children.head);
6231           break;
6232         default:
6233           break;
6234         }
6235     }
6236 }
6237
6238 static void
6239 lang_gc_sections (void)
6240 {
6241   /* Keep all sections so marked in the link script.  */
6242
6243   lang_gc_sections_1 (statement_list.head);
6244
6245   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6246      the special case of debug info.  (See bfd/stabs.c)
6247      Twiddle the flag here, to simplify later linker code.  */
6248   if (link_info.relocatable)
6249     {
6250       LANG_FOR_EACH_INPUT_STATEMENT (f)
6251         {
6252           asection *sec;
6253           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6254             if ((sec->flags & SEC_DEBUGGING) == 0)
6255               sec->flags &= ~SEC_EXCLUDE;
6256         }
6257     }
6258
6259   if (link_info.gc_sections)
6260     bfd_gc_sections (link_info.output_bfd, &link_info);
6261 }
6262
6263 /* Worker for lang_find_relro_sections_1.  */
6264
6265 static void
6266 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6267                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
6268                              asection *section,
6269                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
6270                              void *data)
6271 {
6272   /* Discarded, excluded and ignored sections effectively have zero
6273      size.  */
6274   if (section->output_section != NULL
6275       && section->output_section->owner == link_info.output_bfd
6276       && (section->output_section->flags & SEC_EXCLUDE) == 0
6277       && !IGNORE_SECTION (section)
6278       && section->size != 0)
6279     {
6280       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6281       *has_relro_section = TRUE;
6282     }
6283 }
6284
6285 /* Iterate over sections for relro sections.  */
6286
6287 static void
6288 lang_find_relro_sections_1 (lang_statement_union_type *s,
6289                             bfd_boolean *has_relro_section)
6290 {
6291   if (*has_relro_section)
6292     return;
6293
6294   for (; s != NULL; s = s->header.next)
6295     {
6296       if (s == expld.dataseg.relro_end_stat)
6297         break;
6298
6299       switch (s->header.type)
6300         {
6301         case lang_wild_statement_enum:
6302           walk_wild (&s->wild_statement,
6303                      find_relro_section_callback,
6304                      has_relro_section);
6305           break;
6306         case lang_constructors_statement_enum:
6307           lang_find_relro_sections_1 (constructor_list.head,
6308                                       has_relro_section);
6309           break;
6310         case lang_output_section_statement_enum:
6311           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6312                                       has_relro_section);
6313           break;
6314         case lang_group_statement_enum:
6315           lang_find_relro_sections_1 (s->group_statement.children.head,
6316                                       has_relro_section);
6317           break;
6318         default:
6319           break;
6320         }
6321     }
6322 }
6323
6324 static void
6325 lang_find_relro_sections (void)
6326 {
6327   bfd_boolean has_relro_section = FALSE;
6328
6329   /* Check all sections in the link script.  */
6330
6331   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6332                               &has_relro_section);
6333
6334   if (!has_relro_section)
6335     link_info.relro = FALSE;
6336 }
6337
6338 /* Relax all sections until bfd_relax_section gives up.  */
6339
6340 void
6341 lang_relax_sections (bfd_boolean need_layout)
6342 {
6343   if (RELAXATION_ENABLED)
6344     {
6345       /* We may need more than one relaxation pass.  */
6346       int i = link_info.relax_pass;
6347
6348       /* The backend can use it to determine the current pass.  */
6349       link_info.relax_pass = 0;
6350
6351       while (i--)
6352         {
6353           /* Keep relaxing until bfd_relax_section gives up.  */
6354           bfd_boolean relax_again;
6355
6356           link_info.relax_trip = -1;
6357           do
6358             {
6359               link_info.relax_trip++;
6360
6361               /* Note: pe-dll.c does something like this also.  If you find
6362                  you need to change this code, you probably need to change
6363                  pe-dll.c also.  DJ  */
6364
6365               /* Do all the assignments with our current guesses as to
6366                  section sizes.  */
6367               lang_do_assignments ();
6368
6369               /* We must do this after lang_do_assignments, because it uses
6370                  size.  */
6371               lang_reset_memory_regions ();
6372
6373               /* Perform another relax pass - this time we know where the
6374                  globals are, so can make a better guess.  */
6375               relax_again = FALSE;
6376               lang_size_sections (&relax_again, FALSE);
6377             }
6378           while (relax_again);
6379
6380           link_info.relax_pass++;
6381         }
6382       need_layout = TRUE;
6383     }
6384
6385   if (need_layout)
6386     {
6387       /* Final extra sizing to report errors.  */
6388       lang_do_assignments ();
6389       lang_reset_memory_regions ();
6390       lang_size_sections (NULL, TRUE);
6391     }
6392 }
6393
6394 void
6395 lang_process (void)
6396 {
6397   /* Finalize dynamic list.  */
6398   if (link_info.dynamic_list)
6399     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6400
6401   current_target = default_target;
6402
6403   /* Open the output file.  */
6404   lang_for_each_statement (ldlang_open_output);
6405   init_opb ();
6406
6407   ldemul_create_output_section_statements ();
6408
6409   /* Add to the hash table all undefineds on the command line.  */
6410   lang_place_undefineds ();
6411   lang_place_defineds ();
6412
6413   if (!bfd_section_already_linked_table_init ())
6414     einfo (_("%P%F: Failed to create hash table\n"));
6415
6416   /* Create a bfd for each input file.  */
6417   current_target = default_target;
6418   open_input_bfds (statement_list.head, FALSE);
6419
6420 #ifdef ENABLE_PLUGINS
6421     {
6422       union lang_statement_union **listend;
6423       /* Now all files are read, let the plugin(s) decide if there
6424          are any more to be added to the link before we call the
6425          emulation's after_open hook.  */
6426       listend = statement_list.tail;
6427       ASSERT (!*listend);
6428       if (plugin_call_all_symbols_read ())
6429         einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6430                plugin_error_plugin ());
6431       /* If any new files were added, they will be on the end of the
6432          statement list, and we can open them now by getting open_input_bfds
6433          to carry on from where it ended last time.  */
6434       if (*listend)
6435         open_input_bfds (*listend, FALSE);
6436     }
6437 #endif /* ENABLE_PLUGINS */
6438
6439   link_info.gc_sym_list = &entry_symbol;
6440   if (entry_symbol.name == NULL)
6441     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6442
6443   ldemul_after_open ();
6444
6445   bfd_section_already_linked_table_free ();
6446
6447   /* Make sure that we're not mixing architectures.  We call this
6448      after all the input files have been opened, but before we do any
6449      other processing, so that any operations merge_private_bfd_data
6450      does on the output file will be known during the rest of the
6451      link.  */
6452   lang_check ();
6453
6454   /* Handle .exports instead of a version script if we're told to do so.  */
6455   if (command_line.version_exports_section)
6456     lang_do_version_exports_section ();
6457
6458   /* Build all sets based on the information gathered from the input
6459      files.  */
6460   ldctor_build_sets ();
6461
6462   /* Remove unreferenced sections if asked to.  */
6463   lang_gc_sections ();
6464
6465   /* Size up the common data.  */
6466   lang_common ();
6467
6468   /* Update wild statements.  */
6469   update_wild_statements (statement_list.head);
6470
6471   /* Run through the contours of the script and attach input sections
6472      to the correct output sections.  */
6473   map_input_to_output_sections (statement_list.head, NULL, NULL);
6474
6475   process_insert_statements ();
6476
6477   /* Find any sections not attached explicitly and handle them.  */
6478   lang_place_orphans ();
6479
6480   if (! link_info.relocatable)
6481     {
6482       asection *found;
6483
6484       /* Merge SEC_MERGE sections.  This has to be done after GC of
6485          sections, so that GCed sections are not merged, but before
6486          assigning dynamic symbols, since removing whole input sections
6487          is hard then.  */
6488       bfd_merge_sections (link_info.output_bfd, &link_info);
6489
6490       /* Look for a text section and set the readonly attribute in it.  */
6491       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6492
6493       if (found != NULL)
6494         {
6495           if (config.text_read_only)
6496             found->flags |= SEC_READONLY;
6497           else
6498             found->flags &= ~SEC_READONLY;
6499         }
6500     }
6501
6502   /* Do anything special before sizing sections.  This is where ELF
6503      and other back-ends size dynamic sections.  */
6504   ldemul_before_allocation ();
6505
6506   /* We must record the program headers before we try to fix the
6507      section positions, since they will affect SIZEOF_HEADERS.  */
6508   lang_record_phdrs ();
6509
6510   /* Check relro sections.  */
6511   if (link_info.relro && ! link_info.relocatable)
6512     lang_find_relro_sections ();
6513
6514   /* Size up the sections.  */
6515   lang_size_sections (NULL, ! RELAXATION_ENABLED);
6516
6517   /* See if anything special should be done now we know how big
6518      everything is.  This is where relaxation is done.  */
6519   ldemul_after_allocation ();
6520
6521   /* Fix any .startof. or .sizeof. symbols.  */
6522   lang_set_startof ();
6523
6524   /* Do all the assignments, now that we know the final resting places
6525      of all the symbols.  */
6526
6527   lang_do_assignments ();
6528
6529   ldemul_finish ();
6530
6531   /* Make sure that the section addresses make sense.  */
6532   if (command_line.check_section_addresses)
6533     lang_check_section_addresses ();
6534
6535   lang_end ();
6536 }
6537
6538 /* EXPORTED TO YACC */
6539
6540 void
6541 lang_add_wild (struct wildcard_spec *filespec,
6542                struct wildcard_list *section_list,
6543                bfd_boolean keep_sections)
6544 {
6545   struct wildcard_list *curr, *next;
6546   lang_wild_statement_type *new_stmt;
6547
6548   /* Reverse the list as the parser puts it back to front.  */
6549   for (curr = section_list, section_list = NULL;
6550        curr != NULL;
6551        section_list = curr, curr = next)
6552     {
6553       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6554         placed_commons = TRUE;
6555
6556       next = curr->next;
6557       curr->next = section_list;
6558     }
6559
6560   if (filespec != NULL && filespec->name != NULL)
6561     {
6562       if (strcmp (filespec->name, "*") == 0)
6563         filespec->name = NULL;
6564       else if (! wildcardp (filespec->name))
6565         lang_has_input_file = TRUE;
6566     }
6567
6568   new_stmt = new_stat (lang_wild_statement, stat_ptr);
6569   new_stmt->filename = NULL;
6570   new_stmt->filenames_sorted = FALSE;
6571   if (filespec != NULL)
6572     {
6573       new_stmt->filename = filespec->name;
6574       new_stmt->filenames_sorted = filespec->sorted == by_name;
6575     }
6576   new_stmt->section_list = section_list;
6577   new_stmt->keep_sections = keep_sections;
6578   lang_list_init (&new_stmt->children);
6579   analyze_walk_wild_section_handler (new_stmt);
6580 }
6581
6582 void
6583 lang_section_start (const char *name, etree_type *address,
6584                     const segment_type *segment)
6585 {
6586   lang_address_statement_type *ad;
6587
6588   ad = new_stat (lang_address_statement, stat_ptr);
6589   ad->section_name = name;
6590   ad->address = address;
6591   ad->segment = segment;
6592 }
6593
6594 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6595    because of a -e argument on the command line, or zero if this is
6596    called by ENTRY in a linker script.  Command line arguments take
6597    precedence.  */
6598
6599 void
6600 lang_add_entry (const char *name, bfd_boolean cmdline)
6601 {
6602   if (entry_symbol.name == NULL
6603       || cmdline
6604       || ! entry_from_cmdline)
6605     {
6606       entry_symbol.name = name;
6607       entry_from_cmdline = cmdline;
6608     }
6609 }
6610
6611 /* Set the default start symbol to NAME.  .em files should use this,
6612    not lang_add_entry, to override the use of "start" if neither the
6613    linker script nor the command line specifies an entry point.  NAME
6614    must be permanently allocated.  */
6615 void
6616 lang_default_entry (const char *name)
6617 {
6618   entry_symbol_default = name;
6619 }
6620
6621 void
6622 lang_add_target (const char *name)
6623 {
6624   lang_target_statement_type *new_stmt;
6625
6626   new_stmt = new_stat (lang_target_statement, stat_ptr);
6627   new_stmt->target = name;
6628 }
6629
6630 void
6631 lang_add_map (const char *name)
6632 {
6633   while (*name)
6634     {
6635       switch (*name)
6636         {
6637         case 'F':
6638           map_option_f = TRUE;
6639           break;
6640         }
6641       name++;
6642     }
6643 }
6644
6645 void
6646 lang_add_fill (fill_type *fill)
6647 {
6648   lang_fill_statement_type *new_stmt;
6649
6650   new_stmt = new_stat (lang_fill_statement, stat_ptr);
6651   new_stmt->fill = fill;
6652 }
6653
6654 void
6655 lang_add_data (int type, union etree_union *exp)
6656 {
6657   lang_data_statement_type *new_stmt;
6658
6659   new_stmt = new_stat (lang_data_statement, stat_ptr);
6660   new_stmt->exp = exp;
6661   new_stmt->type = type;
6662 }
6663
6664 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6665    generate.  HOWTO is the corresponding howto structure (we could
6666    look this up, but the caller has already done so).  SECTION is the
6667    section to generate a reloc against, or NAME is the name of the
6668    symbol to generate a reloc against.  Exactly one of SECTION and
6669    NAME must be NULL.  ADDEND is an expression for the addend.  */
6670
6671 void
6672 lang_add_reloc (bfd_reloc_code_real_type reloc,
6673                 reloc_howto_type *howto,
6674                 asection *section,
6675                 const char *name,
6676                 union etree_union *addend)
6677 {
6678   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6679
6680   p->reloc = reloc;
6681   p->howto = howto;
6682   p->section = section;
6683   p->name = name;
6684   p->addend_exp = addend;
6685
6686   p->addend_value = 0;
6687   p->output_section = NULL;
6688   p->output_offset = 0;
6689 }
6690
6691 lang_assignment_statement_type *
6692 lang_add_assignment (etree_type *exp)
6693 {
6694   lang_assignment_statement_type *new_stmt;
6695
6696   extern int parsing_defsym;
6697   if (parsing_defsym)
6698     ldlang_add_def (exp->assign.dst);
6699
6700   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6701   new_stmt->exp = exp;
6702   return new_stmt;
6703 }
6704
6705 void
6706 lang_add_attribute (enum statement_enum attribute)
6707 {
6708   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6709 }
6710
6711 void
6712 lang_startup (const char *name)
6713 {
6714   if (startup_file != NULL)
6715     {
6716       einfo (_("%P%F: multiple STARTUP files\n"));
6717     }
6718   first_file->filename = name;
6719   first_file->local_sym_name = name;
6720   first_file->real = TRUE;
6721
6722   startup_file = name;
6723 }
6724
6725 void
6726 lang_float (bfd_boolean maybe)
6727 {
6728   lang_float_flag = maybe;
6729 }
6730
6731
6732 /* Work out the load- and run-time regions from a script statement, and
6733    store them in *LMA_REGION and *REGION respectively.
6734
6735    MEMSPEC is the name of the run-time region, or the value of
6736    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6737    LMA_MEMSPEC is the name of the load-time region, or null if the
6738    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6739    had an explicit load address.
6740
6741    It is an error to specify both a load region and a load address.  */
6742
6743 static void
6744 lang_get_regions (lang_memory_region_type **region,
6745                   lang_memory_region_type **lma_region,
6746                   const char *memspec,
6747                   const char *lma_memspec,
6748                   bfd_boolean have_lma,
6749                   bfd_boolean have_vma)
6750 {
6751   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6752
6753   /* If no runtime region or VMA has been specified, but the load region
6754      has been specified, then use the load region for the runtime region
6755      as well.  */
6756   if (lma_memspec != NULL
6757       && ! have_vma
6758       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6759     *region = *lma_region;
6760   else
6761     *region = lang_memory_region_lookup (memspec, FALSE);
6762
6763   if (have_lma && lma_memspec != 0)
6764     einfo (_("%X%P:%S: section has both a load address and a load region\n"));
6765 }
6766
6767 void
6768 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6769                                      lang_output_section_phdr_list *phdrs,
6770                                      const char *lma_memspec)
6771 {
6772   lang_get_regions (&current_section->region,
6773                     &current_section->lma_region,
6774                     memspec, lma_memspec,
6775                     current_section->load_base != NULL,
6776                     current_section->addr_tree != NULL);
6777
6778   /* If this section has no load region or base, but has the same
6779      region as the previous section, then propagate the previous
6780      section's load region.  */
6781
6782   if (!current_section->lma_region && !current_section->load_base
6783       && current_section->region == current_section->prev->region)
6784     current_section->lma_region = current_section->prev->lma_region;
6785
6786   current_section->fill = fill;
6787   current_section->phdrs = phdrs;
6788   pop_stat_ptr ();
6789 }
6790
6791 /* Create an absolute symbol with the given name with the value of the
6792    address of first byte of the section named.
6793
6794    If the symbol already exists, then do nothing.  */
6795
6796 void
6797 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
6798 {
6799   struct bfd_link_hash_entry *h;
6800
6801   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6802   if (h == NULL)
6803     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6804
6805   if (h->type == bfd_link_hash_new
6806       || h->type == bfd_link_hash_undefined)
6807     {
6808       asection *sec;
6809
6810       h->type = bfd_link_hash_defined;
6811
6812       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6813       if (sec == NULL)
6814         h->u.def.value = 0;
6815       else
6816         h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
6817
6818       h->u.def.section = bfd_abs_section_ptr;
6819     }
6820 }
6821
6822 /* Create an absolute symbol with the given name with the value of the
6823    address of the first byte after the end of the section named.
6824
6825    If the symbol already exists, then do nothing.  */
6826
6827 void
6828 lang_abs_symbol_at_end_of (const char *secname, const char *name)
6829 {
6830   struct bfd_link_hash_entry *h;
6831
6832   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6833   if (h == NULL)
6834     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6835
6836   if (h->type == bfd_link_hash_new
6837       || h->type == bfd_link_hash_undefined)
6838     {
6839       asection *sec;
6840
6841       h->type = bfd_link_hash_defined;
6842
6843       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6844       if (sec == NULL)
6845         h->u.def.value = 0;
6846       else
6847         h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
6848                           + TO_ADDR (sec->size));
6849
6850       h->u.def.section = bfd_abs_section_ptr;
6851     }
6852 }
6853
6854 void
6855 lang_statement_append (lang_statement_list_type *list,
6856                        lang_statement_union_type *element,
6857                        lang_statement_union_type **field)
6858 {
6859   *(list->tail) = element;
6860   list->tail = field;
6861 }
6862
6863 /* Set the output format type.  -oformat overrides scripts.  */
6864
6865 void
6866 lang_add_output_format (const char *format,
6867                         const char *big,
6868                         const char *little,
6869                         int from_script)
6870 {
6871   if (output_target == NULL || !from_script)
6872     {
6873       if (command_line.endian == ENDIAN_BIG
6874           && big != NULL)
6875         format = big;
6876       else if (command_line.endian == ENDIAN_LITTLE
6877                && little != NULL)
6878         format = little;
6879
6880       output_target = format;
6881     }
6882 }
6883
6884 void
6885 lang_add_insert (const char *where, int is_before)
6886 {
6887   lang_insert_statement_type *new_stmt;
6888
6889   new_stmt = new_stat (lang_insert_statement, stat_ptr);
6890   new_stmt->where = where;
6891   new_stmt->is_before = is_before;
6892   saved_script_handle = previous_script_handle;
6893 }
6894
6895 /* Enter a group.  This creates a new lang_group_statement, and sets
6896    stat_ptr to build new statements within the group.  */
6897
6898 void
6899 lang_enter_group (void)
6900 {
6901   lang_group_statement_type *g;
6902
6903   g = new_stat (lang_group_statement, stat_ptr);
6904   lang_list_init (&g->children);
6905   push_stat_ptr (&g->children);
6906 }
6907
6908 /* Leave a group.  This just resets stat_ptr to start writing to the
6909    regular list of statements again.  Note that this will not work if
6910    groups can occur inside anything else which can adjust stat_ptr,
6911    but currently they can't.  */
6912
6913 void
6914 lang_leave_group (void)
6915 {
6916   pop_stat_ptr ();
6917 }
6918
6919 /* Add a new program header.  This is called for each entry in a PHDRS
6920    command in a linker script.  */
6921
6922 void
6923 lang_new_phdr (const char *name,
6924                etree_type *type,
6925                bfd_boolean filehdr,
6926                bfd_boolean phdrs,
6927                etree_type *at,
6928                etree_type *flags)
6929 {
6930   struct lang_phdr *n, **pp;
6931   bfd_boolean hdrs;
6932
6933   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
6934   n->next = NULL;
6935   n->name = name;
6936   n->type = exp_get_value_int (type, 0, "program header type");
6937   n->filehdr = filehdr;
6938   n->phdrs = phdrs;
6939   n->at = at;
6940   n->flags = flags;
6941
6942   hdrs = n->type == 1 && (phdrs || filehdr);
6943
6944   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
6945     if (hdrs
6946         && (*pp)->type == 1
6947         && !((*pp)->filehdr || (*pp)->phdrs))
6948       {
6949         einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"));
6950         hdrs = FALSE;
6951       }
6952
6953   *pp = n;
6954 }
6955
6956 /* Record the program header information in the output BFD.  FIXME: We
6957    should not be calling an ELF specific function here.  */
6958
6959 static void
6960 lang_record_phdrs (void)
6961 {
6962   unsigned int alc;
6963   asection **secs;
6964   lang_output_section_phdr_list *last;
6965   struct lang_phdr *l;
6966   lang_output_section_statement_type *os;
6967
6968   alc = 10;
6969   secs = (asection **) xmalloc (alc * sizeof (asection *));
6970   last = NULL;
6971
6972   for (l = lang_phdr_list; l != NULL; l = l->next)
6973     {
6974       unsigned int c;
6975       flagword flags;
6976       bfd_vma at;
6977
6978       c = 0;
6979       for (os = &lang_output_section_statement.head->output_section_statement;
6980            os != NULL;
6981            os = os->next)
6982         {
6983           lang_output_section_phdr_list *pl;
6984
6985           if (os->constraint < 0)
6986             continue;
6987
6988           pl = os->phdrs;
6989           if (pl != NULL)
6990             last = pl;
6991           else
6992             {
6993               if (os->sectype == noload_section
6994                   || os->bfd_section == NULL
6995                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
6996                 continue;
6997
6998               /* Don't add orphans to PT_INTERP header.  */
6999               if (l->type == 3)
7000                 continue;
7001
7002               if (last == NULL)
7003                 {
7004                   lang_output_section_statement_type * tmp_os;
7005
7006                   /* If we have not run across a section with a program
7007                      header assigned to it yet, then scan forwards to find
7008                      one.  This prevents inconsistencies in the linker's
7009                      behaviour when a script has specified just a single
7010                      header and there are sections in that script which are
7011                      not assigned to it, and which occur before the first
7012                      use of that header. See here for more details:
7013                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7014                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7015                     if (tmp_os->phdrs)
7016                       {
7017                         last = tmp_os->phdrs;
7018                         break;
7019                       }
7020                   if (last == NULL)
7021                     einfo (_("%F%P: no sections assigned to phdrs\n"));
7022                 }
7023               pl = last;
7024             }
7025
7026           if (os->bfd_section == NULL)
7027             continue;
7028
7029           for (; pl != NULL; pl = pl->next)
7030             {
7031               if (strcmp (pl->name, l->name) == 0)
7032                 {
7033                   if (c >= alc)
7034                     {
7035                       alc *= 2;
7036                       secs = (asection **) xrealloc (secs,
7037                                                      alc * sizeof (asection *));
7038                     }
7039                   secs[c] = os->bfd_section;
7040                   ++c;
7041                   pl->used = TRUE;
7042                 }
7043             }
7044         }
7045
7046       if (l->flags == NULL)
7047         flags = 0;
7048       else
7049         flags = exp_get_vma (l->flags, 0, "phdr flags");
7050
7051       if (l->at == NULL)
7052         at = 0;
7053       else
7054         at = exp_get_vma (l->at, 0, "phdr load address");
7055
7056       if (! bfd_record_phdr (link_info.output_bfd, l->type,
7057                              l->flags != NULL, flags, l->at != NULL,
7058                              at, l->filehdr, l->phdrs, c, secs))
7059         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7060     }
7061
7062   free (secs);
7063
7064   /* Make sure all the phdr assignments succeeded.  */
7065   for (os = &lang_output_section_statement.head->output_section_statement;
7066        os != NULL;
7067        os = os->next)
7068     {
7069       lang_output_section_phdr_list *pl;
7070
7071       if (os->constraint < 0
7072           || os->bfd_section == NULL)
7073         continue;
7074
7075       for (pl = os->phdrs;
7076            pl != NULL;
7077            pl = pl->next)
7078         if (! pl->used && strcmp (pl->name, "NONE") != 0)
7079           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7080                  os->name, pl->name);
7081     }
7082 }
7083
7084 /* Record a list of sections which may not be cross referenced.  */
7085
7086 void
7087 lang_add_nocrossref (lang_nocrossref_type *l)
7088 {
7089   struct lang_nocrossrefs *n;
7090
7091   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7092   n->next = nocrossref_list;
7093   n->list = l;
7094   nocrossref_list = n;
7095
7096   /* Set notice_all so that we get informed about all symbols.  */
7097   link_info.notice_all = TRUE;
7098 }
7099 \f
7100 /* Overlay handling.  We handle overlays with some static variables.  */
7101
7102 /* The overlay virtual address.  */
7103 static etree_type *overlay_vma;
7104 /* And subsection alignment.  */
7105 static etree_type *overlay_subalign;
7106
7107 /* An expression for the maximum section size seen so far.  */
7108 static etree_type *overlay_max;
7109
7110 /* A list of all the sections in this overlay.  */
7111
7112 struct overlay_list {
7113   struct overlay_list *next;
7114   lang_output_section_statement_type *os;
7115 };
7116
7117 static struct overlay_list *overlay_list;
7118
7119 /* Start handling an overlay.  */
7120
7121 void
7122 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7123 {
7124   /* The grammar should prevent nested overlays from occurring.  */
7125   ASSERT (overlay_vma == NULL
7126           && overlay_subalign == NULL
7127           && overlay_max == NULL);
7128
7129   overlay_vma = vma_expr;
7130   overlay_subalign = subalign;
7131 }
7132
7133 /* Start a section in an overlay.  We handle this by calling
7134    lang_enter_output_section_statement with the correct VMA.
7135    lang_leave_overlay sets up the LMA and memory regions.  */
7136
7137 void
7138 lang_enter_overlay_section (const char *name)
7139 {
7140   struct overlay_list *n;
7141   etree_type *size;
7142
7143   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7144                                        0, overlay_subalign, 0, 0);
7145
7146   /* If this is the first section, then base the VMA of future
7147      sections on this one.  This will work correctly even if `.' is
7148      used in the addresses.  */
7149   if (overlay_list == NULL)
7150     overlay_vma = exp_nameop (ADDR, name);
7151
7152   /* Remember the section.  */
7153   n = (struct overlay_list *) xmalloc (sizeof *n);
7154   n->os = current_section;
7155   n->next = overlay_list;
7156   overlay_list = n;
7157
7158   size = exp_nameop (SIZEOF, name);
7159
7160   /* Arrange to work out the maximum section end address.  */
7161   if (overlay_max == NULL)
7162     overlay_max = size;
7163   else
7164     overlay_max = exp_binop (MAX_K, overlay_max, size);
7165 }
7166
7167 /* Finish a section in an overlay.  There isn't any special to do
7168    here.  */
7169
7170 void
7171 lang_leave_overlay_section (fill_type *fill,
7172                             lang_output_section_phdr_list *phdrs)
7173 {
7174   const char *name;
7175   char *clean, *s2;
7176   const char *s1;
7177   char *buf;
7178
7179   name = current_section->name;
7180
7181   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7182      region and that no load-time region has been specified.  It doesn't
7183      really matter what we say here, since lang_leave_overlay will
7184      override it.  */
7185   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7186
7187   /* Define the magic symbols.  */
7188
7189   clean = (char *) xmalloc (strlen (name) + 1);
7190   s2 = clean;
7191   for (s1 = name; *s1 != '\0'; s1++)
7192     if (ISALNUM (*s1) || *s1 == '_')
7193       *s2++ = *s1;
7194   *s2 = '\0';
7195
7196   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7197   sprintf (buf, "__load_start_%s", clean);
7198   lang_add_assignment (exp_provide (buf,
7199                                     exp_nameop (LOADADDR, name),
7200                                     FALSE));
7201
7202   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7203   sprintf (buf, "__load_stop_%s", clean);
7204   lang_add_assignment (exp_provide (buf,
7205                                     exp_binop ('+',
7206                                                exp_nameop (LOADADDR, name),
7207                                                exp_nameop (SIZEOF, name)),
7208                                     FALSE));
7209
7210   free (clean);
7211 }
7212
7213 /* Finish an overlay.  If there are any overlay wide settings, this
7214    looks through all the sections in the overlay and sets them.  */
7215
7216 void
7217 lang_leave_overlay (etree_type *lma_expr,
7218                     int nocrossrefs,
7219                     fill_type *fill,
7220                     const char *memspec,
7221                     lang_output_section_phdr_list *phdrs,
7222                     const char *lma_memspec)
7223 {
7224   lang_memory_region_type *region;
7225   lang_memory_region_type *lma_region;
7226   struct overlay_list *l;
7227   lang_nocrossref_type *nocrossref;
7228
7229   lang_get_regions (&region, &lma_region,
7230                     memspec, lma_memspec,
7231                     lma_expr != NULL, FALSE);
7232
7233   nocrossref = NULL;
7234
7235   /* After setting the size of the last section, set '.' to end of the
7236      overlay region.  */
7237   if (overlay_list != NULL)
7238     overlay_list->os->update_dot_tree
7239       = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
7240
7241   l = overlay_list;
7242   while (l != NULL)
7243     {
7244       struct overlay_list *next;
7245
7246       if (fill != NULL && l->os->fill == NULL)
7247         l->os->fill = fill;
7248
7249       l->os->region = region;
7250       l->os->lma_region = lma_region;
7251
7252       /* The first section has the load address specified in the
7253          OVERLAY statement.  The rest are worked out from that.
7254          The base address is not needed (and should be null) if
7255          an LMA region was specified.  */
7256       if (l->next == 0)
7257         {
7258           l->os->load_base = lma_expr;
7259           l->os->sectype = normal_section;
7260         }
7261       if (phdrs != NULL && l->os->phdrs == NULL)
7262         l->os->phdrs = phdrs;
7263
7264       if (nocrossrefs)
7265         {
7266           lang_nocrossref_type *nc;
7267
7268           nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7269           nc->name = l->os->name;
7270           nc->next = nocrossref;
7271           nocrossref = nc;
7272         }
7273
7274       next = l->next;
7275       free (l);
7276       l = next;
7277     }
7278
7279   if (nocrossref != NULL)
7280     lang_add_nocrossref (nocrossref);
7281
7282   overlay_vma = NULL;
7283   overlay_list = NULL;
7284   overlay_max = NULL;
7285 }
7286 \f
7287 /* Version handling.  This is only useful for ELF.  */
7288
7289 /* This global variable holds the version tree that we build.  */
7290
7291 struct bfd_elf_version_tree *lang_elf_version_info;
7292
7293 /* If PREV is NULL, return first version pattern matching particular symbol.
7294    If PREV is non-NULL, return first version pattern matching particular
7295    symbol after PREV (previously returned by lang_vers_match).  */
7296
7297 static struct bfd_elf_version_expr *
7298 lang_vers_match (struct bfd_elf_version_expr_head *head,
7299                  struct bfd_elf_version_expr *prev,
7300                  const char *sym)
7301 {
7302   const char *cxx_sym = sym;
7303   const char *java_sym = sym;
7304   struct bfd_elf_version_expr *expr = NULL;
7305
7306   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7307     {
7308       cxx_sym = cplus_demangle (sym, DMGL_PARAMS | DMGL_ANSI);
7309       if (!cxx_sym)
7310         cxx_sym = sym;
7311     }
7312   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7313     {
7314       java_sym = cplus_demangle (sym, DMGL_JAVA);
7315       if (!java_sym)
7316         java_sym = sym;
7317     }
7318
7319   if (head->htab && (prev == NULL || prev->literal))
7320     {
7321       struct bfd_elf_version_expr e;
7322
7323       switch (prev ? prev->mask : 0)
7324         {
7325         case 0:
7326           if (head->mask & BFD_ELF_VERSION_C_TYPE)
7327             {
7328               e.pattern = sym;
7329               expr = (struct bfd_elf_version_expr *)
7330                   htab_find ((htab_t) head->htab, &e);
7331               while (expr && strcmp (expr->pattern, sym) == 0)
7332                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7333                   goto out_ret;
7334                 else
7335                   expr = expr->next;
7336             }
7337           /* Fallthrough */
7338         case BFD_ELF_VERSION_C_TYPE:
7339           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7340             {
7341               e.pattern = cxx_sym;
7342               expr = (struct bfd_elf_version_expr *)
7343                   htab_find ((htab_t) head->htab, &e);
7344               while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7345                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7346                   goto out_ret;
7347                 else
7348                   expr = expr->next;
7349             }
7350           /* Fallthrough */
7351         case BFD_ELF_VERSION_CXX_TYPE:
7352           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7353             {
7354               e.pattern = java_sym;
7355               expr = (struct bfd_elf_version_expr *)
7356                   htab_find ((htab_t) head->htab, &e);
7357               while (expr && strcmp (expr->pattern, java_sym) == 0)
7358                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7359                   goto out_ret;
7360                 else
7361                   expr = expr->next;
7362             }
7363           /* Fallthrough */
7364         default:
7365           break;
7366         }
7367     }
7368
7369   /* Finally, try the wildcards.  */
7370   if (prev == NULL || prev->literal)
7371     expr = head->remaining;
7372   else
7373     expr = prev->next;
7374   for (; expr; expr = expr->next)
7375     {
7376       const char *s;
7377
7378       if (!expr->pattern)
7379         continue;
7380
7381       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7382         break;
7383
7384       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7385         s = java_sym;
7386       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7387         s = cxx_sym;
7388       else
7389         s = sym;
7390       if (fnmatch (expr->pattern, s, 0) == 0)
7391         break;
7392     }
7393
7394  out_ret:
7395   if (cxx_sym != sym)
7396     free ((char *) cxx_sym);
7397   if (java_sym != sym)
7398     free ((char *) java_sym);
7399   return expr;
7400 }
7401
7402 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7403    return a pointer to the symbol name with any backslash quotes removed.  */
7404
7405 static const char *
7406 realsymbol (const char *pattern)
7407 {
7408   const char *p;
7409   bfd_boolean changed = FALSE, backslash = FALSE;
7410   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7411
7412   for (p = pattern, s = symbol; *p != '\0'; ++p)
7413     {
7414       /* It is a glob pattern only if there is no preceding
7415          backslash.  */
7416       if (backslash)
7417         {
7418           /* Remove the preceding backslash.  */
7419           *(s - 1) = *p;
7420           backslash = FALSE;
7421           changed = TRUE;
7422         }
7423       else
7424         {
7425           if (*p == '?' || *p == '*' || *p == '[')
7426             {
7427               free (symbol);
7428               return NULL;
7429             }
7430
7431           *s++ = *p;
7432           backslash = *p == '\\';
7433         }
7434     }
7435
7436   if (changed)
7437     {
7438       *s = '\0';
7439       return symbol;
7440     }
7441   else
7442     {
7443       free (symbol);
7444       return pattern;
7445     }
7446 }
7447
7448 /* This is called for each variable name or match expression.  NEW_NAME is
7449    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7450    pattern to be matched against symbol names.  */
7451
7452 struct bfd_elf_version_expr *
7453 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7454                        const char *new_name,
7455                        const char *lang,
7456                        bfd_boolean literal_p)
7457 {
7458   struct bfd_elf_version_expr *ret;
7459
7460   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7461   ret->next = orig;
7462   ret->symver = 0;
7463   ret->script = 0;
7464   ret->literal = TRUE;
7465   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7466   if (ret->pattern == NULL)
7467     {
7468       ret->pattern = new_name;
7469       ret->literal = FALSE;
7470     }
7471
7472   if (lang == NULL || strcasecmp (lang, "C") == 0)
7473     ret->mask = BFD_ELF_VERSION_C_TYPE;
7474   else if (strcasecmp (lang, "C++") == 0)
7475     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7476   else if (strcasecmp (lang, "Java") == 0)
7477     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7478   else
7479     {
7480       einfo (_("%X%P: unknown language `%s' in version information\n"),
7481              lang);
7482       ret->mask = BFD_ELF_VERSION_C_TYPE;
7483     }
7484
7485   return ldemul_new_vers_pattern (ret);
7486 }
7487
7488 /* This is called for each set of variable names and match
7489    expressions.  */
7490
7491 struct bfd_elf_version_tree *
7492 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7493                     struct bfd_elf_version_expr *locals)
7494 {
7495   struct bfd_elf_version_tree *ret;
7496
7497   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7498   ret->globals.list = globals;
7499   ret->locals.list = locals;
7500   ret->match = lang_vers_match;
7501   ret->name_indx = (unsigned int) -1;
7502   return ret;
7503 }
7504
7505 /* This static variable keeps track of version indices.  */
7506
7507 static int version_index;
7508
7509 static hashval_t
7510 version_expr_head_hash (const void *p)
7511 {
7512   const struct bfd_elf_version_expr *e =
7513       (const struct bfd_elf_version_expr *) p;
7514
7515   return htab_hash_string (e->pattern);
7516 }
7517
7518 static int
7519 version_expr_head_eq (const void *p1, const void *p2)
7520 {
7521   const struct bfd_elf_version_expr *e1 =
7522       (const struct bfd_elf_version_expr *) p1;
7523   const struct bfd_elf_version_expr *e2 =
7524       (const struct bfd_elf_version_expr *) p2;
7525
7526   return strcmp (e1->pattern, e2->pattern) == 0;
7527 }
7528
7529 static void
7530 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7531 {
7532   size_t count = 0;
7533   struct bfd_elf_version_expr *e, *next;
7534   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7535
7536   for (e = head->list; e; e = e->next)
7537     {
7538       if (e->literal)
7539         count++;
7540       head->mask |= e->mask;
7541     }
7542
7543   if (count)
7544     {
7545       head->htab = htab_create (count * 2, version_expr_head_hash,
7546                                 version_expr_head_eq, NULL);
7547       list_loc = &head->list;
7548       remaining_loc = &head->remaining;
7549       for (e = head->list; e; e = next)
7550         {
7551           next = e->next;
7552           if (!e->literal)
7553             {
7554               *remaining_loc = e;
7555               remaining_loc = &e->next;
7556             }
7557           else
7558             {
7559               void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7560
7561               if (*loc)
7562                 {
7563                   struct bfd_elf_version_expr *e1, *last;
7564
7565                   e1 = (struct bfd_elf_version_expr *) *loc;
7566                   last = NULL;
7567                   do
7568                     {
7569                       if (e1->mask == e->mask)
7570                         {
7571                           last = NULL;
7572                           break;
7573                         }
7574                       last = e1;
7575                       e1 = e1->next;
7576                     }
7577                   while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7578
7579                   if (last == NULL)
7580                     {
7581                       /* This is a duplicate.  */
7582                       /* FIXME: Memory leak.  Sometimes pattern is not
7583                          xmalloced alone, but in larger chunk of memory.  */
7584                       /* free (e->pattern); */
7585                       free (e);
7586                     }
7587                   else
7588                     {
7589                       e->next = last->next;
7590                       last->next = e;
7591                     }
7592                 }
7593               else
7594                 {
7595                   *loc = e;
7596                   *list_loc = e;
7597                   list_loc = &e->next;
7598                 }
7599             }
7600         }
7601       *remaining_loc = NULL;
7602       *list_loc = head->remaining;
7603     }
7604   else
7605     head->remaining = head->list;
7606 }
7607
7608 /* This is called when we know the name and dependencies of the
7609    version.  */
7610
7611 void
7612 lang_register_vers_node (const char *name,
7613                          struct bfd_elf_version_tree *version,
7614                          struct bfd_elf_version_deps *deps)
7615 {
7616   struct bfd_elf_version_tree *t, **pp;
7617   struct bfd_elf_version_expr *e1;
7618
7619   if (name == NULL)
7620     name = "";
7621
7622   if ((name[0] == '\0' && lang_elf_version_info != NULL)
7623       || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
7624     {
7625       einfo (_("%X%P: anonymous version tag cannot be combined"
7626                " with other version tags\n"));
7627       free (version);
7628       return;
7629     }
7630
7631   /* Make sure this node has a unique name.  */
7632   for (t = lang_elf_version_info; t != NULL; t = t->next)
7633     if (strcmp (t->name, name) == 0)
7634       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7635
7636   lang_finalize_version_expr_head (&version->globals);
7637   lang_finalize_version_expr_head (&version->locals);
7638
7639   /* Check the global and local match names, and make sure there
7640      aren't any duplicates.  */
7641
7642   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7643     {
7644       for (t = lang_elf_version_info; t != NULL; t = t->next)
7645         {
7646           struct bfd_elf_version_expr *e2;
7647
7648           if (t->locals.htab && e1->literal)
7649             {
7650               e2 = (struct bfd_elf_version_expr *)
7651                   htab_find ((htab_t) t->locals.htab, e1);
7652               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7653                 {
7654                   if (e1->mask == e2->mask)
7655                     einfo (_("%X%P: duplicate expression `%s'"
7656                              " in version information\n"), e1->pattern);
7657                   e2 = e2->next;
7658                 }
7659             }
7660           else if (!e1->literal)
7661             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7662               if (strcmp (e1->pattern, e2->pattern) == 0
7663                   && e1->mask == e2->mask)
7664                 einfo (_("%X%P: duplicate expression `%s'"
7665                          " in version information\n"), e1->pattern);
7666         }
7667     }
7668
7669   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7670     {
7671       for (t = lang_elf_version_info; t != NULL; t = t->next)
7672         {
7673           struct bfd_elf_version_expr *e2;
7674
7675           if (t->globals.htab && e1->literal)
7676             {
7677               e2 = (struct bfd_elf_version_expr *)
7678                   htab_find ((htab_t) t->globals.htab, e1);
7679               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7680                 {
7681                   if (e1->mask == e2->mask)
7682                     einfo (_("%X%P: duplicate expression `%s'"
7683                              " in version information\n"),
7684                            e1->pattern);
7685                   e2 = e2->next;
7686                 }
7687             }
7688           else if (!e1->literal)
7689             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7690               if (strcmp (e1->pattern, e2->pattern) == 0
7691                   && e1->mask == e2->mask)
7692                 einfo (_("%X%P: duplicate expression `%s'"
7693                          " in version information\n"), e1->pattern);
7694         }
7695     }
7696
7697   version->deps = deps;
7698   version->name = name;
7699   if (name[0] != '\0')
7700     {
7701       ++version_index;
7702       version->vernum = version_index;
7703     }
7704   else
7705     version->vernum = 0;
7706
7707   for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
7708     ;
7709   *pp = version;
7710 }
7711
7712 /* This is called when we see a version dependency.  */
7713
7714 struct bfd_elf_version_deps *
7715 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7716 {
7717   struct bfd_elf_version_deps *ret;
7718   struct bfd_elf_version_tree *t;
7719
7720   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7721   ret->next = list;
7722
7723   for (t = lang_elf_version_info; t != NULL; t = t->next)
7724     {
7725       if (strcmp (t->name, name) == 0)
7726         {
7727           ret->version_needed = t;
7728           return ret;
7729         }
7730     }
7731
7732   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7733
7734   ret->version_needed = NULL;
7735   return ret;
7736 }
7737
7738 static void
7739 lang_do_version_exports_section (void)
7740 {
7741   struct bfd_elf_version_expr *greg = NULL, *lreg;
7742
7743   LANG_FOR_EACH_INPUT_STATEMENT (is)
7744     {
7745       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7746       char *contents, *p;
7747       bfd_size_type len;
7748
7749       if (sec == NULL)
7750         continue;
7751
7752       len = sec->size;
7753       contents = (char *) xmalloc (len);
7754       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7755         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7756
7757       p = contents;
7758       while (p < contents + len)
7759         {
7760           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7761           p = strchr (p, '\0') + 1;
7762         }
7763
7764       /* Do not free the contents, as we used them creating the regex.  */
7765
7766       /* Do not include this section in the link.  */
7767       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7768     }
7769
7770   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7771   lang_register_vers_node (command_line.version_exports_section,
7772                            lang_new_vers_node (greg, lreg), NULL);
7773 }
7774
7775 void
7776 lang_add_unique (const char *name)
7777 {
7778   struct unique_sections *ent;
7779
7780   for (ent = unique_section_list; ent; ent = ent->next)
7781     if (strcmp (ent->name, name) == 0)
7782       return;
7783
7784   ent = (struct unique_sections *) xmalloc (sizeof *ent);
7785   ent->name = xstrdup (name);
7786   ent->next = unique_section_list;
7787   unique_section_list = ent;
7788 }
7789
7790 /* Append the list of dynamic symbols to the existing one.  */
7791
7792 void
7793 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7794 {
7795   if (link_info.dynamic_list)
7796     {
7797       struct bfd_elf_version_expr *tail;
7798       for (tail = dynamic; tail->next != NULL; tail = tail->next)
7799         ;
7800       tail->next = link_info.dynamic_list->head.list;
7801       link_info.dynamic_list->head.list = dynamic;
7802     }
7803   else
7804     {
7805       struct bfd_elf_dynamic_list *d;
7806
7807       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
7808       d->head.list = dynamic;
7809       d->match = lang_vers_match;
7810       link_info.dynamic_list = d;
7811     }
7812 }
7813
7814 /* Append the list of C++ typeinfo dynamic symbols to the existing
7815    one.  */
7816
7817 void
7818 lang_append_dynamic_list_cpp_typeinfo (void)
7819 {
7820   const char * symbols [] =
7821     {
7822       "typeinfo name for*",
7823       "typeinfo for*"
7824     };
7825   struct bfd_elf_version_expr *dynamic = NULL;
7826   unsigned int i;
7827
7828   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7829     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7830                                      FALSE);
7831
7832   lang_append_dynamic_list (dynamic);
7833 }
7834
7835 /* Append the list of C++ operator new and delete dynamic symbols to the
7836    existing one.  */
7837
7838 void
7839 lang_append_dynamic_list_cpp_new (void)
7840 {
7841   const char * symbols [] =
7842     {
7843       "operator new*",
7844       "operator delete*"
7845     };
7846   struct bfd_elf_version_expr *dynamic = NULL;
7847   unsigned int i;
7848
7849   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7850     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7851                                      FALSE);
7852
7853   lang_append_dynamic_list (dynamic);
7854 }