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