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