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