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