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