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