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