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