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