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