09bfd2610cc1b05364d0701c13a5ef1ba710f6de
[external/binutils.git] / ld / ldlang.c
1 /* Linker command language support.
2    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6    This file is part of the GNU Binutils.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21    MA 02110-1301, USA.  */
22
23 #include "sysdep.h"
24 #include "bfd.h"
25 #include "libiberty.h"
26 #include "safe-ctype.h"
27 #include "obstack.h"
28 #include "bfdlink.h"
29
30 #include "ld.h"
31 #include "ldmain.h"
32 #include "ldexp.h"
33 #include "ldlang.h"
34 #include <ldgram.h>
35 #include "ldlex.h"
36 #include "ldmisc.h"
37 #include "ldctor.h"
38 #include "ldfile.h"
39 #include "ldemul.h"
40 #include "fnmatch.h"
41 #include "demangle.h"
42 #include "hashtab.h"
43
44 #ifndef offsetof
45 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
46 #endif
47
48 /* Locals variables.  */
49 static struct obstack stat_obstack;
50 static struct obstack map_obstack;
51
52 #define obstack_chunk_alloc xmalloc
53 #define obstack_chunk_free free
54 static const char *startup_file;
55 static const char *entry_symbol_default = "start";
56 static bfd_boolean placed_commons = FALSE;
57 static bfd_boolean stripped_excluded_sections = FALSE;
58 static lang_output_section_statement_type *default_common_section;
59 static bfd_boolean map_option_f;
60 static bfd_vma print_dot;
61 static lang_input_statement_type *first_file;
62 static const char *current_target;
63 static lang_statement_list_type statement_list;
64 static struct bfd_hash_table lang_definedness_table;
65 static lang_statement_list_type *stat_save[10];
66 static lang_statement_list_type **stat_save_ptr = &stat_save[0];
67 static struct unique_sections *unique_section_list;
68 static bfd_boolean ldlang_sysrooted_script = FALSE;
69
70 /* Forward declarations.  */
71 static void exp_init_os (etree_type *);
72 static void init_map_userdata (bfd *, asection *, void *);
73 static lang_input_statement_type *lookup_name (const char *);
74 static struct bfd_hash_entry *lang_definedness_newfunc
75  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
76 static void insert_undefined (const char *);
77 static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
78 static void print_statement (lang_statement_union_type *,
79                              lang_output_section_statement_type *);
80 static void print_statement_list (lang_statement_union_type *,
81                                   lang_output_section_statement_type *);
82 static void print_statements (void);
83 static void print_input_section (asection *, bfd_boolean);
84 static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
85 static void lang_record_phdrs (void);
86 static void lang_do_version_exports_section (void);
87 static void lang_finalize_version_expr_head
88   (struct bfd_elf_version_expr_head *);
89
90 /* Exported variables.  */
91 const char *output_target;
92 lang_output_section_statement_type *abs_output_section;
93 lang_statement_list_type lang_output_section_statement;
94 lang_statement_list_type *stat_ptr = &statement_list;
95 lang_statement_list_type file_chain = { NULL, NULL };
96 lang_statement_list_type input_file_chain;
97 struct bfd_sym_chain entry_symbol = { NULL, NULL };
98 const char *entry_section = ".text";
99 bfd_boolean entry_from_cmdline;
100 bfd_boolean lang_has_input_file = FALSE;
101 bfd_boolean had_output_filename = FALSE;
102 bfd_boolean lang_float_flag = FALSE;
103 bfd_boolean delete_output_file_on_failure = FALSE;
104 struct lang_phdr *lang_phdr_list;
105 struct lang_nocrossrefs *nocrossref_list;
106 bfd_boolean missing_file = FALSE;
107
108  /* Functions that traverse the linker script and might evaluate
109     DEFINED() need to increment this.  */
110 int lang_statement_iteration = 0;
111
112 etree_type *base; /* Relocation base - or null */
113
114 /* Return TRUE if the PATTERN argument is a wildcard pattern.
115    Although backslashes are treated specially if a pattern contains
116    wildcards, we do not consider the mere presence of a backslash to
117    be enough to cause the pattern to be treated as a wildcard.
118    That lets us handle DOS filenames more naturally.  */
119 #define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
120
121 #define new_stat(x, y) \
122   (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
123
124 #define outside_section_address(q) \
125   ((q)->output_offset + (q)->output_section->vma)
126
127 #define outside_symbol_address(q) \
128   ((q)->value + outside_section_address (q->section))
129
130 #define SECTION_NAME_MAP_LENGTH (16)
131
132 void *
133 stat_alloc (size_t size)
134 {
135   return obstack_alloc (&stat_obstack, size);
136 }
137
138 static int
139 name_match (const char *pattern, const char *name)
140 {
141   if (wildcardp (pattern))
142     return fnmatch (pattern, name, 0);
143   return strcmp (pattern, name);
144 }
145
146 /* If PATTERN is of the form archive:file, return a pointer to the
147    separator.  If not, return NULL.  */
148
149 static char *
150 archive_path (const char *pattern)
151 {
152   char *p = NULL;
153
154   if (link_info.path_separator == 0)
155     return p;
156
157   p = strchr (pattern, link_info.path_separator);
158 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
159   if (p == NULL || link_info.path_separator != ':')
160     return p;
161
162   /* Assume a match on the second char is part of drive specifier,
163      as in "c:\silly.dos".  */
164   if (p == pattern + 1 && ISALPHA (*pattern))
165     p = strchr (p + 1, link_info.path_separator);
166 #endif
167   return p;
168 }
169
170 /* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
171    return whether F matches FILE_SPEC.  */
172
173 static bfd_boolean
174 input_statement_is_archive_path (const char *file_spec, char *sep,
175                                  lang_input_statement_type *f)
176 {
177   bfd_boolean match = FALSE;
178
179   if ((*(sep + 1) == 0
180        || name_match (sep + 1, f->filename) == 0)
181       && ((sep != file_spec)
182           == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
183     {
184       match = TRUE;
185
186       if (sep != file_spec)
187         {
188           const char *aname = f->the_bfd->my_archive->filename;
189           *sep = 0;
190           match = name_match (file_spec, aname) == 0;
191           *sep = link_info.path_separator;
192         }
193     }
194   return match;
195 }
196
197 static bfd_boolean
198 unique_section_p (const asection *sec,
199                   const lang_output_section_statement_type *os)
200 {
201   struct unique_sections *unam;
202   const char *secnam;
203
204   if (link_info.relocatable
205       && sec->owner != NULL
206       && bfd_is_group_section (sec->owner, sec))
207     return !(os != NULL
208              && strcmp (os->name, DISCARD_SECTION_NAME) == 0);
209
210   secnam = sec->name;
211   for (unam = unique_section_list; unam; unam = unam->next)
212     if (name_match (unam->name, secnam) == 0)
213       return TRUE;
214
215   return FALSE;
216 }
217
218 /* Generic traversal routines for finding matching sections.  */
219
220 /* Try processing a section against a wildcard.  This just calls
221    the callback unless the filename exclusion list is present
222    and excludes the file.  It's hardly ever present so this
223    function is very fast.  */
224
225 static void
226 walk_wild_consider_section (lang_wild_statement_type *ptr,
227                             lang_input_statement_type *file,
228                             asection *s,
229                             struct wildcard_list *sec,
230                             callback_t callback,
231                             void *data)
232 {
233   struct name_list *list_tmp;
234
235   /* Don't process sections from files which were excluded.  */
236   for (list_tmp = sec->spec.exclude_name_list;
237        list_tmp;
238        list_tmp = list_tmp->next)
239     {
240       char *p = archive_path (list_tmp->name);
241
242       if (p != NULL)
243         {
244           if (input_statement_is_archive_path (list_tmp->name, p, file))
245             return;
246         }
247
248       else if (name_match (list_tmp->name, file->filename) == 0)
249         return;
250
251       /* FIXME: Perhaps remove the following at some stage?  Matching
252          unadorned archives like this was never documented and has
253          been superceded by the archive:path syntax.  */
254       else if (file->the_bfd != NULL
255                && file->the_bfd->my_archive != NULL
256                && name_match (list_tmp->name,
257                               file->the_bfd->my_archive->filename) == 0)
258         return;
259     }
260
261   (*callback) (ptr, sec, s, file, data);
262 }
263
264 /* Lowest common denominator routine that can handle everything correctly,
265    but slowly.  */
266
267 static void
268 walk_wild_section_general (lang_wild_statement_type *ptr,
269                            lang_input_statement_type *file,
270                            callback_t callback,
271                            void *data)
272 {
273   asection *s;
274   struct wildcard_list *sec;
275
276   for (s = file->the_bfd->sections; s != NULL; s = s->next)
277     {
278       sec = ptr->section_list;
279       if (sec == NULL)
280         (*callback) (ptr, sec, s, file, data);
281
282       while (sec != NULL)
283         {
284           bfd_boolean skip = FALSE;
285
286           if (sec->spec.name != NULL)
287             {
288               const char *sname = bfd_get_section_name (file->the_bfd, s);
289
290               skip = name_match (sec->spec.name, sname) != 0;
291             }
292
293           if (!skip)
294             walk_wild_consider_section (ptr, file, s, sec, callback, data);
295
296           sec = sec->next;
297         }
298     }
299 }
300
301 /* Routines to find a single section given its name.  If there's more
302    than one section with that name, we report that.  */
303
304 typedef struct
305 {
306   asection *found_section;
307   bfd_boolean multiple_sections_found;
308 } section_iterator_callback_data;
309
310 static bfd_boolean
311 section_iterator_callback (bfd *abfd ATTRIBUTE_UNUSED, asection *s, void *data)
312 {
313   section_iterator_callback_data *d = (section_iterator_callback_data *) data;
314
315   if (d->found_section != NULL)
316     {
317       d->multiple_sections_found = TRUE;
318       return TRUE;
319     }
320
321   d->found_section = s;
322   return FALSE;
323 }
324
325 static asection *
326 find_section (lang_input_statement_type *file,
327               struct wildcard_list *sec,
328               bfd_boolean *multiple_sections_found)
329 {
330   section_iterator_callback_data cb_data = { NULL, FALSE };
331
332   bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
333                               section_iterator_callback, &cb_data);
334   *multiple_sections_found = cb_data.multiple_sections_found;
335   return cb_data.found_section;
336 }
337
338 /* Code for handling simple wildcards without going through fnmatch,
339    which can be expensive because of charset translations etc.  */
340
341 /* A simple wild is a literal string followed by a single '*',
342    where the literal part is at least 4 characters long.  */
343
344 static bfd_boolean
345 is_simple_wild (const char *name)
346 {
347   size_t len = strcspn (name, "*?[");
348   return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
349 }
350
351 static bfd_boolean
352 match_simple_wild (const char *pattern, const char *name)
353 {
354   /* The first four characters of the pattern are guaranteed valid
355      non-wildcard characters.  So we can go faster.  */
356   if (pattern[0] != name[0] || pattern[1] != name[1]
357       || pattern[2] != name[2] || pattern[3] != name[3])
358     return FALSE;
359
360   pattern += 4;
361   name += 4;
362   while (*pattern != '*')
363     if (*name++ != *pattern++)
364       return FALSE;
365
366   return TRUE;
367 }
368
369 /* Compare sections ASEC and BSEC according to SORT.  */
370
371 static int
372 compare_section (sort_type sort, asection *asec, asection *bsec)
373 {
374   int ret;
375
376   switch (sort)
377     {
378     default:
379       abort ();
380
381     case by_alignment_name:
382       ret = (bfd_section_alignment (bsec->owner, bsec)
383              - bfd_section_alignment (asec->owner, asec));
384       if (ret)
385         break;
386       /* Fall through.  */
387
388     case by_name:
389       ret = strcmp (bfd_get_section_name (asec->owner, asec),
390                     bfd_get_section_name (bsec->owner, bsec));
391       break;
392
393     case by_name_alignment:
394       ret = strcmp (bfd_get_section_name (asec->owner, asec),
395                     bfd_get_section_name (bsec->owner, bsec));
396       if (ret)
397         break;
398       /* Fall through.  */
399
400     case by_alignment:
401       ret = (bfd_section_alignment (bsec->owner, bsec)
402              - bfd_section_alignment (asec->owner, asec));
403       break;
404     }
405
406   return ret;
407 }
408
409 /* Build a Binary Search Tree to sort sections, unlike insertion sort
410    used in wild_sort(). BST is considerably faster if the number of
411    of sections are large.  */
412
413 static lang_section_bst_type **
414 wild_sort_fast (lang_wild_statement_type *wild,
415                 struct wildcard_list *sec,
416                 lang_input_statement_type *file ATTRIBUTE_UNUSED,
417                 asection *section)
418 {
419   lang_section_bst_type **tree;
420
421   tree = &wild->tree;
422   if (!wild->filenames_sorted
423       && (sec == NULL || sec->spec.sorted == none))
424     {
425       /* Append at the right end of tree.  */
426       while (*tree)
427         tree = &((*tree)->right);
428       return tree;
429     }
430
431   while (*tree)
432     {
433       /* Find the correct node to append this section.  */
434       if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
435         tree = &((*tree)->left);
436       else
437         tree = &((*tree)->right);
438     }
439
440   return tree;
441 }
442
443 /* Use wild_sort_fast to build a BST to sort sections.  */
444
445 static void
446 output_section_callback_fast (lang_wild_statement_type *ptr,
447                               struct wildcard_list *sec,
448                               asection *section,
449                               lang_input_statement_type *file,
450                               void *output)
451 {
452   lang_section_bst_type *node;
453   lang_section_bst_type **tree;
454   lang_output_section_statement_type *os;
455
456   os = (lang_output_section_statement_type *) output;
457
458   if (unique_section_p (section, os))
459     return;
460
461   node = (lang_section_bst_type *) xmalloc (sizeof (lang_section_bst_type));
462   node->left = 0;
463   node->right = 0;
464   node->section = section;
465
466   tree = wild_sort_fast (ptr, sec, file, section);
467   if (tree != NULL)
468     *tree = node;
469 }
470
471 /* Convert a sorted sections' BST back to list form.  */
472
473 static void
474 output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
475                                       lang_section_bst_type *tree,
476                                       void *output)
477 {
478   if (tree->left)
479     output_section_callback_tree_to_list (ptr, tree->left, output);
480
481   lang_add_section (&ptr->children, tree->section,
482                     (lang_output_section_statement_type *) output);
483
484   if (tree->right)
485     output_section_callback_tree_to_list (ptr, tree->right, output);
486
487   free (tree);
488 }
489
490 /* Specialized, optimized routines for handling different kinds of
491    wildcards */
492
493 static void
494 walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
495                                 lang_input_statement_type *file,
496                                 callback_t callback,
497                                 void *data)
498 {
499   /* We can just do a hash lookup for the section with the right name.
500      But if that lookup discovers more than one section with the name
501      (should be rare), we fall back to the general algorithm because
502      we would otherwise have to sort the sections to make sure they
503      get processed in the bfd's order.  */
504   bfd_boolean multiple_sections_found;
505   struct wildcard_list *sec0 = ptr->handler_data[0];
506   asection *s0 = find_section (file, sec0, &multiple_sections_found);
507
508   if (multiple_sections_found)
509     walk_wild_section_general (ptr, file, callback, data);
510   else if (s0)
511     walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
512 }
513
514 static void
515 walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
516                                 lang_input_statement_type *file,
517                                 callback_t callback,
518                                 void *data)
519 {
520   asection *s;
521   struct wildcard_list *wildsec0 = ptr->handler_data[0];
522
523   for (s = file->the_bfd->sections; s != NULL; s = s->next)
524     {
525       const char *sname = bfd_get_section_name (file->the_bfd, s);
526       bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
527
528       if (!skip)
529         walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
530     }
531 }
532
533 static void
534 walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
535                                 lang_input_statement_type *file,
536                                 callback_t callback,
537                                 void *data)
538 {
539   asection *s;
540   struct wildcard_list *sec0 = ptr->handler_data[0];
541   struct wildcard_list *wildsec1 = ptr->handler_data[1];
542   bfd_boolean multiple_sections_found;
543   asection *s0 = find_section (file, sec0, &multiple_sections_found);
544
545   if (multiple_sections_found)
546     {
547       walk_wild_section_general (ptr, file, callback, data);
548       return;
549     }
550
551   /* Note that if the section was not found, s0 is NULL and
552      we'll simply never succeed the s == s0 test below.  */
553   for (s = file->the_bfd->sections; s != NULL; s = s->next)
554     {
555       /* Recall that in this code path, a section cannot satisfy more
556          than one spec, so if s == s0 then it cannot match
557          wildspec1.  */
558       if (s == s0)
559         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
560       else
561         {
562           const char *sname = bfd_get_section_name (file->the_bfd, s);
563           bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
564
565           if (!skip)
566             walk_wild_consider_section (ptr, file, s, wildsec1, callback,
567                                         data);
568         }
569     }
570 }
571
572 static void
573 walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
574                                 lang_input_statement_type *file,
575                                 callback_t callback,
576                                 void *data)
577 {
578   asection *s;
579   struct wildcard_list *sec0 = ptr->handler_data[0];
580   struct wildcard_list *wildsec1 = ptr->handler_data[1];
581   struct wildcard_list *wildsec2 = ptr->handler_data[2];
582   bfd_boolean multiple_sections_found;
583   asection *s0 = find_section (file, sec0, &multiple_sections_found);
584
585   if (multiple_sections_found)
586     {
587       walk_wild_section_general (ptr, file, callback, data);
588       return;
589     }
590
591   for (s = file->the_bfd->sections; s != NULL; s = s->next)
592     {
593       if (s == s0)
594         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
595       else
596         {
597           const char *sname = bfd_get_section_name (file->the_bfd, s);
598           bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
599
600           if (!skip)
601             walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
602           else
603             {
604               skip = !match_simple_wild (wildsec2->spec.name, sname);
605               if (!skip)
606                 walk_wild_consider_section (ptr, file, s, wildsec2, callback,
607                                             data);
608             }
609         }
610     }
611 }
612
613 static void
614 walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
615                                 lang_input_statement_type *file,
616                                 callback_t callback,
617                                 void *data)
618 {
619   asection *s;
620   struct wildcard_list *sec0 = ptr->handler_data[0];
621   struct wildcard_list *sec1 = ptr->handler_data[1];
622   struct wildcard_list *wildsec2 = ptr->handler_data[2];
623   struct wildcard_list *wildsec3 = ptr->handler_data[3];
624   bfd_boolean multiple_sections_found;
625   asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
626
627   if (multiple_sections_found)
628     {
629       walk_wild_section_general (ptr, file, callback, data);
630       return;
631     }
632
633   s1 = find_section (file, sec1, &multiple_sections_found);
634   if (multiple_sections_found)
635     {
636       walk_wild_section_general (ptr, file, callback, data);
637       return;
638     }
639
640   for (s = file->the_bfd->sections; s != NULL; s = s->next)
641     {
642       if (s == s0)
643         walk_wild_consider_section (ptr, file, s, sec0, callback, data);
644       else
645         if (s == s1)
646           walk_wild_consider_section (ptr, file, s, sec1, callback, data);
647         else
648           {
649             const char *sname = bfd_get_section_name (file->the_bfd, s);
650             bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
651                                                    sname);
652
653             if (!skip)
654               walk_wild_consider_section (ptr, file, s, wildsec2, callback,
655                                           data);
656             else
657               {
658                 skip = !match_simple_wild (wildsec3->spec.name, sname);
659                 if (!skip)
660                   walk_wild_consider_section (ptr, file, s, wildsec3,
661                                               callback, data);
662               }
663           }
664     }
665 }
666
667 static void
668 walk_wild_section (lang_wild_statement_type *ptr,
669                    lang_input_statement_type *file,
670                    callback_t callback,
671                    void *data)
672 {
673   if (file->just_syms_flag)
674     return;
675
676   (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
677 }
678
679 /* Returns TRUE when name1 is a wildcard spec that might match
680    something name2 can match.  We're conservative: we return FALSE
681    only if the prefixes of name1 and name2 are different up to the
682    first wildcard character.  */
683
684 static bfd_boolean
685 wild_spec_can_overlap (const char *name1, const char *name2)
686 {
687   size_t prefix1_len = strcspn (name1, "?*[");
688   size_t prefix2_len = strcspn (name2, "?*[");
689   size_t min_prefix_len;
690
691   /* Note that if there is no wildcard character, then we treat the
692      terminating 0 as part of the prefix.  Thus ".text" won't match
693      ".text." or ".text.*", for example.  */
694   if (name1[prefix1_len] == '\0')
695     prefix1_len++;
696   if (name2[prefix2_len] == '\0')
697     prefix2_len++;
698
699   min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
700
701   return memcmp (name1, name2, min_prefix_len) == 0;
702 }
703
704 /* Select specialized code to handle various kinds of wildcard
705    statements.  */
706
707 static void
708 analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
709 {
710   int sec_count = 0;
711   int wild_name_count = 0;
712   struct wildcard_list *sec;
713   int signature;
714   int data_counter;
715
716   ptr->walk_wild_section_handler = walk_wild_section_general;
717   ptr->handler_data[0] = NULL;
718   ptr->handler_data[1] = NULL;
719   ptr->handler_data[2] = NULL;
720   ptr->handler_data[3] = NULL;
721   ptr->tree = NULL;
722
723   /* Count how many wildcard_specs there are, and how many of those
724      actually use wildcards in the name.  Also, bail out if any of the
725      wildcard names are NULL. (Can this actually happen?
726      walk_wild_section used to test for it.)  And bail out if any
727      of the wildcards are more complex than a simple string
728      ending in a single '*'.  */
729   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
730     {
731       ++sec_count;
732       if (sec->spec.name == NULL)
733         return;
734       if (wildcardp (sec->spec.name))
735         {
736           ++wild_name_count;
737           if (!is_simple_wild (sec->spec.name))
738             return;
739         }
740     }
741
742   /* The zero-spec case would be easy to optimize but it doesn't
743      happen in practice.  Likewise, more than 4 specs doesn't
744      happen in practice.  */
745   if (sec_count == 0 || sec_count > 4)
746     return;
747
748   /* Check that no two specs can match the same section.  */
749   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
750     {
751       struct wildcard_list *sec2;
752       for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
753         {
754           if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
755             return;
756         }
757     }
758
759   signature = (sec_count << 8) + wild_name_count;
760   switch (signature)
761     {
762     case 0x0100:
763       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
764       break;
765     case 0x0101:
766       ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
767       break;
768     case 0x0201:
769       ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
770       break;
771     case 0x0302:
772       ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
773       break;
774     case 0x0402:
775       ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
776       break;
777     default:
778       return;
779     }
780
781   /* Now fill the data array with pointers to the specs, first the
782      specs with non-wildcard names, then the specs with wildcard
783      names.  It's OK to process the specs in different order from the
784      given order, because we've already determined that no section
785      will match more than one spec.  */
786   data_counter = 0;
787   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
788     if (!wildcardp (sec->spec.name))
789       ptr->handler_data[data_counter++] = sec;
790   for (sec = ptr->section_list; sec != NULL; sec = sec->next)
791     if (wildcardp (sec->spec.name))
792       ptr->handler_data[data_counter++] = sec;
793 }
794
795 /* Handle a wild statement for a single file F.  */
796
797 static void
798 walk_wild_file (lang_wild_statement_type *s,
799                 lang_input_statement_type *f,
800                 callback_t callback,
801                 void *data)
802 {
803   if (f->the_bfd == NULL
804       || ! bfd_check_format (f->the_bfd, bfd_archive))
805     walk_wild_section (s, f, callback, data);
806   else
807     {
808       bfd *member;
809
810       /* This is an archive file.  We must map each member of the
811          archive separately.  */
812       member = bfd_openr_next_archived_file (f->the_bfd, NULL);
813       while (member != NULL)
814         {
815           /* When lookup_name is called, it will call the add_symbols
816              entry point for the archive.  For each element of the
817              archive which is included, BFD will call ldlang_add_file,
818              which will set the usrdata field of the member to the
819              lang_input_statement.  */
820           if (member->usrdata != NULL)
821             {
822               walk_wild_section (s,
823                                  (lang_input_statement_type *) member->usrdata,
824                                  callback, data);
825             }
826
827           member = bfd_openr_next_archived_file (f->the_bfd, member);
828         }
829     }
830 }
831
832 static void
833 walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
834 {
835   const char *file_spec = s->filename;
836   char *p;
837
838   if (file_spec == NULL)
839     {
840       /* Perform the iteration over all files in the list.  */
841       LANG_FOR_EACH_INPUT_STATEMENT (f)
842         {
843           walk_wild_file (s, f, callback, data);
844         }
845     }
846   else if ((p = archive_path (file_spec)) != NULL)
847     {
848       LANG_FOR_EACH_INPUT_STATEMENT (f)
849         {
850           if (input_statement_is_archive_path (file_spec, p, f))
851             walk_wild_file (s, f, callback, data);
852         }
853     }
854   else if (wildcardp (file_spec))
855     {
856       LANG_FOR_EACH_INPUT_STATEMENT (f)
857         {
858           if (fnmatch (file_spec, f->filename, 0) == 0)
859             walk_wild_file (s, f, callback, data);
860         }
861     }
862   else
863     {
864       lang_input_statement_type *f;
865
866       /* Perform the iteration over a single file.  */
867       f = lookup_name (file_spec);
868       if (f)
869         walk_wild_file (s, f, callback, data);
870     }
871 }
872
873 /* lang_for_each_statement walks the parse tree and calls the provided
874    function for each node.  */
875
876 static void
877 lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
878                                 lang_statement_union_type *s)
879 {
880   for (; s != NULL; s = s->header.next)
881     {
882       func (s);
883
884       switch (s->header.type)
885         {
886         case lang_constructors_statement_enum:
887           lang_for_each_statement_worker (func, constructor_list.head);
888           break;
889         case lang_output_section_statement_enum:
890           lang_for_each_statement_worker
891             (func, s->output_section_statement.children.head);
892           break;
893         case lang_wild_statement_enum:
894           lang_for_each_statement_worker (func,
895                                           s->wild_statement.children.head);
896           break;
897         case lang_group_statement_enum:
898           lang_for_each_statement_worker (func,
899                                           s->group_statement.children.head);
900           break;
901         case lang_data_statement_enum:
902         case lang_reloc_statement_enum:
903         case lang_object_symbols_statement_enum:
904         case lang_output_statement_enum:
905         case lang_target_statement_enum:
906         case lang_input_section_enum:
907         case lang_input_statement_enum:
908         case lang_assignment_statement_enum:
909         case lang_padding_statement_enum:
910         case lang_address_statement_enum:
911         case lang_fill_statement_enum:
912         case lang_insert_statement_enum:
913           break;
914         default:
915           FAIL ();
916           break;
917         }
918     }
919 }
920
921 void
922 lang_for_each_statement (void (*func) (lang_statement_union_type *))
923 {
924   lang_for_each_statement_worker (func, statement_list.head);
925 }
926
927 /*----------------------------------------------------------------------*/
928
929 void
930 lang_list_init (lang_statement_list_type *list)
931 {
932   list->head = NULL;
933   list->tail = &list->head;
934 }
935
936 void
937 push_stat_ptr (lang_statement_list_type *new_ptr)
938 {
939   if (stat_save_ptr >= stat_save + sizeof (stat_save) / sizeof (stat_save[0]))
940     abort ();
941   *stat_save_ptr++ = stat_ptr;
942   stat_ptr = new_ptr;
943 }
944
945 void
946 pop_stat_ptr (void)
947 {
948   if (stat_save_ptr <= stat_save)
949     abort ();
950   stat_ptr = *--stat_save_ptr;
951 }
952
953 /* Build a new statement node for the parse tree.  */
954
955 static lang_statement_union_type *
956 new_statement (enum statement_enum type,
957                size_t size,
958                lang_statement_list_type *list)
959 {
960   lang_statement_union_type *new_stmt;
961
962   new_stmt = (lang_statement_union_type *) stat_alloc (size);
963   new_stmt->header.type = type;
964   new_stmt->header.next = NULL;
965   lang_statement_append (list, new_stmt, &new_stmt->header.next);
966   return new_stmt;
967 }
968
969 /* Build a new input file node for the language.  There are several
970    ways in which we treat an input file, eg, we only look at symbols,
971    or prefix it with a -l etc.
972
973    We can be supplied with requests for input files more than once;
974    they may, for example be split over several lines like foo.o(.text)
975    foo.o(.data) etc, so when asked for a file we check that we haven't
976    got it already so we don't duplicate the bfd.  */
977
978 static lang_input_statement_type *
979 new_afile (const char *name,
980            lang_input_file_enum_type file_type,
981            const char *target,
982            bfd_boolean add_to_list)
983 {
984   lang_input_statement_type *p;
985
986   if (add_to_list)
987     p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
988   else
989     {
990       p = (lang_input_statement_type *)
991           stat_alloc (sizeof (lang_input_statement_type));
992       p->header.type = lang_input_statement_enum;
993       p->header.next = NULL;
994     }
995
996   lang_has_input_file = TRUE;
997   p->target = target;
998   p->sysrooted = FALSE;
999
1000   if (file_type == lang_input_file_is_l_enum
1001       && name[0] == ':' && name[1] != '\0')
1002     {
1003       file_type = lang_input_file_is_search_file_enum;
1004       name = name + 1;
1005     }
1006
1007   switch (file_type)
1008     {
1009     case lang_input_file_is_symbols_only_enum:
1010       p->filename = name;
1011       p->is_archive = FALSE;
1012       p->real = TRUE;
1013       p->local_sym_name = name;
1014       p->just_syms_flag = TRUE;
1015       p->search_dirs_flag = FALSE;
1016       break;
1017     case lang_input_file_is_fake_enum:
1018       p->filename = name;
1019       p->is_archive = FALSE;
1020       p->real = FALSE;
1021       p->local_sym_name = name;
1022       p->just_syms_flag = FALSE;
1023       p->search_dirs_flag = FALSE;
1024       break;
1025     case lang_input_file_is_l_enum:
1026       p->is_archive = TRUE;
1027       p->filename = name;
1028       p->real = TRUE;
1029       p->local_sym_name = concat ("-l", name, (const char *) NULL);
1030       p->just_syms_flag = FALSE;
1031       p->search_dirs_flag = TRUE;
1032       break;
1033     case lang_input_file_is_marker_enum:
1034       p->filename = name;
1035       p->is_archive = FALSE;
1036       p->real = FALSE;
1037       p->local_sym_name = name;
1038       p->just_syms_flag = FALSE;
1039       p->search_dirs_flag = TRUE;
1040       break;
1041     case lang_input_file_is_search_file_enum:
1042       p->sysrooted = ldlang_sysrooted_script;
1043       p->filename = name;
1044       p->is_archive = FALSE;
1045       p->real = TRUE;
1046       p->local_sym_name = name;
1047       p->just_syms_flag = FALSE;
1048       p->search_dirs_flag = TRUE;
1049       break;
1050     case lang_input_file_is_file_enum:
1051       p->filename = name;
1052       p->is_archive = FALSE;
1053       p->real = TRUE;
1054       p->local_sym_name = name;
1055       p->just_syms_flag = FALSE;
1056       p->search_dirs_flag = FALSE;
1057       break;
1058     default:
1059       FAIL ();
1060     }
1061   p->the_bfd = NULL;
1062   p->next_real_file = NULL;
1063   p->next = NULL;
1064   p->dynamic = config.dynamic_link;
1065   p->add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
1066   p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
1067   p->whole_archive = whole_archive;
1068   p->loaded = FALSE;
1069   p->missing_file = FALSE;
1070
1071   lang_statement_append (&input_file_chain,
1072                          (lang_statement_union_type *) p,
1073                          &p->next_real_file);
1074   return p;
1075 }
1076
1077 lang_input_statement_type *
1078 lang_add_input_file (const char *name,
1079                      lang_input_file_enum_type file_type,
1080                      const char *target)
1081 {
1082   return new_afile (name, file_type, target, TRUE);
1083 }
1084
1085 struct out_section_hash_entry
1086 {
1087   struct bfd_hash_entry root;
1088   lang_statement_union_type s;
1089 };
1090
1091 /* The hash table.  */
1092
1093 static struct bfd_hash_table output_section_statement_table;
1094
1095 /* Support routines for the hash table used by lang_output_section_find,
1096    initialize the table, fill in an entry and remove the table.  */
1097
1098 static struct bfd_hash_entry *
1099 output_section_statement_newfunc (struct bfd_hash_entry *entry,
1100                                   struct bfd_hash_table *table,
1101                                   const char *string)
1102 {
1103   lang_output_section_statement_type **nextp;
1104   struct out_section_hash_entry *ret;
1105
1106   if (entry == NULL)
1107     {
1108       entry = (struct bfd_hash_entry *) bfd_hash_allocate (table,
1109                                                            sizeof (*ret));
1110       if (entry == NULL)
1111         return entry;
1112     }
1113
1114   entry = bfd_hash_newfunc (entry, table, string);
1115   if (entry == NULL)
1116     return entry;
1117
1118   ret = (struct out_section_hash_entry *) entry;
1119   memset (&ret->s, 0, sizeof (ret->s));
1120   ret->s.header.type = lang_output_section_statement_enum;
1121   ret->s.output_section_statement.subsection_alignment = -1;
1122   ret->s.output_section_statement.section_alignment = -1;
1123   ret->s.output_section_statement.block_value = 1;
1124   lang_list_init (&ret->s.output_section_statement.children);
1125   lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
1126
1127   /* For every output section statement added to the list, except the
1128      first one, lang_output_section_statement.tail points to the "next"
1129      field of the last element of the list.  */
1130   if (lang_output_section_statement.head != NULL)
1131     ret->s.output_section_statement.prev
1132       = ((lang_output_section_statement_type *)
1133          ((char *) lang_output_section_statement.tail
1134           - offsetof (lang_output_section_statement_type, next)));
1135
1136   /* GCC's strict aliasing rules prevent us from just casting the
1137      address, so we store the pointer in a variable and cast that
1138      instead.  */
1139   nextp = &ret->s.output_section_statement.next;
1140   lang_statement_append (&lang_output_section_statement,
1141                          &ret->s,
1142                          (lang_statement_union_type **) nextp);
1143   return &ret->root;
1144 }
1145
1146 static void
1147 output_section_statement_table_init (void)
1148 {
1149   if (!bfd_hash_table_init_n (&output_section_statement_table,
1150                               output_section_statement_newfunc,
1151                               sizeof (struct out_section_hash_entry),
1152                               61))
1153     einfo (_("%P%F: can not create hash table: %E\n"));
1154 }
1155
1156 static void
1157 output_section_statement_table_free (void)
1158 {
1159   bfd_hash_table_free (&output_section_statement_table);
1160 }
1161
1162 /* Build enough state so that the parser can build its tree.  */
1163
1164 void
1165 lang_init (void)
1166 {
1167   obstack_begin (&stat_obstack, 1000);
1168
1169   stat_ptr = &statement_list;
1170
1171   output_section_statement_table_init ();
1172
1173   lang_list_init (stat_ptr);
1174
1175   lang_list_init (&input_file_chain);
1176   lang_list_init (&lang_output_section_statement);
1177   lang_list_init (&file_chain);
1178   first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
1179                                     NULL);
1180   abs_output_section =
1181     lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
1182
1183   abs_output_section->bfd_section = bfd_abs_section_ptr;
1184
1185   /* The value "3" is ad-hoc, somewhat related to the expected number of
1186      DEFINED expressions in a linker script.  For most default linker
1187      scripts, there are none.  Why a hash table then?  Well, it's somewhat
1188      simpler to re-use working machinery than using a linked list in terms
1189      of code-complexity here in ld, besides the initialization which just
1190      looks like other code here.  */
1191   if (!bfd_hash_table_init_n (&lang_definedness_table,
1192                               lang_definedness_newfunc,
1193                               sizeof (struct lang_definedness_hash_entry),
1194                               3))
1195     einfo (_("%P%F: can not create hash table: %E\n"));
1196 }
1197
1198 void
1199 lang_finish (void)
1200 {
1201   output_section_statement_table_free ();
1202 }
1203
1204 /*----------------------------------------------------------------------
1205   A region is an area of memory declared with the
1206   MEMORY {  name:org=exp, len=exp ... }
1207   syntax.
1208
1209   We maintain a list of all the regions here.
1210
1211   If no regions are specified in the script, then the default is used
1212   which is created when looked up to be the entire data space.
1213
1214   If create is true we are creating a region inside a MEMORY block.
1215   In this case it is probably an error to create a region that has
1216   already been created.  If we are not inside a MEMORY block it is
1217   dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
1218   and so we issue a warning.
1219   
1220   Each region has at least one name.  The first name is either
1221   DEFAULT_MEMORY_REGION or the name given in the MEMORY block.  You can add
1222   alias names to an existing region within a script with
1223   REGION_ALIAS (alias, region_name).  Each name corresponds to at most one
1224   region.  */
1225
1226 static lang_memory_region_type *lang_memory_region_list;
1227 static lang_memory_region_type **lang_memory_region_list_tail
1228   = &lang_memory_region_list;
1229
1230 lang_memory_region_type *
1231 lang_memory_region_lookup (const char *const name, bfd_boolean create)
1232 {
1233   lang_memory_region_name *n;
1234   lang_memory_region_type *r;
1235   lang_memory_region_type *new_region;
1236
1237   /* NAME is NULL for LMA memspecs if no region was specified.  */
1238   if (name == NULL)
1239     return NULL;
1240
1241   for (r = lang_memory_region_list; r != NULL; r = r->next)
1242     for (n = &r->name_list; n != NULL; n = n->next)
1243       if (strcmp (n->name, name) == 0)
1244         {
1245           if (create)
1246             einfo (_("%P:%S: warning: redeclaration of memory region `%s'\n"),
1247                    name);
1248           return r;
1249         }
1250
1251   if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
1252     einfo (_("%P:%S: warning: memory region `%s' not declared\n"), name);
1253
1254   new_region = (lang_memory_region_type *)
1255       stat_alloc (sizeof (lang_memory_region_type));
1256
1257   new_region->name_list.name = xstrdup (name);
1258   new_region->name_list.next = NULL;
1259   new_region->next = NULL;
1260   new_region->origin = 0;
1261   new_region->length = ~(bfd_size_type) 0;
1262   new_region->current = 0;
1263   new_region->last_os = NULL;
1264   new_region->flags = 0;
1265   new_region->not_flags = 0;
1266   new_region->had_full_message = FALSE;
1267
1268   *lang_memory_region_list_tail = new_region;
1269   lang_memory_region_list_tail = &new_region->next;
1270
1271   return new_region;
1272 }
1273
1274 void
1275 lang_memory_region_alias (const char * alias, const char * region_name)
1276 {
1277   lang_memory_region_name * n;
1278   lang_memory_region_type * r;
1279   lang_memory_region_type * region;
1280
1281   /* The default region must be unique.  This ensures that it is not necessary
1282      to iterate through the name list if someone wants the check if a region is
1283      the default memory region.  */
1284   if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0
1285       || strcmp (alias, DEFAULT_MEMORY_REGION) == 0)
1286     einfo (_("%F%P:%S: error: alias for default memory region\n"));
1287
1288   /* Look for the target region and check if the alias is not already
1289      in use.  */
1290   region = NULL;
1291   for (r = lang_memory_region_list; r != NULL; r = r->next)
1292     for (n = &r->name_list; n != NULL; n = n->next)
1293       {
1294         if (region == NULL && strcmp (n->name, region_name) == 0)
1295           region = r;
1296         if (strcmp (n->name, alias) == 0)
1297           einfo (_("%F%P:%S: error: redefinition of memory region "
1298                    "alias `%s'\n"),
1299                  alias);
1300       }
1301
1302   /* Check if the target region exists.  */
1303   if (region == NULL)
1304     einfo (_("%F%P:%S: error: memory region `%s' "
1305              "for alias `%s' does not exist\n"),
1306            region_name,
1307            alias);
1308
1309   /* Add alias to region name list.  */
1310   n = (lang_memory_region_name *) stat_alloc (sizeof (lang_memory_region_name));
1311   n->name = xstrdup (alias);
1312   n->next = region->name_list.next;
1313   region->name_list.next = n;
1314 }
1315
1316 static lang_memory_region_type *
1317 lang_memory_default (asection * section)
1318 {
1319   lang_memory_region_type *p;
1320
1321   flagword sec_flags = section->flags;
1322
1323   /* Override SEC_DATA to mean a writable section.  */
1324   if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
1325     sec_flags |= SEC_DATA;
1326
1327   for (p = lang_memory_region_list; p != NULL; p = p->next)
1328     {
1329       if ((p->flags & sec_flags) != 0
1330           && (p->not_flags & sec_flags) == 0)
1331         {
1332           return p;
1333         }
1334     }
1335   return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
1336 }
1337
1338 /* Find or create an output_section_statement with the given NAME.
1339    If CONSTRAINT is non-zero match one with that constraint, otherwise
1340    match any non-negative constraint.  If CREATE, always make a
1341    new output_section_statement for SPECIAL CONSTRAINT.  */
1342
1343 lang_output_section_statement_type *
1344 lang_output_section_statement_lookup (const char *name,
1345                                       int constraint,
1346                                       bfd_boolean create)
1347 {
1348   struct out_section_hash_entry *entry;
1349
1350   entry = ((struct out_section_hash_entry *)
1351            bfd_hash_lookup (&output_section_statement_table, name,
1352                             create, FALSE));
1353   if (entry == NULL)
1354     {
1355       if (create)
1356         einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1357       return NULL;
1358     }
1359
1360   if (entry->s.output_section_statement.name != NULL)
1361     {
1362       /* We have a section of this name, but it might not have the correct
1363          constraint.  */
1364       struct out_section_hash_entry *last_ent;
1365
1366       name = entry->s.output_section_statement.name;
1367       if (create && constraint == SPECIAL)
1368         /* Not traversing to the end reverses the order of the second
1369            and subsequent SPECIAL sections in the hash table chain,
1370            but that shouldn't matter.  */
1371         last_ent = entry;
1372       else
1373         do
1374           {
1375             if (constraint == entry->s.output_section_statement.constraint
1376                 || (constraint == 0
1377                     && entry->s.output_section_statement.constraint >= 0))
1378               return &entry->s.output_section_statement;
1379             last_ent = entry;
1380             entry = (struct out_section_hash_entry *) entry->root.next;
1381           }
1382         while (entry != NULL
1383                && name == entry->s.output_section_statement.name);
1384
1385       if (!create)
1386         return NULL;
1387
1388       entry
1389         = ((struct out_section_hash_entry *)
1390            output_section_statement_newfunc (NULL,
1391                                              &output_section_statement_table,
1392                                              name));
1393       if (entry == NULL)
1394         {
1395           einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1396           return NULL;
1397         }
1398       entry->root = last_ent->root;
1399       last_ent->root.next = &entry->root;
1400     }
1401
1402   entry->s.output_section_statement.name = name;
1403   entry->s.output_section_statement.constraint = constraint;
1404   return &entry->s.output_section_statement;
1405 }
1406
1407 /* Find the next output_section_statement with the same name as OS.
1408    If CONSTRAINT is non-zero, find one with that constraint otherwise
1409    match any non-negative constraint.  */
1410
1411 lang_output_section_statement_type *
1412 next_matching_output_section_statement (lang_output_section_statement_type *os,
1413                                         int constraint)
1414 {
1415   /* All output_section_statements are actually part of a
1416      struct out_section_hash_entry.  */
1417   struct out_section_hash_entry *entry = (struct out_section_hash_entry *)
1418     ((char *) os
1419      - offsetof (struct out_section_hash_entry, s.output_section_statement));
1420   const char *name = os->name;
1421
1422   ASSERT (name == entry->root.string);
1423   do
1424     {
1425       entry = (struct out_section_hash_entry *) entry->root.next;
1426       if (entry == NULL
1427           || name != entry->s.output_section_statement.name)
1428         return NULL;
1429     }
1430   while (constraint != entry->s.output_section_statement.constraint
1431          && (constraint != 0
1432              || entry->s.output_section_statement.constraint < 0));
1433
1434   return &entry->s.output_section_statement;
1435 }
1436
1437 /* A variant of lang_output_section_find used by place_orphan.
1438    Returns the output statement that should precede a new output
1439    statement for SEC.  If an exact match is found on certain flags,
1440    sets *EXACT too.  */
1441
1442 lang_output_section_statement_type *
1443 lang_output_section_find_by_flags (const asection *sec,
1444                                    lang_output_section_statement_type **exact,
1445                                    lang_match_sec_type_func match_type)
1446 {
1447   lang_output_section_statement_type *first, *look, *found;
1448   flagword flags;
1449
1450   /* We know the first statement on this list is *ABS*.  May as well
1451      skip it.  */
1452   first = &lang_output_section_statement.head->output_section_statement;
1453   first = first->next;
1454
1455   /* First try for an exact match.  */
1456   found = NULL;
1457   for (look = first; look; look = look->next)
1458     {
1459       flags = look->flags;
1460       if (look->bfd_section != NULL)
1461         {
1462           flags = look->bfd_section->flags;
1463           if (match_type && !match_type (link_info.output_bfd,
1464                                          look->bfd_section,
1465                                          sec->owner, sec))
1466             continue;
1467         }
1468       flags ^= sec->flags;
1469       if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1470                      | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1471         found = look;
1472     }
1473   if (found != NULL)
1474     {
1475       if (exact != NULL)
1476         *exact = found;
1477       return found;
1478     }
1479
1480   if ((sec->flags & SEC_CODE) != 0
1481       && (sec->flags & SEC_ALLOC) != 0)
1482     {
1483       /* Try for a rw code section.  */
1484       for (look = first; look; look = look->next)
1485         {
1486           flags = look->flags;
1487           if (look->bfd_section != NULL)
1488             {
1489               flags = look->bfd_section->flags;
1490               if (match_type && !match_type (link_info.output_bfd,
1491                                              look->bfd_section,
1492                                              sec->owner, sec))
1493                 continue;
1494             }
1495           flags ^= sec->flags;
1496           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1497                          | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1498             found = look;
1499         }
1500     }
1501   else if ((sec->flags & (SEC_READONLY | SEC_THREAD_LOCAL)) != 0
1502            && (sec->flags & SEC_ALLOC) != 0)
1503     {
1504       /* .rodata can go after .text, .sdata2 after .rodata.  */
1505       for (look = first; look; look = look->next)
1506         {
1507           flags = look->flags;
1508           if (look->bfd_section != NULL)
1509             {
1510               flags = look->bfd_section->flags;
1511               if (match_type && !match_type (link_info.output_bfd,
1512                                              look->bfd_section,
1513                                              sec->owner, sec))
1514                 continue;
1515             }
1516           flags ^= sec->flags;
1517           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1518                          | SEC_READONLY))
1519               && !(look->flags & (SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1520             found = look;
1521         }
1522     }
1523   else if ((sec->flags & SEC_SMALL_DATA) != 0
1524            && (sec->flags & SEC_ALLOC) != 0)
1525     {
1526       /* .sdata goes after .data, .sbss after .sdata.  */
1527       for (look = first; look; look = look->next)
1528         {
1529           flags = look->flags;
1530           if (look->bfd_section != NULL)
1531             {
1532               flags = look->bfd_section->flags;
1533               if (match_type && !match_type (link_info.output_bfd,
1534                                              look->bfd_section,
1535                                              sec->owner, sec))
1536                 continue;
1537             }
1538           flags ^= sec->flags;
1539           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1540                          | SEC_THREAD_LOCAL))
1541               || ((look->flags & SEC_SMALL_DATA)
1542                   && !(sec->flags & SEC_HAS_CONTENTS)))
1543             found = look;
1544         }
1545     }
1546   else if ((sec->flags & SEC_HAS_CONTENTS) != 0
1547            && (sec->flags & SEC_ALLOC) != 0)
1548     {
1549       /* .data goes after .rodata.  */
1550       for (look = first; look; look = look->next)
1551         {
1552           flags = look->flags;
1553           if (look->bfd_section != NULL)
1554             {
1555               flags = look->bfd_section->flags;
1556               if (match_type && !match_type (link_info.output_bfd,
1557                                              look->bfd_section,
1558                                              sec->owner, sec))
1559                 continue;
1560             }
1561           flags ^= sec->flags;
1562           if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1563                          | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1564             found = look;
1565         }
1566     }
1567   else if ((sec->flags & SEC_ALLOC) != 0)
1568     {
1569       /* .bss goes after any other alloc section.  */
1570       for (look = first; look; look = look->next)
1571         {
1572           flags = look->flags;
1573           if (look->bfd_section != NULL)
1574             {
1575               flags = look->bfd_section->flags;
1576               if (match_type && !match_type (link_info.output_bfd,
1577                                              look->bfd_section,
1578                                              sec->owner, sec))
1579                 continue;
1580             }
1581           flags ^= sec->flags;
1582           if (!(flags & SEC_ALLOC))
1583             found = look;
1584         }
1585     }
1586   else
1587     {
1588       /* non-alloc go last.  */
1589       for (look = first; look; look = look->next)
1590         {
1591           flags = look->flags;
1592           if (look->bfd_section != NULL)
1593             flags = look->bfd_section->flags;
1594           flags ^= sec->flags;
1595           if (!(flags & SEC_DEBUGGING))
1596             found = look;
1597         }
1598       return found;
1599     }
1600
1601   if (found || !match_type)
1602     return found;
1603
1604   return lang_output_section_find_by_flags (sec, NULL, NULL);
1605 }
1606
1607 /* Find the last output section before given output statement.
1608    Used by place_orphan.  */
1609
1610 static asection *
1611 output_prev_sec_find (lang_output_section_statement_type *os)
1612 {
1613   lang_output_section_statement_type *lookup;
1614
1615   for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
1616     {
1617       if (lookup->constraint < 0)
1618         continue;
1619
1620       if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1621         return lookup->bfd_section;
1622     }
1623
1624   return NULL;
1625 }
1626
1627 /* Look for a suitable place for a new output section statement.  The
1628    idea is to skip over anything that might be inside a SECTIONS {}
1629    statement in a script, before we find another output section
1630    statement.  Assignments to "dot" before an output section statement
1631    are assumed to belong to it, except in two cases;  The first
1632    assignment to dot, and assignments before non-alloc sections.
1633    Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
1634    similar assignments that set the initial address, or we might
1635    insert non-alloc note sections among assignments setting end of
1636    image symbols.  */
1637
1638 static lang_statement_union_type **
1639 insert_os_after (lang_output_section_statement_type *after)
1640 {
1641   lang_statement_union_type **where;
1642   lang_statement_union_type **assign = NULL;
1643   bfd_boolean ignore_first;
1644
1645   ignore_first
1646     = after == &lang_output_section_statement.head->output_section_statement;
1647
1648   for (where = &after->header.next;
1649        *where != NULL;
1650        where = &(*where)->header.next)
1651     {
1652       switch ((*where)->header.type)
1653         {
1654         case lang_assignment_statement_enum:
1655           if (assign == NULL)
1656             {
1657               lang_assignment_statement_type *ass;
1658
1659               ass = &(*where)->assignment_statement;
1660               if (ass->exp->type.node_class != etree_assert
1661                   && ass->exp->assign.dst[0] == '.'
1662                   && ass->exp->assign.dst[1] == 0
1663                   && !ignore_first)
1664                 assign = where;
1665             }
1666           ignore_first = FALSE;
1667           continue;
1668         case lang_wild_statement_enum:
1669         case lang_input_section_enum:
1670         case lang_object_symbols_statement_enum:
1671         case lang_fill_statement_enum:
1672         case lang_data_statement_enum:
1673         case lang_reloc_statement_enum:
1674         case lang_padding_statement_enum:
1675         case lang_constructors_statement_enum:
1676           assign = NULL;
1677           continue;
1678         case lang_output_section_statement_enum:
1679           if (assign != NULL)
1680             {
1681               asection *s = (*where)->output_section_statement.bfd_section;
1682
1683               if (s == NULL
1684                   || s->map_head.s == NULL
1685                   || (s->flags & SEC_ALLOC) != 0)
1686                 where = assign;
1687             }
1688           break;
1689         case lang_input_statement_enum:
1690         case lang_address_statement_enum:
1691         case lang_target_statement_enum:
1692         case lang_output_statement_enum:
1693         case lang_group_statement_enum:
1694         case lang_insert_statement_enum:
1695           continue;
1696         }
1697       break;
1698     }
1699
1700   return where;
1701 }
1702
1703 lang_output_section_statement_type *
1704 lang_insert_orphan (asection *s,
1705                     const char *secname,
1706                     int constraint,
1707                     lang_output_section_statement_type *after,
1708                     struct orphan_save *place,
1709                     etree_type *address,
1710                     lang_statement_list_type *add_child)
1711 {
1712   lang_statement_list_type add;
1713   const char *ps;
1714   lang_output_section_statement_type *os;
1715   lang_output_section_statement_type **os_tail;
1716
1717   /* If we have found an appropriate place for the output section
1718      statements for this orphan, add them to our own private list,
1719      inserting them later into the global statement list.  */
1720   if (after != NULL)
1721     {
1722       lang_list_init (&add);
1723       push_stat_ptr (&add);
1724     }
1725
1726   if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1727     address = exp_intop (0);
1728
1729   os_tail = ((lang_output_section_statement_type **)
1730              lang_output_section_statement.tail);
1731   os = lang_enter_output_section_statement (secname, address, normal_section,
1732                                             NULL, NULL, NULL, constraint);
1733
1734   ps = NULL;
1735   if (config.build_constructors && *os_tail == os)
1736     {
1737       /* If the name of the section is representable in C, then create
1738          symbols to mark the start and the end of the section.  */
1739       for (ps = secname; *ps != '\0'; ps++)
1740         if (! ISALNUM ((unsigned char) *ps) && *ps != '_')
1741           break;
1742       if (*ps == '\0')
1743         {
1744           char *symname;
1745           etree_type *e_align;
1746
1747           symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1748           symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1749           sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1750           e_align = exp_unop (ALIGN_K,
1751                               exp_intop ((bfd_vma) 1 << s->alignment_power));
1752           lang_add_assignment (exp_assop ('=', ".", e_align));
1753           lang_add_assignment (exp_provide (symname,
1754                                             exp_unop (ABSOLUTE,
1755                                                       exp_nameop (NAME, ".")),
1756                                             FALSE));
1757         }
1758     }
1759
1760   if (add_child == NULL)
1761     add_child = &os->children;
1762   lang_add_section (add_child, s, os);
1763
1764   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 **prev,
4684    lang_output_section_statement_type *output_section_statement,
4685    fill_type *fill,
4686    bfd_vma dot,
4687    bfd_boolean *relax,
4688    bfd_boolean check_regions)
4689 {
4690   lang_statement_union_type *s;
4691
4692   /* Size up the sections from their constituent parts.  */
4693   for (s = *prev; s != NULL; s = s->header.next)
4694     {
4695       switch (s->header.type)
4696         {
4697         case lang_output_section_statement_enum:
4698           {
4699             bfd_vma newdot, after;
4700             lang_output_section_statement_type *os;
4701             lang_memory_region_type *r;
4702
4703             os = &s->output_section_statement;
4704             /* FIXME: We shouldn't need to zero section vmas for ld -r
4705                here, in lang_insert_orphan, or in the default linker scripts.
4706                This is covering for coff backend linker bugs.  See PR6945.  */
4707             if (os->addr_tree == NULL
4708                 && link_info.relocatable
4709                 && (bfd_get_flavour (link_info.output_bfd)
4710                     == bfd_target_coff_flavour))
4711               os->addr_tree = exp_intop (0);
4712             if (os->addr_tree != NULL)
4713               {
4714                 os->processed_vma = FALSE;
4715                 exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4716
4717                 if (expld.result.valid_p)
4718                   dot = expld.result.value + expld.result.section->vma;
4719                 else if (expld.phase != lang_mark_phase_enum)
4720                   einfo (_("%F%S: non constant or forward reference"
4721                            " address expression for section %s\n"),
4722                          os->name);
4723               }
4724
4725             if (os->bfd_section == NULL)
4726               /* This section was removed or never actually created.  */
4727               break;
4728
4729             /* If this is a COFF shared library section, use the size and
4730                address from the input section.  FIXME: This is COFF
4731                specific; it would be cleaner if there were some other way
4732                to do this, but nothing simple comes to mind.  */
4733             if (((bfd_get_flavour (link_info.output_bfd)
4734                   == bfd_target_ecoff_flavour)
4735                  || (bfd_get_flavour (link_info.output_bfd)
4736                      == bfd_target_coff_flavour))
4737                 && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4738               {
4739                 asection *input;
4740
4741                 if (os->children.head == NULL
4742                     || os->children.head->header.next != NULL
4743                     || (os->children.head->header.type
4744                         != lang_input_section_enum))
4745                   einfo (_("%P%X: Internal error on COFF shared library"
4746                            " section %s\n"), os->name);
4747
4748                 input = os->children.head->input_section.section;
4749                 bfd_set_section_vma (os->bfd_section->owner,
4750                                      os->bfd_section,
4751                                      bfd_section_vma (input->owner, input));
4752                 os->bfd_section->size = input->size;
4753                 break;
4754               }
4755
4756             newdot = dot;
4757             if (bfd_is_abs_section (os->bfd_section))
4758               {
4759                 /* No matter what happens, an abs section starts at zero.  */
4760                 ASSERT (os->bfd_section->vma == 0);
4761               }
4762             else
4763               {
4764                 int align;
4765
4766                 if (os->addr_tree == NULL)
4767                   {
4768                     /* No address specified for this section, get one
4769                        from the region specification.  */
4770                     if (os->region == NULL
4771                         || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4772                             && os->region->name_list.name[0] == '*'
4773                             && strcmp (os->region->name_list.name,
4774                                        DEFAULT_MEMORY_REGION) == 0))
4775                       {
4776                         os->region = lang_memory_default (os->bfd_section);
4777                       }
4778
4779                     /* If a loadable section is using the default memory
4780                        region, and some non default memory regions were
4781                        defined, issue an error message.  */
4782                     if (!os->ignored
4783                         && !IGNORE_SECTION (os->bfd_section)
4784                         && ! link_info.relocatable
4785                         && check_regions
4786                         && strcmp (os->region->name_list.name,
4787                                    DEFAULT_MEMORY_REGION) == 0
4788                         && lang_memory_region_list != NULL
4789                         && (strcmp (lang_memory_region_list->name_list.name,
4790                                     DEFAULT_MEMORY_REGION) != 0
4791                             || lang_memory_region_list->next != NULL)
4792                         && expld.phase != lang_mark_phase_enum)
4793                       {
4794                         /* By default this is an error rather than just a
4795                            warning because if we allocate the section to the
4796                            default memory region we can end up creating an
4797                            excessively large binary, or even seg faulting when
4798                            attempting to perform a negative seek.  See
4799                            sources.redhat.com/ml/binutils/2003-04/msg00423.html
4800                            for an example of this.  This behaviour can be
4801                            overridden by the using the --no-check-sections
4802                            switch.  */
4803                         if (command_line.check_section_addresses)
4804                           einfo (_("%P%F: error: no memory region specified"
4805                                    " for loadable section `%s'\n"),
4806                                  bfd_get_section_name (link_info.output_bfd,
4807                                                        os->bfd_section));
4808                         else
4809                           einfo (_("%P: warning: no memory region specified"
4810                                    " for loadable section `%s'\n"),
4811                                  bfd_get_section_name (link_info.output_bfd,
4812                                                        os->bfd_section));
4813                       }
4814
4815                     newdot = os->region->current;
4816                     align = os->bfd_section->alignment_power;
4817                   }
4818                 else
4819                   align = os->section_alignment;
4820
4821                 /* Align to what the section needs.  */
4822                 if (align > 0)
4823                   {
4824                     bfd_vma savedot = newdot;
4825                     newdot = align_power (newdot, align);
4826
4827                     if (newdot != savedot
4828                         && (config.warn_section_align
4829                             || os->addr_tree != NULL)
4830                         && expld.phase != lang_mark_phase_enum)
4831                       einfo (_("%P: warning: changing start of section"
4832                                " %s by %lu bytes\n"),
4833                              os->name, (unsigned long) (newdot - savedot));
4834                   }
4835
4836                 bfd_set_section_vma (0, os->bfd_section, newdot);
4837
4838                 os->bfd_section->output_offset = 0;
4839               }
4840
4841             lang_size_sections_1 (&os->children.head, os,
4842                                   os->fill, newdot, relax, check_regions);
4843
4844             os->processed_vma = TRUE;
4845
4846             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4847               /* Except for some special linker created sections,
4848                  no output section should change from zero size
4849                  after strip_excluded_output_sections.  A non-zero
4850                  size on an ignored section indicates that some
4851                  input section was not sized early enough.  */
4852               ASSERT (os->bfd_section->size == 0);
4853             else
4854               {
4855                 dot = os->bfd_section->vma;
4856
4857                 /* Put the section within the requested block size, or
4858                    align at the block boundary.  */
4859                 after = ((dot
4860                           + TO_ADDR (os->bfd_section->size)
4861                           + os->block_value - 1)
4862                          & - (bfd_vma) os->block_value);
4863
4864                 os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4865               }
4866
4867             /* Set section lma.  */
4868             r = os->region;
4869             if (r == NULL)
4870               r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4871
4872             if (os->load_base)
4873               {
4874                 bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
4875                 os->bfd_section->lma = lma;
4876               }
4877             else if (os->lma_region != NULL)
4878               {
4879                 bfd_vma lma = os->lma_region->current;
4880
4881                 if (os->section_alignment != -1)
4882                   lma = align_power (lma, os->section_alignment);
4883                 os->bfd_section->lma = lma;
4884               }
4885             else if (r->last_os != NULL
4886                      && (os->bfd_section->flags & SEC_ALLOC) != 0)
4887               {
4888                 bfd_vma lma;
4889                 asection *last;
4890
4891                 last = r->last_os->output_section_statement.bfd_section;
4892
4893                 /* A backwards move of dot should be accompanied by
4894                    an explicit assignment to the section LMA (ie.
4895                    os->load_base set) because backwards moves can
4896                    create overlapping LMAs.  */
4897                 if (dot < last->vma
4898                     && os->bfd_section->size != 0
4899                     && dot + os->bfd_section->size <= last->vma)
4900                   {
4901                     /* If dot moved backwards then leave lma equal to
4902                        vma.  This is the old default lma, which might
4903                        just happen to work when the backwards move is
4904                        sufficiently large.  Nag if this changes anything,
4905                        so people can fix their linker scripts.  */
4906
4907                     if (last->vma != last->lma)
4908                       einfo (_("%P: warning: dot moved backwards before `%s'\n"),
4909                              os->name);
4910                   }
4911                 else
4912                   {
4913                     /* If this is an overlay, set the current lma to that
4914                        at the end of the previous section.  */
4915                     if (os->sectype == overlay_section)
4916                       lma = last->lma + last->size;
4917
4918                     /* Otherwise, keep the same lma to vma relationship
4919                        as the previous section.  */
4920                     else
4921                       lma = dot + last->lma - last->vma;
4922
4923                     if (os->section_alignment != -1)
4924                       lma = align_power (lma, os->section_alignment);
4925                     os->bfd_section->lma = lma;
4926                   }
4927               }
4928             os->processed_lma = TRUE;
4929
4930             if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4931               break;
4932
4933             /* Keep track of normal sections using the default
4934                lma region.  We use this to set the lma for
4935                following sections.  Overlays or other linker
4936                script assignment to lma might mean that the
4937                default lma == vma is incorrect.
4938                To avoid warnings about dot moving backwards when using
4939                -Ttext, don't start tracking sections until we find one
4940                of non-zero size or with lma set differently to vma.  */
4941             if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4942                  || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
4943                 && (os->bfd_section->flags & SEC_ALLOC) != 0
4944                 && (os->bfd_section->size != 0
4945                     || (r->last_os == NULL
4946                         && os->bfd_section->vma != os->bfd_section->lma)
4947                     || (r->last_os != NULL
4948                         && dot >= (r->last_os->output_section_statement
4949                                    .bfd_section->vma)))
4950                 && os->lma_region == NULL
4951                 && !link_info.relocatable)
4952               r->last_os = s;
4953
4954             /* .tbss sections effectively have zero size.  */
4955             if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
4956                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
4957                 || link_info.relocatable)
4958               dot += TO_ADDR (os->bfd_section->size);
4959
4960             if (os->update_dot_tree != 0)
4961               exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
4962
4963             /* Update dot in the region ?
4964                We only do this if the section is going to be allocated,
4965                since unallocated sections do not contribute to the region's
4966                overall size in memory.
4967
4968                If the SEC_NEVER_LOAD bit is not set, it will affect the
4969                addresses of sections after it. We have to update
4970                dot.  */
4971             if (os->region != NULL
4972                 && ((os->bfd_section->flags & SEC_NEVER_LOAD) == 0
4973                     || (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))))
4974               {
4975                 os->region->current = dot;
4976
4977                 if (check_regions)
4978                   /* Make sure the new address is within the region.  */
4979                   os_region_check (os, os->region, os->addr_tree,
4980                                    os->bfd_section->vma);
4981
4982                 if (os->lma_region != NULL && os->lma_region != os->region
4983                     && (os->bfd_section->flags & SEC_LOAD))
4984                   {
4985                     os->lma_region->current
4986                       = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
4987
4988                     if (check_regions)
4989                       os_region_check (os, os->lma_region, NULL,
4990                                        os->bfd_section->lma);
4991                   }
4992               }
4993           }
4994           break;
4995
4996         case lang_constructors_statement_enum:
4997           dot = lang_size_sections_1 (&constructor_list.head,
4998                                       output_section_statement,
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                                       fill, dot, relax, check_regions);
5058           break;
5059
5060         case lang_object_symbols_statement_enum:
5061           link_info.create_object_symbols_section =
5062             output_section_statement->bfd_section;
5063           break;
5064
5065         case lang_output_statement_enum:
5066         case lang_target_statement_enum:
5067           break;
5068
5069         case lang_input_section_enum:
5070           {
5071             asection *i;
5072
5073             i = s->input_section.section;
5074             if (relax)
5075               {
5076                 bfd_boolean again;
5077
5078                 if (! bfd_relax_section (i->owner, i, &link_info, &again))
5079                   einfo (_("%P%F: can't relax section: %E\n"));
5080                 if (again)
5081                   *relax = TRUE;
5082               }
5083             dot = size_input_section (prev, output_section_statement,
5084                                       output_section_statement->fill, dot);
5085           }
5086           break;
5087
5088         case lang_input_statement_enum:
5089           break;
5090
5091         case lang_fill_statement_enum:
5092           s->fill_statement.output_section =
5093             output_section_statement->bfd_section;
5094
5095           fill = s->fill_statement.fill;
5096           break;
5097
5098         case lang_assignment_statement_enum:
5099           {
5100             bfd_vma newdot = dot;
5101             etree_type *tree = s->assignment_statement.exp;
5102
5103             expld.dataseg.relro = exp_dataseg_relro_none;
5104
5105             exp_fold_tree (tree,
5106                            output_section_statement->bfd_section,
5107                            &newdot);
5108
5109             if (expld.dataseg.relro == exp_dataseg_relro_start)
5110               {
5111                 if (!expld.dataseg.relro_start_stat)
5112                   expld.dataseg.relro_start_stat = s;
5113                 else
5114                   {
5115                     ASSERT (expld.dataseg.relro_start_stat == s);
5116                   }
5117               }
5118             else if (expld.dataseg.relro == exp_dataseg_relro_end)
5119               {
5120                 if (!expld.dataseg.relro_end_stat)
5121                   expld.dataseg.relro_end_stat = s;
5122                 else
5123                   {
5124                     ASSERT (expld.dataseg.relro_end_stat == s);
5125                   }
5126               }
5127             expld.dataseg.relro = exp_dataseg_relro_none;
5128
5129             /* This symbol is relative to this section.  */
5130             if ((tree->type.node_class == etree_provided
5131                  || tree->type.node_class == etree_assign)
5132                 && (tree->assign.dst [0] != '.'
5133                     || tree->assign.dst [1] != '\0'))
5134               output_section_statement->section_relative_symbol = 1;
5135
5136             if (!output_section_statement->ignored)
5137               {
5138                 if (output_section_statement == abs_output_section)
5139                   {
5140                     /* If we don't have an output section, then just adjust
5141                        the default memory address.  */
5142                     lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5143                                                FALSE)->current = newdot;
5144                   }
5145                 else if (newdot != dot)
5146                   {
5147                     /* Insert a pad after this statement.  We can't
5148                        put the pad before when relaxing, in case the
5149                        assignment references dot.  */
5150                     insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5151                                 output_section_statement->bfd_section, dot);
5152
5153                     /* Don't neuter the pad below when relaxing.  */
5154                     s = s->header.next;
5155
5156                     /* If dot is advanced, this implies that the section
5157                        should have space allocated to it, unless the
5158                        user has explicitly stated that the section
5159                        should never be loaded.  */
5160                     if (!(output_section_statement->flags & SEC_NEVER_LOAD))
5161                       output_section_statement->bfd_section->flags |= SEC_ALLOC;
5162                   }
5163                 dot = newdot;
5164               }
5165           }
5166           break;
5167
5168         case lang_padding_statement_enum:
5169           /* If this is the first time lang_size_sections is called,
5170              we won't have any padding statements.  If this is the
5171              second or later passes when relaxing, we should allow
5172              padding to shrink.  If padding is needed on this pass, it
5173              will be added back in.  */
5174           s->padding_statement.size = 0;
5175
5176           /* Make sure output_offset is valid.  If relaxation shrinks
5177              the section and this pad isn't needed, it's possible to
5178              have output_offset larger than the final size of the
5179              section.  bfd_set_section_contents will complain even for
5180              a pad size of zero.  */
5181           s->padding_statement.output_offset
5182             = dot - output_section_statement->bfd_section->vma;
5183           break;
5184
5185         case lang_group_statement_enum:
5186           dot = lang_size_sections_1 (&s->group_statement.children.head,
5187                                       output_section_statement,
5188                                       fill, dot, relax, check_regions);
5189           break;
5190
5191         case lang_insert_statement_enum:
5192           break;
5193
5194           /* We can only get here when relaxing is turned on.  */
5195         case lang_address_statement_enum:
5196           break;
5197
5198         default:
5199           FAIL ();
5200           break;
5201         }
5202       prev = &s->header.next;
5203     }
5204   return dot;
5205 }
5206
5207 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5208    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5209    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5210    segments.  We are allowed an opportunity to override this decision.  */
5211
5212 bfd_boolean
5213 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5214                                     bfd * abfd ATTRIBUTE_UNUSED,
5215                                     asection * current_section,
5216                                     asection * previous_section,
5217                                     bfd_boolean new_segment)
5218 {
5219   lang_output_section_statement_type * cur;
5220   lang_output_section_statement_type * prev;
5221
5222   /* The checks below are only necessary when the BFD library has decided
5223      that the two sections ought to be placed into the same segment.  */
5224   if (new_segment)
5225     return TRUE;
5226
5227   /* Paranoia checks.  */
5228   if (current_section == NULL || previous_section == NULL)
5229     return new_segment;
5230
5231   /* Find the memory regions associated with the two sections.
5232      We call lang_output_section_find() here rather than scanning the list
5233      of output sections looking for a matching section pointer because if
5234      we have a large number of sections then a hash lookup is faster.  */
5235   cur  = lang_output_section_find (current_section->name);
5236   prev = lang_output_section_find (previous_section->name);
5237
5238   /* More paranoia.  */
5239   if (cur == NULL || prev == NULL)
5240     return new_segment;
5241
5242   /* If the regions are different then force the sections to live in
5243      different segments.  See the email thread starting at the following
5244      URL for the reasons why this is necessary:
5245      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5246   return cur->region != prev->region;
5247 }
5248
5249 void
5250 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5251 {
5252   lang_statement_iteration++;
5253   lang_size_sections_1 (&statement_list.head, abs_output_section,
5254                         0, 0, relax, check_regions);
5255 }
5256
5257 void
5258 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5259 {
5260   expld.phase = lang_allocating_phase_enum;
5261   expld.dataseg.phase = exp_dataseg_none;
5262
5263   one_lang_size_sections_pass (relax, check_regions);
5264   if (expld.dataseg.phase == exp_dataseg_end_seen
5265       && link_info.relro && expld.dataseg.relro_end)
5266     {
5267       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5268          to put expld.dataseg.relro on a (common) page boundary.  */
5269       bfd_vma min_base, old_base, relro_end, maxpage;
5270
5271       expld.dataseg.phase = exp_dataseg_relro_adjust;
5272       maxpage = expld.dataseg.maxpagesize;
5273       /* MIN_BASE is the absolute minimum address we are allowed to start the
5274          read-write segment (byte before will be mapped read-only).  */
5275       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5276       /* OLD_BASE is the address for a feasible minimum address which will
5277          still not cause a data overlap inside MAXPAGE causing file offset skip
5278          by MAXPAGE.  */
5279       old_base = expld.dataseg.base;
5280       expld.dataseg.base += (-expld.dataseg.relro_end
5281                              & (expld.dataseg.pagesize - 1));
5282       /* Compute the expected PT_GNU_RELRO segment end.  */
5283       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5284                    & ~(expld.dataseg.pagesize - 1));
5285       if (min_base + maxpage < expld.dataseg.base)
5286         {
5287           expld.dataseg.base -= maxpage;
5288           relro_end -= maxpage;
5289         }
5290       lang_reset_memory_regions ();
5291       one_lang_size_sections_pass (relax, check_regions);
5292       if (expld.dataseg.relro_end > relro_end)
5293         {
5294           /* The alignment of sections between DATA_SEGMENT_ALIGN
5295              and DATA_SEGMENT_RELRO_END caused huge padding to be
5296              inserted at DATA_SEGMENT_RELRO_END.  Try to start a bit lower so
5297              that the section alignments will fit in.  */
5298           asection *sec;
5299           unsigned int max_alignment_power = 0;
5300
5301           /* Find maximum alignment power of sections between
5302              DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5303           for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5304             if (sec->vma >= expld.dataseg.base
5305                 && sec->vma < expld.dataseg.relro_end
5306                 && sec->alignment_power > max_alignment_power)
5307               max_alignment_power = sec->alignment_power;
5308
5309           if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5310             {
5311               if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
5312                 expld.dataseg.base += expld.dataseg.pagesize;
5313               expld.dataseg.base -= (1 << max_alignment_power);
5314               lang_reset_memory_regions ();
5315               one_lang_size_sections_pass (relax, check_regions);
5316             }
5317         }
5318       link_info.relro_start = expld.dataseg.base;
5319       link_info.relro_end = expld.dataseg.relro_end;
5320     }
5321   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5322     {
5323       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5324          a page could be saved in the data segment.  */
5325       bfd_vma first, last;
5326
5327       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5328       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5329       if (first && last
5330           && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5331               != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5332           && first + last <= expld.dataseg.pagesize)
5333         {
5334           expld.dataseg.phase = exp_dataseg_adjust;
5335           lang_reset_memory_regions ();
5336           one_lang_size_sections_pass (relax, check_regions);
5337         }
5338     }
5339
5340   expld.phase = lang_final_phase_enum;
5341 }
5342
5343 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5344
5345 static bfd_vma
5346 lang_do_assignments_1 (lang_statement_union_type *s,
5347                        lang_output_section_statement_type *current_os,
5348                        fill_type *fill,
5349                        bfd_vma dot)
5350 {
5351   for (; s != NULL; s = s->header.next)
5352     {
5353       switch (s->header.type)
5354         {
5355         case lang_constructors_statement_enum:
5356           dot = lang_do_assignments_1 (constructor_list.head,
5357                                        current_os, fill, dot);
5358           break;
5359
5360         case lang_output_section_statement_enum:
5361           {
5362             lang_output_section_statement_type *os;
5363
5364             os = &(s->output_section_statement);
5365             if (os->bfd_section != NULL && !os->ignored)
5366               {
5367                 dot = os->bfd_section->vma;
5368
5369                 lang_do_assignments_1 (os->children.head, os, os->fill, dot);
5370
5371                 /* .tbss sections effectively have zero size.  */
5372                 if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5373                     || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5374                     || link_info.relocatable)
5375                   dot += TO_ADDR (os->bfd_section->size);
5376
5377                 if (os->update_dot_tree != NULL)
5378                   exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5379               }
5380           }
5381           break;
5382
5383         case lang_wild_statement_enum:
5384
5385           dot = lang_do_assignments_1 (s->wild_statement.children.head,
5386                                        current_os, fill, dot);
5387           break;
5388
5389         case lang_object_symbols_statement_enum:
5390         case lang_output_statement_enum:
5391         case lang_target_statement_enum:
5392           break;
5393
5394         case lang_data_statement_enum:
5395           exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5396           if (expld.result.valid_p)
5397             s->data_statement.value = (expld.result.value
5398                                        + expld.result.section->vma);
5399           else
5400             einfo (_("%F%P: invalid data statement\n"));
5401           {
5402             unsigned int size;
5403             switch (s->data_statement.type)
5404               {
5405               default:
5406                 abort ();
5407               case QUAD:
5408               case SQUAD:
5409                 size = QUAD_SIZE;
5410                 break;
5411               case LONG:
5412                 size = LONG_SIZE;
5413                 break;
5414               case SHORT:
5415                 size = SHORT_SIZE;
5416                 break;
5417               case BYTE:
5418                 size = BYTE_SIZE;
5419                 break;
5420               }
5421             if (size < TO_SIZE ((unsigned) 1))
5422               size = TO_SIZE ((unsigned) 1);
5423             dot += TO_ADDR (size);
5424           }
5425           break;
5426
5427         case lang_reloc_statement_enum:
5428           exp_fold_tree (s->reloc_statement.addend_exp,
5429                          bfd_abs_section_ptr, &dot);
5430           if (expld.result.valid_p)
5431             s->reloc_statement.addend_value = expld.result.value;
5432           else
5433             einfo (_("%F%P: invalid reloc statement\n"));
5434           dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5435           break;
5436
5437         case lang_input_section_enum:
5438           {
5439             asection *in = s->input_section.section;
5440
5441             if ((in->flags & SEC_EXCLUDE) == 0)
5442               dot += TO_ADDR (in->size);
5443           }
5444           break;
5445
5446         case lang_input_statement_enum:
5447           break;
5448
5449         case lang_fill_statement_enum:
5450           fill = s->fill_statement.fill;
5451           break;
5452
5453         case lang_assignment_statement_enum:
5454           exp_fold_tree (s->assignment_statement.exp,
5455                          current_os->bfd_section,
5456                          &dot);
5457           break;
5458
5459         case lang_padding_statement_enum:
5460           dot += TO_ADDR (s->padding_statement.size);
5461           break;
5462
5463         case lang_group_statement_enum:
5464           dot = lang_do_assignments_1 (s->group_statement.children.head,
5465                                        current_os, fill, dot);
5466           break;
5467
5468         case lang_insert_statement_enum:
5469           break;
5470
5471         case lang_address_statement_enum:
5472           break;
5473
5474         default:
5475           FAIL ();
5476           break;
5477         }
5478     }
5479   return dot;
5480 }
5481
5482 void
5483 lang_do_assignments (void)
5484 {
5485   lang_statement_iteration++;
5486   lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
5487 }
5488
5489 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5490    operator .startof. (section_name), it produces an undefined symbol
5491    .startof.section_name.  Similarly, when it sees
5492    .sizeof. (section_name), it produces an undefined symbol
5493    .sizeof.section_name.  For all the output sections, we look for
5494    such symbols, and set them to the correct value.  */
5495
5496 static void
5497 lang_set_startof (void)
5498 {
5499   asection *s;
5500
5501   if (link_info.relocatable)
5502     return;
5503
5504   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5505     {
5506       const char *secname;
5507       char *buf;
5508       struct bfd_link_hash_entry *h;
5509
5510       secname = bfd_get_section_name (link_info.output_bfd, s);
5511       buf = (char *) xmalloc (10 + strlen (secname));
5512
5513       sprintf (buf, ".startof.%s", secname);
5514       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5515       if (h != NULL && h->type == bfd_link_hash_undefined)
5516         {
5517           h->type = bfd_link_hash_defined;
5518           h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5519           h->u.def.section = bfd_abs_section_ptr;
5520         }
5521
5522       sprintf (buf, ".sizeof.%s", secname);
5523       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5524       if (h != NULL && h->type == bfd_link_hash_undefined)
5525         {
5526           h->type = bfd_link_hash_defined;
5527           h->u.def.value = TO_ADDR (s->size);
5528           h->u.def.section = bfd_abs_section_ptr;
5529         }
5530
5531       free (buf);
5532     }
5533 }
5534
5535 static void
5536 lang_end (void)
5537 {
5538   struct bfd_link_hash_entry *h;
5539   bfd_boolean warn;
5540
5541   if ((link_info.relocatable && !link_info.gc_sections)
5542       || (link_info.shared && !link_info.executable))
5543     warn = entry_from_cmdline;
5544   else
5545     warn = TRUE;
5546
5547   /* Force the user to specify a root when generating a relocatable with
5548      --gc-sections.  */
5549   if (link_info.gc_sections && link_info.relocatable
5550       && (entry_symbol.name == NULL
5551           && ldlang_undef_chain_list_head == NULL))
5552     einfo (_("%P%F: gc-sections requires either an entry or "
5553              "an undefined symbol\n"));
5554
5555   if (entry_symbol.name == NULL)
5556     {
5557       /* No entry has been specified.  Look for the default entry, but
5558          don't warn if we don't find it.  */
5559       entry_symbol.name = entry_symbol_default;
5560       warn = FALSE;
5561     }
5562
5563   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5564                             FALSE, FALSE, TRUE);
5565   if (h != NULL
5566       && (h->type == bfd_link_hash_defined
5567           || h->type == bfd_link_hash_defweak)
5568       && h->u.def.section->output_section != NULL)
5569     {
5570       bfd_vma val;
5571
5572       val = (h->u.def.value
5573              + bfd_get_section_vma (link_info.output_bfd,
5574                                     h->u.def.section->output_section)
5575              + h->u.def.section->output_offset);
5576       if (! bfd_set_start_address (link_info.output_bfd, val))
5577         einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5578     }
5579   else
5580     {
5581       bfd_vma val;
5582       const char *send;
5583
5584       /* We couldn't find the entry symbol.  Try parsing it as a
5585          number.  */
5586       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5587       if (*send == '\0')
5588         {
5589           if (! bfd_set_start_address (link_info.output_bfd, val))
5590             einfo (_("%P%F: can't set start address\n"));
5591         }
5592       else
5593         {
5594           asection *ts;
5595
5596           /* Can't find the entry symbol, and it's not a number.  Use
5597              the first address in the text section.  */
5598           ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5599           if (ts != NULL)
5600             {
5601               if (warn)
5602                 einfo (_("%P: warning: cannot find entry symbol %s;"
5603                          " defaulting to %V\n"),
5604                        entry_symbol.name,
5605                        bfd_get_section_vma (link_info.output_bfd, ts));
5606               if (!(bfd_set_start_address
5607                     (link_info.output_bfd,
5608                      bfd_get_section_vma (link_info.output_bfd, ts))))
5609                 einfo (_("%P%F: can't set start address\n"));
5610             }
5611           else
5612             {
5613               if (warn)
5614                 einfo (_("%P: warning: cannot find entry symbol %s;"
5615                          " not setting start address\n"),
5616                        entry_symbol.name);
5617             }
5618         }
5619     }
5620
5621   /* Don't bfd_hash_table_free (&lang_definedness_table);
5622      map file output may result in a call of lang_track_definedness.  */
5623 }
5624
5625 /* This is a small function used when we want to ignore errors from
5626    BFD.  */
5627
5628 static void
5629 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5630 {
5631   /* Don't do anything.  */
5632 }
5633
5634 /* Check that the architecture of all the input files is compatible
5635    with the output file.  Also call the backend to let it do any
5636    other checking that is needed.  */
5637
5638 static void
5639 lang_check (void)
5640 {
5641   lang_statement_union_type *file;
5642   bfd *input_bfd;
5643   const bfd_arch_info_type *compatible;
5644
5645   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5646     {
5647       input_bfd = file->input_statement.the_bfd;
5648       compatible
5649         = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5650                                    command_line.accept_unknown_input_arch);
5651
5652       /* In general it is not possible to perform a relocatable
5653          link between differing object formats when the input
5654          file has relocations, because the relocations in the
5655          input format may not have equivalent representations in
5656          the output format (and besides BFD does not translate
5657          relocs for other link purposes than a final link).  */
5658       if ((link_info.relocatable || link_info.emitrelocations)
5659           && (compatible == NULL
5660               || (bfd_get_flavour (input_bfd)
5661                   != bfd_get_flavour (link_info.output_bfd)))
5662           && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5663         {
5664           einfo (_("%P%F: Relocatable linking with relocations from"
5665                    " format %s (%B) to format %s (%B) is not supported\n"),
5666                  bfd_get_target (input_bfd), input_bfd,
5667                  bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5668           /* einfo with %F exits.  */
5669         }
5670
5671       if (compatible == NULL)
5672         {
5673           if (command_line.warn_mismatch)
5674             einfo (_("%P%X: %s architecture of input file `%B'"
5675                      " is incompatible with %s output\n"),
5676                    bfd_printable_name (input_bfd), input_bfd,
5677                    bfd_printable_name (link_info.output_bfd));
5678         }
5679       else if (bfd_count_sections (input_bfd))
5680         {
5681           /* If the input bfd has no contents, it shouldn't set the
5682              private data of the output bfd.  */
5683
5684           bfd_error_handler_type pfn = NULL;
5685
5686           /* If we aren't supposed to warn about mismatched input
5687              files, temporarily set the BFD error handler to a
5688              function which will do nothing.  We still want to call
5689              bfd_merge_private_bfd_data, since it may set up
5690              information which is needed in the output file.  */
5691           if (! command_line.warn_mismatch)
5692             pfn = bfd_set_error_handler (ignore_bfd_errors);
5693           if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5694             {
5695               if (command_line.warn_mismatch)
5696                 einfo (_("%P%X: failed to merge target specific data"
5697                          " of file %B\n"), input_bfd);
5698             }
5699           if (! command_line.warn_mismatch)
5700             bfd_set_error_handler (pfn);
5701         }
5702     }
5703 }
5704
5705 /* Look through all the global common symbols and attach them to the
5706    correct section.  The -sort-common command line switch may be used
5707    to roughly sort the entries by alignment.  */
5708
5709 static void
5710 lang_common (void)
5711 {
5712   if (command_line.inhibit_common_definition)
5713     return;
5714   if (link_info.relocatable
5715       && ! command_line.force_common_definition)
5716     return;
5717
5718   if (! config.sort_common)
5719     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5720   else
5721     {
5722       unsigned int power;
5723
5724       if (config.sort_common == sort_descending)
5725         {
5726           for (power = 4; power > 0; power--)
5727             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5728
5729           power = 0;
5730           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5731         }
5732       else
5733         {
5734           for (power = 0; power <= 4; power++)
5735             bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5736
5737           power = UINT_MAX;
5738           bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5739         }
5740     }
5741 }
5742
5743 /* Place one common symbol in the correct section.  */
5744
5745 static bfd_boolean
5746 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5747 {
5748   unsigned int power_of_two;
5749   bfd_vma size;
5750   asection *section;
5751
5752   if (h->type != bfd_link_hash_common)
5753     return TRUE;
5754
5755   size = h->u.c.size;
5756   power_of_two = h->u.c.p->alignment_power;
5757
5758   if (config.sort_common == sort_descending
5759       && power_of_two < *(unsigned int *) info)
5760     return TRUE;
5761   else if (config.sort_common == sort_ascending
5762            && power_of_two > *(unsigned int *) info)
5763     return TRUE;
5764
5765   section = h->u.c.p->section;
5766   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5767     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5768            h->root.string);
5769
5770   if (config.map_file != NULL)
5771     {
5772       static bfd_boolean header_printed;
5773       int len;
5774       char *name;
5775       char buf[50];
5776
5777       if (! header_printed)
5778         {
5779           minfo (_("\nAllocating common symbols\n"));
5780           minfo (_("Common symbol       size              file\n\n"));
5781           header_printed = TRUE;
5782         }
5783
5784       name = bfd_demangle (link_info.output_bfd, h->root.string,
5785                            DMGL_ANSI | DMGL_PARAMS);
5786       if (name == NULL)
5787         {
5788           minfo ("%s", h->root.string);
5789           len = strlen (h->root.string);
5790         }
5791       else
5792         {
5793           minfo ("%s", name);
5794           len = strlen (name);
5795           free (name);
5796         }
5797
5798       if (len >= 19)
5799         {
5800           print_nl ();
5801           len = 0;
5802         }
5803       while (len < 20)
5804         {
5805           print_space ();
5806           ++len;
5807         }
5808
5809       minfo ("0x");
5810       if (size <= 0xffffffff)
5811         sprintf (buf, "%lx", (unsigned long) size);
5812       else
5813         sprintf_vma (buf, size);
5814       minfo ("%s", buf);
5815       len = strlen (buf);
5816
5817       while (len < 16)
5818         {
5819           print_space ();
5820           ++len;
5821         }
5822
5823       minfo ("%B\n", section->owner);
5824     }
5825
5826   return TRUE;
5827 }
5828
5829 /* Run through the input files and ensure that every input section has
5830    somewhere to go.  If one is found without a destination then create
5831    an input request and place it into the statement tree.  */
5832
5833 static void
5834 lang_place_orphans (void)
5835 {
5836   LANG_FOR_EACH_INPUT_STATEMENT (file)
5837     {
5838       asection *s;
5839
5840       for (s = file->the_bfd->sections; s != NULL; s = s->next)
5841         {
5842           if (s->output_section == NULL)
5843             {
5844               /* This section of the file is not attached, root
5845                  around for a sensible place for it to go.  */
5846
5847               if (file->just_syms_flag)
5848                 bfd_link_just_syms (file->the_bfd, s, &link_info);
5849               else if ((s->flags & SEC_EXCLUDE) != 0)
5850                 s->output_section = bfd_abs_section_ptr;
5851               else if (strcmp (s->name, "COMMON") == 0)
5852                 {
5853                   /* This is a lonely common section which must have
5854                      come from an archive.  We attach to the section
5855                      with the wildcard.  */
5856                   if (! link_info.relocatable
5857                       || command_line.force_common_definition)
5858                     {
5859                       if (default_common_section == NULL)
5860                         default_common_section
5861                           = lang_output_section_statement_lookup (".bss", 0,
5862                                                                   TRUE);
5863                       lang_add_section (&default_common_section->children, s,
5864                                         default_common_section);
5865                     }
5866                 }
5867               else
5868                 {
5869                   const char *name = s->name;
5870                   int constraint = 0;
5871
5872                   if (config.unique_orphan_sections
5873                       || unique_section_p (s, NULL))
5874                     constraint = SPECIAL;
5875
5876                   if (!ldemul_place_orphan (s, name, constraint))
5877                     {
5878                       lang_output_section_statement_type *os;
5879                       os = lang_output_section_statement_lookup (name,
5880                                                                  constraint,
5881                                                                  TRUE);
5882                       lang_add_section (&os->children, s, os);
5883                     }
5884                 }
5885             }
5886         }
5887     }
5888 }
5889
5890 void
5891 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
5892 {
5893   flagword *ptr_flags;
5894
5895   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
5896   while (*flags)
5897     {
5898       switch (*flags)
5899         {
5900         case 'A': case 'a':
5901           *ptr_flags |= SEC_ALLOC;
5902           break;
5903
5904         case 'R': case 'r':
5905           *ptr_flags |= SEC_READONLY;
5906           break;
5907
5908         case 'W': case 'w':
5909           *ptr_flags |= SEC_DATA;
5910           break;
5911
5912         case 'X': case 'x':
5913           *ptr_flags |= SEC_CODE;
5914           break;
5915
5916         case 'L': case 'l':
5917         case 'I': case 'i':
5918           *ptr_flags |= SEC_LOAD;
5919           break;
5920
5921         default:
5922           einfo (_("%P%F: invalid syntax in flags\n"));
5923           break;
5924         }
5925       flags++;
5926     }
5927 }
5928
5929 /* Call a function on each input file.  This function will be called
5930    on an archive, but not on the elements.  */
5931
5932 void
5933 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
5934 {
5935   lang_input_statement_type *f;
5936
5937   for (f = (lang_input_statement_type *) input_file_chain.head;
5938        f != NULL;
5939        f = (lang_input_statement_type *) f->next_real_file)
5940     func (f);
5941 }
5942
5943 /* Call a function on each file.  The function will be called on all
5944    the elements of an archive which are included in the link, but will
5945    not be called on the archive file itself.  */
5946
5947 void
5948 lang_for_each_file (void (*func) (lang_input_statement_type *))
5949 {
5950   LANG_FOR_EACH_INPUT_STATEMENT (f)
5951     {
5952       func (f);
5953     }
5954 }
5955
5956 void
5957 ldlang_add_file (lang_input_statement_type *entry)
5958 {
5959   lang_statement_append (&file_chain,
5960                          (lang_statement_union_type *) entry,
5961                          &entry->next);
5962
5963   /* The BFD linker needs to have a list of all input BFDs involved in
5964      a link.  */
5965   ASSERT (entry->the_bfd->link_next == NULL);
5966   ASSERT (entry->the_bfd != link_info.output_bfd);
5967
5968   *link_info.input_bfds_tail = entry->the_bfd;
5969   link_info.input_bfds_tail = &entry->the_bfd->link_next;
5970   entry->the_bfd->usrdata = entry;
5971   bfd_set_gp_size (entry->the_bfd, g_switch_value);
5972
5973   /* Look through the sections and check for any which should not be
5974      included in the link.  We need to do this now, so that we can
5975      notice when the backend linker tries to report multiple
5976      definition errors for symbols which are in sections we aren't
5977      going to link.  FIXME: It might be better to entirely ignore
5978      symbols which are defined in sections which are going to be
5979      discarded.  This would require modifying the backend linker for
5980      each backend which might set the SEC_LINK_ONCE flag.  If we do
5981      this, we should probably handle SEC_EXCLUDE in the same way.  */
5982
5983   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
5984 }
5985
5986 void
5987 lang_add_output (const char *name, int from_script)
5988 {
5989   /* Make -o on command line override OUTPUT in script.  */
5990   if (!had_output_filename || !from_script)
5991     {
5992       output_filename = name;
5993       had_output_filename = TRUE;
5994     }
5995 }
5996
5997 static lang_output_section_statement_type *current_section;
5998
5999 static int
6000 topower (int x)
6001 {
6002   unsigned int i = 1;
6003   int l;
6004
6005   if (x < 0)
6006     return -1;
6007
6008   for (l = 0; l < 32; l++)
6009     {
6010       if (i >= (unsigned int) x)
6011         return l;
6012       i <<= 1;
6013     }
6014
6015   return 0;
6016 }
6017
6018 lang_output_section_statement_type *
6019 lang_enter_output_section_statement (const char *output_section_statement_name,
6020                                      etree_type *address_exp,
6021                                      enum section_type sectype,
6022                                      etree_type *align,
6023                                      etree_type *subalign,
6024                                      etree_type *ebase,
6025                                      int constraint)
6026 {
6027   lang_output_section_statement_type *os;
6028
6029   os = lang_output_section_statement_lookup (output_section_statement_name,
6030                                              constraint, TRUE);
6031   current_section = os;
6032
6033   if (os->addr_tree == NULL)
6034     {
6035       os->addr_tree = address_exp;
6036     }
6037   os->sectype = sectype;
6038   if (sectype != noload_section)
6039     os->flags = SEC_NO_FLAGS;
6040   else
6041     os->flags = SEC_NEVER_LOAD;
6042   os->block_value = 1;
6043
6044   /* Make next things chain into subchain of this.  */
6045   push_stat_ptr (&os->children);
6046
6047   os->subsection_alignment =
6048     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6049   os->section_alignment =
6050     topower (exp_get_value_int (align, -1, "section alignment"));
6051
6052   os->load_base = ebase;
6053   return os;
6054 }
6055
6056 void
6057 lang_final (void)
6058 {
6059   lang_output_statement_type *new_stmt;
6060
6061   new_stmt = new_stat (lang_output_statement, stat_ptr);
6062   new_stmt->name = output_filename;
6063
6064 }
6065
6066 /* Reset the current counters in the regions.  */
6067
6068 void
6069 lang_reset_memory_regions (void)
6070 {
6071   lang_memory_region_type *p = lang_memory_region_list;
6072   asection *o;
6073   lang_output_section_statement_type *os;
6074
6075   for (p = lang_memory_region_list; p != NULL; p = p->next)
6076     {
6077       p->current = p->origin;
6078       p->last_os = NULL;
6079     }
6080
6081   for (os = &lang_output_section_statement.head->output_section_statement;
6082        os != NULL;
6083        os = os->next)
6084     {
6085       os->processed_vma = FALSE;
6086       os->processed_lma = FALSE;
6087     }
6088
6089   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6090     {
6091       /* Save the last size for possible use by bfd_relax_section.  */
6092       o->rawsize = o->size;
6093       o->size = 0;
6094     }
6095 }
6096
6097 /* Worker for lang_gc_sections_1.  */
6098
6099 static void
6100 gc_section_callback (lang_wild_statement_type *ptr,
6101                      struct wildcard_list *sec ATTRIBUTE_UNUSED,
6102                      asection *section,
6103                      lang_input_statement_type *file ATTRIBUTE_UNUSED,
6104                      void *data ATTRIBUTE_UNUSED)
6105 {
6106   /* If the wild pattern was marked KEEP, the member sections
6107      should be as well.  */
6108   if (ptr->keep_sections)
6109     section->flags |= SEC_KEEP;
6110 }
6111
6112 /* Iterate over sections marking them against GC.  */
6113
6114 static void
6115 lang_gc_sections_1 (lang_statement_union_type *s)
6116 {
6117   for (; s != NULL; s = s->header.next)
6118     {
6119       switch (s->header.type)
6120         {
6121         case lang_wild_statement_enum:
6122           walk_wild (&s->wild_statement, gc_section_callback, NULL);
6123           break;
6124         case lang_constructors_statement_enum:
6125           lang_gc_sections_1 (constructor_list.head);
6126           break;
6127         case lang_output_section_statement_enum:
6128           lang_gc_sections_1 (s->output_section_statement.children.head);
6129           break;
6130         case lang_group_statement_enum:
6131           lang_gc_sections_1 (s->group_statement.children.head);
6132           break;
6133         default:
6134           break;
6135         }
6136     }
6137 }
6138
6139 static void
6140 lang_gc_sections (void)
6141 {
6142   /* Keep all sections so marked in the link script.  */
6143
6144   lang_gc_sections_1 (statement_list.head);
6145
6146   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6147      the special case of debug info.  (See bfd/stabs.c)
6148      Twiddle the flag here, to simplify later linker code.  */
6149   if (link_info.relocatable)
6150     {
6151       LANG_FOR_EACH_INPUT_STATEMENT (f)
6152         {
6153           asection *sec;
6154           for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6155             if ((sec->flags & SEC_DEBUGGING) == 0)
6156               sec->flags &= ~SEC_EXCLUDE;
6157         }
6158     }
6159
6160   if (link_info.gc_sections)
6161     bfd_gc_sections (link_info.output_bfd, &link_info);
6162 }
6163
6164 /* Worker for lang_find_relro_sections_1.  */
6165
6166 static void
6167 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6168                              struct wildcard_list *sec ATTRIBUTE_UNUSED,
6169                              asection *section,
6170                              lang_input_statement_type *file ATTRIBUTE_UNUSED,
6171                              void *data)
6172 {
6173   /* Discarded, excluded and ignored sections effectively have zero
6174      size.  */
6175   if (section->output_section != NULL
6176       && section->output_section->owner == link_info.output_bfd
6177       && (section->output_section->flags & SEC_EXCLUDE) == 0
6178       && !IGNORE_SECTION (section)
6179       && section->size != 0)
6180     {
6181       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6182       *has_relro_section = TRUE;
6183     }
6184 }
6185
6186 /* Iterate over sections for relro sections.  */
6187
6188 static void
6189 lang_find_relro_sections_1 (lang_statement_union_type *s,
6190                             bfd_boolean *has_relro_section)
6191 {
6192   if (*has_relro_section)
6193     return;
6194
6195   for (; s != NULL; s = s->header.next)
6196     {
6197       if (s == expld.dataseg.relro_end_stat)
6198         break;
6199
6200       switch (s->header.type)
6201         {
6202         case lang_wild_statement_enum:
6203           walk_wild (&s->wild_statement,
6204                      find_relro_section_callback,
6205                      has_relro_section);
6206           break;
6207         case lang_constructors_statement_enum:
6208           lang_find_relro_sections_1 (constructor_list.head,
6209                                       has_relro_section);
6210           break;
6211         case lang_output_section_statement_enum:
6212           lang_find_relro_sections_1 (s->output_section_statement.children.head,
6213                                       has_relro_section);
6214           break;
6215         case lang_group_statement_enum:
6216           lang_find_relro_sections_1 (s->group_statement.children.head,
6217                                       has_relro_section);
6218           break;
6219         default:
6220           break;
6221         }
6222     }
6223 }
6224
6225 static void
6226 lang_find_relro_sections (void)
6227 {
6228   bfd_boolean has_relro_section = FALSE;
6229
6230   /* Check all sections in the link script.  */
6231
6232   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6233                               &has_relro_section);
6234
6235   if (!has_relro_section)
6236     link_info.relro = FALSE;
6237 }
6238
6239 /* Relax all sections until bfd_relax_section gives up.  */
6240
6241 void
6242 lang_relax_sections (bfd_boolean need_layout)
6243 {
6244   if (RELAXATION_ENABLED)
6245     {
6246       /* We may need more than one relaxation pass.  */
6247       int i = link_info.relax_pass;
6248
6249       /* The backend can use it to determine the current pass.  */
6250       link_info.relax_pass = 0;
6251
6252       while (i--)
6253         {
6254           /* Keep relaxing until bfd_relax_section gives up.  */
6255           bfd_boolean relax_again;
6256
6257           link_info.relax_trip = -1;
6258           do
6259             {
6260               link_info.relax_trip++;
6261
6262               /* Note: pe-dll.c does something like this also.  If you find
6263                  you need to change this code, you probably need to change
6264                  pe-dll.c also.  DJ  */
6265
6266               /* Do all the assignments with our current guesses as to
6267                  section sizes.  */
6268               lang_do_assignments ();
6269
6270               /* We must do this after lang_do_assignments, because it uses
6271                  size.  */
6272               lang_reset_memory_regions ();
6273
6274               /* Perform another relax pass - this time we know where the
6275                  globals are, so can make a better guess.  */
6276               relax_again = FALSE;
6277               lang_size_sections (&relax_again, FALSE);
6278             }
6279           while (relax_again);
6280
6281           link_info.relax_pass++;
6282         }
6283       need_layout = TRUE;
6284     }
6285
6286   if (need_layout)
6287     {
6288       /* Final extra sizing to report errors.  */
6289       lang_do_assignments ();
6290       lang_reset_memory_regions ();
6291       lang_size_sections (NULL, TRUE);
6292     }
6293 }
6294
6295 void
6296 lang_process (void)
6297 {
6298   /* Finalize dynamic list.  */
6299   if (link_info.dynamic_list)
6300     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6301
6302   current_target = default_target;
6303
6304   /* Open the output file.  */
6305   lang_for_each_statement (ldlang_open_output);
6306   init_opb ();
6307
6308   ldemul_create_output_section_statements ();
6309
6310   /* Add to the hash table all undefineds on the command line.  */
6311   lang_place_undefineds ();
6312
6313   if (!bfd_section_already_linked_table_init ())
6314     einfo (_("%P%F: Failed to create hash table\n"));
6315
6316   /* Create a bfd for each input file.  */
6317   current_target = default_target;
6318   open_input_bfds (statement_list.head, FALSE);
6319
6320   link_info.gc_sym_list = &entry_symbol;
6321   if (entry_symbol.name == NULL)
6322     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6323
6324   ldemul_after_open ();
6325
6326   bfd_section_already_linked_table_free ();
6327
6328   /* Make sure that we're not mixing architectures.  We call this
6329      after all the input files have been opened, but before we do any
6330      other processing, so that any operations merge_private_bfd_data
6331      does on the output file will be known during the rest of the
6332      link.  */
6333   lang_check ();
6334
6335   /* Handle .exports instead of a version script if we're told to do so.  */
6336   if (command_line.version_exports_section)
6337     lang_do_version_exports_section ();
6338
6339   /* Build all sets based on the information gathered from the input
6340      files.  */
6341   ldctor_build_sets ();
6342
6343   /* Remove unreferenced sections if asked to.  */
6344   lang_gc_sections ();
6345
6346   /* Size up the common data.  */
6347   lang_common ();
6348
6349   /* Update wild statements.  */
6350   update_wild_statements (statement_list.head);
6351
6352   /* Run through the contours of the script and attach input sections
6353      to the correct output sections.  */
6354   map_input_to_output_sections (statement_list.head, NULL, NULL);
6355
6356   process_insert_statements ();
6357
6358   /* Find any sections not attached explicitly and handle them.  */
6359   lang_place_orphans ();
6360
6361   if (! link_info.relocatable)
6362     {
6363       asection *found;
6364
6365       /* Merge SEC_MERGE sections.  This has to be done after GC of
6366          sections, so that GCed sections are not merged, but before
6367          assigning dynamic symbols, since removing whole input sections
6368          is hard then.  */
6369       bfd_merge_sections (link_info.output_bfd, &link_info);
6370
6371       /* Look for a text section and set the readonly attribute in it.  */
6372       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6373
6374       if (found != NULL)
6375         {
6376           if (config.text_read_only)
6377             found->flags |= SEC_READONLY;
6378           else
6379             found->flags &= ~SEC_READONLY;
6380         }
6381     }
6382
6383   /* Do anything special before sizing sections.  This is where ELF
6384      and other back-ends size dynamic sections.  */
6385   ldemul_before_allocation ();
6386
6387   /* We must record the program headers before we try to fix the
6388      section positions, since they will affect SIZEOF_HEADERS.  */
6389   lang_record_phdrs ();
6390
6391   /* Check relro sections.  */
6392   if (link_info.relro && ! link_info.relocatable)
6393     lang_find_relro_sections ();
6394
6395   /* Size up the sections.  */
6396   lang_size_sections (NULL, ! RELAXATION_ENABLED);
6397
6398   /* See if anything special should be done now we know how big
6399      everything is.  This is where relaxation is done.  */
6400   ldemul_after_allocation ();
6401
6402   /* Fix any .startof. or .sizeof. symbols.  */
6403   lang_set_startof ();
6404
6405   /* Do all the assignments, now that we know the final resting places
6406      of all the symbols.  */
6407
6408   lang_do_assignments ();
6409
6410   ldemul_finish ();
6411
6412   /* Make sure that the section addresses make sense.  */
6413   if (command_line.check_section_addresses)
6414     lang_check_section_addresses ();
6415
6416   lang_end ();
6417 }
6418
6419 /* EXPORTED TO YACC */
6420
6421 void
6422 lang_add_wild (struct wildcard_spec *filespec,
6423                struct wildcard_list *section_list,
6424                bfd_boolean keep_sections)
6425 {
6426   struct wildcard_list *curr, *next;
6427   lang_wild_statement_type *new_stmt;
6428
6429   /* Reverse the list as the parser puts it back to front.  */
6430   for (curr = section_list, section_list = NULL;
6431        curr != NULL;
6432        section_list = curr, curr = next)
6433     {
6434       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6435         placed_commons = TRUE;
6436
6437       next = curr->next;
6438       curr->next = section_list;
6439     }
6440
6441   if (filespec != NULL && filespec->name != NULL)
6442     {
6443       if (strcmp (filespec->name, "*") == 0)
6444         filespec->name = NULL;
6445       else if (! wildcardp (filespec->name))
6446         lang_has_input_file = TRUE;
6447     }
6448
6449   new_stmt = new_stat (lang_wild_statement, stat_ptr);
6450   new_stmt->filename = NULL;
6451   new_stmt->filenames_sorted = FALSE;
6452   if (filespec != NULL)
6453     {
6454       new_stmt->filename = filespec->name;
6455       new_stmt->filenames_sorted = filespec->sorted == by_name;
6456     }
6457   new_stmt->section_list = section_list;
6458   new_stmt->keep_sections = keep_sections;
6459   lang_list_init (&new_stmt->children);
6460   analyze_walk_wild_section_handler (new_stmt);
6461 }
6462
6463 void
6464 lang_section_start (const char *name, etree_type *address,
6465                     const segment_type *segment)
6466 {
6467   lang_address_statement_type *ad;
6468
6469   ad = new_stat (lang_address_statement, stat_ptr);
6470   ad->section_name = name;
6471   ad->address = address;
6472   ad->segment = segment;
6473 }
6474
6475 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6476    because of a -e argument on the command line, or zero if this is
6477    called by ENTRY in a linker script.  Command line arguments take
6478    precedence.  */
6479
6480 void
6481 lang_add_entry (const char *name, bfd_boolean cmdline)
6482 {
6483   if (entry_symbol.name == NULL
6484       || cmdline
6485       || ! entry_from_cmdline)
6486     {
6487       entry_symbol.name = name;
6488       entry_from_cmdline = cmdline;
6489     }
6490 }
6491
6492 /* Set the default start symbol to NAME.  .em files should use this,
6493    not lang_add_entry, to override the use of "start" if neither the
6494    linker script nor the command line specifies an entry point.  NAME
6495    must be permanently allocated.  */
6496 void
6497 lang_default_entry (const char *name)
6498 {
6499   entry_symbol_default = name;
6500 }
6501
6502 void
6503 lang_add_target (const char *name)
6504 {
6505   lang_target_statement_type *new_stmt;
6506
6507   new_stmt = new_stat (lang_target_statement, stat_ptr);
6508   new_stmt->target = name;
6509 }
6510
6511 void
6512 lang_add_map (const char *name)
6513 {
6514   while (*name)
6515     {
6516       switch (*name)
6517         {
6518         case 'F':
6519           map_option_f = TRUE;
6520           break;
6521         }
6522       name++;
6523     }
6524 }
6525
6526 void
6527 lang_add_fill (fill_type *fill)
6528 {
6529   lang_fill_statement_type *new_stmt;
6530
6531   new_stmt = new_stat (lang_fill_statement, stat_ptr);
6532   new_stmt->fill = fill;
6533 }
6534
6535 void
6536 lang_add_data (int type, union etree_union *exp)
6537 {
6538   lang_data_statement_type *new_stmt;
6539
6540   new_stmt = new_stat (lang_data_statement, stat_ptr);
6541   new_stmt->exp = exp;
6542   new_stmt->type = type;
6543 }
6544
6545 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6546    generate.  HOWTO is the corresponding howto structure (we could
6547    look this up, but the caller has already done so).  SECTION is the
6548    section to generate a reloc against, or NAME is the name of the
6549    symbol to generate a reloc against.  Exactly one of SECTION and
6550    NAME must be NULL.  ADDEND is an expression for the addend.  */
6551
6552 void
6553 lang_add_reloc (bfd_reloc_code_real_type reloc,
6554                 reloc_howto_type *howto,
6555                 asection *section,
6556                 const char *name,
6557                 union etree_union *addend)
6558 {
6559   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6560
6561   p->reloc = reloc;
6562   p->howto = howto;
6563   p->section = section;
6564   p->name = name;
6565   p->addend_exp = addend;
6566
6567   p->addend_value = 0;
6568   p->output_section = NULL;
6569   p->output_offset = 0;
6570 }
6571
6572 lang_assignment_statement_type *
6573 lang_add_assignment (etree_type *exp)
6574 {
6575   lang_assignment_statement_type *new_stmt;
6576
6577   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6578   new_stmt->exp = exp;
6579   return new_stmt;
6580 }
6581
6582 void
6583 lang_add_attribute (enum statement_enum attribute)
6584 {
6585   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6586 }
6587
6588 void
6589 lang_startup (const char *name)
6590 {
6591   if (startup_file != NULL)
6592     {
6593       einfo (_("%P%F: multiple STARTUP files\n"));
6594     }
6595   first_file->filename = name;
6596   first_file->local_sym_name = name;
6597   first_file->real = TRUE;
6598
6599   startup_file = name;
6600 }
6601
6602 void
6603 lang_float (bfd_boolean maybe)
6604 {
6605   lang_float_flag = maybe;
6606 }
6607
6608
6609 /* Work out the load- and run-time regions from a script statement, and
6610    store them in *LMA_REGION and *REGION respectively.
6611
6612    MEMSPEC is the name of the run-time region, or the value of
6613    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6614    LMA_MEMSPEC is the name of the load-time region, or null if the
6615    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6616    had an explicit load address.
6617
6618    It is an error to specify both a load region and a load address.  */
6619
6620 static void
6621 lang_get_regions (lang_memory_region_type **region,
6622                   lang_memory_region_type **lma_region,
6623                   const char *memspec,
6624                   const char *lma_memspec,
6625                   bfd_boolean have_lma,
6626                   bfd_boolean have_vma)
6627 {
6628   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6629
6630   /* If no runtime region or VMA has been specified, but the load region
6631      has been specified, then use the load region for the runtime region
6632      as well.  */
6633   if (lma_memspec != NULL
6634       && ! have_vma
6635       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6636     *region = *lma_region;
6637   else
6638     *region = lang_memory_region_lookup (memspec, FALSE);
6639
6640   if (have_lma && lma_memspec != 0)
6641     einfo (_("%X%P:%S: section has both a load address and a load region\n"));
6642 }
6643
6644 void
6645 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6646                                      lang_output_section_phdr_list *phdrs,
6647                                      const char *lma_memspec)
6648 {
6649   lang_get_regions (&current_section->region,
6650                     &current_section->lma_region,
6651                     memspec, lma_memspec,
6652                     current_section->load_base != NULL,
6653                     current_section->addr_tree != NULL);
6654
6655   /* If this section has no load region or base, but has the same
6656      region as the previous section, then propagate the previous
6657      section's load region.  */
6658
6659   if (!current_section->lma_region && !current_section->load_base
6660       && current_section->region == current_section->prev->region)
6661     current_section->lma_region = current_section->prev->lma_region;
6662   
6663   current_section->fill = fill;
6664   current_section->phdrs = phdrs;
6665   pop_stat_ptr ();
6666 }
6667
6668 /* Create an absolute symbol with the given name with the value of the
6669    address of first byte of the section named.
6670
6671    If the symbol already exists, then do nothing.  */
6672
6673 void
6674 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
6675 {
6676   struct bfd_link_hash_entry *h;
6677
6678   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6679   if (h == NULL)
6680     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6681
6682   if (h->type == bfd_link_hash_new
6683       || h->type == bfd_link_hash_undefined)
6684     {
6685       asection *sec;
6686
6687       h->type = bfd_link_hash_defined;
6688
6689       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6690       if (sec == NULL)
6691         h->u.def.value = 0;
6692       else
6693         h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
6694
6695       h->u.def.section = bfd_abs_section_ptr;
6696     }
6697 }
6698
6699 /* Create an absolute symbol with the given name with the value of the
6700    address of the first byte after the end of the section named.
6701
6702    If the symbol already exists, then do nothing.  */
6703
6704 void
6705 lang_abs_symbol_at_end_of (const char *secname, const char *name)
6706 {
6707   struct bfd_link_hash_entry *h;
6708
6709   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6710   if (h == NULL)
6711     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6712
6713   if (h->type == bfd_link_hash_new
6714       || h->type == bfd_link_hash_undefined)
6715     {
6716       asection *sec;
6717
6718       h->type = bfd_link_hash_defined;
6719
6720       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6721       if (sec == NULL)
6722         h->u.def.value = 0;
6723       else
6724         h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
6725                           + TO_ADDR (sec->size));
6726
6727       h->u.def.section = bfd_abs_section_ptr;
6728     }
6729 }
6730
6731 void
6732 lang_statement_append (lang_statement_list_type *list,
6733                        lang_statement_union_type *element,
6734                        lang_statement_union_type **field)
6735 {
6736   *(list->tail) = element;
6737   list->tail = field;
6738 }
6739
6740 /* Set the output format type.  -oformat overrides scripts.  */
6741
6742 void
6743 lang_add_output_format (const char *format,
6744                         const char *big,
6745                         const char *little,
6746                         int from_script)
6747 {
6748   if (output_target == NULL || !from_script)
6749     {
6750       if (command_line.endian == ENDIAN_BIG
6751           && big != NULL)
6752         format = big;
6753       else if (command_line.endian == ENDIAN_LITTLE
6754                && little != NULL)
6755         format = little;
6756
6757       output_target = format;
6758     }
6759 }
6760
6761 void
6762 lang_add_insert (const char *where, int is_before)
6763 {
6764   lang_insert_statement_type *new_stmt;
6765
6766   new_stmt = new_stat (lang_insert_statement, stat_ptr);
6767   new_stmt->where = where;
6768   new_stmt->is_before = is_before;
6769   saved_script_handle = previous_script_handle;
6770 }
6771
6772 /* Enter a group.  This creates a new lang_group_statement, and sets
6773    stat_ptr to build new statements within the group.  */
6774
6775 void
6776 lang_enter_group (void)
6777 {
6778   lang_group_statement_type *g;
6779
6780   g = new_stat (lang_group_statement, stat_ptr);
6781   lang_list_init (&g->children);
6782   push_stat_ptr (&g->children);
6783 }
6784
6785 /* Leave a group.  This just resets stat_ptr to start writing to the
6786    regular list of statements again.  Note that this will not work if
6787    groups can occur inside anything else which can adjust stat_ptr,
6788    but currently they can't.  */
6789
6790 void
6791 lang_leave_group (void)
6792 {
6793   pop_stat_ptr ();
6794 }
6795
6796 /* Add a new program header.  This is called for each entry in a PHDRS
6797    command in a linker script.  */
6798
6799 void
6800 lang_new_phdr (const char *name,
6801                etree_type *type,
6802                bfd_boolean filehdr,
6803                bfd_boolean phdrs,
6804                etree_type *at,
6805                etree_type *flags)
6806 {
6807   struct lang_phdr *n, **pp;
6808   bfd_boolean hdrs;
6809
6810   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
6811   n->next = NULL;
6812   n->name = name;
6813   n->type = exp_get_value_int (type, 0, "program header type");
6814   n->filehdr = filehdr;
6815   n->phdrs = phdrs;
6816   n->at = at;
6817   n->flags = flags;
6818   
6819   hdrs = n->type == 1 && (phdrs || filehdr);
6820
6821   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
6822     if (hdrs
6823         && (*pp)->type == 1
6824         && !((*pp)->filehdr || (*pp)->phdrs))
6825       {
6826         einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"));
6827         hdrs = FALSE;
6828       }
6829
6830   *pp = n;
6831 }
6832
6833 /* Record the program header information in the output BFD.  FIXME: We
6834    should not be calling an ELF specific function here.  */
6835
6836 static void
6837 lang_record_phdrs (void)
6838 {
6839   unsigned int alc;
6840   asection **secs;
6841   lang_output_section_phdr_list *last;
6842   struct lang_phdr *l;
6843   lang_output_section_statement_type *os;
6844
6845   alc = 10;
6846   secs = (asection **) xmalloc (alc * sizeof (asection *));
6847   last = NULL;
6848
6849   for (l = lang_phdr_list; l != NULL; l = l->next)
6850     {
6851       unsigned int c;
6852       flagword flags;
6853       bfd_vma at;
6854
6855       c = 0;
6856       for (os = &lang_output_section_statement.head->output_section_statement;
6857            os != NULL;
6858            os = os->next)
6859         {
6860           lang_output_section_phdr_list *pl;
6861
6862           if (os->constraint < 0)
6863             continue;
6864
6865           pl = os->phdrs;
6866           if (pl != NULL)
6867             last = pl;
6868           else
6869             {
6870               if (os->sectype == noload_section
6871                   || os->bfd_section == NULL
6872                   || (os->bfd_section->flags & SEC_ALLOC) == 0)
6873                 continue;
6874
6875               /* Don't add orphans to PT_INTERP header.  */
6876               if (l->type == 3)
6877                 continue;
6878
6879               if (last == NULL)
6880                 {
6881                   lang_output_section_statement_type * tmp_os;
6882
6883                   /* If we have not run across a section with a program
6884                      header assigned to it yet, then scan forwards to find
6885                      one.  This prevents inconsistencies in the linker's
6886                      behaviour when a script has specified just a single
6887                      header and there are sections in that script which are
6888                      not assigned to it, and which occur before the first
6889                      use of that header. See here for more details:
6890                      http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
6891                   for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
6892                     if (tmp_os->phdrs)
6893                       {
6894                         last = tmp_os->phdrs;
6895                         break;
6896                       }
6897                   if (last == NULL)
6898                     einfo (_("%F%P: no sections assigned to phdrs\n"));
6899                 }
6900               pl = last;
6901             }
6902
6903           if (os->bfd_section == NULL)
6904             continue;
6905
6906           for (; pl != NULL; pl = pl->next)
6907             {
6908               if (strcmp (pl->name, l->name) == 0)
6909                 {
6910                   if (c >= alc)
6911                     {
6912                       alc *= 2;
6913                       secs = (asection **) xrealloc (secs,
6914                                                      alc * sizeof (asection *));
6915                     }
6916                   secs[c] = os->bfd_section;
6917                   ++c;
6918                   pl->used = TRUE;
6919                 }
6920             }
6921         }
6922
6923       if (l->flags == NULL)
6924         flags = 0;
6925       else
6926         flags = exp_get_vma (l->flags, 0, "phdr flags");
6927
6928       if (l->at == NULL)
6929         at = 0;
6930       else
6931         at = exp_get_vma (l->at, 0, "phdr load address");
6932
6933       if (! bfd_record_phdr (link_info.output_bfd, l->type,
6934                              l->flags != NULL, flags, l->at != NULL,
6935                              at, l->filehdr, l->phdrs, c, secs))
6936         einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
6937     }
6938
6939   free (secs);
6940
6941   /* Make sure all the phdr assignments succeeded.  */
6942   for (os = &lang_output_section_statement.head->output_section_statement;
6943        os != NULL;
6944        os = os->next)
6945     {
6946       lang_output_section_phdr_list *pl;
6947
6948       if (os->constraint < 0
6949           || os->bfd_section == NULL)
6950         continue;
6951
6952       for (pl = os->phdrs;
6953            pl != NULL;
6954            pl = pl->next)
6955         if (! pl->used && strcmp (pl->name, "NONE") != 0)
6956           einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
6957                  os->name, pl->name);
6958     }
6959 }
6960
6961 /* Record a list of sections which may not be cross referenced.  */
6962
6963 void
6964 lang_add_nocrossref (lang_nocrossref_type *l)
6965 {
6966   struct lang_nocrossrefs *n;
6967
6968   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
6969   n->next = nocrossref_list;
6970   n->list = l;
6971   nocrossref_list = n;
6972
6973   /* Set notice_all so that we get informed about all symbols.  */
6974   link_info.notice_all = TRUE;
6975 }
6976 \f
6977 /* Overlay handling.  We handle overlays with some static variables.  */
6978
6979 /* The overlay virtual address.  */
6980 static etree_type *overlay_vma;
6981 /* And subsection alignment.  */
6982 static etree_type *overlay_subalign;
6983
6984 /* An expression for the maximum section size seen so far.  */
6985 static etree_type *overlay_max;
6986
6987 /* A list of all the sections in this overlay.  */
6988
6989 struct overlay_list {
6990   struct overlay_list *next;
6991   lang_output_section_statement_type *os;
6992 };
6993
6994 static struct overlay_list *overlay_list;
6995
6996 /* Start handling an overlay.  */
6997
6998 void
6999 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7000 {
7001   /* The grammar should prevent nested overlays from occurring.  */
7002   ASSERT (overlay_vma == NULL
7003           && overlay_subalign == NULL
7004           && overlay_max == NULL);
7005
7006   overlay_vma = vma_expr;
7007   overlay_subalign = subalign;
7008 }
7009
7010 /* Start a section in an overlay.  We handle this by calling
7011    lang_enter_output_section_statement with the correct VMA.
7012    lang_leave_overlay sets up the LMA and memory regions.  */
7013
7014 void
7015 lang_enter_overlay_section (const char *name)
7016 {
7017   struct overlay_list *n;
7018   etree_type *size;
7019
7020   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7021                                        0, overlay_subalign, 0, 0);
7022
7023   /* If this is the first section, then base the VMA of future
7024      sections on this one.  This will work correctly even if `.' is
7025      used in the addresses.  */
7026   if (overlay_list == NULL)
7027     overlay_vma = exp_nameop (ADDR, name);
7028
7029   /* Remember the section.  */
7030   n = (struct overlay_list *) xmalloc (sizeof *n);
7031   n->os = current_section;
7032   n->next = overlay_list;
7033   overlay_list = n;
7034
7035   size = exp_nameop (SIZEOF, name);
7036
7037   /* Arrange to work out the maximum section end address.  */
7038   if (overlay_max == NULL)
7039     overlay_max = size;
7040   else
7041     overlay_max = exp_binop (MAX_K, overlay_max, size);
7042 }
7043
7044 /* Finish a section in an overlay.  There isn't any special to do
7045    here.  */
7046
7047 void
7048 lang_leave_overlay_section (fill_type *fill,
7049                             lang_output_section_phdr_list *phdrs)
7050 {
7051   const char *name;
7052   char *clean, *s2;
7053   const char *s1;
7054   char *buf;
7055
7056   name = current_section->name;
7057
7058   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7059      region and that no load-time region has been specified.  It doesn't
7060      really matter what we say here, since lang_leave_overlay will
7061      override it.  */
7062   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7063
7064   /* Define the magic symbols.  */
7065
7066   clean = (char *) xmalloc (strlen (name) + 1);
7067   s2 = clean;
7068   for (s1 = name; *s1 != '\0'; s1++)
7069     if (ISALNUM (*s1) || *s1 == '_')
7070       *s2++ = *s1;
7071   *s2 = '\0';
7072
7073   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7074   sprintf (buf, "__load_start_%s", clean);
7075   lang_add_assignment (exp_provide (buf,
7076                                     exp_nameop (LOADADDR, name),
7077                                     FALSE));
7078
7079   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7080   sprintf (buf, "__load_stop_%s", clean);
7081   lang_add_assignment (exp_provide (buf,
7082                                     exp_binop ('+',
7083                                                exp_nameop (LOADADDR, name),
7084                                                exp_nameop (SIZEOF, name)),
7085                                     FALSE));
7086
7087   free (clean);
7088 }
7089
7090 /* Finish an overlay.  If there are any overlay wide settings, this
7091    looks through all the sections in the overlay and sets them.  */
7092
7093 void
7094 lang_leave_overlay (etree_type *lma_expr,
7095                     int nocrossrefs,
7096                     fill_type *fill,
7097                     const char *memspec,
7098                     lang_output_section_phdr_list *phdrs,
7099                     const char *lma_memspec)
7100 {
7101   lang_memory_region_type *region;
7102   lang_memory_region_type *lma_region;
7103   struct overlay_list *l;
7104   lang_nocrossref_type *nocrossref;
7105
7106   lang_get_regions (&region, &lma_region,
7107                     memspec, lma_memspec,
7108                     lma_expr != NULL, FALSE);
7109
7110   nocrossref = NULL;
7111
7112   /* After setting the size of the last section, set '.' to end of the
7113      overlay region.  */
7114   if (overlay_list != NULL)
7115     overlay_list->os->update_dot_tree
7116       = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
7117
7118   l = overlay_list;
7119   while (l != NULL)
7120     {
7121       struct overlay_list *next;
7122
7123       if (fill != NULL && l->os->fill == NULL)
7124         l->os->fill = fill;
7125
7126       l->os->region = region;
7127       l->os->lma_region = lma_region;
7128
7129       /* The first section has the load address specified in the
7130          OVERLAY statement.  The rest are worked out from that.
7131          The base address is not needed (and should be null) if
7132          an LMA region was specified.  */
7133       if (l->next == 0)
7134         {
7135           l->os->load_base = lma_expr;
7136           l->os->sectype = normal_section;
7137         }
7138       if (phdrs != NULL && l->os->phdrs == NULL)
7139         l->os->phdrs = phdrs;
7140
7141       if (nocrossrefs)
7142         {
7143           lang_nocrossref_type *nc;
7144
7145           nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7146           nc->name = l->os->name;
7147           nc->next = nocrossref;
7148           nocrossref = nc;
7149         }
7150
7151       next = l->next;
7152       free (l);
7153       l = next;
7154     }
7155
7156   if (nocrossref != NULL)
7157     lang_add_nocrossref (nocrossref);
7158
7159   overlay_vma = NULL;
7160   overlay_list = NULL;
7161   overlay_max = NULL;
7162 }
7163 \f
7164 /* Version handling.  This is only useful for ELF.  */
7165
7166 /* This global variable holds the version tree that we build.  */
7167
7168 struct bfd_elf_version_tree *lang_elf_version_info;
7169
7170 /* If PREV is NULL, return first version pattern matching particular symbol.
7171    If PREV is non-NULL, return first version pattern matching particular
7172    symbol after PREV (previously returned by lang_vers_match).  */
7173
7174 static struct bfd_elf_version_expr *
7175 lang_vers_match (struct bfd_elf_version_expr_head *head,
7176                  struct bfd_elf_version_expr *prev,
7177                  const char *sym)
7178 {
7179   const char *cxx_sym = sym;
7180   const char *java_sym = sym;
7181   struct bfd_elf_version_expr *expr = NULL;
7182
7183   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7184     {
7185       cxx_sym = cplus_demangle (sym, DMGL_PARAMS | DMGL_ANSI);
7186       if (!cxx_sym)
7187         cxx_sym = sym;
7188     }
7189   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7190     {
7191       java_sym = cplus_demangle (sym, DMGL_JAVA);
7192       if (!java_sym)
7193         java_sym = sym;
7194     }
7195
7196   if (head->htab && (prev == NULL || prev->literal))
7197     {
7198       struct bfd_elf_version_expr e;
7199
7200       switch (prev ? prev->mask : 0)
7201         {
7202         case 0:
7203           if (head->mask & BFD_ELF_VERSION_C_TYPE)
7204             {
7205               e.pattern = sym;
7206               expr = (struct bfd_elf_version_expr *)
7207                   htab_find ((htab_t) head->htab, &e);
7208               while (expr && strcmp (expr->pattern, sym) == 0)
7209                 if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7210                   goto out_ret;
7211                 else
7212                   expr = expr->next;
7213             }
7214           /* Fallthrough */
7215         case BFD_ELF_VERSION_C_TYPE:
7216           if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7217             {
7218               e.pattern = cxx_sym;
7219               expr = (struct bfd_elf_version_expr *)
7220                   htab_find ((htab_t) head->htab, &e);
7221               while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7222                 if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7223                   goto out_ret;
7224                 else
7225                   expr = expr->next;
7226             }
7227           /* Fallthrough */
7228         case BFD_ELF_VERSION_CXX_TYPE:
7229           if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7230             {
7231               e.pattern = java_sym;
7232               expr = (struct bfd_elf_version_expr *)
7233                   htab_find ((htab_t) head->htab, &e);
7234               while (expr && strcmp (expr->pattern, java_sym) == 0)
7235                 if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7236                   goto out_ret;
7237                 else
7238                   expr = expr->next;
7239             }
7240           /* Fallthrough */
7241         default:
7242           break;
7243         }
7244     }
7245
7246   /* Finally, try the wildcards.  */
7247   if (prev == NULL || prev->literal)
7248     expr = head->remaining;
7249   else
7250     expr = prev->next;
7251   for (; expr; expr = expr->next)
7252     {
7253       const char *s;
7254
7255       if (!expr->pattern)
7256         continue;
7257
7258       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7259         break;
7260
7261       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7262         s = java_sym;
7263       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7264         s = cxx_sym;
7265       else
7266         s = sym;
7267       if (fnmatch (expr->pattern, s, 0) == 0)
7268         break;
7269     }
7270
7271  out_ret:
7272   if (cxx_sym != sym)
7273     free ((char *) cxx_sym);
7274   if (java_sym != sym)
7275     free ((char *) java_sym);
7276   return expr;
7277 }
7278
7279 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7280    return a pointer to the symbol name with any backslash quotes removed.  */
7281
7282 static const char *
7283 realsymbol (const char *pattern)
7284 {
7285   const char *p;
7286   bfd_boolean changed = FALSE, backslash = FALSE;
7287   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7288
7289   for (p = pattern, s = symbol; *p != '\0'; ++p)
7290     {
7291       /* It is a glob pattern only if there is no preceding
7292          backslash.  */
7293       if (backslash)
7294         {
7295           /* Remove the preceding backslash.  */
7296           *(s - 1) = *p;
7297           backslash = FALSE;
7298           changed = TRUE;
7299         }
7300       else
7301         {
7302           if (*p == '?' || *p == '*' || *p == '[')
7303             {
7304               free (symbol);
7305               return NULL;
7306             }
7307
7308           *s++ = *p;
7309           backslash = *p == '\\';
7310         }
7311     }
7312
7313   if (changed)
7314     {
7315       *s = '\0';
7316       return symbol;
7317     }
7318   else
7319     {
7320       free (symbol);
7321       return pattern;
7322     }
7323 }
7324
7325 /* This is called for each variable name or match expression.  NEW_NAME is
7326    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7327    pattern to be matched against symbol names.  */
7328
7329 struct bfd_elf_version_expr *
7330 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7331                        const char *new_name,
7332                        const char *lang,
7333                        bfd_boolean literal_p)
7334 {
7335   struct bfd_elf_version_expr *ret;
7336
7337   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7338   ret->next = orig;
7339   ret->symver = 0;
7340   ret->script = 0;
7341   ret->literal = TRUE;
7342   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7343   if (ret->pattern == NULL)
7344     {
7345       ret->pattern = new_name;
7346       ret->literal = FALSE;
7347     }
7348
7349   if (lang == NULL || strcasecmp (lang, "C") == 0)
7350     ret->mask = BFD_ELF_VERSION_C_TYPE;
7351   else if (strcasecmp (lang, "C++") == 0)
7352     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7353   else if (strcasecmp (lang, "Java") == 0)
7354     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7355   else
7356     {
7357       einfo (_("%X%P: unknown language `%s' in version information\n"),
7358              lang);
7359       ret->mask = BFD_ELF_VERSION_C_TYPE;
7360     }
7361
7362   return ldemul_new_vers_pattern (ret);
7363 }
7364
7365 /* This is called for each set of variable names and match
7366    expressions.  */
7367
7368 struct bfd_elf_version_tree *
7369 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7370                     struct bfd_elf_version_expr *locals)
7371 {
7372   struct bfd_elf_version_tree *ret;
7373
7374   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7375   ret->globals.list = globals;
7376   ret->locals.list = locals;
7377   ret->match = lang_vers_match;
7378   ret->name_indx = (unsigned int) -1;
7379   return ret;
7380 }
7381
7382 /* This static variable keeps track of version indices.  */
7383
7384 static int version_index;
7385
7386 static hashval_t
7387 version_expr_head_hash (const void *p)
7388 {
7389   const struct bfd_elf_version_expr *e =
7390       (const struct bfd_elf_version_expr *) p;
7391
7392   return htab_hash_string (e->pattern);
7393 }
7394
7395 static int
7396 version_expr_head_eq (const void *p1, const void *p2)
7397 {
7398   const struct bfd_elf_version_expr *e1 =
7399       (const struct bfd_elf_version_expr *) p1;
7400   const struct bfd_elf_version_expr *e2 =
7401       (const struct bfd_elf_version_expr *) p2;
7402
7403   return strcmp (e1->pattern, e2->pattern) == 0;
7404 }
7405
7406 static void
7407 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7408 {
7409   size_t count = 0;
7410   struct bfd_elf_version_expr *e, *next;
7411   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7412
7413   for (e = head->list; e; e = e->next)
7414     {
7415       if (e->literal)
7416         count++;
7417       head->mask |= e->mask;
7418     }
7419
7420   if (count)
7421     {
7422       head->htab = htab_create (count * 2, version_expr_head_hash,
7423                                 version_expr_head_eq, NULL);
7424       list_loc = &head->list;
7425       remaining_loc = &head->remaining;
7426       for (e = head->list; e; e = next)
7427         {
7428           next = e->next;
7429           if (!e->literal)
7430             {
7431               *remaining_loc = e;
7432               remaining_loc = &e->next;
7433             }
7434           else
7435             {
7436               void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7437
7438               if (*loc)
7439                 {
7440                   struct bfd_elf_version_expr *e1, *last;
7441
7442                   e1 = (struct bfd_elf_version_expr *) *loc;
7443                   last = NULL;
7444                   do
7445                     {
7446                       if (e1->mask == e->mask)
7447                         {
7448                           last = NULL;
7449                           break;
7450                         }
7451                       last = e1;
7452                       e1 = e1->next;
7453                     }
7454                   while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7455
7456                   if (last == NULL)
7457                     {
7458                       /* This is a duplicate.  */
7459                       /* FIXME: Memory leak.  Sometimes pattern is not
7460                          xmalloced alone, but in larger chunk of memory.  */
7461                       /* free (e->pattern); */
7462                       free (e);
7463                     }
7464                   else
7465                     {
7466                       e->next = last->next;
7467                       last->next = e;
7468                     }
7469                 }
7470               else
7471                 {
7472                   *loc = e;
7473                   *list_loc = e;
7474                   list_loc = &e->next;
7475                 }
7476             }
7477         }
7478       *remaining_loc = NULL;
7479       *list_loc = head->remaining;
7480     }
7481   else
7482     head->remaining = head->list;
7483 }
7484
7485 /* This is called when we know the name and dependencies of the
7486    version.  */
7487
7488 void
7489 lang_register_vers_node (const char *name,
7490                          struct bfd_elf_version_tree *version,
7491                          struct bfd_elf_version_deps *deps)
7492 {
7493   struct bfd_elf_version_tree *t, **pp;
7494   struct bfd_elf_version_expr *e1;
7495
7496   if (name == NULL)
7497     name = "";
7498
7499   if ((name[0] == '\0' && lang_elf_version_info != NULL)
7500       || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
7501     {
7502       einfo (_("%X%P: anonymous version tag cannot be combined"
7503                " with other version tags\n"));
7504       free (version);
7505       return;
7506     }
7507
7508   /* Make sure this node has a unique name.  */
7509   for (t = lang_elf_version_info; t != NULL; t = t->next)
7510     if (strcmp (t->name, name) == 0)
7511       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7512
7513   lang_finalize_version_expr_head (&version->globals);
7514   lang_finalize_version_expr_head (&version->locals);
7515
7516   /* Check the global and local match names, and make sure there
7517      aren't any duplicates.  */
7518
7519   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7520     {
7521       for (t = lang_elf_version_info; t != NULL; t = t->next)
7522         {
7523           struct bfd_elf_version_expr *e2;
7524
7525           if (t->locals.htab && e1->literal)
7526             {
7527               e2 = (struct bfd_elf_version_expr *)
7528                   htab_find ((htab_t) t->locals.htab, e1);
7529               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7530                 {
7531                   if (e1->mask == e2->mask)
7532                     einfo (_("%X%P: duplicate expression `%s'"
7533                              " in version information\n"), e1->pattern);
7534                   e2 = e2->next;
7535                 }
7536             }
7537           else if (!e1->literal)
7538             for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7539               if (strcmp (e1->pattern, e2->pattern) == 0
7540                   && e1->mask == e2->mask)
7541                 einfo (_("%X%P: duplicate expression `%s'"
7542                          " in version information\n"), e1->pattern);
7543         }
7544     }
7545
7546   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7547     {
7548       for (t = lang_elf_version_info; t != NULL; t = t->next)
7549         {
7550           struct bfd_elf_version_expr *e2;
7551
7552           if (t->globals.htab && e1->literal)
7553             {
7554               e2 = (struct bfd_elf_version_expr *)
7555                   htab_find ((htab_t) t->globals.htab, e1);
7556               while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7557                 {
7558                   if (e1->mask == e2->mask)
7559                     einfo (_("%X%P: duplicate expression `%s'"
7560                              " in version information\n"),
7561                            e1->pattern);
7562                   e2 = e2->next;
7563                 }
7564             }
7565           else if (!e1->literal)
7566             for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7567               if (strcmp (e1->pattern, e2->pattern) == 0
7568                   && e1->mask == e2->mask)
7569                 einfo (_("%X%P: duplicate expression `%s'"
7570                          " in version information\n"), e1->pattern);
7571         }
7572     }
7573
7574   version->deps = deps;
7575   version->name = name;
7576   if (name[0] != '\0')
7577     {
7578       ++version_index;
7579       version->vernum = version_index;
7580     }
7581   else
7582     version->vernum = 0;
7583
7584   for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
7585     ;
7586   *pp = version;
7587 }
7588
7589 /* This is called when we see a version dependency.  */
7590
7591 struct bfd_elf_version_deps *
7592 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7593 {
7594   struct bfd_elf_version_deps *ret;
7595   struct bfd_elf_version_tree *t;
7596
7597   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7598   ret->next = list;
7599
7600   for (t = lang_elf_version_info; t != NULL; t = t->next)
7601     {
7602       if (strcmp (t->name, name) == 0)
7603         {
7604           ret->version_needed = t;
7605           return ret;
7606         }
7607     }
7608
7609   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7610
7611   return ret;
7612 }
7613
7614 static void
7615 lang_do_version_exports_section (void)
7616 {
7617   struct bfd_elf_version_expr *greg = NULL, *lreg;
7618
7619   LANG_FOR_EACH_INPUT_STATEMENT (is)
7620     {
7621       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7622       char *contents, *p;
7623       bfd_size_type len;
7624
7625       if (sec == NULL)
7626         continue;
7627
7628       len = sec->size;
7629       contents = (char *) xmalloc (len);
7630       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7631         einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7632
7633       p = contents;
7634       while (p < contents + len)
7635         {
7636           greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7637           p = strchr (p, '\0') + 1;
7638         }
7639
7640       /* Do not free the contents, as we used them creating the regex.  */
7641
7642       /* Do not include this section in the link.  */
7643       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7644     }
7645
7646   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7647   lang_register_vers_node (command_line.version_exports_section,
7648                            lang_new_vers_node (greg, lreg), NULL);
7649 }
7650
7651 void
7652 lang_add_unique (const char *name)
7653 {
7654   struct unique_sections *ent;
7655
7656   for (ent = unique_section_list; ent; ent = ent->next)
7657     if (strcmp (ent->name, name) == 0)
7658       return;
7659
7660   ent = (struct unique_sections *) xmalloc (sizeof *ent);
7661   ent->name = xstrdup (name);
7662   ent->next = unique_section_list;
7663   unique_section_list = ent;
7664 }
7665
7666 /* Append the list of dynamic symbols to the existing one.  */
7667
7668 void
7669 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7670 {
7671   if (link_info.dynamic_list)
7672     {
7673       struct bfd_elf_version_expr *tail;
7674       for (tail = dynamic; tail->next != NULL; tail = tail->next)
7675         ;
7676       tail->next = link_info.dynamic_list->head.list;
7677       link_info.dynamic_list->head.list = dynamic;
7678     }
7679   else
7680     {
7681       struct bfd_elf_dynamic_list *d;
7682
7683       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
7684       d->head.list = dynamic;
7685       d->match = lang_vers_match;
7686       link_info.dynamic_list = d;
7687     }
7688 }
7689
7690 /* Append the list of C++ typeinfo dynamic symbols to the existing
7691    one.  */
7692
7693 void
7694 lang_append_dynamic_list_cpp_typeinfo (void)
7695 {
7696   const char * symbols [] =
7697     {
7698       "typeinfo name for*",
7699       "typeinfo for*"
7700     };
7701   struct bfd_elf_version_expr *dynamic = NULL;
7702   unsigned int i;
7703
7704   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7705     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7706                                      FALSE);
7707
7708   lang_append_dynamic_list (dynamic);
7709 }
7710
7711 /* Append the list of C++ operator new and delete dynamic symbols to the
7712    existing one.  */
7713
7714 void
7715 lang_append_dynamic_list_cpp_new (void)
7716 {
7717   const char * symbols [] =
7718     {
7719       "operator new*",
7720       "operator delete*"
7721     };
7722   struct bfd_elf_version_expr *dynamic = NULL;
7723   unsigned int i;
7724
7725   for (i = 0; i < ARRAY_SIZE (symbols); i++)
7726     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7727                                      FALSE);
7728
7729   lang_append_dynamic_list (dynamic);
7730 }