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