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