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