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