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