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