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