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