OSDN Git Service

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