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