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