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