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