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