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