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