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