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