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