ChangeLog rotatation and copyright year update
[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   exp_fold_tree (tree, osec, &print_dot);
3987   if (expld.result.valid_p)
3988     {
3989       bfd_vma value;
3990
3991       if (assignment->exp->type.node_class == etree_assert
3992           || is_dot
3993           || expld.assign_name != NULL)
3994         {
3995           value = expld.result.value;
3996
3997           if (expld.result.section != NULL)
3998             value += expld.result.section->vma;
3999
4000           minfo ("0x%V", value);
4001           if (is_dot)
4002             print_dot = value;
4003         }
4004       else
4005         {
4006           struct bfd_link_hash_entry *h;
4007
4008           h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
4009                                     FALSE, FALSE, TRUE);
4010           if (h)
4011             {
4012               value = h->u.def.value;
4013               value += h->u.def.section->output_section->vma;
4014               value += h->u.def.section->output_offset;
4015
4016               minfo ("[0x%V]", value);
4017             }
4018           else
4019             minfo ("[unresolved]");
4020         }
4021     }
4022   else
4023     {
4024       minfo ("*undef*   ");
4025 #ifdef BFD64
4026       minfo ("        ");
4027 #endif
4028     }
4029   expld.assign_name = NULL;
4030
4031   minfo ("                ");
4032   exp_print_tree (assignment->exp);
4033   print_nl ();
4034 }
4035
4036 static void
4037 print_input_statement (lang_input_statement_type *statm)
4038 {
4039   if (statm->filename != NULL
4040       && (statm->the_bfd == NULL
4041           || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4042     fprintf (config.map_file, "LOAD %s\n", statm->filename);
4043 }
4044
4045 /* Print all symbols defined in a particular section.  This is called
4046    via bfd_link_hash_traverse, or by print_all_symbols.  */
4047
4048 static bfd_boolean
4049 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4050 {
4051   asection *sec = (asection *) ptr;
4052
4053   if ((hash_entry->type == bfd_link_hash_defined
4054        || hash_entry->type == bfd_link_hash_defweak)
4055       && sec == hash_entry->u.def.section)
4056     {
4057       int i;
4058
4059       for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4060         print_space ();
4061       minfo ("0x%V   ",
4062              (hash_entry->u.def.value
4063               + hash_entry->u.def.section->output_offset
4064               + hash_entry->u.def.section->output_section->vma));
4065
4066       minfo ("             %T\n", hash_entry->root.string);
4067     }
4068
4069   return TRUE;
4070 }
4071
4072 static int
4073 hash_entry_addr_cmp (const void *a, const void *b)
4074 {
4075   const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4076   const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4077
4078   if (l->u.def.value < r->u.def.value)
4079     return -1;
4080   else if (l->u.def.value > r->u.def.value)
4081     return 1;
4082   else
4083     return 0;
4084 }
4085
4086 static void
4087 print_all_symbols (asection *sec)
4088 {
4089   input_section_userdata_type *ud
4090     = (input_section_userdata_type *) get_userdata (sec);
4091   struct map_symbol_def *def;
4092   struct bfd_link_hash_entry **entries;
4093   unsigned int i;
4094
4095   if (!ud)
4096     return;
4097
4098   *ud->map_symbol_def_tail = 0;
4099
4100   /* Sort the symbols by address.  */
4101   entries = (struct bfd_link_hash_entry **)
4102       obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
4103
4104   for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4105     entries[i] = def->entry;
4106
4107   qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4108          hash_entry_addr_cmp);
4109
4110   /* Print the symbols.  */
4111   for (i = 0; i < ud->map_symbol_def_count; i++)
4112     print_one_symbol (entries[i], sec);
4113
4114   obstack_free (&map_obstack, entries);
4115 }
4116
4117 /* Print information about an input section to the map file.  */
4118
4119 static void
4120 print_input_section (asection *i, bfd_boolean is_discarded)
4121 {
4122   bfd_size_type size = i->size;
4123   int len;
4124   bfd_vma addr;
4125
4126   init_opb ();
4127
4128   print_space ();
4129   minfo ("%s", i->name);
4130
4131   len = 1 + strlen (i->name);
4132   if (len >= SECTION_NAME_MAP_LENGTH - 1)
4133     {
4134       print_nl ();
4135       len = 0;
4136     }
4137   while (len < SECTION_NAME_MAP_LENGTH)
4138     {
4139       print_space ();
4140       ++len;
4141     }
4142
4143   if (i->output_section != NULL
4144       && i->output_section->owner == link_info.output_bfd)
4145     addr = i->output_section->vma + i->output_offset;
4146   else
4147     {
4148       addr = print_dot;
4149       if (!is_discarded)
4150         size = 0;
4151     }
4152
4153   minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
4154
4155   if (size != i->rawsize && i->rawsize != 0)
4156     {
4157       len = SECTION_NAME_MAP_LENGTH + 3;
4158 #ifdef BFD64
4159       len += 16;
4160 #else
4161       len += 8;
4162 #endif
4163       while (len > 0)
4164         {
4165           print_space ();
4166           --len;
4167         }
4168
4169       minfo (_("%W (size before relaxing)\n"), i->rawsize);
4170     }
4171
4172   if (i->output_section != NULL
4173       && i->output_section->owner == link_info.output_bfd)
4174     {
4175       if (link_info.reduce_memory_overheads)
4176         bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4177       else
4178         print_all_symbols (i);
4179
4180       /* Update print_dot, but make sure that we do not move it
4181          backwards - this could happen if we have overlays and a
4182          later overlay is shorter than an earier one.  */
4183       if (addr + TO_ADDR (size) > print_dot)
4184         print_dot = addr + TO_ADDR (size);
4185     }
4186 }
4187
4188 static void
4189 print_fill_statement (lang_fill_statement_type *fill)
4190 {
4191   size_t size;
4192   unsigned char *p;
4193   fputs (" FILL mask 0x", config.map_file);
4194   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4195     fprintf (config.map_file, "%02x", *p);
4196   fputs ("\n", config.map_file);
4197 }
4198
4199 static void
4200 print_data_statement (lang_data_statement_type *data)
4201 {
4202   int i;
4203   bfd_vma addr;
4204   bfd_size_type size;
4205   const char *name;
4206
4207   init_opb ();
4208   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4209     print_space ();
4210
4211   addr = data->output_offset;
4212   if (data->output_section != NULL)
4213     addr += data->output_section->vma;
4214
4215   switch (data->type)
4216     {
4217     default:
4218       abort ();
4219     case BYTE:
4220       size = BYTE_SIZE;
4221       name = "BYTE";
4222       break;
4223     case SHORT:
4224       size = SHORT_SIZE;
4225       name = "SHORT";
4226       break;
4227     case LONG:
4228       size = LONG_SIZE;
4229       name = "LONG";
4230       break;
4231     case QUAD:
4232       size = QUAD_SIZE;
4233       name = "QUAD";
4234       break;
4235     case SQUAD:
4236       size = QUAD_SIZE;
4237       name = "SQUAD";
4238       break;
4239     }
4240
4241   minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
4242
4243   if (data->exp->type.node_class != etree_value)
4244     {
4245       print_space ();
4246       exp_print_tree (data->exp);
4247     }
4248
4249   print_nl ();
4250
4251   print_dot = addr + TO_ADDR (size);
4252 }
4253
4254 /* Print an address statement.  These are generated by options like
4255    -Ttext.  */
4256
4257 static void
4258 print_address_statement (lang_address_statement_type *address)
4259 {
4260   minfo (_("Address of section %s set to "), address->section_name);
4261   exp_print_tree (address->address);
4262   print_nl ();
4263 }
4264
4265 /* Print a reloc statement.  */
4266
4267 static void
4268 print_reloc_statement (lang_reloc_statement_type *reloc)
4269 {
4270   int i;
4271   bfd_vma addr;
4272   bfd_size_type size;
4273
4274   init_opb ();
4275   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4276     print_space ();
4277
4278   addr = reloc->output_offset;
4279   if (reloc->output_section != NULL)
4280     addr += reloc->output_section->vma;
4281
4282   size = bfd_get_reloc_size (reloc->howto);
4283
4284   minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
4285
4286   if (reloc->name != NULL)
4287     minfo ("%s+", reloc->name);
4288   else
4289     minfo ("%s+", reloc->section->name);
4290
4291   exp_print_tree (reloc->addend_exp);
4292
4293   print_nl ();
4294
4295   print_dot = addr + TO_ADDR (size);
4296 }
4297
4298 static void
4299 print_padding_statement (lang_padding_statement_type *s)
4300 {
4301   int len;
4302   bfd_vma addr;
4303
4304   init_opb ();
4305   minfo (" *fill*");
4306
4307   len = sizeof " *fill*" - 1;
4308   while (len < SECTION_NAME_MAP_LENGTH)
4309     {
4310       print_space ();
4311       ++len;
4312     }
4313
4314   addr = s->output_offset;
4315   if (s->output_section != NULL)
4316     addr += s->output_section->vma;
4317   minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4318
4319   if (s->fill->size != 0)
4320     {
4321       size_t size;
4322       unsigned char *p;
4323       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4324         fprintf (config.map_file, "%02x", *p);
4325     }
4326
4327   print_nl ();
4328
4329   print_dot = addr + TO_ADDR (s->size);
4330 }
4331
4332 static void
4333 print_wild_statement (lang_wild_statement_type *w,
4334                       lang_output_section_statement_type *os)
4335 {
4336   struct wildcard_list *sec;
4337
4338   print_space ();
4339
4340   if (w->filenames_sorted)
4341     minfo ("SORT(");
4342   if (w->filename != NULL)
4343     minfo ("%s", w->filename);
4344   else
4345     minfo ("*");
4346   if (w->filenames_sorted)
4347     minfo (")");
4348
4349   minfo ("(");
4350   for (sec = w->section_list; sec; sec = sec->next)
4351     {
4352       if (sec->spec.sorted)
4353         minfo ("SORT(");
4354       if (sec->spec.exclude_name_list != NULL)
4355         {
4356           name_list *tmp;
4357           minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4358           for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4359             minfo (" %s", tmp->name);
4360           minfo (") ");
4361         }
4362       if (sec->spec.name != NULL)
4363         minfo ("%s", sec->spec.name);
4364       else
4365         minfo ("*");
4366       if (sec->spec.sorted)
4367         minfo (")");
4368       if (sec->next)
4369         minfo (" ");
4370     }
4371   minfo (")");
4372
4373   print_nl ();
4374
4375   print_statement_list (w->children.head, os);
4376 }
4377
4378 /* Print a group statement.  */
4379
4380 static void
4381 print_group (lang_group_statement_type *s,
4382              lang_output_section_statement_type *os)
4383 {
4384   fprintf (config.map_file, "START GROUP\n");
4385   print_statement_list (s->children.head, os);
4386   fprintf (config.map_file, "END GROUP\n");
4387 }
4388
4389 /* Print the list of statements in S.
4390    This can be called for any statement type.  */
4391
4392 static void
4393 print_statement_list (lang_statement_union_type *s,
4394                       lang_output_section_statement_type *os)
4395 {
4396   while (s != NULL)
4397     {
4398       print_statement (s, os);
4399       s = s->header.next;
4400     }
4401 }
4402
4403 /* Print the first statement in statement list S.
4404    This can be called for any statement type.  */
4405
4406 static void
4407 print_statement (lang_statement_union_type *s,
4408                  lang_output_section_statement_type *os)
4409 {
4410   switch (s->header.type)
4411     {
4412     default:
4413       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4414       FAIL ();
4415       break;
4416     case lang_constructors_statement_enum:
4417       if (constructor_list.head != NULL)
4418         {
4419           if (constructors_sorted)
4420             minfo (" SORT (CONSTRUCTORS)\n");
4421           else
4422             minfo (" CONSTRUCTORS\n");
4423           print_statement_list (constructor_list.head, os);
4424         }
4425       break;
4426     case lang_wild_statement_enum:
4427       print_wild_statement (&s->wild_statement, os);
4428       break;
4429     case lang_address_statement_enum:
4430       print_address_statement (&s->address_statement);
4431       break;
4432     case lang_object_symbols_statement_enum:
4433       minfo (" CREATE_OBJECT_SYMBOLS\n");
4434       break;
4435     case lang_fill_statement_enum:
4436       print_fill_statement (&s->fill_statement);
4437       break;
4438     case lang_data_statement_enum:
4439       print_data_statement (&s->data_statement);
4440       break;
4441     case lang_reloc_statement_enum:
4442       print_reloc_statement (&s->reloc_statement);
4443       break;
4444     case lang_input_section_enum:
4445       print_input_section (s->input_section.section, FALSE);
4446       break;
4447     case lang_padding_statement_enum:
4448       print_padding_statement (&s->padding_statement);
4449       break;
4450     case lang_output_section_statement_enum:
4451       print_output_section_statement (&s->output_section_statement);
4452       break;
4453     case lang_assignment_statement_enum:
4454       print_assignment (&s->assignment_statement, os);
4455       break;
4456     case lang_target_statement_enum:
4457       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4458       break;
4459     case lang_output_statement_enum:
4460       minfo ("OUTPUT(%s", s->output_statement.name);
4461       if (output_target != NULL)
4462         minfo (" %s", output_target);
4463       minfo (")\n");
4464       break;
4465     case lang_input_statement_enum:
4466       print_input_statement (&s->input_statement);
4467       break;
4468     case lang_group_statement_enum:
4469       print_group (&s->group_statement, os);
4470       break;
4471     case lang_insert_statement_enum:
4472       minfo ("INSERT %s %s\n",
4473              s->insert_statement.is_before ? "BEFORE" : "AFTER",
4474              s->insert_statement.where);
4475       break;
4476     }
4477 }
4478
4479 static void
4480 print_statements (void)
4481 {
4482   print_statement_list (statement_list.head, abs_output_section);
4483 }
4484
4485 /* Print the first N statements in statement list S to STDERR.
4486    If N == 0, nothing is printed.
4487    If N < 0, the entire list is printed.
4488    Intended to be called from GDB.  */
4489
4490 void
4491 dprint_statement (lang_statement_union_type *s, int n)
4492 {
4493   FILE *map_save = config.map_file;
4494
4495   config.map_file = stderr;
4496
4497   if (n < 0)
4498     print_statement_list (s, abs_output_section);
4499   else
4500     {
4501       while (s && --n >= 0)
4502         {
4503           print_statement (s, abs_output_section);
4504           s = s->header.next;
4505         }
4506     }
4507
4508   config.map_file = map_save;
4509 }
4510
4511 static void
4512 insert_pad (lang_statement_union_type **ptr,
4513             fill_type *fill,
4514             bfd_size_type alignment_needed,
4515             asection *output_section,
4516             bfd_vma dot)
4517 {
4518   static fill_type zero_fill;
4519   lang_statement_union_type *pad = NULL;
4520
4521   if (ptr != &statement_list.head)
4522     pad = ((lang_statement_union_type *)
4523            ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4524   if (pad != NULL
4525       && pad->header.type == lang_padding_statement_enum
4526       && pad->padding_statement.output_section == output_section)
4527     {
4528       /* Use the existing pad statement.  */
4529     }
4530   else if ((pad = *ptr) != NULL
4531            && pad->header.type == lang_padding_statement_enum
4532            && pad->padding_statement.output_section == output_section)
4533     {
4534       /* Use the existing pad statement.  */
4535     }
4536   else
4537     {
4538       /* Make a new padding statement, linked into existing chain.  */
4539       pad = (lang_statement_union_type *)
4540           stat_alloc (sizeof (lang_padding_statement_type));
4541       pad->header.next = *ptr;
4542       *ptr = pad;
4543       pad->header.type = lang_padding_statement_enum;
4544       pad->padding_statement.output_section = output_section;
4545       if (fill == NULL)
4546         fill = &zero_fill;
4547       pad->padding_statement.fill = fill;
4548     }
4549   pad->padding_statement.output_offset = dot - output_section->vma;
4550   pad->padding_statement.size = alignment_needed;
4551   output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
4552                                   - output_section->vma);
4553 }
4554
4555 /* Work out how much this section will move the dot point.  */
4556
4557 static bfd_vma
4558 size_input_section
4559   (lang_statement_union_type **this_ptr,
4560    lang_output_section_statement_type *output_section_statement,
4561    fill_type *fill,
4562    bfd_vma dot)
4563 {
4564   lang_input_section_type *is = &((*this_ptr)->input_section);
4565   asection *i = is->section;
4566   asection *o = output_section_statement->bfd_section;
4567
4568   if (i->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4569     i->output_offset = i->vma - o->vma;
4570   else if ((i->flags & SEC_EXCLUDE) != 0)
4571     i->output_offset = dot - o->vma;
4572   else
4573     {
4574       bfd_size_type alignment_needed;
4575
4576       /* Align this section first to the input sections requirement,
4577          then to the output section's requirement.  If this alignment
4578          is greater than any seen before, then record it too.  Perform
4579          the alignment by inserting a magic 'padding' statement.  */
4580
4581       if (output_section_statement->subsection_alignment != -1)
4582         i->alignment_power = output_section_statement->subsection_alignment;
4583
4584       if (o->alignment_power < i->alignment_power)
4585         o->alignment_power = i->alignment_power;
4586
4587       alignment_needed = align_power (dot, i->alignment_power) - dot;
4588
4589       if (alignment_needed != 0)
4590         {
4591           insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4592           dot += alignment_needed;
4593         }
4594
4595       /* Remember where in the output section this input section goes.  */
4596       i->output_offset = dot - o->vma;
4597
4598       /* Mark how big the output section must be to contain this now.  */
4599       dot += TO_ADDR (i->size);
4600       o->size = TO_SIZE (dot - o->vma);
4601     }
4602
4603   return dot;
4604 }
4605
4606 static int
4607 sort_sections_by_lma (const void *arg1, const void *arg2)
4608 {
4609   const asection *sec1 = *(const asection **) arg1;
4610   const asection *sec2 = *(const asection **) arg2;
4611
4612   if (bfd_section_lma (sec1->owner, sec1)
4613       < bfd_section_lma (sec2->owner, sec2))
4614     return -1;
4615   else if (bfd_section_lma (sec1->owner, sec1)
4616            > bfd_section_lma (sec2->owner, sec2))
4617     return 1;
4618   else if (sec1->id < sec2->id)
4619     return -1;
4620   else if (sec1->id > sec2->id)
4621     return 1;
4622
4623   return 0;
4624 }
4625
4626 #define IGNORE_SECTION(s) \
4627   ((s->flags & SEC_ALLOC) == 0                          \
4628    || ((s->flags & SEC_THREAD_LOCAL) != 0               \
4629         && (s->flags & SEC_LOAD) == 0))
4630
4631 /* Check to see if any allocated sections overlap with other allocated
4632    sections.  This can happen if a linker script specifies the output
4633    section addresses of the two sections.  Also check whether any memory
4634    region has overflowed.  */
4635
4636 static void
4637 lang_check_section_addresses (void)
4638 {
4639   asection *s, *p;
4640   asection **sections, **spp;
4641   unsigned int count;
4642   bfd_vma s_start;
4643   bfd_vma s_end;
4644   bfd_vma p_start;
4645   bfd_vma p_end;
4646   bfd_size_type amt;
4647   lang_memory_region_type *m;
4648
4649   if (bfd_count_sections (link_info.output_bfd) <= 1)
4650     return;
4651
4652   amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4653   sections = (asection **) xmalloc (amt);
4654
4655   /* Scan all sections in the output list.  */
4656   count = 0;
4657   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4658     {
4659       /* Only consider loadable sections with real contents.  */
4660       if (!(s->flags & SEC_LOAD)
4661           || !(s->flags & SEC_ALLOC)
4662           || s->size == 0)
4663         continue;
4664
4665       sections[count] = s;
4666       count++;
4667     }
4668
4669   if (count <= 1)
4670     return;
4671
4672   qsort (sections, (size_t) count, sizeof (asection *),
4673          sort_sections_by_lma);
4674
4675   spp = sections;
4676   s = *spp++;
4677   s_start = s->lma;
4678   s_end = s_start + TO_ADDR (s->size) - 1;
4679   for (count--; count; count--)
4680     {
4681       /* We must check the sections' LMA addresses not their VMA
4682          addresses because overlay sections can have overlapping VMAs
4683          but they must have distinct LMAs.  */
4684       p = s;
4685       p_start = s_start;
4686       p_end = s_end;
4687       s = *spp++;
4688       s_start = s->lma;
4689       s_end = s_start + TO_ADDR (s->size) - 1;
4690
4691       /* Look for an overlap.  We have sorted sections by lma, so we
4692          know that s_start >= p_start.  Besides the obvious case of
4693          overlap when the current section starts before the previous
4694          one ends, we also must have overlap if the previous section
4695          wraps around the address space.  */
4696       if (s_start <= p_end
4697           || p_end < p_start)
4698         einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
4699                s->name, s_start, s_end, p->name, p_start, p_end);
4700     }
4701
4702   free (sections);
4703
4704   /* If any memory region has overflowed, report by how much.
4705      We do not issue this diagnostic for regions that had sections
4706      explicitly placed outside their bounds; os_region_check's
4707      diagnostics are adequate for that case.
4708
4709      FIXME: It is conceivable that m->current - (m->origin + m->length)
4710      might overflow a 32-bit integer.  There is, alas, no way to print
4711      a bfd_vma quantity in decimal.  */
4712   for (m = lang_memory_region_list; m; m = m->next)
4713     if (m->had_full_message)
4714       einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4715              m->name_list.name, (long)(m->current - (m->origin + m->length)));
4716
4717 }
4718
4719 /* Make sure the new address is within the region.  We explicitly permit the
4720    current address to be at the exact end of the region when the address is
4721    non-zero, in case the region is at the end of addressable memory and the
4722    calculation wraps around.  */
4723
4724 static void
4725 os_region_check (lang_output_section_statement_type *os,
4726                  lang_memory_region_type *region,
4727                  etree_type *tree,
4728                  bfd_vma rbase)
4729 {
4730   if ((region->current < region->origin
4731        || (region->current - region->origin > region->length))
4732       && ((region->current != region->origin + region->length)
4733           || rbase == 0))
4734     {
4735       if (tree != NULL)
4736         {
4737           einfo (_("%X%P: address 0x%v of %B section `%s'"
4738                    " is not within region `%s'\n"),
4739                  region->current,
4740                  os->bfd_section->owner,
4741                  os->bfd_section->name,
4742                  region->name_list.name);
4743         }
4744       else if (!region->had_full_message)
4745         {
4746           region->had_full_message = TRUE;
4747
4748           einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4749                  os->bfd_section->owner,
4750                  os->bfd_section->name,
4751                  region->name_list.name);
4752         }
4753     }
4754 }
4755
4756 /* Set the sizes for all the output sections.  */
4757
4758 static bfd_vma
4759 lang_size_sections_1
4760   (lang_statement_union_type **prev,
4761    lang_output_section_statement_type *output_section_statement,
4762    fill_type *fill,
4763    bfd_vma dot,
4764    bfd_boolean *relax,
4765    bfd_boolean check_regions)
4766 {
4767   lang_statement_union_type *s;
4768
4769   /* Size up the sections from their constituent parts.  */
4770   for (s = *prev; s != NULL; s = s->header.next)
4771     {
4772       switch (s->header.type)
4773         {
4774         case lang_output_section_statement_enum:
4775           {
4776             bfd_vma newdot, after, dotdelta;
4777             lang_output_section_statement_type *os;
4778             lang_memory_region_type *r;
4779             int section_alignment = 0;
4780
4781             os = &s->output_section_statement;
4782             if (os->constraint == -1)
4783               break;
4784
4785             /* FIXME: We shouldn't need to zero section vmas for ld -r
4786                here, in lang_insert_orphan, or in the default linker scripts.
4787                This is covering for coff backend linker bugs.  See PR6945.  */
4788             if (os->addr_tree == NULL
4789                 && link_info.relocatable
4790                 && (bfd_get_flavour (link_info.output_bfd)
4791                     == bfd_target_coff_flavour))
4792               os->addr_tree = exp_intop (0);
4793             if (os->addr_tree != NULL)
4794               {
4795                 os->processed_vma = FALSE;
4796                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4797
4798                 if (expld.result.valid_p)
4799                   {
4800                     dot = expld.result.value;
4801                     if (expld.result.section != NULL)
4802                       dot += expld.result.section->vma;
4803                   }
4804                 else if (expld.phase != lang_mark_phase_enum)
4805                   einfo (_("%F%S: non constant or forward reference"
4806                            " address expression for section %s\n"),
4807                          os->addr_tree, os->name);
4808               }
4809
4810             if (os->bfd_section == NULL)
4811               /* This section was removed or never actually created.  */
4812               break;
4813
4814             /* If this is a COFF shared library section, use the size and
4815                address from the input section.  FIXME: This is COFF
4816                specific; it would be cleaner if there were some other way
4817                to do this, but nothing simple comes to mind.  */
4818             if (((bfd_get_flavour (link_info.output_bfd)
4819                   == bfd_target_ecoff_flavour)
4820                  || (bfd_get_flavour (link_info.output_bfd)
4821                      == bfd_target_coff_flavour))
4822                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4823               {
4824                 asection *input;
4825
4826                 if (os->children.head == NULL
4827                     || os->children.head->header.next != NULL
4828                     || (os->children.head->header.type
4829                         != lang_input_section_enum))
4830                   einfo (_("%P%X: Internal error on COFF shared library"
4831                            " section %s\n"), os->name);
4832
4833                 input = os->children.head->input_section.section;
4834                 bfd_set_section_vma (os->bfd_section->owner,
4835                                      os->bfd_section,
4836                                      bfd_section_vma (input->owner, input));
4837                 os->bfd_section->size = input->size;
4838                 break;
4839               }
4840
4841             newdot = dot;
4842             dotdelta = 0;
4843             if (bfd_is_abs_section (os->bfd_section))
4844               {
4845                 /* No matter what happens, an abs section starts at zero.  */
4846                 ASSERT (os->bfd_section->vma == 0);
4847               }
4848             else
4849               {
4850                 if (os->addr_tree == NULL)
4851                   {
4852                     /* No address specified for this section, get one
4853                        from the region specification.  */
4854                     if (os->region == NULL
4855                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4856                             && os->region->name_list.name[0] == '*'
4857                             && strcmp (os->region->name_list.name,
4858                                        DEFAULT_MEMORY_REGION) == 0))
4859                       {
4860                         os->region = lang_memory_default (os->bfd_section);
4861                       }
4862
4863                     /* If a loadable section is using the default memory
4864                        region, and some non default memory regions were
4865                        defined, issue an error message.  */
4866                     if (!os->ignored
4867                         && !IGNORE_SECTION (os->bfd_section)
4868                         && ! link_info.relocatable
4869                         && check_regions
4870                         && strcmp (os->region->name_list.name,
4871                                    DEFAULT_MEMORY_REGION) == 0
4872                         && lang_memory_region_list != NULL
4873                         && (strcmp (lang_memory_region_list->name_list.name,
4874                                     DEFAULT_MEMORY_REGION) != 0
4875                             || lang_memory_region_list->next != NULL)
4876                         && expld.phase != lang_mark_phase_enum)
4877                       {
4878                         /* By default this is an error rather than just a
4879                            warning because if we allocate the section to the
4880                            default memory region we can end up creating an
4881                            excessively large binary, or even seg faulting when
4882                            attempting to perform a negative seek.  See
4883                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
4884                            for an example of this.  This behaviour can be
4885                            overridden by the using the --no-check-sections
4886                            switch.  */
4887                         if (command_line.check_section_addresses)
4888                           einfo (_("%P%F: error: no memory region specified"
4889                                    " for loadable section `%s'\n"),
4890                                  bfd_get_section_name (link_info.output_bfd,
4891                                                        os->bfd_section));
4892                         else
4893                           einfo (_("%P: warning: no memory region specified"
4894                                    " for loadable section `%s'\n"),
4895                                  bfd_get_section_name (link_info.output_bfd,
4896                                                        os->bfd_section));
4897                       }
4898
4899                     newdot = os->region->current;
4900                     section_alignment = os->bfd_section->alignment_power;
4901                   }
4902                 else
4903                   section_alignment = os->section_alignment;
4904
4905                 /* Align to what the section needs.  */
4906                 if (section_alignment > 0)
4907                   {
4908                     bfd_vma savedot = newdot;
4909                     newdot = align_power (newdot, section_alignment);
4910
4911                     dotdelta = newdot - savedot;
4912                     if (dotdelta != 0
4913                         && (config.warn_section_align
4914                             || os->addr_tree != NULL)
4915                         && expld.phase != lang_mark_phase_enum)
4916                       einfo (_("%P: warning: changing start of section"
4917                                " %s by %lu bytes\n"),
4918                              os->name, (unsigned long) dotdelta);
4919                   }
4920
4921                 bfd_set_section_vma (0, os->bfd_section, newdot);
4922
4923                 os->bfd_section->output_offset = 0;
4924               }
4925
4926             lang_size_sections_1 (&os->children.head, os,
4927                                   os->fill, newdot, relax, check_regions);
4928
4929             os->processed_vma = TRUE;
4930
4931             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4932               /* Except for some special linker created sections,
4933                  no output section should change from zero size
4934                  after strip_excluded_output_sections.  A non-zero
4935                  size on an ignored section indicates that some
4936                  input section was not sized early enough.  */
4937               ASSERT (os->bfd_section->size == 0);
4938             else
4939               {
4940                 dot = os->bfd_section->vma;
4941
4942                 /* Put the section within the requested block size, or
4943                    align at the block boundary.  */
4944                 after = ((dot
4945                           + TO_ADDR (os->bfd_section->size)
4946                           + os->block_value - 1)
4947                          & - (bfd_vma) os->block_value);
4948
4949                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4950               }
4951
4952             /* Set section lma.  */
4953             r = os->region;
4954             if (r == NULL)
4955               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4956
4957             if (os->load_base)
4958               {
4959                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4960                 os->bfd_section->lma = lma;
4961               }
4962             else if (os->lma_region != NULL)
4963               {
4964                 bfd_vma lma = os->lma_region->current;
4965
4966                 if (os->align_lma_with_input)
4967                   lma += dotdelta;
4968                 else
4969                   {
4970                     /* When LMA_REGION is the same as REGION, align the LMA
4971                        as we did for the VMA, possibly including alignment
4972                        from the bfd section.  If a different region, then
4973                        only align according to the value in the output
4974                        statement.  */
4975                     if (os->lma_region != os->region)
4976                       section_alignment = os->section_alignment;
4977                     if (section_alignment > 0)
4978                       lma = align_power (lma, section_alignment);
4979                   }
4980                 os->bfd_section->lma = lma;
4981               }
4982             else if (r->last_os != NULL
4983                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
4984               {
4985                 bfd_vma lma;
4986                 asection *last;
4987
4988                 last = r->last_os->output_section_statement.bfd_section;
4989
4990                 /* A backwards move of dot should be accompanied by
4991                    an explicit assignment to the section LMA (ie.
4992                    os->load_base set) because backwards moves can
4993                    create overlapping LMAs.  */
4994                 if (dot < last->vma
4995                     && os->bfd_section->size != 0
4996                     && dot + os->bfd_section->size <= last->vma)
4997                   {
4998                     /* If dot moved backwards then leave lma equal to
4999                        vma.  This is the old default lma, which might
5000                        just happen to work when the backwards move is
5001                        sufficiently large.  Nag if this changes anything,
5002                        so people can fix their linker scripts.  */
5003
5004                     if (last->vma != last->lma)
5005                       einfo (_("%P: warning: dot moved backwards before `%s'\n"),
5006                              os->name);
5007                   }
5008                 else
5009                   {
5010                     /* If this is an overlay, set the current lma to that
5011                        at the end of the previous section.  */
5012                     if (os->sectype == overlay_section)
5013                       lma = last->lma + last->size;
5014
5015                     /* Otherwise, keep the same lma to vma relationship
5016                        as the previous section.  */
5017                     else
5018                       lma = dot + last->lma - last->vma;
5019
5020                     if (section_alignment > 0)
5021                       lma = align_power (lma, section_alignment);
5022                     os->bfd_section->lma = lma;
5023                   }
5024               }
5025             os->processed_lma = TRUE;
5026
5027             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5028               break;
5029
5030             /* Keep track of normal sections using the default
5031                lma region.  We use this to set the lma for
5032                following sections.  Overlays or other linker
5033                script assignment to lma might mean that the
5034                default lma == vma is incorrect.
5035                To avoid warnings about dot moving backwards when using
5036                -Ttext, don't start tracking sections until we find one
5037                of non-zero size or with lma set differently to vma.  */
5038             if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5039                  || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
5040                 && (os->bfd_section->flags & SEC_ALLOC) != 0
5041                 && (os->bfd_section->size != 0
5042                     || (r->last_os == NULL
5043                         && os->bfd_section->vma != os->bfd_section->lma)
5044                     || (r->last_os != NULL
5045                         && dot >= (r->last_os->output_section_statement
5046                                    .bfd_section->vma)))
5047                 && os->lma_region == NULL
5048                 && !link_info.relocatable)
5049               r->last_os = s;
5050
5051             /* .tbss sections effectively have zero size.  */
5052             if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5053                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5054                 || link_info.relocatable)
5055               dotdelta = TO_ADDR (os->bfd_section->size);
5056             else
5057               dotdelta = 0;
5058             dot += dotdelta;
5059
5060             if (os->update_dot_tree != 0)
5061               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5062
5063             /* Update dot in the region ?
5064                We only do this if the section is going to be allocated,
5065                since unallocated sections do not contribute to the region's
5066                overall size in memory.  */
5067             if (os->region != NULL
5068                 && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5069               {
5070                 os->region->current = dot;
5071
5072                 if (check_regions)
5073                   /* Make sure the new address is within the region.  */
5074                   os_region_check (os, os->region, os->addr_tree,
5075                                    os->bfd_section->vma);
5076
5077                 if (os->lma_region != NULL && os->lma_region != os->region
5078                     && ((os->bfd_section->flags & SEC_LOAD)
5079                         || os->align_lma_with_input))
5080                   {
5081                     os->lma_region->current = os->bfd_section->lma + dotdelta;
5082
5083                     if (check_regions)
5084                       os_region_check (os, os->lma_region, NULL,
5085                                        os->bfd_section->lma);
5086                   }
5087               }
5088           }
5089           break;
5090
5091         case lang_constructors_statement_enum:
5092           dot = lang_size_sections_1 (&constructor_list.head,
5093                                       output_section_statement,
5094                                       fill, dot, relax, check_regions);
5095           break;
5096
5097         case lang_data_statement_enum:
5098           {
5099             unsigned int size = 0;
5100
5101             s->data_statement.output_offset =
5102               dot - output_section_statement->bfd_section->vma;
5103             s->data_statement.output_section =
5104               output_section_statement->bfd_section;
5105
5106             /* We might refer to provided symbols in the expression, and
5107                need to mark them as needed.  */
5108             exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5109
5110             switch (s->data_statement.type)
5111               {
5112               default:
5113                 abort ();
5114               case QUAD:
5115               case SQUAD:
5116                 size = QUAD_SIZE;
5117                 break;
5118               case LONG:
5119                 size = LONG_SIZE;
5120                 break;
5121               case SHORT:
5122                 size = SHORT_SIZE;
5123                 break;
5124               case BYTE:
5125                 size = BYTE_SIZE;
5126                 break;
5127               }
5128             if (size < TO_SIZE ((unsigned) 1))
5129               size = TO_SIZE ((unsigned) 1);
5130             dot += TO_ADDR (size);
5131             output_section_statement->bfd_section->size
5132               = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5133
5134           }
5135           break;
5136
5137         case lang_reloc_statement_enum:
5138           {
5139             int size;
5140
5141             s->reloc_statement.output_offset =
5142               dot - output_section_statement->bfd_section->vma;
5143             s->reloc_statement.output_section =
5144               output_section_statement->bfd_section;
5145             size = bfd_get_reloc_size (s->reloc_statement.howto);
5146             dot += TO_ADDR (size);
5147             output_section_statement->bfd_section->size
5148               = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5149           }
5150           break;
5151
5152         case lang_wild_statement_enum:
5153           dot = lang_size_sections_1 (&s->wild_statement.children.head,
5154                                       output_section_statement,
5155                                       fill, dot, relax, check_regions);
5156           break;
5157
5158         case lang_object_symbols_statement_enum:
5159           link_info.create_object_symbols_section =
5160             output_section_statement->bfd_section;
5161           break;
5162
5163         case lang_output_statement_enum:
5164         case lang_target_statement_enum:
5165           break;
5166
5167         case lang_input_section_enum:
5168           {
5169             asection *i;
5170
5171             i = s->input_section.section;
5172             if (relax)
5173               {
5174                 bfd_boolean again;
5175
5176                 if (! bfd_relax_section (i->owner, i, &link_info, &again))
5177                   einfo (_("%P%F: can't relax section: %E\n"));
5178                 if (again)
5179                   *relax = TRUE;
5180               }
5181             dot = size_input_section (prev, output_section_statement,
5182                                       fill, dot);
5183           }
5184           break;
5185
5186         case lang_input_statement_enum:
5187           break;
5188
5189         case lang_fill_statement_enum:
5190           s->fill_statement.output_section =
5191             output_section_statement->bfd_section;
5192
5193           fill = s->fill_statement.fill;
5194           break;
5195
5196         case lang_assignment_statement_enum:
5197           {
5198             bfd_vma newdot = dot;
5199             etree_type *tree = s->assignment_statement.exp;
5200
5201             expld.dataseg.relro = exp_dataseg_relro_none;
5202
5203             exp_fold_tree (tree,
5204                            output_section_statement->bfd_section,
5205                            &newdot);
5206
5207             if (expld.dataseg.relro == exp_dataseg_relro_start)
5208               {
5209                 if (!expld.dataseg.relro_start_stat)
5210                   expld.dataseg.relro_start_stat = s;
5211                 else
5212                   {
5213                     ASSERT (expld.dataseg.relro_start_stat == s);
5214                   }
5215               }
5216             else if (expld.dataseg.relro == exp_dataseg_relro_end)
5217               {
5218                 if (!expld.dataseg.relro_end_stat)
5219                   expld.dataseg.relro_end_stat = s;
5220                 else
5221                   {
5222                     ASSERT (expld.dataseg.relro_end_stat == s);
5223                   }
5224               }
5225             expld.dataseg.relro = exp_dataseg_relro_none;
5226
5227             /* This symbol may be relative to this section.  */
5228             if ((tree->type.node_class == etree_provided
5229                  || tree->type.node_class == etree_assign)
5230                 && (tree->assign.dst [0] != '.'
5231                     || tree->assign.dst [1] != '\0'))
5232               output_section_statement->update_dot = 1;
5233
5234             if (!output_section_statement->ignored)
5235               {
5236                 if (output_section_statement == abs_output_section)
5237                   {
5238                     /* If we don't have an output section, then just adjust
5239                        the default memory address.  */
5240                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5241                                                FALSE)->current = newdot;
5242                   }
5243                 else if (newdot != dot)
5244                   {
5245                     /* Insert a pad after this statement.  We can't
5246                        put the pad before when relaxing, in case the
5247                        assignment references dot.  */
5248                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5249                                 output_section_statement->bfd_section, dot);
5250
5251                     /* Don't neuter the pad below when relaxing.  */
5252                     s = s->header.next;
5253
5254                     /* If dot is advanced, this implies that the section
5255                        should have space allocated to it, unless the
5256                        user has explicitly stated that the section
5257                        should not be allocated.  */
5258                     if (output_section_statement->sectype != noalloc_section
5259                         && (output_section_statement->sectype != noload_section
5260                             || (bfd_get_flavour (link_info.output_bfd)
5261                                 == bfd_target_elf_flavour)))
5262                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
5263                   }
5264                 dot = newdot;
5265               }
5266           }
5267           break;
5268
5269         case lang_padding_statement_enum:
5270           /* If this is the first time lang_size_sections is called,
5271              we won't have any padding statements.  If this is the
5272              second or later passes when relaxing, we should allow
5273              padding to shrink.  If padding is needed on this pass, it
5274              will be added back in.  */
5275           s->padding_statement.size = 0;
5276
5277           /* Make sure output_offset is valid.  If relaxation shrinks
5278              the section and this pad isn't needed, it's possible to
5279              have output_offset larger than the final size of the
5280              section.  bfd_set_section_contents will complain even for
5281              a pad size of zero.  */
5282           s->padding_statement.output_offset
5283             = dot - output_section_statement->bfd_section->vma;
5284           break;
5285
5286         case lang_group_statement_enum:
5287           dot = lang_size_sections_1 (&s->group_statement.children.head,
5288                                       output_section_statement,
5289                                       fill, dot, relax, check_regions);
5290           break;
5291
5292         case lang_insert_statement_enum:
5293           break;
5294
5295           /* We can only get here when relaxing is turned on.  */
5296         case lang_address_statement_enum:
5297           break;
5298
5299         default:
5300           FAIL ();
5301           break;
5302         }
5303       prev = &s->header.next;
5304     }
5305   return dot;
5306 }
5307
5308 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5309    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5310    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5311    segments.  We are allowed an opportunity to override this decision.  */
5312
5313 bfd_boolean
5314 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5315                                     bfd * abfd ATTRIBUTE_UNUSED,
5316                                     asection * current_section,
5317                                     asection * previous_section,
5318                                     bfd_boolean new_segment)
5319 {
5320   lang_output_section_statement_type * cur;
5321   lang_output_section_statement_type * prev;
5322
5323   /* The checks below are only necessary when the BFD library has decided
5324      that the two sections ought to be placed into the same segment.  */
5325   if (new_segment)
5326     return TRUE;
5327
5328   /* Paranoia checks.  */
5329   if (current_section == NULL || previous_section == NULL)
5330     return new_segment;
5331
5332   /* If this flag is set, the target never wants code and non-code
5333      sections comingled in the same segment.  */
5334   if (config.separate_code
5335       && ((current_section->flags ^ previous_section->flags) & SEC_CODE))
5336     return TRUE;
5337
5338   /* Find the memory regions associated with the two sections.
5339      We call lang_output_section_find() here rather than scanning the list
5340      of output sections looking for a matching section pointer because if
5341      we have a large number of sections then a hash lookup is faster.  */
5342   cur  = lang_output_section_find (current_section->name);
5343   prev = lang_output_section_find (previous_section->name);
5344
5345   /* More paranoia.  */
5346   if (cur == NULL || prev == NULL)
5347     return new_segment;
5348
5349   /* If the regions are different then force the sections to live in
5350      different segments.  See the email thread starting at the following
5351      URL for the reasons why this is necessary:
5352      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5353   return cur->region != prev->region;
5354 }
5355
5356 void
5357 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5358 {
5359   lang_statement_iteration++;
5360   lang_size_sections_1 (&statement_list.head, abs_output_section,
5361                         0, 0, relax, check_regions);
5362 }
5363
5364 void
5365 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5366 {
5367   expld.phase = lang_allocating_phase_enum;
5368   expld.dataseg.phase = exp_dataseg_none;
5369
5370   one_lang_size_sections_pass (relax, check_regions);
5371   if (expld.dataseg.phase == exp_dataseg_end_seen
5372       && link_info.relro && expld.dataseg.relro_end)
5373     {
5374       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5375          to put expld.dataseg.relro_end on a (common) page boundary.  */
5376       bfd_vma min_base, relro_end, maxpage;
5377
5378       expld.dataseg.phase = exp_dataseg_relro_adjust;
5379       maxpage = expld.dataseg.maxpagesize;
5380       /* MIN_BASE is the absolute minimum address we are allowed to start the
5381          read-write segment (byte before will be mapped read-only).  */
5382       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5383       expld.dataseg.base += (-expld.dataseg.relro_end
5384                              & (expld.dataseg.pagesize - 1));
5385       /* Compute the expected PT_GNU_RELRO segment end.  */
5386       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5387                    & ~(expld.dataseg.pagesize - 1));
5388       if (min_base + maxpage < expld.dataseg.base)
5389         {
5390           expld.dataseg.base -= maxpage;
5391           relro_end -= maxpage;
5392         }
5393       lang_reset_memory_regions ();
5394       one_lang_size_sections_pass (relax, check_regions);
5395       if (expld.dataseg.relro_end > relro_end)
5396         {
5397           /* The alignment of sections between DATA_SEGMENT_ALIGN
5398              and DATA_SEGMENT_RELRO_END can cause excessive padding to
5399              be inserted at DATA_SEGMENT_RELRO_END.  Try to start a
5400              bit lower so that the section alignments will fit in.  */
5401           asection *sec;
5402           unsigned int max_alignment_power = 0;
5403
5404           /* Find maximum alignment power of sections between
5405              DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5406           for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5407             if (sec->vma >= expld.dataseg.base
5408                 && sec->vma < expld.dataseg.relro_end
5409                 && sec->alignment_power > max_alignment_power)
5410               max_alignment_power = sec->alignment_power;
5411
5412           if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5413             {
5414               /* Aligning the adjusted base guarantees the padding
5415                  between sections won't change.  This is better than
5416                  simply subtracting 1 << max_alignment_power which is
5417                  what we used to do here.  */
5418               expld.dataseg.base &= ~((1 << max_alignment_power) - 1);
5419               lang_reset_memory_regions ();
5420               one_lang_size_sections_pass (relax, check_regions);
5421             }
5422         }
5423       link_info.relro_start = expld.dataseg.base;
5424       link_info.relro_end = expld.dataseg.relro_end;
5425     }
5426   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5427     {
5428       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5429          a page could be saved in the data segment.  */
5430       bfd_vma first, last;
5431
5432       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5433       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5434       if (first && last
5435           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5436               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5437           && first + last <= expld.dataseg.pagesize)
5438         {
5439           expld.dataseg.phase = exp_dataseg_adjust;
5440           lang_reset_memory_regions ();
5441           one_lang_size_sections_pass (relax, check_regions);
5442         }
5443       else
5444         expld.dataseg.phase = exp_dataseg_done;
5445     }
5446   else
5447     expld.dataseg.phase = exp_dataseg_done;
5448 }
5449
5450 static lang_output_section_statement_type *current_section;
5451 static lang_assignment_statement_type *current_assign;
5452 static bfd_boolean prefer_next_section;
5453
5454 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5455
5456 static bfd_vma
5457 lang_do_assignments_1 (lang_statement_union_type *s,
5458                        lang_output_section_statement_type *current_os,
5459                        fill_type *fill,
5460                        bfd_vma dot,
5461                        bfd_boolean *found_end)
5462 {
5463   for (; s != NULL; s = s->header.next)
5464     {
5465       switch (s->header.type)
5466         {
5467         case lang_constructors_statement_enum:
5468           dot = lang_do_assignments_1 (constructor_list.head,
5469                                        current_os, fill, dot, found_end);
5470           break;
5471
5472         case lang_output_section_statement_enum:
5473           {
5474             lang_output_section_statement_type *os;
5475
5476             os = &(s->output_section_statement);
5477             os->after_end = *found_end;
5478             if (os->bfd_section != NULL && !os->ignored)
5479               {
5480                 if ((os->bfd_section->flags & SEC_ALLOC) != 0)
5481                   {
5482                     current_section = os;
5483                     prefer_next_section = FALSE;
5484                   }
5485                 dot = os->bfd_section->vma;
5486
5487                 lang_do_assignments_1 (os->children.head,
5488                                        os, os->fill, dot, found_end);
5489
5490                 /* .tbss sections effectively have zero size.  */
5491                 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5492                     || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5493                     || link_info.relocatable)
5494                   dot += TO_ADDR (os->bfd_section->size);
5495
5496                 if (os->update_dot_tree != NULL)
5497                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5498               }
5499           }
5500           break;
5501
5502         case lang_wild_statement_enum:
5503
5504           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5505                                        current_os, fill, dot, found_end);
5506           break;
5507
5508         case lang_object_symbols_statement_enum:
5509         case lang_output_statement_enum:
5510         case lang_target_statement_enum:
5511           break;
5512
5513         case lang_data_statement_enum:
5514           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5515           if (expld.result.valid_p)
5516             {
5517               s->data_statement.value = expld.result.value;
5518               if (expld.result.section != NULL)
5519                 s->data_statement.value += expld.result.section->vma;
5520             }
5521           else
5522             einfo (_("%F%P: invalid data statement\n"));
5523           {
5524             unsigned int size;
5525             switch (s->data_statement.type)
5526               {
5527               default:
5528                 abort ();
5529               case QUAD:
5530               case SQUAD:
5531                 size = QUAD_SIZE;
5532                 break;
5533               case LONG:
5534                 size = LONG_SIZE;
5535                 break;
5536               case SHORT:
5537                 size = SHORT_SIZE;
5538                 break;
5539               case BYTE:
5540                 size = BYTE_SIZE;
5541                 break;
5542               }
5543             if (size < TO_SIZE ((unsigned) 1))
5544               size = TO_SIZE ((unsigned) 1);
5545             dot += TO_ADDR (size);
5546           }
5547           break;
5548
5549         case lang_reloc_statement_enum:
5550           exp_fold_tree (s->reloc_statement.addend_exp,
5551                          bfd_abs_section_ptr, &dot);
5552           if (expld.result.valid_p)
5553             s->reloc_statement.addend_value = expld.result.value;
5554           else
5555             einfo (_("%F%P: invalid reloc statement\n"));
5556           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5557           break;
5558
5559         case lang_input_section_enum:
5560           {
5561             asection *in = s->input_section.section;
5562
5563             if ((in->flags & SEC_EXCLUDE) == 0)
5564               dot += TO_ADDR (in->size);
5565           }
5566           break;
5567
5568         case lang_input_statement_enum:
5569           break;
5570
5571         case lang_fill_statement_enum:
5572           fill = s->fill_statement.fill;
5573           break;
5574
5575         case lang_assignment_statement_enum:
5576           current_assign = &s->assignment_statement;
5577           if (current_assign->exp->type.node_class != etree_assert)
5578             {
5579               const char *p = current_assign->exp->assign.dst;
5580
5581               if (current_os == abs_output_section && p[0] == '.' && p[1] == 0)
5582                 prefer_next_section = TRUE;
5583
5584               while (*p == '_')
5585                 ++p;
5586               if (strcmp (p, "end") == 0)
5587                 *found_end = TRUE;
5588             }
5589           exp_fold_tree (s->assignment_statement.exp,
5590                          current_os->bfd_section,
5591                          &dot);
5592           break;
5593
5594         case lang_padding_statement_enum:
5595           dot += TO_ADDR (s->padding_statement.size);
5596           break;
5597
5598         case lang_group_statement_enum:
5599           dot = lang_do_assignments_1 (s->group_statement.children.head,
5600                                        current_os, fill, dot, found_end);
5601           break;
5602
5603         case lang_insert_statement_enum:
5604           break;
5605
5606         case lang_address_statement_enum:
5607           break;
5608
5609         default:
5610           FAIL ();
5611           break;
5612         }
5613     }
5614   return dot;
5615 }
5616
5617 void
5618 lang_do_assignments (lang_phase_type phase)
5619 {
5620   bfd_boolean found_end = FALSE;
5621
5622   current_section = NULL;
5623   prefer_next_section = FALSE;
5624   expld.phase = phase;
5625   lang_statement_iteration++;
5626   lang_do_assignments_1 (statement_list.head,
5627                          abs_output_section, NULL, 0, &found_end);
5628 }
5629
5630 /* For an assignment statement outside of an output section statement,
5631    choose the best of neighbouring output sections to use for values
5632    of "dot".  */
5633
5634 asection *
5635 section_for_dot (void)
5636 {
5637   asection *s;
5638
5639   /* Assignments belong to the previous output section, unless there
5640      has been an assignment to "dot", in which case following
5641      assignments belong to the next output section.  (The assumption
5642      is that an assignment to "dot" is setting up the address for the
5643      next output section.)  Except that past the assignment to "_end"
5644      we always associate with the previous section.  This exception is
5645      for targets like SH that define an alloc .stack or other
5646      weirdness after non-alloc sections.  */
5647   if (current_section == NULL || prefer_next_section)
5648     {
5649       lang_statement_union_type *stmt;
5650       lang_output_section_statement_type *os;
5651
5652       for (stmt = (lang_statement_union_type *) current_assign;
5653            stmt != NULL;
5654            stmt = stmt->header.next)
5655         if (stmt->header.type == lang_output_section_statement_enum)
5656           break;
5657
5658       os = &stmt->output_section_statement;
5659       while (os != NULL
5660              && !os->after_end
5661              && (os->bfd_section == NULL
5662                  || (os->bfd_section->flags & SEC_EXCLUDE) != 0
5663                  || bfd_section_removed_from_list (link_info.output_bfd,
5664                                                    os->bfd_section)))
5665         os = os->next;
5666
5667       if (current_section == NULL || os == NULL || !os->after_end)
5668         {
5669           if (os != NULL)
5670             s = os->bfd_section;
5671           else
5672             s = link_info.output_bfd->section_last;
5673           while (s != NULL
5674                  && ((s->flags & SEC_ALLOC) == 0
5675                      || (s->flags & SEC_THREAD_LOCAL) != 0))
5676             s = s->prev;
5677           if (s != NULL)
5678             return s;
5679
5680           return bfd_abs_section_ptr;
5681         }
5682     }
5683
5684   s = current_section->bfd_section;
5685
5686   /* The section may have been stripped.  */
5687   while (s != NULL
5688          && ((s->flags & SEC_EXCLUDE) != 0
5689              || (s->flags & SEC_ALLOC) == 0
5690              || (s->flags & SEC_THREAD_LOCAL) != 0
5691              || bfd_section_removed_from_list (link_info.output_bfd, s)))
5692     s = s->prev;
5693   if (s == NULL)
5694     s = link_info.output_bfd->sections;
5695   while (s != NULL
5696          && ((s->flags & SEC_ALLOC) == 0
5697              || (s->flags & SEC_THREAD_LOCAL) != 0))
5698     s = s->next;
5699   if (s != NULL)
5700     return s;
5701
5702   return bfd_abs_section_ptr;
5703 }
5704
5705 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5706    operator .startof. (section_name), it produces an undefined symbol
5707    .startof.section_name.  Similarly, when it sees
5708    .sizeof. (section_name), it produces an undefined symbol
5709    .sizeof.section_name.  For all the output sections, we look for
5710    such symbols, and set them to the correct value.  */
5711
5712 static void
5713 lang_set_startof (void)
5714 {
5715   asection *s;
5716
5717   if (link_info.relocatable)
5718     return;
5719
5720   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5721     {
5722       const char *secname;
5723       char *buf;
5724       struct bfd_link_hash_entry *h;
5725
5726       secname = bfd_get_section_name (link_info.output_bfd, s);
5727       buf = (char *) xmalloc (10 + strlen (secname));
5728
5729       sprintf (buf, ".startof.%s", secname);
5730       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5731       if (h != NULL && h->type == bfd_link_hash_undefined)
5732         {
5733           h->type = bfd_link_hash_defined;
5734           h->u.def.value = 0;
5735           h->u.def.section = s;
5736         }
5737
5738       sprintf (buf, ".sizeof.%s", secname);
5739       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5740       if (h != NULL && h->type == bfd_link_hash_undefined)
5741         {
5742           h->type = bfd_link_hash_defined;
5743           h->u.def.value = TO_ADDR (s->size);
5744           h->u.def.section = bfd_abs_section_ptr;
5745         }
5746
5747       free (buf);
5748     }
5749 }
5750
5751 static void
5752 lang_end (void)
5753 {
5754   struct bfd_link_hash_entry *h;
5755   bfd_boolean warn;
5756
5757   if ((link_info.relocatable && !link_info.gc_sections)
5758       || (link_info.shared && !link_info.executable))
5759     warn = entry_from_cmdline;
5760   else
5761     warn = TRUE;
5762
5763   /* Force the user to specify a root when generating a relocatable with
5764      --gc-sections.  */
5765   if (link_info.gc_sections && link_info.relocatable
5766       && !(entry_from_cmdline || undef_from_cmdline))
5767     einfo (_("%P%F: gc-sections requires either an entry or "
5768              "an undefined symbol\n"));
5769
5770   if (entry_symbol.name == NULL)
5771     {
5772       /* No entry has been specified.  Look for the default entry, but
5773          don't warn if we don't find it.  */
5774       entry_symbol.name = entry_symbol_default;
5775       warn = FALSE;
5776     }
5777
5778   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5779                             FALSE, FALSE, TRUE);
5780   if (h != NULL
5781       && (h->type == bfd_link_hash_defined
5782           || h->type == bfd_link_hash_defweak)
5783       && h->u.def.section->output_section != NULL)
5784     {
5785       bfd_vma val;
5786
5787       val = (h->u.def.value
5788              + bfd_get_section_vma (link_info.output_bfd,
5789                                     h->u.def.section->output_section)
5790              + h->u.def.section->output_offset);
5791       if (! bfd_set_start_address (link_info.output_bfd, val))
5792         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5793     }
5794   else
5795     {
5796       bfd_vma val;
5797       const char *send;
5798
5799       /* We couldn't find the entry symbol.  Try parsing it as a
5800          number.  */
5801       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5802       if (*send == '\0')
5803         {
5804           if (! bfd_set_start_address (link_info.output_bfd, val))
5805             einfo (_("%P%F: can't set start address\n"));
5806         }
5807       else
5808         {
5809           asection *ts;
5810
5811           /* Can't find the entry symbol, and it's not a number.  Use
5812              the first address in the text section.  */
5813           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5814           if (ts != NULL)
5815             {
5816               if (warn)
5817                 einfo (_("%P: warning: cannot find entry symbol %s;"
5818                          " defaulting to %V\n"),
5819                        entry_symbol.name,
5820                        bfd_get_section_vma (link_info.output_bfd, ts));
5821               if (!(bfd_set_start_address
5822                     (link_info.output_bfd,
5823                      bfd_get_section_vma (link_info.output_bfd, ts))))
5824                 einfo (_("%P%F: can't set start address\n"));
5825             }
5826           else
5827             {
5828               if (warn)
5829                 einfo (_("%P: warning: cannot find entry symbol %s;"
5830                          " not setting start address\n"),
5831                        entry_symbol.name);
5832             }
5833         }
5834     }
5835 }
5836
5837 /* This is a small function used when we want to ignore errors from
5838    BFD.  */
5839
5840 static void
5841 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5842 {
5843   /* Don't do anything.  */
5844 }
5845
5846 /* Check that the architecture of all the input files is compatible
5847    with the output file.  Also call the backend to let it do any
5848    other checking that is needed.  */
5849
5850 static void
5851 lang_check (void)
5852 {
5853   lang_statement_union_type *file;
5854   bfd *input_bfd;
5855   const bfd_arch_info_type *compatible;
5856
5857   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5858     {
5859 #ifdef ENABLE_PLUGINS
5860       /* Don't check format of files claimed by plugin.  */
5861       if (file->input_statement.flags.claimed)
5862         continue;
5863 #endif /* ENABLE_PLUGINS */
5864       input_bfd = file->input_statement.the_bfd;
5865       compatible
5866         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5867                                    command_line.accept_unknown_input_arch);
5868
5869       /* In general it is not possible to perform a relocatable
5870          link between differing object formats when the input
5871          file has relocations, because the relocations in the
5872          input format may not have equivalent representations in
5873          the output format (and besides BFD does not translate
5874          relocs for other link purposes than a final link).  */
5875       if ((link_info.relocatable || link_info.emitrelocations)
5876           && (compatible == NULL
5877               || (bfd_get_flavour (input_bfd)
5878                   != bfd_get_flavour (link_info.output_bfd)))
5879           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5880         {
5881           einfo (_("%P%F: Relocatable linking with relocations from"
5882                    " format %s (%B) to format %s (%B) is not supported\n"),
5883                  bfd_get_target (input_bfd), input_bfd,
5884                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5885           /* einfo with %F exits.  */
5886         }
5887
5888       if (compatible == NULL)
5889         {
5890           if (command_line.warn_mismatch)
5891             einfo (_("%P%X: %s architecture of input file `%B'"
5892                      " is incompatible with %s output\n"),
5893                    bfd_printable_name (input_bfd), input_bfd,
5894                    bfd_printable_name (link_info.output_bfd));
5895         }
5896       else if (bfd_count_sections (input_bfd))
5897         {
5898           /* If the input bfd has no contents, it shouldn't set the
5899              private data of the output bfd.  */
5900
5901           bfd_error_handler_type pfn = NULL;
5902
5903           /* If we aren't supposed to warn about mismatched input
5904              files, temporarily set the BFD error handler to a
5905              function which will do nothing.  We still want to call
5906              bfd_merge_private_bfd_data, since it may set up
5907              information which is needed in the output file.  */
5908           if (! command_line.warn_mismatch)
5909             pfn = bfd_set_error_handler (ignore_bfd_errors);
5910           if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5911             {
5912               if (command_line.warn_mismatch)
5913                 einfo (_("%P%X: failed to merge target specific data"
5914                          " of file %B\n"), input_bfd);
5915             }
5916           if (! command_line.warn_mismatch)
5917             bfd_set_error_handler (pfn);
5918         }
5919     }
5920 }
5921
5922 /* Look through all the global common symbols and attach them to the
5923    correct section.  The -sort-common command line switch may be used
5924    to roughly sort the entries by alignment.  */
5925
5926 static void
5927 lang_common (void)
5928 {
5929   if (command_line.inhibit_common_definition)
5930     return;
5931   if (link_info.relocatable
5932       && ! command_line.force_common_definition)
5933     return;
5934
5935   if (! config.sort_common)
5936     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5937   else
5938     {
5939       unsigned int power;
5940
5941       if (config.sort_common == sort_descending)
5942         {
5943           for (power = 4; power > 0; power--)
5944             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5945
5946           power = 0;
5947           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5948         }
5949       else
5950         {
5951           for (power = 0; power <= 4; power++)
5952             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5953
5954           power = (unsigned int) -1;
5955           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5956         }
5957     }
5958 }
5959
5960 /* Place one common symbol in the correct section.  */
5961
5962 static bfd_boolean
5963 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5964 {
5965   unsigned int power_of_two;
5966   bfd_vma size;
5967   asection *section;
5968
5969   if (h->type != bfd_link_hash_common)
5970     return TRUE;
5971
5972   size = h->u.c.size;
5973   power_of_two = h->u.c.p->alignment_power;
5974
5975   if (config.sort_common == sort_descending
5976       && power_of_two < *(unsigned int *) info)
5977     return TRUE;
5978   else if (config.sort_common == sort_ascending
5979            && power_of_two > *(unsigned int *) info)
5980     return TRUE;
5981
5982   section = h->u.c.p->section;
5983   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5984     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5985            h->root.string);
5986
5987   if (config.map_file != NULL)
5988     {
5989       static bfd_boolean header_printed;
5990       int len;
5991       char *name;
5992       char buf[50];
5993
5994       if (! header_printed)
5995         {
5996           minfo (_("\nAllocating common symbols\n"));
5997           minfo (_("Common symbol       size              file\n\n"));
5998           header_printed = TRUE;
5999         }
6000
6001       name = bfd_demangle (link_info.output_bfd, h->root.string,
6002                            DMGL_ANSI | DMGL_PARAMS);
6003       if (name == NULL)
6004         {
6005           minfo ("%s", h->root.string);
6006           len = strlen (h->root.string);
6007         }
6008       else
6009         {
6010           minfo ("%s", name);
6011           len = strlen (name);
6012           free (name);
6013         }
6014
6015       if (len >= 19)
6016         {
6017           print_nl ();
6018           len = 0;
6019         }
6020       while (len < 20)
6021         {
6022           print_space ();
6023           ++len;
6024         }
6025
6026       minfo ("0x");
6027       if (size <= 0xffffffff)
6028         sprintf (buf, "%lx", (unsigned long) size);
6029       else
6030         sprintf_vma (buf, size);
6031       minfo ("%s", buf);
6032       len = strlen (buf);
6033
6034       while (len < 16)
6035         {
6036           print_space ();
6037           ++len;
6038         }
6039
6040       minfo ("%B\n", section->owner);
6041     }
6042
6043   return TRUE;
6044 }
6045
6046 /* Run through the input files and ensure that every input section has
6047    somewhere to go.  If one is found without a destination then create
6048    an input request and place it into the statement tree.  */
6049
6050 static void
6051 lang_place_orphans (void)
6052 {
6053   LANG_FOR_EACH_INPUT_STATEMENT (file)
6054     {
6055       asection *s;
6056
6057       for (s = file->the_bfd->sections; s != NULL; s = s->next)
6058         {
6059           if (s->output_section == NULL)
6060             {
6061               /* This section of the file is not attached, root
6062                  around for a sensible place for it to go.  */
6063
6064               if (file->flags.just_syms)
6065                 bfd_link_just_syms (file->the_bfd, s, &link_info);
6066               else if ((s->flags & SEC_EXCLUDE) != 0)
6067                 s->output_section = bfd_abs_section_ptr;
6068               else if (strcmp (s->name, "COMMON") == 0)
6069                 {
6070                   /* This is a lonely common section which must have
6071                      come from an archive.  We attach to the section
6072                      with the wildcard.  */
6073                   if (! link_info.relocatable
6074                       || command_line.force_common_definition)
6075                     {
6076                       if (default_common_section == NULL)
6077                         default_common_section
6078                           = lang_output_section_statement_lookup (".bss", 0,
6079                                                                   TRUE);
6080                       lang_add_section (&default_common_section->children, s,
6081                                         NULL, default_common_section);
6082                     }
6083                 }
6084               else
6085                 {
6086                   const char *name = s->name;
6087                   int constraint = 0;
6088
6089                   if (config.unique_orphan_sections
6090                       || unique_section_p (s, NULL))
6091                     constraint = SPECIAL;
6092
6093                   if (!ldemul_place_orphan (s, name, constraint))
6094                     {
6095                       lang_output_section_statement_type *os;
6096                       os = lang_output_section_statement_lookup (name,
6097                                                                  constraint,
6098                                                                  TRUE);
6099                       if (os->addr_tree == NULL
6100                           && (link_info.relocatable
6101                               || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6102                         os->addr_tree = exp_intop (0);
6103                       lang_add_section (&os->children, s, NULL, os);
6104                     }
6105                 }
6106             }
6107         }
6108     }
6109 }
6110
6111 void
6112 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
6113 {
6114   flagword *ptr_flags;
6115
6116   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6117   while (*flags)
6118     {
6119       switch (*flags)
6120         {
6121         case 'A': case 'a':
6122           *ptr_flags |= SEC_ALLOC;
6123           break;
6124
6125         case 'R': case 'r':
6126           *ptr_flags |= SEC_READONLY;
6127           break;
6128
6129         case 'W': case 'w':
6130           *ptr_flags |= SEC_DATA;
6131           break;
6132
6133         case 'X': case 'x':
6134           *ptr_flags |= SEC_CODE;
6135           break;
6136
6137         case 'L': case 'l':
6138         case 'I': case 'i':
6139           *ptr_flags |= SEC_LOAD;
6140           break;
6141
6142         default:
6143           einfo (_("%P%F: invalid syntax in flags\n"));
6144           break;
6145         }
6146       flags++;
6147     }
6148 }
6149
6150 /* Call a function on each input file.  This function will be called
6151    on an archive, but not on the elements.  */
6152
6153 void
6154 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6155 {
6156   lang_input_statement_type *f;
6157
6158   for (f = (lang_input_statement_type *) input_file_chain.head;
6159        f != NULL;
6160        f = (lang_input_statement_type *) f->next_real_file)
6161     func (f);
6162 }
6163
6164 /* Call a function on each file.  The function will be called on all
6165    the elements of an archive which are included in the link, but will
6166    not be called on the archive file itself.  */
6167
6168 void
6169 lang_for_each_file (void (*func) (lang_input_statement_type *))
6170 {
6171   LANG_FOR_EACH_INPUT_STATEMENT (f)
6172     {
6173       func (f);
6174     }
6175 }
6176
6177 void
6178 ldlang_add_file (lang_input_statement_type *entry)
6179 {
6180   lang_statement_append (&file_chain,
6181                          (lang_statement_union_type *) entry,
6182                          &entry->next);
6183
6184   /* The BFD linker needs to have a list of all input BFDs involved in
6185      a link.  */
6186   ASSERT (entry->the_bfd->link.next == NULL);
6187   ASSERT (entry->the_bfd != link_info.output_bfd);
6188
6189   *link_info.input_bfds_tail = entry->the_bfd;
6190   link_info.input_bfds_tail = &entry->the_bfd->link.next;
6191   entry->the_bfd->usrdata = entry;
6192   bfd_set_gp_size (entry->the_bfd, g_switch_value);
6193
6194   /* Look through the sections and check for any which should not be
6195      included in the link.  We need to do this now, so that we can
6196      notice when the backend linker tries to report multiple
6197      definition errors for symbols which are in sections we aren't
6198      going to link.  FIXME: It might be better to entirely ignore
6199      symbols which are defined in sections which are going to be
6200      discarded.  This would require modifying the backend linker for
6201      each backend which might set the SEC_LINK_ONCE flag.  If we do
6202      this, we should probably handle SEC_EXCLUDE in the same way.  */
6203
6204   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6205 }
6206
6207 void
6208 lang_add_output (const char *name, int from_script)
6209 {
6210   /* Make -o on command line override OUTPUT in script.  */
6211   if (!had_output_filename || !from_script)
6212     {
6213       output_filename = name;
6214       had_output_filename = TRUE;
6215     }
6216 }
6217
6218 static int
6219 topower (int x)
6220 {
6221   unsigned int i = 1;
6222   int l;
6223
6224   if (x < 0)
6225     return -1;
6226
6227   for (l = 0; l < 32; l++)
6228     {
6229       if (i >= (unsigned int) x)
6230         return l;
6231       i <<= 1;
6232     }
6233
6234   return 0;
6235 }
6236
6237 lang_output_section_statement_type *
6238 lang_enter_output_section_statement (const char *output_section_statement_name,
6239                                      etree_type *address_exp,
6240                                      enum section_type sectype,
6241                                      etree_type *align,
6242                                      etree_type *subalign,
6243                                      etree_type *ebase,
6244                                      int constraint,
6245                                      int align_with_input)
6246 {
6247   lang_output_section_statement_type *os;
6248
6249   os = lang_output_section_statement_lookup (output_section_statement_name,
6250                                              constraint, TRUE);
6251   current_section = os;
6252
6253   if (os->addr_tree == NULL)
6254     {
6255       os->addr_tree = address_exp;
6256     }
6257   os->sectype = sectype;
6258   if (sectype != noload_section)
6259     os->flags = SEC_NO_FLAGS;
6260   else
6261     os->flags = SEC_NEVER_LOAD;
6262   os->block_value = 1;
6263
6264   /* Make next things chain into subchain of this.  */
6265   push_stat_ptr (&os->children);
6266
6267   os->align_lma_with_input = align_with_input == ALIGN_WITH_INPUT;
6268   if (os->align_lma_with_input && align != NULL)
6269     einfo (_("%F%P:%S: error: align with input and explicit align specified\n"), NULL);
6270
6271   os->subsection_alignment =
6272     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6273   os->section_alignment =
6274     topower (exp_get_value_int (align, -1, "section alignment"));
6275
6276   os->load_base = ebase;
6277   return os;
6278 }
6279
6280 void
6281 lang_final (void)
6282 {
6283   lang_output_statement_type *new_stmt;
6284
6285   new_stmt = new_stat (lang_output_statement, stat_ptr);
6286   new_stmt->name = output_filename;
6287
6288 }
6289
6290 /* Reset the current counters in the regions.  */
6291
6292 void
6293 lang_reset_memory_regions (void)
6294 {
6295   lang_memory_region_type *p = lang_memory_region_list;
6296   asection *o;
6297   lang_output_section_statement_type *os;
6298
6299   for (p = lang_memory_region_list; p != NULL; p = p->next)
6300     {
6301       p->current = p->origin;
6302       p->last_os = NULL;
6303     }
6304
6305   for (os = &lang_output_section_statement.head->output_section_statement;
6306        os != NULL;
6307        os = os->next)
6308     {
6309       os->processed_vma = FALSE;
6310       os->processed_lma = FALSE;
6311     }
6312
6313   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6314     {
6315       /* Save the last size for possible use by bfd_relax_section.  */
6316       o->rawsize = o->size;
6317       o->size = 0;
6318     }
6319 }
6320
6321 /* Worker for lang_gc_sections_1.  */
6322
6323 static void
6324 gc_section_callback (lang_wild_statement_type *ptr,
6325                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
6326                      asection *section,
6327                      struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6328                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
6329                      void *data ATTRIBUTE_UNUSED)
6330 {
6331   /* If the wild pattern was marked KEEP, the member sections
6332      should be as well.  */
6333   if (ptr->keep_sections)
6334     section->flags |= SEC_KEEP;
6335 }
6336
6337 /* Iterate over sections marking them against GC.  */
6338
6339 static void
6340 lang_gc_sections_1 (lang_statement_union_type *s)
6341 {
6342   for (; s != NULL; s = s->header.next)
6343     {
6344       switch (s->header.type)
6345         {
6346         case lang_wild_statement_enum:
6347           walk_wild (&s->wild_statement, gc_section_callback, NULL);
6348           break;
6349         case lang_constructors_statement_enum:
6350           lang_gc_sections_1 (constructor_list.head);
6351           break;
6352         case lang_output_section_statement_enum:
6353           lang_gc_sections_1 (s->output_section_statement.children.head);
6354           break;
6355         case lang_group_statement_enum:
6356           lang_gc_sections_1 (s->group_statement.children.head);
6357           break;
6358         default:
6359           break;
6360         }
6361     }
6362 }
6363
6364 static void
6365 lang_gc_sections (void)
6366 {
6367   /* Keep all sections so marked in the link script.  */
6368
6369   lang_gc_sections_1 (statement_list.head);
6370
6371   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6372      the special case of debug info.  (See bfd/stabs.c)
6373      Twiddle the flag here, to simplify later linker code.  */
6374   if (link_info.relocatable)
6375     {
6376       LANG_FOR_EACH_INPUT_STATEMENT (f)
6377         {
6378           asection *sec;
6379 #ifdef ENABLE_PLUGINS
6380           if (f->flags.claimed)
6381             continue;
6382 #endif
6383           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6384             if ((sec->flags & SEC_DEBUGGING) == 0)
6385               sec->flags &= ~SEC_EXCLUDE;
6386         }
6387     }
6388
6389   if (link_info.gc_sections)
6390     bfd_gc_sections (link_info.output_bfd, &link_info);
6391 }
6392
6393 /* Worker for lang_find_relro_sections_1.  */
6394
6395 static void
6396 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6397                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
6398                              asection *section,
6399                              struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6400                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
6401                              void *data)
6402 {
6403   /* Discarded, excluded and ignored sections effectively have zero
6404      size.  */
6405   if (section->output_section != NULL
6406       && section->output_section->owner == link_info.output_bfd
6407       && (section->output_section->flags & SEC_EXCLUDE) == 0
6408       && !IGNORE_SECTION (section)
6409       && section->size != 0)
6410     {
6411       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6412       *has_relro_section = TRUE;
6413     }
6414 }
6415
6416 /* Iterate over sections for relro sections.  */
6417
6418 static void
6419 lang_find_relro_sections_1 (lang_statement_union_type *s,
6420                             bfd_boolean *has_relro_section)
6421 {
6422   if (*has_relro_section)
6423     return;
6424
6425   for (; s != NULL; s = s->header.next)
6426     {
6427       if (s == expld.dataseg.relro_end_stat)
6428         break;
6429
6430       switch (s->header.type)
6431         {
6432         case lang_wild_statement_enum:
6433           walk_wild (&s->wild_statement,
6434                      find_relro_section_callback,
6435                      has_relro_section);
6436           break;
6437         case lang_constructors_statement_enum:
6438           lang_find_relro_sections_1 (constructor_list.head,
6439                                       has_relro_section);
6440           break;
6441         case lang_output_section_statement_enum:
6442           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6443                                       has_relro_section);
6444           break;
6445         case lang_group_statement_enum:
6446           lang_find_relro_sections_1 (s->group_statement.children.head,
6447                                       has_relro_section);
6448           break;
6449         default:
6450           break;
6451         }
6452     }
6453 }
6454
6455 static void
6456 lang_find_relro_sections (void)
6457 {
6458   bfd_boolean has_relro_section = FALSE;
6459
6460   /* Check all sections in the link script.  */
6461
6462   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6463                               &has_relro_section);
6464
6465   if (!has_relro_section)
6466     link_info.relro = FALSE;
6467 }
6468
6469 /* Relax all sections until bfd_relax_section gives up.  */
6470
6471 void
6472 lang_relax_sections (bfd_boolean need_layout)
6473 {
6474   if (RELAXATION_ENABLED)
6475     {
6476       /* We may need more than one relaxation pass.  */
6477       int i = link_info.relax_pass;
6478
6479       /* The backend can use it to determine the current pass.  */
6480       link_info.relax_pass = 0;
6481
6482       while (i--)
6483         {
6484           /* Keep relaxing until bfd_relax_section gives up.  */
6485           bfd_boolean relax_again;
6486
6487           link_info.relax_trip = -1;
6488           do
6489             {
6490               link_info.relax_trip++;
6491
6492               /* Note: pe-dll.c does something like this also.  If you find
6493                  you need to change this code, you probably need to change
6494                  pe-dll.c also.  DJ  */
6495
6496               /* Do all the assignments with our current guesses as to
6497                  section sizes.  */
6498               lang_do_assignments (lang_assigning_phase_enum);
6499
6500               /* We must do this after lang_do_assignments, because it uses
6501                  size.  */
6502               lang_reset_memory_regions ();
6503
6504               /* Perform another relax pass - this time we know where the
6505                  globals are, so can make a better guess.  */
6506               relax_again = FALSE;
6507               lang_size_sections (&relax_again, FALSE);
6508             }
6509           while (relax_again);
6510
6511           link_info.relax_pass++;
6512         }
6513       need_layout = TRUE;
6514     }
6515
6516   if (need_layout)
6517     {
6518       /* Final extra sizing to report errors.  */
6519       lang_do_assignments (lang_assigning_phase_enum);
6520       lang_reset_memory_regions ();
6521       lang_size_sections (NULL, TRUE);
6522     }
6523 }
6524
6525 #ifdef ENABLE_PLUGINS
6526 /* Find the insert point for the plugin's replacement files.  We
6527    place them after the first claimed real object file, or if the
6528    first claimed object is an archive member, after the last real
6529    object file immediately preceding the archive.  In the event
6530    no objects have been claimed at all, we return the first dummy
6531    object file on the list as the insert point; that works, but
6532    the callee must be careful when relinking the file_chain as it
6533    is not actually on that chain, only the statement_list and the
6534    input_file list; in that case, the replacement files must be
6535    inserted at the head of the file_chain.  */
6536
6537 static lang_input_statement_type *
6538 find_replacements_insert_point (void)
6539 {
6540   lang_input_statement_type *claim1, *lastobject;
6541   lastobject = &input_file_chain.head->input_statement;
6542   for (claim1 = &file_chain.head->input_statement;
6543        claim1 != NULL;
6544        claim1 = &claim1->next->input_statement)
6545     {
6546       if (claim1->flags.claimed)
6547         return claim1->flags.claim_archive ? lastobject : claim1;
6548       /* Update lastobject if this is a real object file.  */
6549       if (claim1->the_bfd && (claim1->the_bfd->my_archive == NULL))
6550         lastobject = claim1;
6551     }
6552   /* No files were claimed by the plugin.  Choose the last object
6553      file found on the list (maybe the first, dummy entry) as the
6554      insert point.  */
6555   return lastobject;
6556 }
6557
6558 /* Insert SRCLIST into DESTLIST after given element by chaining
6559    on FIELD as the next-pointer.  (Counterintuitively does not need
6560    a pointer to the actual after-node itself, just its chain field.)  */
6561
6562 static void
6563 lang_list_insert_after (lang_statement_list_type *destlist,
6564                         lang_statement_list_type *srclist,
6565                         lang_statement_union_type **field)
6566 {
6567   *(srclist->tail) = *field;
6568   *field = srclist->head;
6569   if (destlist->tail == field)
6570     destlist->tail = srclist->tail;
6571 }
6572
6573 /* Detach new nodes added to DESTLIST since the time ORIGLIST
6574    was taken as a copy of it and leave them in ORIGLIST.  */
6575
6576 static void
6577 lang_list_remove_tail (lang_statement_list_type *destlist,
6578                        lang_statement_list_type *origlist)
6579 {
6580   union lang_statement_union **savetail;
6581   /* Check that ORIGLIST really is an earlier state of DESTLIST.  */
6582   ASSERT (origlist->head == destlist->head);
6583   savetail = origlist->tail;
6584   origlist->head = *(savetail);
6585   origlist->tail = destlist->tail;
6586   destlist->tail = savetail;
6587   *savetail = NULL;
6588 }
6589 #endif /* ENABLE_PLUGINS */
6590
6591 void
6592 lang_process (void)
6593 {
6594   /* Finalize dynamic list.  */
6595   if (link_info.dynamic_list)
6596     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6597
6598   current_target = default_target;
6599
6600   /* Open the output file.  */
6601   lang_for_each_statement (ldlang_open_output);
6602   init_opb ();
6603
6604   ldemul_create_output_section_statements ();
6605
6606   /* Add to the hash table all undefineds on the command line.  */
6607   lang_place_undefineds ();
6608
6609   if (!bfd_section_already_linked_table_init ())
6610     einfo (_("%P%F: Failed to create hash table\n"));
6611
6612   /* Create a bfd for each input file.  */
6613   current_target = default_target;
6614   open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
6615
6616 #ifdef ENABLE_PLUGINS
6617   if (plugin_active_plugins_p ())
6618     {
6619       lang_statement_list_type added;
6620       lang_statement_list_type files, inputfiles;
6621
6622       /* Now all files are read, let the plugin(s) decide if there
6623          are any more to be added to the link before we call the
6624          emulation's after_open hook.  We create a private list of
6625          input statements for this purpose, which we will eventually
6626          insert into the global statment list after the first claimed
6627          file.  */
6628       added = *stat_ptr;
6629       /* We need to manipulate all three chains in synchrony.  */
6630       files = file_chain;
6631       inputfiles = input_file_chain;
6632       if (plugin_call_all_symbols_read ())
6633         einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6634                plugin_error_plugin ());
6635       /* Open any newly added files, updating the file chains.  */
6636       link_info.loading_lto_outputs = TRUE;
6637       open_input_bfds (*added.tail, OPEN_BFD_NORMAL);
6638       /* Restore the global list pointer now they have all been added.  */
6639       lang_list_remove_tail (stat_ptr, &added);
6640       /* And detach the fresh ends of the file lists.  */
6641       lang_list_remove_tail (&file_chain, &files);
6642       lang_list_remove_tail (&input_file_chain, &inputfiles);
6643       /* Were any new files added?  */
6644       if (added.head != NULL)
6645         {
6646           /* If so, we will insert them into the statement list immediately
6647              after the first input file that was claimed by the plugin.  */
6648           plugin_insert = find_replacements_insert_point ();
6649           /* If a plugin adds input files without having claimed any, we
6650              don't really have a good idea where to place them.  Just putting
6651              them at the start or end of the list is liable to leave them
6652              outside the crtbegin...crtend range.  */
6653           ASSERT (plugin_insert != NULL);
6654           /* Splice the new statement list into the old one.  */
6655           lang_list_insert_after (stat_ptr, &added,
6656                                   &plugin_insert->header.next);
6657           /* Likewise for the file chains.  */
6658           lang_list_insert_after (&input_file_chain, &inputfiles,
6659                                   &plugin_insert->next_real_file);
6660           /* We must be careful when relinking file_chain; we may need to
6661              insert the new files at the head of the list if the insert
6662              point chosen is the dummy first input file.  */
6663           if (plugin_insert->filename)
6664             lang_list_insert_after (&file_chain, &files, &plugin_insert->next);
6665           else
6666             lang_list_insert_after (&file_chain, &files, &file_chain.head);
6667
6668           /* Rescan archives in case new undefined symbols have appeared.  */
6669           open_input_bfds (statement_list.head, OPEN_BFD_RESCAN);
6670         }
6671     }
6672 #endif /* ENABLE_PLUGINS */
6673
6674   link_info.gc_sym_list = &entry_symbol;
6675   if (entry_symbol.name == NULL)
6676     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6677
6678   ldemul_after_open ();
6679   if (config.map_file != NULL)
6680     lang_print_asneeded ();
6681
6682   bfd_section_already_linked_table_free ();
6683
6684   /* Make sure that we're not mixing architectures.  We call this
6685      after all the input files have been opened, but before we do any
6686      other processing, so that any operations merge_private_bfd_data
6687      does on the output file will be known during the rest of the
6688      link.  */
6689   lang_check ();
6690
6691   /* Handle .exports instead of a version script if we're told to do so.  */
6692   if (command_line.version_exports_section)
6693     lang_do_version_exports_section ();
6694
6695   /* Build all sets based on the information gathered from the input
6696      files.  */
6697   ldctor_build_sets ();
6698
6699   /* PR 13683: We must rerun the assignments prior to running garbage
6700      collection in order to make sure that all symbol aliases are resolved.  */
6701   lang_do_assignments (lang_mark_phase_enum);
6702   expld.phase = lang_first_phase_enum;
6703
6704   /* Remove unreferenced sections if asked to.  */
6705   lang_gc_sections ();
6706
6707   /* Size up the common data.  */
6708   lang_common ();
6709
6710   /* Update wild statements.  */
6711   update_wild_statements (statement_list.head);
6712
6713   /* Run through the contours of the script and attach input sections
6714      to the correct output sections.  */
6715   lang_statement_iteration++;
6716   map_input_to_output_sections (statement_list.head, NULL, NULL);
6717
6718   process_insert_statements ();
6719
6720   /* Find any sections not attached explicitly and handle them.  */
6721   lang_place_orphans ();
6722
6723   if (! link_info.relocatable)
6724     {
6725       asection *found;
6726
6727       /* Merge SEC_MERGE sections.  This has to be done after GC of
6728          sections, so that GCed sections are not merged, but before
6729          assigning dynamic symbols, since removing whole input sections
6730          is hard then.  */
6731       bfd_merge_sections (link_info.output_bfd, &link_info);
6732
6733       /* Look for a text section and set the readonly attribute in it.  */
6734       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6735
6736       if (found != NULL)
6737         {
6738           if (config.text_read_only)
6739             found->flags |= SEC_READONLY;
6740           else
6741             found->flags &= ~SEC_READONLY;
6742         }
6743     }
6744
6745   /* Do anything special before sizing sections.  This is where ELF
6746      and other back-ends size dynamic sections.  */
6747   ldemul_before_allocation ();
6748
6749   /* We must record the program headers before we try to fix the
6750      section positions, since they will affect SIZEOF_HEADERS.  */
6751   lang_record_phdrs ();
6752
6753   /* Check relro sections.  */
6754   if (link_info.relro && ! link_info.relocatable)
6755     lang_find_relro_sections ();
6756
6757   /* Size up the sections.  */
6758   lang_size_sections (NULL, ! RELAXATION_ENABLED);
6759
6760   /* See if anything special should be done now we know how big
6761      everything is.  This is where relaxation is done.  */
6762   ldemul_after_allocation ();
6763
6764   /* Fix any .startof. or .sizeof. symbols.  */
6765   lang_set_startof ();
6766
6767   /* Do all the assignments, now that we know the final resting places
6768      of all the symbols.  */
6769   lang_do_assignments (lang_final_phase_enum);
6770
6771   ldemul_finish ();
6772
6773   /* Make sure that the section addresses make sense.  */
6774   if (command_line.check_section_addresses)
6775     lang_check_section_addresses ();
6776
6777   lang_end ();
6778 }
6779
6780 /* EXPORTED TO YACC */
6781
6782 void
6783 lang_add_wild (struct wildcard_spec *filespec,
6784                struct wildcard_list *section_list,
6785                bfd_boolean keep_sections)
6786 {
6787   struct wildcard_list *curr, *next;
6788   lang_wild_statement_type *new_stmt;
6789
6790   /* Reverse the list as the parser puts it back to front.  */
6791   for (curr = section_list, section_list = NULL;
6792        curr != NULL;
6793        section_list = curr, curr = next)
6794     {
6795       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6796         placed_commons = TRUE;
6797
6798       next = curr->next;
6799       curr->next = section_list;
6800     }
6801
6802   if (filespec != NULL && filespec->name != NULL)
6803     {
6804       if (strcmp (filespec->name, "*") == 0)
6805         filespec->name = NULL;
6806       else if (! wildcardp (filespec->name))
6807         lang_has_input_file = TRUE;
6808     }
6809
6810   new_stmt = new_stat (lang_wild_statement, stat_ptr);
6811   new_stmt->filename = NULL;
6812   new_stmt->filenames_sorted = FALSE;
6813   new_stmt->section_flag_list = NULL;
6814   if (filespec != NULL)
6815     {
6816       new_stmt->filename = filespec->name;
6817       new_stmt->filenames_sorted = filespec->sorted == by_name;
6818       new_stmt->section_flag_list = filespec->section_flag_list;
6819     }
6820   new_stmt->section_list = section_list;
6821   new_stmt->keep_sections = keep_sections;
6822   lang_list_init (&new_stmt->children);
6823   analyze_walk_wild_section_handler (new_stmt);
6824 }
6825
6826 void
6827 lang_section_start (const char *name, etree_type *address,
6828                     const segment_type *segment)
6829 {
6830   lang_address_statement_type *ad;
6831
6832   ad = new_stat (lang_address_statement, stat_ptr);
6833   ad->section_name = name;
6834   ad->address = address;
6835   ad->segment = segment;
6836 }
6837
6838 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6839    because of a -e argument on the command line, or zero if this is
6840    called by ENTRY in a linker script.  Command line arguments take
6841    precedence.  */
6842
6843 void
6844 lang_add_entry (const char *name, bfd_boolean cmdline)
6845 {
6846   if (entry_symbol.name == NULL
6847       || cmdline
6848       || ! entry_from_cmdline)
6849     {
6850       entry_symbol.name = name;
6851       entry_from_cmdline = cmdline;
6852     }
6853 }
6854
6855 /* Set the default start symbol to NAME.  .em files should use this,
6856    not lang_add_entry, to override the use of "start" if neither the
6857    linker script nor the command line specifies an entry point.  NAME
6858    must be permanently allocated.  */
6859 void
6860 lang_default_entry (const char *name)
6861 {
6862   entry_symbol_default = name;
6863 }
6864
6865 void
6866 lang_add_target (const char *name)
6867 {
6868   lang_target_statement_type *new_stmt;
6869
6870   new_stmt = new_stat (lang_target_statement, stat_ptr);
6871   new_stmt->target = name;
6872 }
6873
6874 void
6875 lang_add_map (const char *name)
6876 {
6877   while (*name)
6878     {
6879       switch (*name)
6880         {
6881         case 'F':
6882           map_option_f = TRUE;
6883           break;
6884         }
6885       name++;
6886     }
6887 }
6888
6889 void
6890 lang_add_fill (fill_type *fill)
6891 {
6892   lang_fill_statement_type *new_stmt;
6893
6894   new_stmt = new_stat (lang_fill_statement, stat_ptr);
6895   new_stmt->fill = fill;
6896 }
6897
6898 void
6899 lang_add_data (int type, union etree_union *exp)
6900 {
6901   lang_data_statement_type *new_stmt;
6902
6903   new_stmt = new_stat (lang_data_statement, stat_ptr);
6904   new_stmt->exp = exp;
6905   new_stmt->type = type;
6906 }
6907
6908 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6909    generate.  HOWTO is the corresponding howto structure (we could
6910    look this up, but the caller has already done so).  SECTION is the
6911    section to generate a reloc against, or NAME is the name of the
6912    symbol to generate a reloc against.  Exactly one of SECTION and
6913    NAME must be NULL.  ADDEND is an expression for the addend.  */
6914
6915 void
6916 lang_add_reloc (bfd_reloc_code_real_type reloc,
6917                 reloc_howto_type *howto,
6918                 asection *section,
6919                 const char *name,
6920                 union etree_union *addend)
6921 {
6922   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6923
6924   p->reloc = reloc;
6925   p->howto = howto;
6926   p->section = section;
6927   p->name = name;
6928   p->addend_exp = addend;
6929
6930   p->addend_value = 0;
6931   p->output_section = NULL;
6932   p->output_offset = 0;
6933 }
6934
6935 lang_assignment_statement_type *
6936 lang_add_assignment (etree_type *exp)
6937 {
6938   lang_assignment_statement_type *new_stmt;
6939
6940   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6941   new_stmt->exp = exp;
6942   return new_stmt;
6943 }
6944
6945 void
6946 lang_add_attribute (enum statement_enum attribute)
6947 {
6948   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6949 }
6950
6951 void
6952 lang_startup (const char *name)
6953 {
6954   if (first_file->filename != NULL)
6955     {
6956       einfo (_("%P%F: multiple STARTUP files\n"));
6957     }
6958   first_file->filename = name;
6959   first_file->local_sym_name = name;
6960   first_file->flags.real = TRUE;
6961 }
6962
6963 void
6964 lang_float (bfd_boolean maybe)
6965 {
6966   lang_float_flag = maybe;
6967 }
6968
6969
6970 /* Work out the load- and run-time regions from a script statement, and
6971    store them in *LMA_REGION and *REGION respectively.
6972
6973    MEMSPEC is the name of the run-time region, or the value of
6974    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6975    LMA_MEMSPEC is the name of the load-time region, or null if the
6976    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6977    had an explicit load address.
6978
6979    It is an error to specify both a load region and a load address.  */
6980
6981 static void
6982 lang_get_regions (lang_memory_region_type **region,
6983                   lang_memory_region_type **lma_region,
6984                   const char *memspec,
6985                   const char *lma_memspec,
6986                   bfd_boolean have_lma,
6987                   bfd_boolean have_vma)
6988 {
6989   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6990
6991   /* If no runtime region or VMA has been specified, but the load region
6992      has been specified, then use the load region for the runtime region
6993      as well.  */
6994   if (lma_memspec != NULL
6995       && ! have_vma
6996       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6997     *region = *lma_region;
6998   else
6999     *region = lang_memory_region_lookup (memspec, FALSE);
7000
7001   if (have_lma && lma_memspec != 0)
7002     einfo (_("%X%P:%S: section has both a load address and a load region\n"),
7003            NULL);
7004 }
7005
7006 void
7007 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
7008                                      lang_output_section_phdr_list *phdrs,
7009                                      const char *lma_memspec)
7010 {
7011   lang_get_regions (&current_section->region,
7012                     &current_section->lma_region,
7013                     memspec, lma_memspec,
7014                     current_section->load_base != NULL,
7015                     current_section->addr_tree != NULL);
7016
7017   /* If this section has no load region or base, but uses the same
7018      region as the previous section, then propagate the previous
7019      section's load region.  */
7020
7021   if (current_section->lma_region == NULL
7022       && current_section->load_base == NULL
7023       && current_section->addr_tree == NULL
7024       && current_section->region == current_section->prev->region)
7025     current_section->lma_region = current_section->prev->lma_region;
7026
7027   current_section->fill = fill;
7028   current_section->phdrs = phdrs;
7029   pop_stat_ptr ();
7030 }
7031
7032 void
7033 lang_statement_append (lang_statement_list_type *list,
7034                        lang_statement_union_type *element,
7035                        lang_statement_union_type **field)
7036 {
7037   *(list->tail) = element;
7038   list->tail = field;
7039 }
7040
7041 /* Set the output format type.  -oformat overrides scripts.  */
7042
7043 void
7044 lang_add_output_format (const char *format,
7045                         const char *big,
7046                         const char *little,
7047                         int from_script)
7048 {
7049   if (output_target == NULL || !from_script)
7050     {
7051       if (command_line.endian == ENDIAN_BIG
7052           && big != NULL)
7053         format = big;
7054       else if (command_line.endian == ENDIAN_LITTLE
7055                && little != NULL)
7056         format = little;
7057
7058       output_target = format;
7059     }
7060 }
7061
7062 void
7063 lang_add_insert (const char *where, int is_before)
7064 {
7065   lang_insert_statement_type *new_stmt;
7066
7067   new_stmt = new_stat (lang_insert_statement, stat_ptr);
7068   new_stmt->where = where;
7069   new_stmt->is_before = is_before;
7070   saved_script_handle = previous_script_handle;
7071 }
7072
7073 /* Enter a group.  This creates a new lang_group_statement, and sets
7074    stat_ptr to build new statements within the group.  */
7075
7076 void
7077 lang_enter_group (void)
7078 {
7079   lang_group_statement_type *g;
7080
7081   g = new_stat (lang_group_statement, stat_ptr);
7082   lang_list_init (&g->children);
7083   push_stat_ptr (&g->children);
7084 }
7085
7086 /* Leave a group.  This just resets stat_ptr to start writing to the
7087    regular list of statements again.  Note that this will not work if
7088    groups can occur inside anything else which can adjust stat_ptr,
7089    but currently they can't.  */
7090
7091 void
7092 lang_leave_group (void)
7093 {
7094   pop_stat_ptr ();
7095 }
7096
7097 /* Add a new program header.  This is called for each entry in a PHDRS
7098    command in a linker script.  */
7099
7100 void
7101 lang_new_phdr (const char *name,
7102                etree_type *type,
7103                bfd_boolean filehdr,
7104                bfd_boolean phdrs,
7105                etree_type *at,
7106                etree_type *flags)
7107 {
7108   struct lang_phdr *n, **pp;
7109   bfd_boolean hdrs;
7110
7111   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
7112   n->next = NULL;
7113   n->name = name;
7114   n->type = exp_get_value_int (type, 0, "program header type");
7115   n->filehdr = filehdr;
7116   n->phdrs = phdrs;
7117   n->at = at;
7118   n->flags = flags;
7119
7120   hdrs = n->type == 1 && (phdrs || filehdr);
7121
7122   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
7123     if (hdrs
7124         && (*pp)->type == 1
7125         && !((*pp)->filehdr || (*pp)->phdrs))
7126       {
7127         einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported"
7128                  " when prior PT_LOAD headers lack them\n"), NULL);
7129         hdrs = FALSE;
7130       }
7131
7132   *pp = n;
7133 }
7134
7135 /* Record the program header information in the output BFD.  FIXME: We
7136    should not be calling an ELF specific function here.  */
7137
7138 static void
7139 lang_record_phdrs (void)
7140 {
7141   unsigned int alc;
7142   asection **secs;
7143   lang_output_section_phdr_list *last;
7144   struct lang_phdr *l;
7145   lang_output_section_statement_type *os;
7146
7147   alc = 10;
7148   secs = (asection **) xmalloc (alc * sizeof (asection *));
7149   last = NULL;
7150
7151   for (l = lang_phdr_list; l != NULL; l = l->next)
7152     {
7153       unsigned int c;
7154       flagword flags;
7155       bfd_vma at;
7156
7157       c = 0;
7158       for (os = &lang_output_section_statement.head->output_section_statement;
7159            os != NULL;
7160            os = os->next)
7161         {
7162           lang_output_section_phdr_list *pl;
7163
7164           if (os->constraint < 0)
7165             continue;
7166
7167           pl = os->phdrs;
7168           if (pl != NULL)
7169             last = pl;
7170           else
7171             {
7172               if (os->sectype == noload_section
7173                   || os->bfd_section == NULL
7174                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
7175                 continue;
7176
7177               /* Don't add orphans to PT_INTERP header.  */
7178               if (l->type == 3)
7179                 continue;
7180
7181               if (last == NULL)
7182                 {
7183                   lang_output_section_statement_type * tmp_os;
7184
7185                   /* If we have not run across a section with a program
7186                      header assigned to it yet, then scan forwards to find
7187                      one.  This prevents inconsistencies in the linker's
7188                      behaviour when a script has specified just a single
7189                      header and there are sections in that script which are
7190                      not assigned to it, and which occur before the first
7191                      use of that header. See here for more details:
7192                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7193                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7194                     if (tmp_os->phdrs)
7195                       {
7196                         last = tmp_os->phdrs;
7197                         break;
7198                       }
7199                   if (last == NULL)
7200                     einfo (_("%F%P: no sections assigned to phdrs\n"));
7201                 }
7202               pl = last;
7203             }
7204
7205           if (os->bfd_section == NULL)
7206             continue;
7207
7208           for (; pl != NULL; pl = pl->next)
7209             {
7210               if (strcmp (pl->name, l->name) == 0)
7211                 {
7212                   if (c >= alc)
7213                     {
7214                       alc *= 2;
7215                       secs = (asection **) xrealloc (secs,
7216                                                      alc * sizeof (asection *));
7217                     }
7218                   secs[c] = os->bfd_section;
7219                   ++c;
7220                   pl->used = TRUE;
7221                 }
7222             }
7223         }
7224
7225       if (l->flags == NULL)
7226         flags = 0;
7227       else
7228         flags = exp_get_vma (l->flags, 0, "phdr flags");
7229
7230       if (l->at == NULL)
7231         at = 0;
7232       else
7233         at = exp_get_vma (l->at, 0, "phdr load address");
7234
7235       if (! bfd_record_phdr (link_info.output_bfd, l->type,
7236                              l->flags != NULL, flags, l->at != NULL,
7237                              at, l->filehdr, l->phdrs, c, secs))
7238         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7239     }
7240
7241   free (secs);
7242
7243   /* Make sure all the phdr assignments succeeded.  */
7244   for (os = &lang_output_section_statement.head->output_section_statement;
7245        os != NULL;
7246        os = os->next)
7247     {
7248       lang_output_section_phdr_list *pl;
7249
7250       if (os->constraint < 0
7251           || os->bfd_section == NULL)
7252         continue;
7253
7254       for (pl = os->phdrs;
7255            pl != NULL;
7256            pl = pl->next)
7257         if (! pl->used && strcmp (pl->name, "NONE") != 0)
7258           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7259                  os->name, pl->name);
7260     }
7261 }
7262
7263 /* Record a list of sections which may not be cross referenced.  */
7264
7265 void
7266 lang_add_nocrossref (lang_nocrossref_type *l)
7267 {
7268   struct lang_nocrossrefs *n;
7269
7270   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7271   n->next = nocrossref_list;
7272   n->list = l;
7273   nocrossref_list = n;
7274
7275   /* Set notice_all so that we get informed about all symbols.  */
7276   link_info.notice_all = TRUE;
7277 }
7278 \f
7279 /* Overlay handling.  We handle overlays with some static variables.  */
7280
7281 /* The overlay virtual address.  */
7282 static etree_type *overlay_vma;
7283 /* And subsection alignment.  */
7284 static etree_type *overlay_subalign;
7285
7286 /* An expression for the maximum section size seen so far.  */
7287 static etree_type *overlay_max;
7288
7289 /* A list of all the sections in this overlay.  */
7290
7291 struct overlay_list {
7292   struct overlay_list *next;
7293   lang_output_section_statement_type *os;
7294 };
7295
7296 static struct overlay_list *overlay_list;
7297
7298 /* Start handling an overlay.  */
7299
7300 void
7301 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7302 {
7303   /* The grammar should prevent nested overlays from occurring.  */
7304   ASSERT (overlay_vma == NULL
7305           && overlay_subalign == NULL
7306           && overlay_max == NULL);
7307
7308   overlay_vma = vma_expr;
7309   overlay_subalign = subalign;
7310 }
7311
7312 /* Start a section in an overlay.  We handle this by calling
7313    lang_enter_output_section_statement with the correct VMA.
7314    lang_leave_overlay sets up the LMA and memory regions.  */
7315
7316 void
7317 lang_enter_overlay_section (const char *name)
7318 {
7319   struct overlay_list *n;
7320   etree_type *size;
7321
7322   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7323                                        0, overlay_subalign, 0, 0, 0);
7324
7325   /* If this is the first section, then base the VMA of future
7326      sections on this one.  This will work correctly even if `.' is
7327      used in the addresses.  */
7328   if (overlay_list == NULL)
7329     overlay_vma = exp_nameop (ADDR, name);
7330
7331   /* Remember the section.  */
7332   n = (struct overlay_list *) xmalloc (sizeof *n);
7333   n->os = current_section;
7334   n->next = overlay_list;
7335   overlay_list = n;
7336
7337   size = exp_nameop (SIZEOF, name);
7338
7339   /* Arrange to work out the maximum section end address.  */
7340   if (overlay_max == NULL)
7341     overlay_max = size;
7342   else
7343     overlay_max = exp_binop (MAX_K, overlay_max, size);
7344 }
7345
7346 /* Finish a section in an overlay.  There isn't any special to do
7347    here.  */
7348
7349 void
7350 lang_leave_overlay_section (fill_type *fill,
7351                             lang_output_section_phdr_list *phdrs)
7352 {
7353   const char *name;
7354   char *clean, *s2;
7355   const char *s1;
7356   char *buf;
7357
7358   name = current_section->name;
7359
7360   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7361      region and that no load-time region has been specified.  It doesn't
7362      really matter what we say here, since lang_leave_overlay will
7363      override it.  */
7364   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7365
7366   /* Define the magic symbols.  */
7367
7368   clean = (char *) xmalloc (strlen (name) + 1);
7369   s2 = clean;
7370   for (s1 = name; *s1 != '\0'; s1++)
7371     if (ISALNUM (*s1) || *s1 == '_')
7372       *s2++ = *s1;
7373   *s2 = '\0';
7374
7375   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7376   sprintf (buf, "__load_start_%s", clean);
7377   lang_add_assignment (exp_provide (buf,
7378                                     exp_nameop (LOADADDR, name),
7379                                     FALSE));
7380
7381   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7382   sprintf (buf, "__load_stop_%s", clean);
7383   lang_add_assignment (exp_provide (buf,
7384                                     exp_binop ('+',
7385                                                exp_nameop (LOADADDR, name),
7386                                                exp_nameop (SIZEOF, name)),
7387                                     FALSE));
7388
7389   free (clean);
7390 }
7391
7392 /* Finish an overlay.  If there are any overlay wide settings, this
7393    looks through all the sections in the overlay and sets them.  */
7394
7395 void
7396 lang_leave_overlay (etree_type *lma_expr,
7397                     int nocrossrefs,
7398                     fill_type *fill,
7399                     const char *memspec,
7400                     lang_output_section_phdr_list *phdrs,
7401                     const char *lma_memspec)
7402 {
7403   lang_memory_region_type *region;
7404   lang_memory_region_type *lma_region;
7405   struct overlay_list *l;
7406   lang_nocrossref_type *nocrossref;
7407
7408   lang_get_regions (&region, &lma_region,
7409                     memspec, lma_memspec,
7410                     lma_expr != NULL, FALSE);
7411
7412   nocrossref = NULL;
7413
7414   /* After setting the size of the last section, set '.' to end of the
7415      overlay region.  */
7416   if (overlay_list != NULL)
7417     {
7418       overlay_list->os->update_dot = 1;
7419       overlay_list->os->update_dot_tree
7420         = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max), FALSE);
7421     }
7422
7423   l = overlay_list;
7424   while (l != NULL)
7425     {
7426       struct overlay_list *next;
7427
7428       if (fill != NULL && l->os->fill == NULL)
7429         l->os->fill = fill;
7430
7431       l->os->region = region;
7432       l->os->lma_region = lma_region;
7433
7434       /* The first section has the load address specified in the
7435          OVERLAY statement.  The rest are worked out from that.
7436          The base address is not needed (and should be null) if
7437          an LMA region was specified.  */
7438       if (l->next == 0)
7439         {
7440           l->os->load_base = lma_expr;
7441           l->os->sectype = normal_section;
7442         }
7443       if (phdrs != NULL && l->os->phdrs == NULL)
7444         l->os->phdrs = phdrs;
7445
7446       if (nocrossrefs)
7447         {
7448           lang_nocrossref_type *nc;
7449
7450           nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7451           nc->name = l->os->name;
7452           nc->next = nocrossref;
7453           nocrossref = nc;
7454         }
7455
7456       next = l->next;
7457       free (l);
7458       l = next;
7459     }
7460
7461   if (nocrossref != NULL)
7462     lang_add_nocrossref (nocrossref);
7463
7464   overlay_vma = NULL;
7465   overlay_list = NULL;
7466   overlay_max = NULL;
7467 }
7468 \f
7469 /* Version handling.  This is only useful for ELF.  */
7470
7471 /* If PREV is NULL, return first version pattern matching particular symbol.
7472    If PREV is non-NULL, return first version pattern matching particular
7473    symbol after PREV (previously returned by lang_vers_match).  */
7474
7475 static struct bfd_elf_version_expr *
7476 lang_vers_match (struct bfd_elf_version_expr_head *head,
7477                  struct bfd_elf_version_expr *prev,
7478                  const char *sym)
7479 {
7480   const char *c_sym;
7481   const char *cxx_sym = sym;
7482   const char *java_sym = sym;
7483   struct bfd_elf_version_expr *expr = NULL;
7484   enum demangling_styles curr_style;
7485
7486   curr_style = CURRENT_DEMANGLING_STYLE;
7487   cplus_demangle_set_style (no_demangling);
7488   c_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_NO_OPTS);
7489   if (!c_sym)
7490     c_sym = sym;
7491   cplus_demangle_set_style (curr_style);
7492
7493   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7494     {
7495       cxx_sym = bfd_demangle (link_info.output_bfd, sym,
7496                               DMGL_PARAMS | DMGL_ANSI);
7497       if (!cxx_sym)
7498         cxx_sym = sym;
7499     }
7500   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7501     {
7502       java_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_JAVA);
7503       if (!java_sym)
7504         java_sym = sym;
7505     }
7506
7507   if (head->htab && (prev == NULL || prev->literal))
7508     {
7509       struct bfd_elf_version_expr e;
7510
7511       switch (prev ? prev->mask : 0)
7512         {
7513         case 0:
7514           if (head->mask & BFD_ELF_VERSION_C_TYPE)
7515             {
7516               e.pattern = c_sym;
7517               expr = (struct bfd_elf_version_expr *)
7518                   htab_find ((htab_t) head->htab, &e);
7519               while (expr && strcmp (expr->pattern, c_sym) == 0)
7520                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7521                   goto out_ret;
7522                 else
7523                   expr = expr->next;
7524             }
7525           /* Fallthrough */
7526         case BFD_ELF_VERSION_C_TYPE:
7527           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7528             {
7529               e.pattern = cxx_sym;
7530               expr = (struct bfd_elf_version_expr *)
7531                   htab_find ((htab_t) head->htab, &e);
7532               while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7533                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7534                   goto out_ret;
7535                 else
7536                   expr = expr->next;
7537             }
7538           /* Fallthrough */
7539         case BFD_ELF_VERSION_CXX_TYPE:
7540           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7541             {
7542               e.pattern = java_sym;
7543               expr = (struct bfd_elf_version_expr *)
7544                   htab_find ((htab_t) head->htab, &e);
7545               while (expr && strcmp (expr->pattern, java_sym) == 0)
7546                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7547                   goto out_ret;
7548                 else
7549                   expr = expr->next;
7550             }
7551           /* Fallthrough */
7552         default:
7553           break;
7554         }
7555     }
7556
7557   /* Finally, try the wildcards.  */
7558   if (prev == NULL || prev->literal)
7559     expr = head->remaining;
7560   else
7561     expr = prev->next;
7562   for (; expr; expr = expr->next)
7563     {
7564       const char *s;
7565
7566       if (!expr->pattern)
7567         continue;
7568
7569       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7570         break;
7571
7572       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7573         s = java_sym;
7574       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7575         s = cxx_sym;
7576       else
7577         s = c_sym;
7578       if (fnmatch (expr->pattern, s, 0) == 0)
7579         break;
7580     }
7581
7582  out_ret:
7583   if (c_sym != sym)
7584     free ((char *) c_sym);
7585   if (cxx_sym != sym)
7586     free ((char *) cxx_sym);
7587   if (java_sym != sym)
7588     free ((char *) java_sym);
7589   return expr;
7590 }
7591
7592 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7593    return a pointer to the symbol name with any backslash quotes removed.  */
7594
7595 static const char *
7596 realsymbol (const char *pattern)
7597 {
7598   const char *p;
7599   bfd_boolean changed = FALSE, backslash = FALSE;
7600   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7601
7602   for (p = pattern, s = symbol; *p != '\0'; ++p)
7603     {
7604       /* It is a glob pattern only if there is no preceding
7605          backslash.  */
7606       if (backslash)
7607         {
7608           /* Remove the preceding backslash.  */
7609           *(s - 1) = *p;
7610           backslash = FALSE;
7611           changed = TRUE;
7612         }
7613       else
7614         {
7615           if (*p == '?' || *p == '*' || *p == '[')
7616             {
7617               free (symbol);
7618               return NULL;
7619             }
7620
7621           *s++ = *p;
7622           backslash = *p == '\\';
7623         }
7624     }
7625
7626   if (changed)
7627     {
7628       *s = '\0';
7629       return symbol;
7630     }
7631   else
7632     {
7633       free (symbol);
7634       return pattern;
7635     }
7636 }
7637
7638 /* This is called for each variable name or match expression.  NEW_NAME is
7639    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7640    pattern to be matched against symbol names.  */
7641
7642 struct bfd_elf_version_expr *
7643 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7644                        const char *new_name,
7645                        const char *lang,
7646                        bfd_boolean literal_p)
7647 {
7648   struct bfd_elf_version_expr *ret;
7649
7650   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7651   ret->next = orig;
7652   ret->symver = 0;
7653   ret->script = 0;
7654   ret->literal = TRUE;
7655   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7656   if (ret->pattern == NULL)
7657     {
7658       ret->pattern = new_name;
7659       ret->literal = FALSE;
7660     }
7661
7662   if (lang == NULL || strcasecmp (lang, "C") == 0)
7663     ret->mask = BFD_ELF_VERSION_C_TYPE;
7664   else if (strcasecmp (lang, "C++") == 0)
7665     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7666   else if (strcasecmp (lang, "Java") == 0)
7667     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7668   else
7669     {
7670       einfo (_("%X%P: unknown language `%s' in version information\n"),
7671              lang);
7672       ret->mask = BFD_ELF_VERSION_C_TYPE;
7673     }
7674
7675   return ldemul_new_vers_pattern (ret);
7676 }
7677
7678 /* This is called for each set of variable names and match
7679    expressions.  */
7680
7681 struct bfd_elf_version_tree *
7682 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7683                     struct bfd_elf_version_expr *locals)
7684 {
7685   struct bfd_elf_version_tree *ret;
7686
7687   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7688   ret->globals.list = globals;
7689   ret->locals.list = locals;
7690   ret->match = lang_vers_match;
7691   ret->name_indx = (unsigned int) -1;
7692   return ret;
7693 }
7694
7695 /* This static variable keeps track of version indices.  */
7696
7697 static int version_index;
7698
7699 static hashval_t
7700 version_expr_head_hash (const void *p)
7701 {
7702   const struct bfd_elf_version_expr *e =
7703       (const struct bfd_elf_version_expr *) p;
7704
7705   return htab_hash_string (e->pattern);
7706 }
7707
7708 static int
7709 version_expr_head_eq (const void *p1, const void *p2)
7710 {
7711   const struct bfd_elf_version_expr *e1 =
7712       (const struct bfd_elf_version_expr *) p1;
7713   const struct bfd_elf_version_expr *e2 =
7714       (const struct bfd_elf_version_expr *) p2;
7715
7716   return strcmp (e1->pattern, e2->pattern) == 0;
7717 }
7718
7719 static void
7720 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7721 {
7722   size_t count = 0;
7723   struct bfd_elf_version_expr *e, *next;
7724   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7725
7726   for (e = head->list; e; e = e->next)
7727     {
7728       if (e->literal)
7729         count++;
7730       head->mask |= e->mask;
7731     }
7732
7733   if (count)
7734     {
7735       head->htab = htab_create (count * 2, version_expr_head_hash,
7736                                 version_expr_head_eq, NULL);
7737       list_loc = &head->list;
7738       remaining_loc = &head->remaining;
7739       for (e = head->list; e; e = next)
7740         {
7741           next = e->next;
7742           if (!e->literal)
7743             {
7744               *remaining_loc = e;
7745               remaining_loc = &e->next;
7746             }
7747           else
7748             {
7749               void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7750
7751               if (*loc)
7752                 {
7753                   struct bfd_elf_version_expr *e1, *last;
7754
7755                   e1 = (struct bfd_elf_version_expr *) *loc;
7756                   last = NULL;
7757                   do
7758                     {
7759                       if (e1->mask == e->mask)
7760                         {
7761                           last = NULL;
7762                           break;
7763                         }
7764                       last = e1;
7765                       e1 = e1->next;
7766                     }
7767                   while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7768
7769                   if (last == NULL)
7770                     {
7771                       /* This is a duplicate.  */
7772                       /* FIXME: Memory leak.  Sometimes pattern is not
7773                          xmalloced alone, but in larger chunk of memory.  */
7774                       /* free (e->pattern); */
7775                       free (e);
7776                     }
7777                   else
7778                     {
7779                       e->next = last->next;
7780                       last->next = e;
7781                     }
7782                 }
7783               else
7784                 {
7785                   *loc = e;
7786                   *list_loc = e;
7787                   list_loc = &e->next;
7788                 }
7789             }
7790         }
7791       *remaining_loc = NULL;
7792       *list_loc = head->remaining;
7793     }
7794   else
7795     head->remaining = head->list;
7796 }
7797
7798 /* This is called when we know the name and dependencies of the
7799    version.  */
7800
7801 void
7802 lang_register_vers_node (const char *name,
7803                          struct bfd_elf_version_tree *version,
7804                          struct bfd_elf_version_deps *deps)
7805 {
7806   struct bfd_elf_version_tree *t, **pp;
7807   struct bfd_elf_version_expr *e1;
7808
7809   if (name == NULL)
7810     name = "";
7811
7812   if (link_info.version_info != NULL
7813       && (name[0] == '\0' || link_info.version_info->name[0] == '\0'))
7814     {
7815       einfo (_("%X%P: anonymous version tag cannot be combined"
7816                " with other version tags\n"));
7817       free (version);
7818       return;
7819     }
7820
7821   /* Make sure this node has a unique name.  */
7822   for (t = link_info.version_info; t != NULL; t = t->next)
7823     if (strcmp (t->name, name) == 0)
7824       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7825
7826   lang_finalize_version_expr_head (&version->globals);
7827   lang_finalize_version_expr_head (&version->locals);
7828
7829   /* Check the global and local match names, and make sure there
7830      aren't any duplicates.  */
7831
7832   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7833     {
7834       for (t = link_info.version_info; t != NULL; t = t->next)
7835         {
7836           struct bfd_elf_version_expr *e2;
7837
7838           if (t->locals.htab && e1->literal)
7839             {
7840               e2 = (struct bfd_elf_version_expr *)
7841                   htab_find ((htab_t) t->locals.htab, e1);
7842               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7843                 {
7844                   if (e1->mask == e2->mask)
7845                     einfo (_("%X%P: duplicate expression `%s'"
7846                              " in version information\n"), e1->pattern);
7847                   e2 = e2->next;
7848                 }
7849             }
7850           else if (!e1->literal)
7851             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7852               if (strcmp (e1->pattern, e2->pattern) == 0
7853                   && e1->mask == e2->mask)
7854                 einfo (_("%X%P: duplicate expression `%s'"
7855                          " in version information\n"), e1->pattern);
7856         }
7857     }
7858
7859   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7860     {
7861       for (t = link_info.version_info; t != NULL; t = t->next)
7862         {
7863           struct bfd_elf_version_expr *e2;
7864
7865           if (t->globals.htab && e1->literal)
7866             {
7867               e2 = (struct bfd_elf_version_expr *)
7868                   htab_find ((htab_t) t->globals.htab, e1);
7869               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7870                 {
7871                   if (e1->mask == e2->mask)
7872                     einfo (_("%X%P: duplicate expression `%s'"
7873                              " in version information\n"),
7874                            e1->pattern);
7875                   e2 = e2->next;
7876                 }
7877             }
7878           else if (!e1->literal)
7879             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7880               if (strcmp (e1->pattern, e2->pattern) == 0
7881                   && e1->mask == e2->mask)
7882                 einfo (_("%X%P: duplicate expression `%s'"
7883                          " in version information\n"), e1->pattern);
7884         }
7885     }
7886
7887   version->deps = deps;
7888   version->name = name;
7889   if (name[0] != '\0')
7890     {
7891       ++version_index;
7892       version->vernum = version_index;
7893     }
7894   else
7895     version->vernum = 0;
7896
7897   for (pp = &link_info.version_info; *pp != NULL; pp = &(*pp)->next)
7898     ;
7899   *pp = version;
7900 }
7901
7902 /* This is called when we see a version dependency.  */
7903
7904 struct bfd_elf_version_deps *
7905 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7906 {
7907   struct bfd_elf_version_deps *ret;
7908   struct bfd_elf_version_tree *t;
7909
7910   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7911   ret->next = list;
7912
7913   for (t = link_info.version_info; t != NULL; t = t->next)
7914     {
7915       if (strcmp (t->name, name) == 0)
7916         {
7917           ret->version_needed = t;
7918           return ret;
7919         }
7920     }
7921
7922   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7923
7924   ret->version_needed = NULL;
7925   return ret;
7926 }
7927
7928 static void
7929 lang_do_version_exports_section (void)
7930 {
7931   struct bfd_elf_version_expr *greg = NULL, *lreg;
7932
7933   LANG_FOR_EACH_INPUT_STATEMENT (is)
7934     {
7935       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7936       char *contents, *p;
7937       bfd_size_type len;
7938
7939       if (sec == NULL)
7940         continue;
7941
7942       len = sec->size;
7943       contents = (char *) xmalloc (len);
7944       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7945         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7946
7947       p = contents;
7948       while (p < contents + len)
7949         {
7950           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7951           p = strchr (p, '\0') + 1;
7952         }
7953
7954       /* Do not free the contents, as we used them creating the regex.  */
7955
7956       /* Do not include this section in the link.  */
7957       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7958     }
7959
7960   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7961   lang_register_vers_node (command_line.version_exports_section,
7962                            lang_new_vers_node (greg, lreg), NULL);
7963 }
7964
7965 void
7966 lang_add_unique (const char *name)
7967 {
7968   struct unique_sections *ent;
7969
7970   for (ent = unique_section_list; ent; ent = ent->next)
7971     if (strcmp (ent->name, name) == 0)
7972       return;
7973
7974   ent = (struct unique_sections *) xmalloc (sizeof *ent);
7975   ent->name = xstrdup (name);
7976   ent->next = unique_section_list;
7977   unique_section_list = ent;
7978 }
7979
7980 /* Append the list of dynamic symbols to the existing one.  */
7981
7982 void
7983 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7984 {
7985   if (link_info.dynamic_list)
7986     {
7987       struct bfd_elf_version_expr *tail;
7988       for (tail = dynamic; tail->next != NULL; tail = tail->next)
7989         ;
7990       tail->next = link_info.dynamic_list->head.list;
7991       link_info.dynamic_list->head.list = dynamic;
7992     }
7993   else
7994     {
7995       struct bfd_elf_dynamic_list *d;
7996
7997       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
7998       d->head.list = dynamic;
7999       d->match = lang_vers_match;
8000       link_info.dynamic_list = d;
8001     }
8002 }
8003
8004 /* Append the list of C++ typeinfo dynamic symbols to the existing
8005    one.  */
8006
8007 void
8008 lang_append_dynamic_list_cpp_typeinfo (void)
8009 {
8010   const char * symbols [] =
8011     {
8012       "typeinfo name for*",
8013       "typeinfo for*"
8014     };
8015   struct bfd_elf_version_expr *dynamic = NULL;
8016   unsigned int i;
8017
8018   for (i = 0; i < ARRAY_SIZE (symbols); i++)
8019     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8020                                      FALSE);
8021
8022   lang_append_dynamic_list (dynamic);
8023 }
8024
8025 /* Append the list of C++ operator new and delete dynamic symbols to the
8026    existing one.  */
8027
8028 void
8029 lang_append_dynamic_list_cpp_new (void)
8030 {
8031   const char * symbols [] =
8032     {
8033       "operator new*",
8034       "operator delete*"
8035     };
8036   struct bfd_elf_version_expr *dynamic = NULL;
8037   unsigned int i;
8038
8039   for (i = 0; i < ARRAY_SIZE (symbols); i++)
8040     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8041                                      FALSE);
8042
8043   lang_append_dynamic_list (dynamic);
8044 }
8045
8046 /* Scan a space and/or comma separated string of features.  */
8047
8048 void
8049 lang_ld_feature (char *str)
8050 {
8051   char *p, *q;
8052
8053   p = str;
8054   while (*p)
8055     {
8056       char sep;
8057       while (*p == ',' || ISSPACE (*p))
8058         ++p;
8059       if (!*p)
8060         break;
8061       q = p + 1;
8062       while (*q && *q != ',' && !ISSPACE (*q))
8063         ++q;
8064       sep = *q;
8065       *q = 0;
8066       if (strcasecmp (p, "SANE_EXPR") == 0)
8067         config.sane_expr = TRUE;
8068       else
8069         einfo (_("%X%P: unknown feature `%s'\n"), p);
8070       *q = sep;
8071       p = q;
8072     }
8073 }