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