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