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