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