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