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