1/* Linker command language support.
2   Copyright (C) 1991-2017 Free Software Foundation, Inc.
3
4   This file is part of the GNU Binutils.
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 3 of the License, or
9   (at your option) any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program; if not, write to the Free Software
18   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19   MA 02110-1301, USA.  */
20
21#include "sysdep.h"
22#include "bfd.h"
23#include "libiberty.h"
24#include "filenames.h"
25#include "safe-ctype.h"
26#include "obstack.h"
27#include "bfdlink.h"
28
29#include "ld.h"
30#include "ldmain.h"
31#include "ldexp.h"
32#include "ldlang.h"
33#include <ldgram.h>
34#include "ldlex.h"
35#include "ldmisc.h"
36#include "ldctor.h"
37#include "ldfile.h"
38#include "ldemul.h"
39#include "fnmatch.h"
40#include "demangle.h"
41#include "hashtab.h"
42#include "elf-bfd.h"
43#ifdef ENABLE_PLUGINS
44#include "plugin.h"
45#endif /* ENABLE_PLUGINS */
46
47#ifndef offsetof
48#define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
49#endif
50
51/* Convert between addresses in bytes and sizes in octets.
52   For currently supported targets, octets_per_byte is always a power
53   of two, so we can use shifts.  */
54#define TO_ADDR(X) ((X) >> opb_shift)
55#define TO_SIZE(X) ((X) << opb_shift)
56
57/* Local variables.  */
58static struct obstack stat_obstack;
59static struct obstack map_obstack;
60
61#define obstack_chunk_alloc xmalloc
62#define obstack_chunk_free free
63static const char *entry_symbol_default = "start";
64static bfd_boolean placed_commons = FALSE;
65static bfd_boolean map_head_is_link_order = FALSE;
66static lang_output_section_statement_type *default_common_section;
67static bfd_boolean map_option_f;
68static bfd_vma print_dot;
69static lang_input_statement_type *first_file;
70static const char *current_target;
71static lang_statement_list_type statement_list;
72static lang_statement_list_type *stat_save[10];
73static lang_statement_list_type **stat_save_ptr = &stat_save[0];
74static struct unique_sections *unique_section_list;
75static struct asneeded_minfo *asneeded_list_head;
76static unsigned int opb_shift = 0;
77
78/* Forward declarations.  */
79static void exp_init_os (etree_type *);
80static lang_input_statement_type *lookup_name (const char *);
81static void insert_undefined (const char *);
82static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
83static void print_statement (lang_statement_union_type *,
84			     lang_output_section_statement_type *);
85static void print_statement_list (lang_statement_union_type *,
86				  lang_output_section_statement_type *);
87static void print_statements (void);
88static void print_input_section (asection *, bfd_boolean);
89static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
90static void lang_record_phdrs (void);
91static void lang_do_version_exports_section (void);
92static void lang_finalize_version_expr_head
93  (struct bfd_elf_version_expr_head *);
94static void lang_do_memory_regions (void);
95
96/* Exported variables.  */
97const char *output_target;
98lang_output_section_statement_type *abs_output_section;
99lang_statement_list_type lang_output_section_statement;
100lang_statement_list_type *stat_ptr = &statement_list;
101lang_statement_list_type file_chain = { NULL, NULL };
102lang_statement_list_type input_file_chain;
103struct bfd_sym_chain entry_symbol = { NULL, NULL };
104const char *entry_section = ".text";
105struct lang_input_statement_flags input_flags;
106bfd_boolean entry_from_cmdline;
107bfd_boolean undef_from_cmdline;
108bfd_boolean lang_has_input_file = FALSE;
109bfd_boolean had_output_filename = FALSE;
110bfd_boolean lang_float_flag = FALSE;
111bfd_boolean delete_output_file_on_failure = FALSE;
112struct lang_phdr *lang_phdr_list;
113struct lang_nocrossrefs *nocrossref_list;
114struct asneeded_minfo **asneeded_list_tail;
115
116 /* Functions that traverse the linker script and might evaluate
117    DEFINED() need to increment this at the start of the traversal.  */
118int lang_statement_iteration = 0;
119
120/* Return TRUE if the PATTERN argument is a wildcard pattern.
121   Although backslashes are treated specially if a pattern contains
122   wildcards, we do not consider the mere presence of a backslash to
123   be enough to cause the pattern to be treated as a wildcard.
124   That lets us handle DOS filenames more naturally.  */
125#define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
126
127#define new_stat(x, y) \
128  (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
129
130#define outside_section_address(q) \
131  ((q)->output_offset + (q)->output_section->vma)
132
133#define outside_symbol_address(q) \
134  ((q)->value + outside_section_address (q->section))
135
136#define SECTION_NAME_MAP_LENGTH (16)
137
138void *
139stat_alloc (size_t size)
140{
141  return obstack_alloc (&stat_obstack, size);
142}
143
144static int
145name_match (const char *pattern, const char *name)
146{
147  if (wildcardp (pattern))
148    return fnmatch (pattern, name, 0);
149  return strcmp (pattern, name);
150}
151
152/* If PATTERN is of the form archive:file, return a pointer to the
153   separator.  If not, return NULL.  */
154
155static char *
156archive_path (const char *pattern)
157{
158  char *p = NULL;
159
160  if (link_info.path_separator == 0)
161    return p;
162
163  p = strchr (pattern, link_info.path_separator);
164#ifdef HAVE_DOS_BASED_FILE_SYSTEM
165  if (p == NULL || link_info.path_separator != ':')
166    return p;
167
168  /* Assume a match on the second char is part of drive specifier,
169     as in "c:\silly.dos".  */
170  if (p == pattern + 1 && ISALPHA (*pattern))
171    p = strchr (p + 1, link_info.path_separator);
172#endif
173  return p;
174}
175
176/* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
177   return whether F matches FILE_SPEC.  */
178
179static bfd_boolean
180input_statement_is_archive_path (const char *file_spec, char *sep,
181				 lang_input_statement_type *f)
182{
183  bfd_boolean match = FALSE;
184
185  if ((*(sep + 1) == 0
186       || name_match (sep + 1, f->filename) == 0)
187      && ((sep != file_spec)
188	  == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
189    {
190      match = TRUE;
191
192      if (sep != file_spec)
193	{
194	  const char *aname = f->the_bfd->my_archive->filename;
195	  *sep = 0;
196	  match = name_match (file_spec, aname) == 0;
197	  *sep = link_info.path_separator;
198	}
199    }
200  return match;
201}
202
203static bfd_boolean
204unique_section_p (const asection *sec,
205		  const lang_output_section_statement_type *os)
206{
207  struct unique_sections *unam;
208  const char *secnam;
209
210  if (bfd_link_relocatable (&link_info)
211      && sec->owner != NULL
212      && bfd_is_group_section (sec->owner, sec))
213    return !(os != NULL
214	     && strcmp (os->name, DISCARD_SECTION_NAME) == 0);
215
216  secnam = sec->name;
217  for (unam = unique_section_list; unam; unam = unam->next)
218    if (name_match (unam->name, secnam) == 0)
219      return TRUE;
220
221  return FALSE;
222}
223
224/* Generic traversal routines for finding matching sections.  */
225
226/* Return true if FILE matches a pattern in EXCLUDE_LIST, otherwise return
227   false.  */
228
229static bfd_boolean
230walk_wild_file_in_exclude_list (struct name_list *exclude_list,
231                                lang_input_statement_type *file)
232{
233  struct name_list *list_tmp;
234
235  for (list_tmp = exclude_list;
236       list_tmp;
237       list_tmp = list_tmp->next)
238    {
239      char *p = archive_path (list_tmp->name);
240
241      if (p != NULL)
242	{
243	  if (input_statement_is_archive_path (list_tmp->name, p, file))
244	    return TRUE;
245	}
246
247      else if (name_match (list_tmp->name, file->filename) == 0)
248	return TRUE;
249
250      /* FIXME: Perhaps remove the following at some stage?  Matching
251	 unadorned archives like this was never documented and has
252	 been superceded by the archive:path syntax.  */
253      else if (file->the_bfd != NULL
254	       && file->the_bfd->my_archive != NULL
255	       && name_match (list_tmp->name,
256			      file->the_bfd->my_archive->filename) == 0)
257	return TRUE;
258    }
259
260  return FALSE;
261}
262
263/* Try processing a section against a wildcard.  This just calls
264   the callback unless the filename exclusion list is present
265   and excludes the file.  It's hardly ever present so this
266   function is very fast.  */
267
268static void
269walk_wild_consider_section (lang_wild_statement_type *ptr,
270			    lang_input_statement_type *file,
271			    asection *s,
272			    struct wildcard_list *sec,
273			    callback_t callback,
274			    void *data)
275{
276  /* Don't process sections from files which were excluded.  */
277  if (walk_wild_file_in_exclude_list (sec->spec.exclude_name_list, file))
278    return;
279
280  (*callback) (ptr, sec, s, ptr->section_flag_list, file, data);
281}
282
283/* Lowest common denominator routine that can handle everything correctly,
284   but slowly.  */
285
286static void
287walk_wild_section_general (lang_wild_statement_type *ptr,
288			   lang_input_statement_type *file,
289			   callback_t callback,
290			   void *data)
291{
292  asection *s;
293  struct wildcard_list *sec;
294
295  for (s = file->the_bfd->sections; s != NULL; s = s->next)
296    {
297      sec = ptr->section_list;
298      if (sec == NULL)
299	(*callback) (ptr, sec, s, ptr->section_flag_list, file, data);
300
301      while (sec != NULL)
302	{
303	  bfd_boolean skip = FALSE;
304
305	  if (sec->spec.name != NULL)
306	    {
307	      const char *sname = bfd_get_section_name (file->the_bfd, s);
308
309	      skip = name_match (sec->spec.name, sname) != 0;
310	    }
311
312	  if (!skip)
313	    walk_wild_consider_section (ptr, file, s, sec, callback, data);
314
315	  sec = sec->next;
316	}
317    }
318}
319
320/* Routines to find a single section given its name.  If there's more
321   than one section with that name, we report that.  */
322
323typedef struct
324{
325  asection *found_section;
326  bfd_boolean multiple_sections_found;
327} section_iterator_callback_data;
328
329static bfd_boolean
330section_iterator_callback (bfd *abfd ATTRIBUTE_UNUSED, asection *s, void *data)
331{
332  section_iterator_callback_data *d = (section_iterator_callback_data *) data;
333
334  if (d->found_section != NULL)
335    {
336      d->multiple_sections_found = TRUE;
337      return TRUE;
338    }
339
340  d->found_section = s;
341  return FALSE;
342}
343
344static asection *
345find_section (lang_input_statement_type *file,
346	      struct wildcard_list *sec,
347	      bfd_boolean *multiple_sections_found)
348{
349  section_iterator_callback_data cb_data = { NULL, FALSE };
350
351  bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
352			      section_iterator_callback, &cb_data);
353  *multiple_sections_found = cb_data.multiple_sections_found;
354  return cb_data.found_section;
355}
356
357/* Code for handling simple wildcards without going through fnmatch,
358   which can be expensive because of charset translations etc.  */
359
360/* A simple wild is a literal string followed by a single '*',
361   where the literal part is at least 4 characters long.  */
362
363static bfd_boolean
364is_simple_wild (const char *name)
365{
366  size_t len = strcspn (name, "*?[");
367  return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
368}
369
370static bfd_boolean
371match_simple_wild (const char *pattern, const char *name)
372{
373  /* The first four characters of the pattern are guaranteed valid
374     non-wildcard characters.  So we can go faster.  */
375  if (pattern[0] != name[0] || pattern[1] != name[1]
376      || pattern[2] != name[2] || pattern[3] != name[3])
377    return FALSE;
378
379  pattern += 4;
380  name += 4;
381  while (*pattern != '*')
382    if (*name++ != *pattern++)
383      return FALSE;
384
385  return TRUE;
386}
387
388/* Return the numerical value of the init_priority attribute from
389   section name NAME.  */
390
391static unsigned long
392get_init_priority (const char *name)
393{
394  char *end;
395  unsigned long init_priority;
396
397  /* GCC uses the following section names for the init_priority
398     attribute with numerical values 101 and 65535 inclusive. A
399     lower value means a higher priority.
400
401     1: .init_array.NNNN/.fini_array.NNNN: Where NNNN is the
402	decimal numerical value of the init_priority attribute.
403	The order of execution in .init_array is forward and
404	.fini_array is backward.
405     2: .ctors.NNNN/.dtors.NNNN: Where NNNN is 65535 minus the
406	decimal numerical value of the init_priority attribute.
407	The order of execution in .ctors is backward and .dtors
408	is forward.
409   */
410  if (strncmp (name, ".init_array.", 12) == 0
411      || strncmp (name, ".fini_array.", 12) == 0)
412    {
413      init_priority = strtoul (name + 12, &end, 10);
414      return *end ? 0 : init_priority;
415    }
416  else if (strncmp (name, ".ctors.", 7) == 0
417	   || strncmp (name, ".dtors.", 7) == 0)
418    {
419      init_priority = strtoul (name + 7, &end, 10);
420      return *end ? 0 : 65535 - init_priority;
421    }
422
423  return 0;
424}
425
426/* Compare sections ASEC and BSEC according to SORT.  */
427
428static int
429compare_section (sort_type sort, asection *asec, asection *bsec)
430{
431  int ret;
432  unsigned long ainit_priority, binit_priority;
433
434  switch (sort)
435    {
436    default:
437      abort ();
438
439    case by_init_priority:
440      ainit_priority
441	= get_init_priority (bfd_get_section_name (asec->owner, asec));
442      binit_priority
443	= get_init_priority (bfd_get_section_name (bsec->owner, bsec));
444      if (ainit_priority == 0 || binit_priority == 0)
445	goto sort_by_name;
446      ret = ainit_priority - binit_priority;
447      if (ret)
448	break;
449      else
450	goto sort_by_name;
451
452    case by_alignment_name:
453      ret = (bfd_section_alignment (bsec->owner, bsec)
454	     - bfd_section_alignment (asec->owner, asec));
455      if (ret)
456	break;
457      /* Fall through.  */
458
459    case by_name:
460sort_by_name:
461      ret = strcmp (bfd_get_section_name (asec->owner, asec),
462		    bfd_get_section_name (bsec->owner, bsec));
463      break;
464
465    case by_name_alignment:
466      ret = strcmp (bfd_get_section_name (asec->owner, asec),
467		    bfd_get_section_name (bsec->owner, bsec));
468      if (ret)
469	break;
470      /* Fall through.  */
471
472    case by_alignment:
473      ret = (bfd_section_alignment (bsec->owner, bsec)
474	     - bfd_section_alignment (asec->owner, asec));
475      break;
476    }
477
478  return ret;
479}
480
481/* Build a Binary Search Tree to sort sections, unlike insertion sort
482   used in wild_sort(). BST is considerably faster if the number of
483   of sections are large.  */
484
485static lang_section_bst_type **
486wild_sort_fast (lang_wild_statement_type *wild,
487		struct wildcard_list *sec,
488		lang_input_statement_type *file ATTRIBUTE_UNUSED,
489		asection *section)
490{
491  lang_section_bst_type **tree;
492
493  tree = &wild->tree;
494  if (!wild->filenames_sorted
495      && (sec == NULL || sec->spec.sorted == none))
496    {
497      /* Append at the right end of tree.  */
498      while (*tree)
499	tree = &((*tree)->right);
500      return tree;
501    }
502
503  while (*tree)
504    {
505      /* Find the correct node to append this section.  */
506      if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
507	tree = &((*tree)->left);
508      else
509	tree = &((*tree)->right);
510    }
511
512  return tree;
513}
514
515/* Use wild_sort_fast to build a BST to sort sections.  */
516
517static void
518output_section_callback_fast (lang_wild_statement_type *ptr,
519			      struct wildcard_list *sec,
520			      asection *section,
521			      struct flag_info *sflag_list ATTRIBUTE_UNUSED,
522			      lang_input_statement_type *file,
523			      void *output)
524{
525  lang_section_bst_type *node;
526  lang_section_bst_type **tree;
527  lang_output_section_statement_type *os;
528
529  os = (lang_output_section_statement_type *) output;
530
531  if (unique_section_p (section, os))
532    return;
533
534  node = (lang_section_bst_type *) xmalloc (sizeof (lang_section_bst_type));
535  node->left = 0;
536  node->right = 0;
537  node->section = section;
538
539  tree = wild_sort_fast (ptr, sec, file, section);
540  if (tree != NULL)
541    *tree = node;
542}
543
544/* Convert a sorted sections' BST back to list form.  */
545
546static void
547output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
548				      lang_section_bst_type *tree,
549				      void *output)
550{
551  if (tree->left)
552    output_section_callback_tree_to_list (ptr, tree->left, output);
553
554  lang_add_section (&ptr->children, tree->section, NULL,
555		    (lang_output_section_statement_type *) output);
556
557  if (tree->right)
558    output_section_callback_tree_to_list (ptr, tree->right, output);
559
560  free (tree);
561}
562
563/* Specialized, optimized routines for handling different kinds of
564   wildcards */
565
566static void
567walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
568				lang_input_statement_type *file,
569				callback_t callback,
570				void *data)
571{
572  /* We can just do a hash lookup for the section with the right name.
573     But if that lookup discovers more than one section with the name
574     (should be rare), we fall back to the general algorithm because
575     we would otherwise have to sort the sections to make sure they
576     get processed in the bfd's order.  */
577  bfd_boolean multiple_sections_found;
578  struct wildcard_list *sec0 = ptr->handler_data[0];
579  asection *s0 = find_section (file, sec0, &multiple_sections_found);
580
581  if (multiple_sections_found)
582    walk_wild_section_general (ptr, file, callback, data);
583  else if (s0)
584    walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
585}
586
587static void
588walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
589				lang_input_statement_type *file,
590				callback_t callback,
591				void *data)
592{
593  asection *s;
594  struct wildcard_list *wildsec0 = ptr->handler_data[0];
595
596  for (s = file->the_bfd->sections; s != NULL; s = s->next)
597    {
598      const char *sname = bfd_get_section_name (file->the_bfd, s);
599      bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
600
601      if (!skip)
602	walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
603    }
604}
605
606static void
607walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
608				lang_input_statement_type *file,
609				callback_t callback,
610				void *data)
611{
612  asection *s;
613  struct wildcard_list *sec0 = ptr->handler_data[0];
614  struct wildcard_list *wildsec1 = ptr->handler_data[1];
615  bfd_boolean multiple_sections_found;
616  asection *s0 = find_section (file, sec0, &multiple_sections_found);
617
618  if (multiple_sections_found)
619    {
620      walk_wild_section_general (ptr, file, callback, data);
621      return;
622    }
623
624  /* Note that if the section was not found, s0 is NULL and
625     we'll simply never succeed the s == s0 test below.  */
626  for (s = file->the_bfd->sections; s != NULL; s = s->next)
627    {
628      /* Recall that in this code path, a section cannot satisfy more
629	 than one spec, so if s == s0 then it cannot match
630	 wildspec1.  */
631      if (s == s0)
632	walk_wild_consider_section (ptr, file, s, sec0, callback, data);
633      else
634	{
635	  const char *sname = bfd_get_section_name (file->the_bfd, s);
636	  bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
637
638	  if (!skip)
639	    walk_wild_consider_section (ptr, file, s, wildsec1, callback,
640					data);
641	}
642    }
643}
644
645static void
646walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
647				lang_input_statement_type *file,
648				callback_t callback,
649				void *data)
650{
651  asection *s;
652  struct wildcard_list *sec0 = ptr->handler_data[0];
653  struct wildcard_list *wildsec1 = ptr->handler_data[1];
654  struct wildcard_list *wildsec2 = ptr->handler_data[2];
655  bfd_boolean multiple_sections_found;
656  asection *s0 = find_section (file, sec0, &multiple_sections_found);
657
658  if (multiple_sections_found)
659    {
660      walk_wild_section_general (ptr, file, callback, data);
661      return;
662    }
663
664  for (s = file->the_bfd->sections; s != NULL; s = s->next)
665    {
666      if (s == s0)
667	walk_wild_consider_section (ptr, file, s, sec0, callback, data);
668      else
669	{
670	  const char *sname = bfd_get_section_name (file->the_bfd, s);
671	  bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
672
673	  if (!skip)
674	    walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
675	  else
676	    {
677	      skip = !match_simple_wild (wildsec2->spec.name, sname);
678	      if (!skip)
679		walk_wild_consider_section (ptr, file, s, wildsec2, callback,
680					    data);
681	    }
682	}
683    }
684}
685
686static void
687walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
688				lang_input_statement_type *file,
689				callback_t callback,
690				void *data)
691{
692  asection *s;
693  struct wildcard_list *sec0 = ptr->handler_data[0];
694  struct wildcard_list *sec1 = ptr->handler_data[1];
695  struct wildcard_list *wildsec2 = ptr->handler_data[2];
696  struct wildcard_list *wildsec3 = ptr->handler_data[3];
697  bfd_boolean multiple_sections_found;
698  asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
699
700  if (multiple_sections_found)
701    {
702      walk_wild_section_general (ptr, file, callback, data);
703      return;
704    }
705
706  s1 = find_section (file, sec1, &multiple_sections_found);
707  if (multiple_sections_found)
708    {
709      walk_wild_section_general (ptr, file, callback, data);
710      return;
711    }
712
713  for (s = file->the_bfd->sections; s != NULL; s = s->next)
714    {
715      if (s == s0)
716	walk_wild_consider_section (ptr, file, s, sec0, callback, data);
717      else
718	if (s == s1)
719	  walk_wild_consider_section (ptr, file, s, sec1, callback, data);
720	else
721	  {
722	    const char *sname = bfd_get_section_name (file->the_bfd, s);
723	    bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
724						   sname);
725
726	    if (!skip)
727	      walk_wild_consider_section (ptr, file, s, wildsec2, callback,
728					  data);
729	    else
730	      {
731		skip = !match_simple_wild (wildsec3->spec.name, sname);
732		if (!skip)
733		  walk_wild_consider_section (ptr, file, s, wildsec3,
734					      callback, data);
735	      }
736	  }
737    }
738}
739
740static void
741walk_wild_section (lang_wild_statement_type *ptr,
742		   lang_input_statement_type *file,
743		   callback_t callback,
744		   void *data)
745{
746  if (file->flags.just_syms)
747    return;
748
749  (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
750}
751
752/* Returns TRUE when name1 is a wildcard spec that might match
753   something name2 can match.  We're conservative: we return FALSE
754   only if the prefixes of name1 and name2 are different up to the
755   first wildcard character.  */
756
757static bfd_boolean
758wild_spec_can_overlap (const char *name1, const char *name2)
759{
760  size_t prefix1_len = strcspn (name1, "?*[");
761  size_t prefix2_len = strcspn (name2, "?*[");
762  size_t min_prefix_len;
763
764  /* Note that if there is no wildcard character, then we treat the
765     terminating 0 as part of the prefix.  Thus ".text" won't match
766     ".text." or ".text.*", for example.  */
767  if (name1[prefix1_len] == '\0')
768    prefix1_len++;
769  if (name2[prefix2_len] == '\0')
770    prefix2_len++;
771
772  min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
773
774  return memcmp (name1, name2, min_prefix_len) == 0;
775}
776
777/* Select specialized code to handle various kinds of wildcard
778   statements.  */
779
780static void
781analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
782{
783  int sec_count = 0;
784  int wild_name_count = 0;
785  struct wildcard_list *sec;
786  int signature;
787  int data_counter;
788
789  ptr->walk_wild_section_handler = walk_wild_section_general;
790  ptr->handler_data[0] = NULL;
791  ptr->handler_data[1] = NULL;
792  ptr->handler_data[2] = NULL;
793  ptr->handler_data[3] = NULL;
794  ptr->tree = NULL;
795
796  /* Count how many wildcard_specs there are, and how many of those
797     actually use wildcards in the name.  Also, bail out if any of the
798     wildcard names are NULL. (Can this actually happen?
799     walk_wild_section used to test for it.)  And bail out if any
800     of the wildcards are more complex than a simple string
801     ending in a single '*'.  */
802  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
803    {
804      ++sec_count;
805      if (sec->spec.name == NULL)
806	return;
807      if (wildcardp (sec->spec.name))
808	{
809	  ++wild_name_count;
810	  if (!is_simple_wild (sec->spec.name))
811	    return;
812	}
813    }
814
815  /* The zero-spec case would be easy to optimize but it doesn't
816     happen in practice.  Likewise, more than 4 specs doesn't
817     happen in practice.  */
818  if (sec_count == 0 || sec_count > 4)
819    return;
820
821  /* Check that no two specs can match the same section.  */
822  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
823    {
824      struct wildcard_list *sec2;
825      for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
826	{
827	  if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
828	    return;
829	}
830    }
831
832  signature = (sec_count << 8) + wild_name_count;
833  switch (signature)
834    {
835    case 0x0100:
836      ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
837      break;
838    case 0x0101:
839      ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
840      break;
841    case 0x0201:
842      ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
843      break;
844    case 0x0302:
845      ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
846      break;
847    case 0x0402:
848      ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
849      break;
850    default:
851      return;
852    }
853
854  /* Now fill the data array with pointers to the specs, first the
855     specs with non-wildcard names, then the specs with wildcard
856     names.  It's OK to process the specs in different order from the
857     given order, because we've already determined that no section
858     will match more than one spec.  */
859  data_counter = 0;
860  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
861    if (!wildcardp (sec->spec.name))
862      ptr->handler_data[data_counter++] = sec;
863  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
864    if (wildcardp (sec->spec.name))
865      ptr->handler_data[data_counter++] = sec;
866}
867
868/* Handle a wild statement for a single file F.  */
869
870static void
871walk_wild_file (lang_wild_statement_type *s,
872		lang_input_statement_type *f,
873		callback_t callback,
874		void *data)
875{
876  if (walk_wild_file_in_exclude_list (s->exclude_name_list, f))
877    return;
878
879  if (f->the_bfd == NULL
880      || !bfd_check_format (f->the_bfd, bfd_archive))
881    walk_wild_section (s, f, callback, data);
882  else
883    {
884      bfd *member;
885
886      /* This is an archive file.  We must map each member of the
887	 archive separately.  */
888      member = bfd_openr_next_archived_file (f->the_bfd, NULL);
889      while (member != NULL)
890	{
891	  /* When lookup_name is called, it will call the add_symbols
892	     entry point for the archive.  For each element of the
893	     archive which is included, BFD will call ldlang_add_file,
894	     which will set the usrdata field of the member to the
895	     lang_input_statement.  */
896	  if (member->usrdata != NULL)
897	    {
898	      walk_wild_section (s,
899				 (lang_input_statement_type *) member->usrdata,
900				 callback, data);
901	    }
902
903	  member = bfd_openr_next_archived_file (f->the_bfd, member);
904	}
905    }
906}
907
908static void
909walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
910{
911  const char *file_spec = s->filename;
912  char *p;
913
914  if (file_spec == NULL)
915    {
916      /* Perform the iteration over all files in the list.  */
917      LANG_FOR_EACH_INPUT_STATEMENT (f)
918	{
919	  walk_wild_file (s, f, callback, data);
920	}
921    }
922  else if ((p = archive_path (file_spec)) != NULL)
923    {
924      LANG_FOR_EACH_INPUT_STATEMENT (f)
925	{
926	  if (input_statement_is_archive_path (file_spec, p, f))
927	    walk_wild_file (s, f, callback, data);
928	}
929    }
930  else if (wildcardp (file_spec))
931    {
932      LANG_FOR_EACH_INPUT_STATEMENT (f)
933	{
934	  if (fnmatch (file_spec, f->filename, 0) == 0)
935	    walk_wild_file (s, f, callback, data);
936	}
937    }
938  else
939    {
940      lang_input_statement_type *f;
941
942      /* Perform the iteration over a single file.  */
943      f = lookup_name (file_spec);
944      if (f)
945	walk_wild_file (s, f, callback, data);
946    }
947}
948
949/* lang_for_each_statement walks the parse tree and calls the provided
950   function for each node, except those inside output section statements
951   with constraint set to -1.  */
952
953void
954lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
955				lang_statement_union_type *s)
956{
957  for (; s != NULL; s = s->header.next)
958    {
959      func (s);
960
961      switch (s->header.type)
962	{
963	case lang_constructors_statement_enum:
964	  lang_for_each_statement_worker (func, constructor_list.head);
965	  break;
966	case lang_output_section_statement_enum:
967	  if (s->output_section_statement.constraint != -1)
968	    lang_for_each_statement_worker
969	      (func, s->output_section_statement.children.head);
970	  break;
971	case lang_wild_statement_enum:
972	  lang_for_each_statement_worker (func,
973					  s->wild_statement.children.head);
974	  break;
975	case lang_group_statement_enum:
976	  lang_for_each_statement_worker (func,
977					  s->group_statement.children.head);
978	  break;
979	case lang_data_statement_enum:
980	case lang_reloc_statement_enum:
981	case lang_object_symbols_statement_enum:
982	case lang_output_statement_enum:
983	case lang_target_statement_enum:
984	case lang_input_section_enum:
985	case lang_input_statement_enum:
986	case lang_assignment_statement_enum:
987	case lang_padding_statement_enum:
988	case lang_address_statement_enum:
989	case lang_fill_statement_enum:
990	case lang_insert_statement_enum:
991	  break;
992	default:
993	  FAIL ();
994	  break;
995	}
996    }
997}
998
999void
1000lang_for_each_statement (void (*func) (lang_statement_union_type *))
1001{
1002  lang_for_each_statement_worker (func, statement_list.head);
1003}
1004
1005/*----------------------------------------------------------------------*/
1006
1007void
1008lang_list_init (lang_statement_list_type *list)
1009{
1010  list->head = NULL;
1011  list->tail = &list->head;
1012}
1013
1014void
1015push_stat_ptr (lang_statement_list_type *new_ptr)
1016{
1017  if (stat_save_ptr >= stat_save + sizeof (stat_save) / sizeof (stat_save[0]))
1018    abort ();
1019  *stat_save_ptr++ = stat_ptr;
1020  stat_ptr = new_ptr;
1021}
1022
1023void
1024pop_stat_ptr (void)
1025{
1026  if (stat_save_ptr <= stat_save)
1027    abort ();
1028  stat_ptr = *--stat_save_ptr;
1029}
1030
1031/* Build a new statement node for the parse tree.  */
1032
1033static lang_statement_union_type *
1034new_statement (enum statement_enum type,
1035	       size_t size,
1036	       lang_statement_list_type *list)
1037{
1038  lang_statement_union_type *new_stmt;
1039
1040  new_stmt = (lang_statement_union_type *) stat_alloc (size);
1041  new_stmt->header.type = type;
1042  new_stmt->header.next = NULL;
1043  lang_statement_append (list, new_stmt, &new_stmt->header.next);
1044  return new_stmt;
1045}
1046
1047/* Build a new input file node for the language.  There are several
1048   ways in which we treat an input file, eg, we only look at symbols,
1049   or prefix it with a -l etc.
1050
1051   We can be supplied with requests for input files more than once;
1052   they may, for example be split over several lines like foo.o(.text)
1053   foo.o(.data) etc, so when asked for a file we check that we haven't
1054   got it already so we don't duplicate the bfd.  */
1055
1056static lang_input_statement_type *
1057new_afile (const char *name,
1058	   lang_input_file_enum_type file_type,
1059	   const char *target,
1060	   bfd_boolean add_to_list)
1061{
1062  lang_input_statement_type *p;
1063
1064  lang_has_input_file = TRUE;
1065
1066  if (add_to_list)
1067    p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
1068  else
1069    {
1070      p = (lang_input_statement_type *)
1071	  stat_alloc (sizeof (lang_input_statement_type));
1072      p->header.type = lang_input_statement_enum;
1073      p->header.next = NULL;
1074    }
1075
1076  memset (&p->the_bfd, 0,
1077	  sizeof (*p) - offsetof (lang_input_statement_type, the_bfd));
1078  p->target = target;
1079  p->flags.dynamic = input_flags.dynamic;
1080  p->flags.add_DT_NEEDED_for_dynamic = input_flags.add_DT_NEEDED_for_dynamic;
1081  p->flags.add_DT_NEEDED_for_regular = input_flags.add_DT_NEEDED_for_regular;
1082  p->flags.whole_archive = input_flags.whole_archive;
1083  p->flags.sysrooted = input_flags.sysrooted;
1084
1085  switch (file_type)
1086    {
1087    case lang_input_file_is_symbols_only_enum:
1088      p->filename = name;
1089      p->local_sym_name = name;
1090      p->flags.real = TRUE;
1091      p->flags.just_syms = TRUE;
1092      break;
1093    case lang_input_file_is_fake_enum:
1094      p->filename = name;
1095      p->local_sym_name = name;
1096      break;
1097    case lang_input_file_is_l_enum:
1098      if (name[0] == ':' && name[1] != '\0')
1099	{
1100	  p->filename = name + 1;
1101	  p->flags.full_name_provided = TRUE;
1102	}
1103      else
1104	p->filename = name;
1105      p->local_sym_name = concat ("-l", name, (const char *) NULL);
1106      p->flags.maybe_archive = TRUE;
1107      p->flags.real = TRUE;
1108      p->flags.search_dirs = TRUE;
1109      break;
1110    case lang_input_file_is_marker_enum:
1111      p->filename = name;
1112      p->local_sym_name = name;
1113      p->flags.search_dirs = TRUE;
1114      break;
1115    case lang_input_file_is_search_file_enum:
1116      p->filename = name;
1117      p->local_sym_name = name;
1118      p->flags.real = TRUE;
1119      p->flags.search_dirs = TRUE;
1120      break;
1121    case lang_input_file_is_file_enum:
1122      p->filename = name;
1123      p->local_sym_name = name;
1124      p->flags.real = TRUE;
1125      break;
1126    default:
1127      FAIL ();
1128    }
1129
1130  lang_statement_append (&input_file_chain,
1131			 (lang_statement_union_type *) p,
1132			 &p->next_real_file);
1133  return p;
1134}
1135
1136lang_input_statement_type *
1137lang_add_input_file (const char *name,
1138		     lang_input_file_enum_type file_type,
1139		     const char *target)
1140{
1141  if (name != NULL && *name == '=')
1142    {
1143      lang_input_statement_type *ret;
1144      char *sysrooted_name
1145	= concat (ld_sysroot, name + 1, (const char *) NULL);
1146
1147      /* We've now forcibly prepended the sysroot, making the input
1148	 file independent of the context.  Therefore, temporarily
1149	 force a non-sysrooted context for this statement, so it won't
1150	 get the sysroot prepended again when opened.  (N.B. if it's a
1151	 script, any child nodes with input files starting with "/"
1152	 will be handled as "sysrooted" as they'll be found to be
1153	 within the sysroot subdirectory.)  */
1154      unsigned int outer_sysrooted = input_flags.sysrooted;
1155      input_flags.sysrooted = 0;
1156      ret = new_afile (sysrooted_name, file_type, target, TRUE);
1157      input_flags.sysrooted = outer_sysrooted;
1158      return ret;
1159    }
1160
1161  return new_afile (name, file_type, target, TRUE);
1162}
1163
1164struct out_section_hash_entry
1165{
1166  struct bfd_hash_entry root;
1167  lang_statement_union_type s;
1168};
1169
1170/* The hash table.  */
1171
1172static struct bfd_hash_table output_section_statement_table;
1173
1174/* Support routines for the hash table used by lang_output_section_find,
1175   initialize the table, fill in an entry and remove the table.  */
1176
1177static struct bfd_hash_entry *
1178output_section_statement_newfunc (struct bfd_hash_entry *entry,
1179				  struct bfd_hash_table *table,
1180				  const char *string)
1181{
1182  lang_output_section_statement_type **nextp;
1183  struct out_section_hash_entry *ret;
1184
1185  if (entry == NULL)
1186    {
1187      entry = (struct bfd_hash_entry *) bfd_hash_allocate (table,
1188							   sizeof (*ret));
1189      if (entry == NULL)
1190	return entry;
1191    }
1192
1193  entry = bfd_hash_newfunc (entry, table, string);
1194  if (entry == NULL)
1195    return entry;
1196
1197  ret = (struct out_section_hash_entry *) entry;
1198  memset (&ret->s, 0, sizeof (ret->s));
1199  ret->s.header.type = lang_output_section_statement_enum;
1200  ret->s.output_section_statement.subsection_alignment = -1;
1201  ret->s.output_section_statement.section_alignment = -1;
1202  ret->s.output_section_statement.block_value = 1;
1203  lang_list_init (&ret->s.output_section_statement.children);
1204  lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
1205
1206  /* For every output section statement added to the list, except the
1207     first one, lang_output_section_statement.tail points to the "next"
1208     field of the last element of the list.  */
1209  if (lang_output_section_statement.head != NULL)
1210    ret->s.output_section_statement.prev
1211      = ((lang_output_section_statement_type *)
1212	 ((char *) lang_output_section_statement.tail
1213	  - offsetof (lang_output_section_statement_type, next)));
1214
1215  /* GCC's strict aliasing rules prevent us from just casting the
1216     address, so we store the pointer in a variable and cast that
1217     instead.  */
1218  nextp = &ret->s.output_section_statement.next;
1219  lang_statement_append (&lang_output_section_statement,
1220			 &ret->s,
1221			 (lang_statement_union_type **) nextp);
1222  return &ret->root;
1223}
1224
1225static void
1226output_section_statement_table_init (void)
1227{
1228  if (!bfd_hash_table_init_n (&output_section_statement_table,
1229			      output_section_statement_newfunc,
1230			      sizeof (struct out_section_hash_entry),
1231			      61))
1232    einfo (_("%P%F: can not create hash table: %E\n"));
1233}
1234
1235static void
1236output_section_statement_table_free (void)
1237{
1238  bfd_hash_table_free (&output_section_statement_table);
1239}
1240
1241/* Build enough state so that the parser can build its tree.  */
1242
1243void
1244lang_init (void)
1245{
1246  obstack_begin (&stat_obstack, 1000);
1247
1248  stat_ptr = &statement_list;
1249
1250  output_section_statement_table_init ();
1251
1252  lang_list_init (stat_ptr);
1253
1254  lang_list_init (&input_file_chain);
1255  lang_list_init (&lang_output_section_statement);
1256  lang_list_init (&file_chain);
1257  first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
1258				    NULL);
1259  abs_output_section =
1260    lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
1261
1262  abs_output_section->bfd_section = bfd_abs_section_ptr;
1263
1264  asneeded_list_head = NULL;
1265  asneeded_list_tail = &asneeded_list_head;
1266}
1267
1268void
1269lang_finish (void)
1270{
1271  output_section_statement_table_free ();
1272}
1273
1274/*----------------------------------------------------------------------
1275  A region is an area of memory declared with the
1276  MEMORY {  name:org=exp, len=exp ... }
1277  syntax.
1278
1279  We maintain a list of all the regions here.
1280
1281  If no regions are specified in the script, then the default is used
1282  which is created when looked up to be the entire data space.
1283
1284  If create is true we are creating a region inside a MEMORY block.
1285  In this case it is probably an error to create a region that has
1286  already been created.  If we are not inside a MEMORY block it is
1287  dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
1288  and so we issue a warning.
1289
1290  Each region has at least one name.  The first name is either
1291  DEFAULT_MEMORY_REGION or the name given in the MEMORY block.  You can add
1292  alias names to an existing region within a script with
1293  REGION_ALIAS (alias, region_name).  Each name corresponds to at most one
1294  region.  */
1295
1296static lang_memory_region_type *lang_memory_region_list;
1297static lang_memory_region_type **lang_memory_region_list_tail
1298  = &lang_memory_region_list;
1299
1300lang_memory_region_type *
1301lang_memory_region_lookup (const char *const name, bfd_boolean create)
1302{
1303  lang_memory_region_name *n;
1304  lang_memory_region_type *r;
1305  lang_memory_region_type *new_region;
1306
1307  /* NAME is NULL for LMA memspecs if no region was specified.  */
1308  if (name == NULL)
1309    return NULL;
1310
1311  for (r = lang_memory_region_list; r != NULL; r = r->next)
1312    for (n = &r->name_list; n != NULL; n = n->next)
1313      if (strcmp (n->name, name) == 0)
1314	{
1315	  if (create)
1316	    einfo (_("%P:%S: warning: redeclaration of memory region `%s'\n"),
1317		   NULL, name);
1318	  return r;
1319	}
1320
1321  if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
1322    einfo (_("%P:%S: warning: memory region `%s' not declared\n"),
1323	   NULL, name);
1324
1325  new_region = (lang_memory_region_type *)
1326      stat_alloc (sizeof (lang_memory_region_type));
1327
1328  new_region->name_list.name = xstrdup (name);
1329  new_region->name_list.next = NULL;
1330  new_region->next = NULL;
1331  new_region->origin_exp = NULL;
1332  new_region->origin = 0;
1333  new_region->length_exp = NULL;
1334  new_region->length = ~(bfd_size_type) 0;
1335  new_region->current = 0;
1336  new_region->last_os = NULL;
1337  new_region->flags = 0;
1338  new_region->not_flags = 0;
1339  new_region->had_full_message = FALSE;
1340
1341  *lang_memory_region_list_tail = new_region;
1342  lang_memory_region_list_tail = &new_region->next;
1343
1344  return new_region;
1345}
1346
1347void
1348lang_memory_region_alias (const char *alias, const char *region_name)
1349{
1350  lang_memory_region_name *n;
1351  lang_memory_region_type *r;
1352  lang_memory_region_type *region;
1353
1354  /* The default region must be unique.  This ensures that it is not necessary
1355     to iterate through the name list if someone wants the check if a region is
1356     the default memory region.  */
1357  if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0
1358      || strcmp (alias, DEFAULT_MEMORY_REGION) == 0)
1359    einfo (_("%F%P:%S: error: alias for default memory region\n"), NULL);
1360
1361  /* Look for the target region and check if the alias is not already
1362     in use.  */
1363  region = NULL;
1364  for (r = lang_memory_region_list; r != NULL; r = r->next)
1365    for (n = &r->name_list; n != NULL; n = n->next)
1366      {
1367	if (region == NULL && strcmp (n->name, region_name) == 0)
1368	  region = r;
1369	if (strcmp (n->name, alias) == 0)
1370	  einfo (_("%F%P:%S: error: redefinition of memory region "
1371		   "alias `%s'\n"),
1372		 NULL, alias);
1373      }
1374
1375  /* Check if the target region exists.  */
1376  if (region == NULL)
1377    einfo (_("%F%P:%S: error: memory region `%s' "
1378	     "for alias `%s' does not exist\n"),
1379	   NULL, region_name, alias);
1380
1381  /* Add alias to region name list.  */
1382  n = (lang_memory_region_name *) stat_alloc (sizeof (lang_memory_region_name));
1383  n->name = xstrdup (alias);
1384  n->next = region->name_list.next;
1385  region->name_list.next = n;
1386}
1387
1388static lang_memory_region_type *
1389lang_memory_default (asection *section)
1390{
1391  lang_memory_region_type *p;
1392
1393  flagword sec_flags = section->flags;
1394
1395  /* Override SEC_DATA to mean a writable section.  */
1396  if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
1397    sec_flags |= SEC_DATA;
1398
1399  for (p = lang_memory_region_list; p != NULL; p = p->next)
1400    {
1401      if ((p->flags & sec_flags) != 0
1402	  && (p->not_flags & sec_flags) == 0)
1403	{
1404	  return p;
1405	}
1406    }
1407  return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
1408}
1409
1410/* Get the output section statement directly from the userdata.  */
1411
1412lang_output_section_statement_type *
1413lang_output_section_get (const asection *output_section)
1414{
1415  return get_userdata (output_section);
1416}
1417
1418/* Find or create an output_section_statement with the given NAME.
1419   If CONSTRAINT is non-zero match one with that constraint, otherwise
1420   match any non-negative constraint.  If CREATE, always make a
1421   new output_section_statement for SPECIAL CONSTRAINT.  */
1422
1423lang_output_section_statement_type *
1424lang_output_section_statement_lookup (const char *name,
1425				      int constraint,
1426				      bfd_boolean create)
1427{
1428  struct out_section_hash_entry *entry;
1429
1430  entry = ((struct out_section_hash_entry *)
1431	   bfd_hash_lookup (&output_section_statement_table, name,
1432			    create, FALSE));
1433  if (entry == NULL)
1434    {
1435      if (create)
1436	einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1437      return NULL;
1438    }
1439
1440  if (entry->s.output_section_statement.name != NULL)
1441    {
1442      /* We have a section of this name, but it might not have the correct
1443	 constraint.  */
1444      struct out_section_hash_entry *last_ent;
1445
1446      name = entry->s.output_section_statement.name;
1447      if (create && constraint == SPECIAL)
1448	/* Not traversing to the end reverses the order of the second
1449	   and subsequent SPECIAL sections in the hash table chain,
1450	   but that shouldn't matter.  */
1451	last_ent = entry;
1452      else
1453	do
1454	  {
1455	    if (constraint == entry->s.output_section_statement.constraint
1456		|| (constraint == 0
1457		    && entry->s.output_section_statement.constraint >= 0))
1458	      return &entry->s.output_section_statement;
1459	    last_ent = entry;
1460	    entry = (struct out_section_hash_entry *) entry->root.next;
1461	  }
1462	while (entry != NULL
1463	       && name == entry->s.output_section_statement.name);
1464
1465      if (!create)
1466	return NULL;
1467
1468      entry
1469	= ((struct out_section_hash_entry *)
1470	   output_section_statement_newfunc (NULL,
1471					     &output_section_statement_table,
1472					     name));
1473      if (entry == NULL)
1474	{
1475	  einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1476	  return NULL;
1477	}
1478      entry->root = last_ent->root;
1479      last_ent->root.next = &entry->root;
1480    }
1481
1482  entry->s.output_section_statement.name = name;
1483  entry->s.output_section_statement.constraint = constraint;
1484  return &entry->s.output_section_statement;
1485}
1486
1487/* Find the next output_section_statement with the same name as OS.
1488   If CONSTRAINT is non-zero, find one with that constraint otherwise
1489   match any non-negative constraint.  */
1490
1491lang_output_section_statement_type *
1492next_matching_output_section_statement (lang_output_section_statement_type *os,
1493					int constraint)
1494{
1495  /* All output_section_statements are actually part of a
1496     struct out_section_hash_entry.  */
1497  struct out_section_hash_entry *entry = (struct out_section_hash_entry *)
1498    ((char *) os
1499     - offsetof (struct out_section_hash_entry, s.output_section_statement));
1500  const char *name = os->name;
1501
1502  ASSERT (name == entry->root.string);
1503  do
1504    {
1505      entry = (struct out_section_hash_entry *) entry->root.next;
1506      if (entry == NULL
1507	  || name != entry->s.output_section_statement.name)
1508	return NULL;
1509    }
1510  while (constraint != entry->s.output_section_statement.constraint
1511	 && (constraint != 0
1512	     || entry->s.output_section_statement.constraint < 0));
1513
1514  return &entry->s.output_section_statement;
1515}
1516
1517/* A variant of lang_output_section_find used by place_orphan.
1518   Returns the output statement that should precede a new output
1519   statement for SEC.  If an exact match is found on certain flags,
1520   sets *EXACT too.  */
1521
1522lang_output_section_statement_type *
1523lang_output_section_find_by_flags (const asection *sec,
1524				   flagword sec_flags,
1525				   lang_output_section_statement_type **exact,
1526				   lang_match_sec_type_func match_type)
1527{
1528  lang_output_section_statement_type *first, *look, *found;
1529  flagword look_flags, differ;
1530
1531  /* We know the first statement on this list is *ABS*.  May as well
1532     skip it.  */
1533  first = &lang_output_section_statement.head->output_section_statement;
1534  first = first->next;
1535
1536  /* First try for an exact match.  */
1537  found = NULL;
1538  for (look = first; look; look = look->next)
1539    {
1540      look_flags = look->flags;
1541      if (look->bfd_section != NULL)
1542	{
1543	  look_flags = look->bfd_section->flags;
1544	  if (match_type && !match_type (link_info.output_bfd,
1545					 look->bfd_section,
1546					 sec->owner, sec))
1547	    continue;
1548	}
1549      differ = look_flags ^ sec_flags;
1550      if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1551		      | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1552	found = look;
1553    }
1554  if (found != NULL)
1555    {
1556      if (exact != NULL)
1557	*exact = found;
1558      return found;
1559    }
1560
1561  if ((sec_flags & SEC_CODE) != 0
1562      && (sec_flags & SEC_ALLOC) != 0)
1563    {
1564      /* Try for a rw code section.  */
1565      for (look = first; look; look = look->next)
1566	{
1567	  look_flags = look->flags;
1568	  if (look->bfd_section != NULL)
1569	    {
1570	      look_flags = look->bfd_section->flags;
1571	      if (match_type && !match_type (link_info.output_bfd,
1572					     look->bfd_section,
1573					     sec->owner, sec))
1574		continue;
1575	    }
1576	  differ = look_flags ^ sec_flags;
1577	  if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1578			  | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1579	    found = look;
1580	}
1581    }
1582  else if ((sec_flags & SEC_READONLY) != 0
1583	   && (sec_flags & SEC_ALLOC) != 0)
1584    {
1585      /* .rodata can go after .text, .sdata2 after .rodata.  */
1586      for (look = first; look; look = look->next)
1587	{
1588	  look_flags = look->flags;
1589	  if (look->bfd_section != NULL)
1590	    {
1591	      look_flags = look->bfd_section->flags;
1592	      if (match_type && !match_type (link_info.output_bfd,
1593					     look->bfd_section,
1594					     sec->owner, sec))
1595		continue;
1596	    }
1597	  differ = look_flags ^ sec_flags;
1598	  if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1599			  | SEC_READONLY | SEC_SMALL_DATA))
1600	      || (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1601			      | SEC_READONLY))
1602		  && !(look_flags & SEC_SMALL_DATA)))
1603	    found = look;
1604	}
1605    }
1606  else if ((sec_flags & SEC_THREAD_LOCAL) != 0
1607	   && (sec_flags & SEC_ALLOC) != 0)
1608    {
1609      /* .tdata can go after .data, .tbss after .tdata.  Treat .tbss
1610	 as if it were a loaded section, and don't use match_type.  */
1611      bfd_boolean seen_thread_local = FALSE;
1612
1613      match_type = NULL;
1614      for (look = first; look; look = look->next)
1615	{
1616	  look_flags = look->flags;
1617	  if (look->bfd_section != NULL)
1618	    look_flags = look->bfd_section->flags;
1619
1620	  differ = look_flags ^ (sec_flags | SEC_LOAD | SEC_HAS_CONTENTS);
1621	  if (!(differ & (SEC_THREAD_LOCAL | SEC_ALLOC)))
1622	    {
1623	      /* .tdata and .tbss must be adjacent and in that order.  */
1624	      if (!(look_flags & SEC_LOAD)
1625		  && (sec_flags & SEC_LOAD))
1626		/* ..so if we're at a .tbss section and we're placing
1627		   a .tdata section stop looking and return the
1628		   previous section.  */
1629		break;
1630	      found = look;
1631	      seen_thread_local = TRUE;
1632	    }
1633	  else if (seen_thread_local)
1634	    break;
1635	  else if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD)))
1636	    found = look;
1637	}
1638    }
1639  else if ((sec_flags & SEC_SMALL_DATA) != 0
1640	   && (sec_flags & SEC_ALLOC) != 0)
1641    {
1642      /* .sdata goes after .data, .sbss after .sdata.  */
1643      for (look = first; look; look = look->next)
1644	{
1645	  look_flags = look->flags;
1646	  if (look->bfd_section != NULL)
1647	    {
1648	      look_flags = look->bfd_section->flags;
1649	      if (match_type && !match_type (link_info.output_bfd,
1650					     look->bfd_section,
1651					     sec->owner, sec))
1652		continue;
1653	    }
1654	  differ = look_flags ^ sec_flags;
1655	  if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1656			  | SEC_THREAD_LOCAL))
1657	      || ((look_flags & SEC_SMALL_DATA)
1658		  && !(sec_flags & SEC_HAS_CONTENTS)))
1659	    found = look;
1660	}
1661    }
1662  else if ((sec_flags & SEC_HAS_CONTENTS) != 0
1663	   && (sec_flags & SEC_ALLOC) != 0)
1664    {
1665      /* .data goes after .rodata.  */
1666      for (look = first; look; look = look->next)
1667	{
1668	  look_flags = look->flags;
1669	  if (look->bfd_section != NULL)
1670	    {
1671	      look_flags = look->bfd_section->flags;
1672	      if (match_type && !match_type (link_info.output_bfd,
1673					     look->bfd_section,
1674					     sec->owner, sec))
1675		continue;
1676	    }
1677	  differ = look_flags ^ sec_flags;
1678	  if (!(differ & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1679			  | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1680	    found = look;
1681	}
1682    }
1683  else if ((sec_flags & SEC_ALLOC) != 0)
1684    {
1685      /* .bss goes after any other alloc section.  */
1686      for (look = first; look; look = look->next)
1687	{
1688	  look_flags = look->flags;
1689	  if (look->bfd_section != NULL)
1690	    {
1691	      look_flags = look->bfd_section->flags;
1692	      if (match_type && !match_type (link_info.output_bfd,
1693					     look->bfd_section,
1694					     sec->owner, sec))
1695		continue;
1696	    }
1697	  differ = look_flags ^ sec_flags;
1698	  if (!(differ & SEC_ALLOC))
1699	    found = look;
1700	}
1701    }
1702  else
1703    {
1704      /* non-alloc go last.  */
1705      for (look = first; look; look = look->next)
1706	{
1707	  look_flags = look->flags;
1708	  if (look->bfd_section != NULL)
1709	    look_flags = look->bfd_section->flags;
1710	  differ = look_flags ^ sec_flags;
1711	  if (!(differ & SEC_DEBUGGING))
1712	    found = look;
1713	}
1714      return found;
1715    }
1716
1717  if (found || !match_type)
1718    return found;
1719
1720  return lang_output_section_find_by_flags (sec, sec_flags, NULL, NULL);
1721}
1722
1723/* Find the last output section before given output statement.
1724   Used by place_orphan.  */
1725
1726static asection *
1727output_prev_sec_find (lang_output_section_statement_type *os)
1728{
1729  lang_output_section_statement_type *lookup;
1730
1731  for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
1732    {
1733      if (lookup->constraint < 0)
1734	continue;
1735
1736      if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1737	return lookup->bfd_section;
1738    }
1739
1740  return NULL;
1741}
1742
1743/* Look for a suitable place for a new output section statement.  The
1744   idea is to skip over anything that might be inside a SECTIONS {}
1745   statement in a script, before we find another output section
1746   statement.  Assignments to "dot" before an output section statement
1747   are assumed to belong to it, except in two cases;  The first
1748   assignment to dot, and assignments before non-alloc sections.
1749   Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
1750   similar assignments that set the initial address, or we might
1751   insert non-alloc note sections among assignments setting end of
1752   image symbols.  */
1753
1754static lang_statement_union_type **
1755insert_os_after (lang_output_section_statement_type *after)
1756{
1757  lang_statement_union_type **where;
1758  lang_statement_union_type **assign = NULL;
1759  bfd_boolean ignore_first;
1760
1761  ignore_first
1762    = after == &lang_output_section_statement.head->output_section_statement;
1763
1764  for (where = &after->header.next;
1765       *where != NULL;
1766       where = &(*where)->header.next)
1767    {
1768      switch ((*where)->header.type)
1769	{
1770	case lang_assignment_statement_enum:
1771	  if (assign == NULL)
1772	    {
1773	      lang_assignment_statement_type *ass;
1774
1775	      ass = &(*where)->assignment_statement;
1776	      if (ass->exp->type.node_class != etree_assert
1777		  && ass->exp->assign.dst[0] == '.'
1778		  && ass->exp->assign.dst[1] == 0
1779		  && !ignore_first)
1780		assign = where;
1781	    }
1782	  ignore_first = FALSE;
1783	  continue;
1784	case lang_wild_statement_enum:
1785	case lang_input_section_enum:
1786	case lang_object_symbols_statement_enum:
1787	case lang_fill_statement_enum:
1788	case lang_data_statement_enum:
1789	case lang_reloc_statement_enum:
1790	case lang_padding_statement_enum:
1791	case lang_constructors_statement_enum:
1792	  assign = NULL;
1793	  continue;
1794	case lang_output_section_statement_enum:
1795	  if (assign != NULL)
1796	    {
1797	      asection *s = (*where)->output_section_statement.bfd_section;
1798
1799	      if (s == NULL
1800		  || s->map_head.s == NULL
1801		  || (s->flags & SEC_ALLOC) != 0)
1802		where = assign;
1803	    }
1804	  break;
1805	case lang_input_statement_enum:
1806	case lang_address_statement_enum:
1807	case lang_target_statement_enum:
1808	case lang_output_statement_enum:
1809	case lang_group_statement_enum:
1810	case lang_insert_statement_enum:
1811	  continue;
1812	}
1813      break;
1814    }
1815
1816  return where;
1817}
1818
1819lang_output_section_statement_type *
1820lang_insert_orphan (asection *s,
1821		    const char *secname,
1822		    int constraint,
1823		    lang_output_section_statement_type *after,
1824		    struct orphan_save *place,
1825		    etree_type *address,
1826		    lang_statement_list_type *add_child)
1827{
1828  lang_statement_list_type add;
1829  const char *ps;
1830  lang_assignment_statement_type *start_assign;
1831  lang_output_section_statement_type *os;
1832  lang_output_section_statement_type **os_tail;
1833
1834  /* If we have found an appropriate place for the output section
1835     statements for this orphan, add them to our own private list,
1836     inserting them later into the global statement list.  */
1837  if (after != NULL)
1838    {
1839      lang_list_init (&add);
1840      push_stat_ptr (&add);
1841    }
1842
1843  if (bfd_link_relocatable (&link_info)
1844      || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1845    address = exp_intop (0);
1846
1847  os_tail = ((lang_output_section_statement_type **)
1848	     lang_output_section_statement.tail);
1849  os = lang_enter_output_section_statement (secname, address, normal_section,
1850					    NULL, NULL, NULL, constraint, 0);
1851
1852  ps = NULL;
1853  start_assign = NULL;
1854  if (config.build_constructors && *os_tail == os)
1855    {
1856      /* If the name of the section is representable in C, then create
1857	 symbols to mark the start and the end of the section.  */
1858      for (ps = secname; *ps != '\0'; ps++)
1859	if (!ISALNUM ((unsigned char) *ps) && *ps != '_')
1860	  break;
1861      if (*ps == '\0')
1862	{
1863	  char *symname;
1864
1865	  symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1866	  symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1867	  sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1868	  start_assign
1869	    = lang_add_assignment (exp_provide (symname,
1870						exp_nameop (NAME, "."),
1871						FALSE));
1872	}
1873    }
1874
1875  if (add_child == NULL)
1876    add_child = &os->children;
1877  lang_add_section (add_child, s, NULL, os);
1878
1879  if (after && (s->flags & (SEC_LOAD | SEC_ALLOC)) != 0)
1880    {
1881      const char *region = (after->region
1882			    ? after->region->name_list.name
1883			    : DEFAULT_MEMORY_REGION);
1884      const char *lma_region = (after->lma_region
1885				? after->lma_region->name_list.name
1886				: NULL);
1887      lang_leave_output_section_statement (NULL, region, after->phdrs,
1888					   lma_region);
1889    }
1890  else
1891    lang_leave_output_section_statement (NULL, DEFAULT_MEMORY_REGION, NULL,
1892					 NULL);
1893
1894  if (start_assign != NULL)
1895    {
1896      char *symname;
1897      lang_assignment_statement_type *stop_assign;
1898      bfd_vma dot;
1899
1900      symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
1901      symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1902      sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
1903      stop_assign
1904	= lang_add_assignment (exp_provide (symname,
1905					    exp_nameop (NAME, "."),
1906					    FALSE));
1907      /* Evaluate the expression to define the symbol if referenced,
1908	 before sizing dynamic sections.  */
1909      dot = os->bfd_section->vma;
1910      exp_fold_tree (start_assign->exp, os->bfd_section, &dot);
1911      dot += TO_ADDR (s->size);
1912      exp_fold_tree (stop_assign->exp, os->bfd_section, &dot);
1913    }
1914
1915  /* Restore the global list pointer.  */
1916  if (after != NULL)
1917    pop_stat_ptr ();
1918
1919  if (after != NULL && os->bfd_section != NULL)
1920    {
1921      asection *snew, *as;
1922
1923      snew = os->bfd_section;
1924
1925      /* Shuffle the bfd section list to make the output file look
1926	 neater.  This is really only cosmetic.  */
1927      if (place->section == NULL
1928	  && after != (&lang_output_section_statement.head
1929		       ->output_section_statement))
1930	{
1931	  asection *bfd_section = after->bfd_section;
1932
1933	  /* If the output statement hasn't been used to place any input
1934	     sections (and thus doesn't have an output bfd_section),
1935	     look for the closest prior output statement having an
1936	     output section.  */
1937	  if (bfd_section == NULL)
1938	    bfd_section = output_prev_sec_find (after);
1939
1940	  if (bfd_section != NULL && bfd_section != snew)
1941	    place->section = &bfd_section->next;
1942	}
1943
1944      if (place->section == NULL)
1945	place->section = &link_info.output_bfd->sections;
1946
1947      as = *place->section;
1948
1949      if (!as)
1950	{
1951	  /* Put the section at the end of the list.  */
1952
1953	  /* Unlink the section.  */
1954	  bfd_section_list_remove (link_info.output_bfd, snew);
1955
1956	  /* Now tack it back on in the right place.  */
1957	  bfd_section_list_append (link_info.output_bfd, snew);
1958	}
1959      else if (as != snew && as->prev != snew)
1960	{
1961	  /* Unlink the section.  */
1962	  bfd_section_list_remove (link_info.output_bfd, snew);
1963
1964	  /* Now tack it back on in the right place.  */
1965	  bfd_section_list_insert_before (link_info.output_bfd, as, snew);
1966	}
1967
1968      /* Save the end of this list.  Further ophans of this type will
1969	 follow the one we've just added.  */
1970      place->section = &snew->next;
1971
1972      /* The following is non-cosmetic.  We try to put the output
1973	 statements in some sort of reasonable order here, because they
1974	 determine the final load addresses of the orphan sections.
1975	 In addition, placing output statements in the wrong order may
1976	 require extra segments.  For instance, given a typical
1977	 situation of all read-only sections placed in one segment and
1978	 following that a segment containing all the read-write
1979	 sections, we wouldn't want to place an orphan read/write
1980	 section before or amongst the read-only ones.  */
1981      if (add.head != NULL)
1982	{
1983	  lang_output_section_statement_type *newly_added_os;
1984
1985	  if (place->stmt == NULL)
1986	    {
1987	      lang_statement_union_type **where = insert_os_after (after);
1988
1989	      *add.tail = *where;
1990	      *where = add.head;
1991
1992	      place->os_tail = &after->next;
1993	    }
1994	  else
1995	    {
1996	      /* Put it after the last orphan statement we added.  */
1997	      *add.tail = *place->stmt;
1998	      *place->stmt = add.head;
1999	    }
2000
2001	  /* Fix the global list pointer if we happened to tack our
2002	     new list at the tail.  */
2003	  if (*stat_ptr->tail == add.head)
2004	    stat_ptr->tail = add.tail;
2005
2006	  /* Save the end of this list.  */
2007	  place->stmt = add.tail;
2008
2009	  /* Do the same for the list of output section statements.  */
2010	  newly_added_os = *os_tail;
2011	  *os_tail = NULL;
2012	  newly_added_os->prev = (lang_output_section_statement_type *)
2013	    ((char *) place->os_tail
2014	     - offsetof (lang_output_section_statement_type, next));
2015	  newly_added_os->next = *place->os_tail;
2016	  if (newly_added_os->next != NULL)
2017	    newly_added_os->next->prev = newly_added_os;
2018	  *place->os_tail = newly_added_os;
2019	  place->os_tail = &newly_added_os->next;
2020
2021	  /* Fixing the global list pointer here is a little different.
2022	     We added to the list in lang_enter_output_section_statement,
2023	     trimmed off the new output_section_statment above when
2024	     assigning *os_tail = NULL, but possibly added it back in
2025	     the same place when assigning *place->os_tail.  */
2026	  if (*os_tail == NULL)
2027	    lang_output_section_statement.tail
2028	      = (lang_statement_union_type **) os_tail;
2029	}
2030    }
2031  return os;
2032}
2033
2034static void
2035lang_print_asneeded (void)
2036{
2037  struct asneeded_minfo *m;
2038  char buf[100];
2039
2040  if (asneeded_list_head == NULL)
2041    return;
2042
2043  sprintf (buf, _("\nAs-needed library included "
2044		  "to satisfy reference by file (symbol)\n\n"));
2045  minfo ("%s", buf);
2046
2047  for (m = asneeded_list_head; m != NULL; m = m->next)
2048    {
2049      size_t len;
2050
2051      minfo ("%s", m->soname);
2052      len = strlen (m->soname);
2053
2054      if (len >= 29)
2055	{
2056	  print_nl ();
2057	  len = 0;
2058	}
2059      while (len < 30)
2060	{
2061	  print_space ();
2062	  ++len;
2063	}
2064
2065      if (m->ref != NULL)
2066	minfo ("%B ", m->ref);
2067      minfo ("(%T)\n", m->name);
2068    }
2069}
2070
2071static void
2072lang_map_flags (flagword flag)
2073{
2074  if (flag & SEC_ALLOC)
2075    minfo ("a");
2076
2077  if (flag & SEC_CODE)
2078    minfo ("x");
2079
2080  if (flag & SEC_READONLY)
2081    minfo ("r");
2082
2083  if (flag & SEC_DATA)
2084    minfo ("w");
2085
2086  if (flag & SEC_LOAD)
2087    minfo ("l");
2088}
2089
2090void
2091lang_map (void)
2092{
2093  lang_memory_region_type *m;
2094  bfd_boolean dis_header_printed = FALSE;
2095
2096  LANG_FOR_EACH_INPUT_STATEMENT (file)
2097    {
2098      asection *s;
2099
2100      if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
2101	  || file->flags.just_syms)
2102	continue;
2103
2104      for (s = file->the_bfd->sections; s != NULL; s = s->next)
2105	if ((s->output_section == NULL
2106	     || s->output_section->owner != link_info.output_bfd)
2107	    && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
2108	  {
2109	    if (!dis_header_printed)
2110	      {
2111		fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
2112		dis_header_printed = TRUE;
2113	      }
2114
2115	    print_input_section (s, TRUE);
2116	  }
2117    }
2118
2119  minfo (_("\nMemory Configuration\n\n"));
2120  fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
2121	   _("Name"), _("Origin"), _("Length"), _("Attributes"));
2122
2123  for (m = lang_memory_region_list; m != NULL; m = m->next)
2124    {
2125      char buf[100];
2126      int len;
2127
2128      fprintf (config.map_file, "%-16s ", m->name_list.name);
2129
2130      sprintf_vma (buf, m->origin);
2131      minfo ("0x%s ", buf);
2132      len = strlen (buf);
2133      while (len < 16)
2134	{
2135	  print_space ();
2136	  ++len;
2137	}
2138
2139      minfo ("0x%V", m->length);
2140      if (m->flags || m->not_flags)
2141	{
2142#ifndef BFD64
2143	  minfo ("        ");
2144#endif
2145	  if (m->flags)
2146	    {
2147	      print_space ();
2148	      lang_map_flags (m->flags);
2149	    }
2150
2151	  if (m->not_flags)
2152	    {
2153	      minfo (" !");
2154	      lang_map_flags (m->not_flags);
2155	    }
2156	}
2157
2158      print_nl ();
2159    }
2160
2161  fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
2162
2163  if (!link_info.reduce_memory_overheads)
2164    {
2165      obstack_begin (&map_obstack, 1000);
2166      bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
2167    }
2168  lang_statement_iteration++;
2169  print_statements ();
2170
2171  ldemul_extra_map_file_text (link_info.output_bfd, &link_info,
2172			      config.map_file);
2173}
2174
2175static bfd_boolean
2176sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
2177		 void *info ATTRIBUTE_UNUSED)
2178{
2179  if ((hash_entry->type == bfd_link_hash_defined
2180       || hash_entry->type == bfd_link_hash_defweak)
2181      && hash_entry->u.def.section->owner != link_info.output_bfd
2182      && hash_entry->u.def.section->owner != NULL)
2183    {
2184      input_section_userdata_type *ud;
2185      struct map_symbol_def *def;
2186
2187      ud = ((input_section_userdata_type *)
2188	    get_userdata (hash_entry->u.def.section));
2189      if (!ud)
2190	{
2191	  ud = (input_section_userdata_type *) stat_alloc (sizeof (*ud));
2192	  get_userdata (hash_entry->u.def.section) = ud;
2193	  ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2194	  ud->map_symbol_def_count = 0;
2195	}
2196      else if (!ud->map_symbol_def_tail)
2197	ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2198
2199      def = (struct map_symbol_def *) obstack_alloc (&map_obstack, sizeof *def);
2200      def->entry = hash_entry;
2201      *(ud->map_symbol_def_tail) = def;
2202      ud->map_symbol_def_tail = &def->next;
2203      ud->map_symbol_def_count++;
2204    }
2205  return TRUE;
2206}
2207
2208/* Initialize an output section.  */
2209
2210static void
2211init_os (lang_output_section_statement_type *s, flagword flags)
2212{
2213  if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
2214    einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
2215
2216  if (s->constraint != SPECIAL)
2217    s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
2218  if (s->bfd_section == NULL)
2219    s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
2220							 s->name, flags);
2221  if (s->bfd_section == NULL)
2222    {
2223      einfo (_("%P%F: output format %s cannot represent section"
2224	       " called %s: %E\n"),
2225	     link_info.output_bfd->xvec->name, s->name);
2226    }
2227  s->bfd_section->output_section = s->bfd_section;
2228  s->bfd_section->output_offset = 0;
2229
2230  /* Set the userdata of the output section to the output section
2231     statement to avoid lookup.  */
2232  get_userdata (s->bfd_section) = s;
2233
2234  /* If there is a base address, make sure that any sections it might
2235     mention are initialized.  */
2236  if (s->addr_tree != NULL)
2237    exp_init_os (s->addr_tree);
2238
2239  if (s->load_base != NULL)
2240    exp_init_os (s->load_base);
2241
2242  /* If supplied an alignment, set it.  */
2243  if (s->section_alignment != -1)
2244    s->bfd_section->alignment_power = s->section_alignment;
2245}
2246
2247/* Make sure that all output sections mentioned in an expression are
2248   initialized.  */
2249
2250static void
2251exp_init_os (etree_type *exp)
2252{
2253  switch (exp->type.node_class)
2254    {
2255    case etree_assign:
2256    case etree_provide:
2257      exp_init_os (exp->assign.src);
2258      break;
2259
2260    case etree_binary:
2261      exp_init_os (exp->binary.lhs);
2262      exp_init_os (exp->binary.rhs);
2263      break;
2264
2265    case etree_trinary:
2266      exp_init_os (exp->trinary.cond);
2267      exp_init_os (exp->trinary.lhs);
2268      exp_init_os (exp->trinary.rhs);
2269      break;
2270
2271    case etree_assert:
2272      exp_init_os (exp->assert_s.child);
2273      break;
2274
2275    case etree_unary:
2276      exp_init_os (exp->unary.child);
2277      break;
2278
2279    case etree_name:
2280      switch (exp->type.node_code)
2281	{
2282	case ADDR:
2283	case LOADADDR:
2284	case SIZEOF:
2285	  {
2286	    lang_output_section_statement_type *os;
2287
2288	    os = lang_output_section_find (exp->name.name);
2289	    if (os != NULL && os->bfd_section == NULL)
2290	      init_os (os, 0);
2291	  }
2292	}
2293      break;
2294
2295    default:
2296      break;
2297    }
2298}
2299
2300static void
2301section_already_linked (bfd *abfd, asection *sec, void *data)
2302{
2303  lang_input_statement_type *entry = (lang_input_statement_type *) data;
2304
2305  /* If we are only reading symbols from this object, then we want to
2306     discard all sections.  */
2307  if (entry->flags.just_syms)
2308    {
2309      bfd_link_just_syms (abfd, sec, &link_info);
2310      return;
2311    }
2312
2313  /* Deal with SHF_EXCLUDE ELF sections.  */
2314  if (!bfd_link_relocatable (&link_info)
2315      && (abfd->flags & BFD_PLUGIN) == 0
2316      && (sec->flags & (SEC_GROUP | SEC_KEEP | SEC_EXCLUDE)) == SEC_EXCLUDE)
2317    sec->output_section = bfd_abs_section_ptr;
2318
2319  if (!(abfd->flags & DYNAMIC))
2320    bfd_section_already_linked (abfd, sec, &link_info);
2321}
2322
2323/* The wild routines.
2324
2325   These expand statements like *(.text) and foo.o to a list of
2326   explicit actions, like foo.o(.text), bar.o(.text) and
2327   foo.o(.text, .data).  */
2328
2329/* Add SECTION to the output section OUTPUT.  Do this by creating a
2330   lang_input_section statement which is placed at PTR.  */
2331
2332void
2333lang_add_section (lang_statement_list_type *ptr,
2334		  asection *section,
2335		  struct flag_info *sflag_info,
2336		  lang_output_section_statement_type *output)
2337{
2338  flagword flags = section->flags;
2339
2340  bfd_boolean discard;
2341  lang_input_section_type *new_section;
2342  bfd *abfd = link_info.output_bfd;
2343
2344  /* Discard sections marked with SEC_EXCLUDE.  */
2345  discard = (flags & SEC_EXCLUDE) != 0;
2346
2347  /* Discard input sections which are assigned to a section named
2348     DISCARD_SECTION_NAME.  */
2349  if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
2350    discard = TRUE;
2351
2352  /* Discard debugging sections if we are stripping debugging
2353     information.  */
2354  if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
2355      && (flags & SEC_DEBUGGING) != 0)
2356    discard = TRUE;
2357
2358  if (discard)
2359    {
2360      if (section->output_section == NULL)
2361	{
2362	  /* This prevents future calls from assigning this section.  */
2363	  section->output_section = bfd_abs_section_ptr;
2364	}
2365      return;
2366    }
2367
2368  if (sflag_info)
2369    {
2370      bfd_boolean keep;
2371
2372      keep = bfd_lookup_section_flags (&link_info, sflag_info, section);
2373      if (!keep)
2374	return;
2375    }
2376
2377  if (section->output_section != NULL)
2378    return;
2379
2380  /* We don't copy the SEC_NEVER_LOAD flag from an input section
2381     to an output section, because we want to be able to include a
2382     SEC_NEVER_LOAD section in the middle of an otherwise loaded
2383     section (I don't know why we want to do this, but we do).
2384     build_link_order in ldwrite.c handles this case by turning
2385     the embedded SEC_NEVER_LOAD section into a fill.  */
2386  flags &= ~ SEC_NEVER_LOAD;
2387
2388  /* If final link, don't copy the SEC_LINK_ONCE flags, they've
2389     already been processed.  One reason to do this is that on pe
2390     format targets, .text$foo sections go into .text and it's odd
2391     to see .text with SEC_LINK_ONCE set.  */
2392
2393  if (!bfd_link_relocatable (&link_info))
2394    flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC);
2395
2396  switch (output->sectype)
2397    {
2398    case normal_section:
2399    case overlay_section:
2400      break;
2401    case noalloc_section:
2402      flags &= ~SEC_ALLOC;
2403      break;
2404    case noload_section:
2405      flags &= ~SEC_LOAD;
2406      flags |= SEC_NEVER_LOAD;
2407      /* Unfortunately GNU ld has managed to evolve two different
2408	 meanings to NOLOAD in scripts.  ELF gets a .bss style noload,
2409	 alloc, no contents section.  All others get a noload, noalloc
2410	 section.  */
2411      if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
2412	flags &= ~SEC_HAS_CONTENTS;
2413      else
2414	flags &= ~SEC_ALLOC;
2415      break;
2416    }
2417
2418  if (output->bfd_section == NULL)
2419    init_os (output, flags);
2420
2421  /* If SEC_READONLY is not set in the input section, then clear
2422     it from the output section.  */
2423  output->bfd_section->flags &= flags | ~SEC_READONLY;
2424
2425  if (output->bfd_section->linker_has_input)
2426    {
2427      /* Only set SEC_READONLY flag on the first input section.  */
2428      flags &= ~ SEC_READONLY;
2429
2430      /* Keep SEC_MERGE and SEC_STRINGS only if they are the same.  */
2431      if ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
2432	  != (flags & (SEC_MERGE | SEC_STRINGS))
2433	  || ((flags & SEC_MERGE) != 0
2434	      && output->bfd_section->entsize != section->entsize))
2435	{
2436	  output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
2437	  flags &= ~ (SEC_MERGE | SEC_STRINGS);
2438	}
2439    }
2440  output->bfd_section->flags |= flags;
2441
2442  if (!output->bfd_section->linker_has_input)
2443    {
2444      output->bfd_section->linker_has_input = 1;
2445      /* This must happen after flags have been updated.  The output
2446	 section may have been created before we saw its first input
2447	 section, eg. for a data statement.  */
2448      bfd_init_private_section_data (section->owner, section,
2449				     link_info.output_bfd,
2450				     output->bfd_section,
2451				     &link_info);
2452      if ((flags & SEC_MERGE) != 0)
2453	output->bfd_section->entsize = section->entsize;
2454    }
2455
2456  if ((flags & SEC_TIC54X_BLOCK) != 0
2457      && bfd_get_arch (section->owner) == bfd_arch_tic54x)
2458    {
2459      /* FIXME: This value should really be obtained from the bfd...  */
2460      output->block_value = 128;
2461    }
2462
2463  if (section->alignment_power > output->bfd_section->alignment_power)
2464    output->bfd_section->alignment_power = section->alignment_power;
2465
2466  section->output_section = output->bfd_section;
2467
2468  if (!map_head_is_link_order)
2469    {
2470      asection *s = output->bfd_section->map_tail.s;
2471      output->bfd_section->map_tail.s = section;
2472      section->map_head.s = NULL;
2473      section->map_tail.s = s;
2474      if (s != NULL)
2475	s->map_head.s = section;
2476      else
2477	output->bfd_section->map_head.s = section;
2478    }
2479
2480  /* Add a section reference to the list.  */
2481  new_section = new_stat (lang_input_section, ptr);
2482  new_section->section = section;
2483}
2484
2485/* Handle wildcard sorting.  This returns the lang_input_section which
2486   should follow the one we are going to create for SECTION and FILE,
2487   based on the sorting requirements of WILD.  It returns NULL if the
2488   new section should just go at the end of the current list.  */
2489
2490static lang_statement_union_type *
2491wild_sort (lang_wild_statement_type *wild,
2492	   struct wildcard_list *sec,
2493	   lang_input_statement_type *file,
2494	   asection *section)
2495{
2496  lang_statement_union_type *l;
2497
2498  if (!wild->filenames_sorted
2499      && (sec == NULL || sec->spec.sorted == none))
2500    return NULL;
2501
2502  for (l = wild->children.head; l != NULL; l = l->header.next)
2503    {
2504      lang_input_section_type *ls;
2505
2506      if (l->header.type != lang_input_section_enum)
2507	continue;
2508      ls = &l->input_section;
2509
2510      /* Sorting by filename takes precedence over sorting by section
2511	 name.  */
2512
2513      if (wild->filenames_sorted)
2514	{
2515	  const char *fn, *ln;
2516	  bfd_boolean fa, la;
2517	  int i;
2518
2519	  /* The PE support for the .idata section as generated by
2520	     dlltool assumes that files will be sorted by the name of
2521	     the archive and then the name of the file within the
2522	     archive.  */
2523
2524	  if (file->the_bfd != NULL
2525	      && file->the_bfd->my_archive != NULL)
2526	    {
2527	      fn = bfd_get_filename (file->the_bfd->my_archive);
2528	      fa = TRUE;
2529	    }
2530	  else
2531	    {
2532	      fn = file->filename;
2533	      fa = FALSE;
2534	    }
2535
2536	  if (ls->section->owner->my_archive != NULL)
2537	    {
2538	      ln = bfd_get_filename (ls->section->owner->my_archive);
2539	      la = TRUE;
2540	    }
2541	  else
2542	    {
2543	      ln = ls->section->owner->filename;
2544	      la = FALSE;
2545	    }
2546
2547	  i = filename_cmp (fn, ln);
2548	  if (i > 0)
2549	    continue;
2550	  else if (i < 0)
2551	    break;
2552
2553	  if (fa || la)
2554	    {
2555	      if (fa)
2556		fn = file->filename;
2557	      if (la)
2558		ln = ls->section->owner->filename;
2559
2560	      i = filename_cmp (fn, ln);
2561	      if (i > 0)
2562		continue;
2563	      else if (i < 0)
2564		break;
2565	    }
2566	}
2567
2568      /* Here either the files are not sorted by name, or we are
2569	 looking at the sections for this file.  */
2570
2571      if (sec != NULL
2572	  && sec->spec.sorted != none
2573	  && sec->spec.sorted != by_none)
2574	if (compare_section (sec->spec.sorted, section, ls->section) < 0)
2575	  break;
2576    }
2577
2578  return l;
2579}
2580
2581/* Expand a wild statement for a particular FILE.  SECTION may be
2582   NULL, in which case it is a wild card.  */
2583
2584static void
2585output_section_callback (lang_wild_statement_type *ptr,
2586			 struct wildcard_list *sec,
2587			 asection *section,
2588			 struct flag_info *sflag_info,
2589			 lang_input_statement_type *file,
2590			 void *output)
2591{
2592  lang_statement_union_type *before;
2593  lang_output_section_statement_type *os;
2594
2595  os = (lang_output_section_statement_type *) output;
2596
2597  /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2598  if (unique_section_p (section, os))
2599    return;
2600
2601  before = wild_sort (ptr, sec, file, section);
2602
2603  /* Here BEFORE points to the lang_input_section which
2604     should follow the one we are about to add.  If BEFORE
2605     is NULL, then the section should just go at the end
2606     of the current list.  */
2607
2608  if (before == NULL)
2609    lang_add_section (&ptr->children, section, sflag_info, os);
2610  else
2611    {
2612      lang_statement_list_type list;
2613      lang_statement_union_type **pp;
2614
2615      lang_list_init (&list);
2616      lang_add_section (&list, section, sflag_info, os);
2617
2618      /* If we are discarding the section, LIST.HEAD will
2619	 be NULL.  */
2620      if (list.head != NULL)
2621	{
2622	  ASSERT (list.head->header.next == NULL);
2623
2624	  for (pp = &ptr->children.head;
2625	       *pp != before;
2626	       pp = &(*pp)->header.next)
2627	    ASSERT (*pp != NULL);
2628
2629	  list.head->header.next = *pp;
2630	  *pp = list.head;
2631	}
2632    }
2633}
2634
2635/* Check if all sections in a wild statement for a particular FILE
2636   are readonly.  */
2637
2638static void
2639check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2640			struct wildcard_list *sec ATTRIBUTE_UNUSED,
2641			asection *section,
2642			struct flag_info *sflag_info ATTRIBUTE_UNUSED,
2643			lang_input_statement_type *file ATTRIBUTE_UNUSED,
2644			void *output)
2645{
2646  lang_output_section_statement_type *os;
2647
2648  os = (lang_output_section_statement_type *) output;
2649
2650  /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2651  if (unique_section_p (section, os))
2652    return;
2653
2654  if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2655    os->all_input_readonly = FALSE;
2656}
2657
2658/* This is passed a file name which must have been seen already and
2659   added to the statement tree.  We will see if it has been opened
2660   already and had its symbols read.  If not then we'll read it.  */
2661
2662static lang_input_statement_type *
2663lookup_name (const char *name)
2664{
2665  lang_input_statement_type *search;
2666
2667  for (search = (lang_input_statement_type *) input_file_chain.head;
2668       search != NULL;
2669       search = (lang_input_statement_type *) search->next_real_file)
2670    {
2671      /* Use the local_sym_name as the name of the file that has
2672	 already been loaded as filename might have been transformed
2673	 via the search directory lookup mechanism.  */
2674      const char *filename = search->local_sym_name;
2675
2676      if (filename != NULL
2677	  && filename_cmp (filename, name) == 0)
2678	break;
2679    }
2680
2681  if (search == NULL)
2682    search = new_afile (name, lang_input_file_is_search_file_enum,
2683			default_target, FALSE);
2684
2685  /* If we have already added this file, or this file is not real
2686     don't add this file.  */
2687  if (search->flags.loaded || !search->flags.real)
2688    return search;
2689
2690  if (!load_symbols (search, NULL))
2691    return NULL;
2692
2693  return search;
2694}
2695
2696/* Save LIST as a list of libraries whose symbols should not be exported.  */
2697
2698struct excluded_lib
2699{
2700  char *name;
2701  struct excluded_lib *next;
2702};
2703static struct excluded_lib *excluded_libs;
2704
2705void
2706add_excluded_libs (const char *list)
2707{
2708  const char *p = list, *end;
2709
2710  while (*p != '\0')
2711    {
2712      struct excluded_lib *entry;
2713      end = strpbrk (p, ",:");
2714      if (end == NULL)
2715	end = p + strlen (p);
2716      entry = (struct excluded_lib *) xmalloc (sizeof (*entry));
2717      entry->next = excluded_libs;
2718      entry->name = (char *) xmalloc (end - p + 1);
2719      memcpy (entry->name, p, end - p);
2720      entry->name[end - p] = '\0';
2721      excluded_libs = entry;
2722      if (*end == '\0')
2723	break;
2724      p = end + 1;
2725    }
2726}
2727
2728static void
2729check_excluded_libs (bfd *abfd)
2730{
2731  struct excluded_lib *lib = excluded_libs;
2732
2733  while (lib)
2734    {
2735      int len = strlen (lib->name);
2736      const char *filename = lbasename (abfd->filename);
2737
2738      if (strcmp (lib->name, "ALL") == 0)
2739	{
2740	  abfd->no_export = TRUE;
2741	  return;
2742	}
2743
2744      if (filename_ncmp (lib->name, filename, len) == 0
2745	  && (filename[len] == '\0'
2746	      || (filename[len] == '.' && filename[len + 1] == 'a'
2747		  && filename[len + 2] == '\0')))
2748	{
2749	  abfd->no_export = TRUE;
2750	  return;
2751	}
2752
2753      lib = lib->next;
2754    }
2755}
2756
2757/* Get the symbols for an input file.  */
2758
2759bfd_boolean
2760load_symbols (lang_input_statement_type *entry,
2761	      lang_statement_list_type *place)
2762{
2763  char **matching;
2764
2765  if (entry->flags.loaded)
2766    return TRUE;
2767
2768  ldfile_open_file (entry);
2769
2770  /* Do not process further if the file was missing.  */
2771  if (entry->flags.missing_file)
2772    return TRUE;
2773
2774  if (!bfd_check_format (entry->the_bfd, bfd_archive)
2775      && !bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2776    {
2777      bfd_error_type err;
2778      struct lang_input_statement_flags save_flags;
2779      extern FILE *yyin;
2780
2781      err = bfd_get_error ();
2782
2783      /* See if the emulation has some special knowledge.  */
2784      if (ldemul_unrecognized_file (entry))
2785	return TRUE;
2786
2787      if (err == bfd_error_file_ambiguously_recognized)
2788	{
2789	  char **p;
2790
2791	  einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2792	  einfo (_("%B: matching formats:"), entry->the_bfd);
2793	  for (p = matching; *p != NULL; p++)
2794	    einfo (" %s", *p);
2795	  einfo ("%F\n");
2796	}
2797      else if (err != bfd_error_file_not_recognized
2798	       || place == NULL)
2799	einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2800
2801      bfd_close (entry->the_bfd);
2802      entry->the_bfd = NULL;
2803
2804      /* Try to interpret the file as a linker script.  */
2805      save_flags = input_flags;
2806      ldfile_open_command_file (entry->filename);
2807
2808      push_stat_ptr (place);
2809      input_flags.add_DT_NEEDED_for_regular
2810	= entry->flags.add_DT_NEEDED_for_regular;
2811      input_flags.add_DT_NEEDED_for_dynamic
2812	= entry->flags.add_DT_NEEDED_for_dynamic;
2813      input_flags.whole_archive = entry->flags.whole_archive;
2814      input_flags.dynamic = entry->flags.dynamic;
2815
2816      ldfile_assumed_script = TRUE;
2817      parser_input = input_script;
2818      yyparse ();
2819      ldfile_assumed_script = FALSE;
2820
2821      /* missing_file is sticky.  sysrooted will already have been
2822	 restored when seeing EOF in yyparse, but no harm to restore
2823	 again.  */
2824      save_flags.missing_file |= input_flags.missing_file;
2825      input_flags = save_flags;
2826      pop_stat_ptr ();
2827      fclose (yyin);
2828      yyin = NULL;
2829      entry->flags.loaded = TRUE;
2830
2831      return TRUE;
2832    }
2833
2834  if (ldemul_recognized_file (entry))
2835    return TRUE;
2836
2837  /* We don't call ldlang_add_file for an archive.  Instead, the
2838     add_symbols entry point will call ldlang_add_file, via the
2839     add_archive_element callback, for each element of the archive
2840     which is used.  */
2841  switch (bfd_get_format (entry->the_bfd))
2842    {
2843    default:
2844      break;
2845
2846    case bfd_object:
2847      if (!entry->flags.reload)
2848	ldlang_add_file (entry);
2849      if (trace_files || verbose)
2850	info_msg ("%I\n", entry);
2851      break;
2852
2853    case bfd_archive:
2854      check_excluded_libs (entry->the_bfd);
2855
2856      if (entry->flags.whole_archive)
2857	{
2858	  bfd *member = NULL;
2859	  bfd_boolean loaded = TRUE;
2860
2861	  for (;;)
2862	    {
2863	      bfd *subsbfd;
2864	      member = bfd_openr_next_archived_file (entry->the_bfd, member);
2865
2866	      if (member == NULL)
2867		break;
2868
2869	      if (!bfd_check_format (member, bfd_object))
2870		{
2871		  einfo (_("%F%B: member %B in archive is not an object\n"),
2872			 entry->the_bfd, member);
2873		  loaded = FALSE;
2874		}
2875
2876	      subsbfd = member;
2877	      if (!(*link_info.callbacks
2878		    ->add_archive_element) (&link_info, member,
2879					    "--whole-archive", &subsbfd))
2880		abort ();
2881
2882	      /* Potentially, the add_archive_element hook may have set a
2883		 substitute BFD for us.  */
2884	      if (!bfd_link_add_symbols (subsbfd, &link_info))
2885		{
2886		  einfo (_("%F%B: error adding symbols: %E\n"), member);
2887		  loaded = FALSE;
2888		}
2889	    }
2890
2891	  entry->flags.loaded = loaded;
2892	  return loaded;
2893	}
2894      break;
2895    }
2896
2897  if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2898    entry->flags.loaded = TRUE;
2899  else
2900    einfo (_("%F%B: error adding symbols: %E\n"), entry->the_bfd);
2901
2902  return entry->flags.loaded;
2903}
2904
2905/* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
2906   may be NULL, indicating that it is a wildcard.  Separate
2907   lang_input_section statements are created for each part of the
2908   expansion; they are added after the wild statement S.  OUTPUT is
2909   the output section.  */
2910
2911static void
2912wild (lang_wild_statement_type *s,
2913      const char *target ATTRIBUTE_UNUSED,
2914      lang_output_section_statement_type *output)
2915{
2916  struct wildcard_list *sec;
2917
2918  if (s->handler_data[0]
2919      && s->handler_data[0]->spec.sorted == by_name
2920      && !s->filenames_sorted)
2921    {
2922      lang_section_bst_type *tree;
2923
2924      walk_wild (s, output_section_callback_fast, output);
2925
2926      tree = s->tree;
2927      if (tree)
2928	{
2929	  output_section_callback_tree_to_list (s, tree, output);
2930	  s->tree = NULL;
2931	}
2932    }
2933  else
2934    walk_wild (s, output_section_callback, output);
2935
2936  if (default_common_section == NULL)
2937    for (sec = s->section_list; sec != NULL; sec = sec->next)
2938      if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2939	{
2940	  /* Remember the section that common is going to in case we
2941	     later get something which doesn't know where to put it.  */
2942	  default_common_section = output;
2943	  break;
2944	}
2945}
2946
2947/* Return TRUE iff target is the sought target.  */
2948
2949static int
2950get_target (const bfd_target *target, void *data)
2951{
2952  const char *sought = (const char *) data;
2953
2954  return strcmp (target->name, sought) == 0;
2955}
2956
2957/* Like strcpy() but convert to lower case as well.  */
2958
2959static void
2960stricpy (char *dest, char *src)
2961{
2962  char c;
2963
2964  while ((c = *src++) != 0)
2965    *dest++ = TOLOWER (c);
2966
2967  *dest = 0;
2968}
2969
2970/* Remove the first occurrence of needle (if any) in haystack
2971   from haystack.  */
2972
2973static void
2974strcut (char *haystack, char *needle)
2975{
2976  haystack = strstr (haystack, needle);
2977
2978  if (haystack)
2979    {
2980      char *src;
2981
2982      for (src = haystack + strlen (needle); *src;)
2983	*haystack++ = *src++;
2984
2985      *haystack = 0;
2986    }
2987}
2988
2989/* Compare two target format name strings.
2990   Return a value indicating how "similar" they are.  */
2991
2992static int
2993name_compare (char *first, char *second)
2994{
2995  char *copy1;
2996  char *copy2;
2997  int result;
2998
2999  copy1 = (char *) xmalloc (strlen (first) + 1);
3000  copy2 = (char *) xmalloc (strlen (second) + 1);
3001
3002  /* Convert the names to lower case.  */
3003  stricpy (copy1, first);
3004  stricpy (copy2, second);
3005
3006  /* Remove size and endian strings from the name.  */
3007  strcut (copy1, "big");
3008  strcut (copy1, "little");
3009  strcut (copy2, "big");
3010  strcut (copy2, "little");
3011
3012  /* Return a value based on how many characters match,
3013     starting from the beginning.   If both strings are
3014     the same then return 10 * their length.  */
3015  for (result = 0; copy1[result] == copy2[result]; result++)
3016    if (copy1[result] == 0)
3017      {
3018	result *= 10;
3019	break;
3020      }
3021
3022  free (copy1);
3023  free (copy2);
3024
3025  return result;
3026}
3027
3028/* Set by closest_target_match() below.  */
3029static const bfd_target *winner;
3030
3031/* Scan all the valid bfd targets looking for one that has the endianness
3032   requirement that was specified on the command line, and is the nearest
3033   match to the original output target.  */
3034
3035static int
3036closest_target_match (const bfd_target *target, void *data)
3037{
3038  const bfd_target *original = (const bfd_target *) data;
3039
3040  if (command_line.endian == ENDIAN_BIG
3041      && target->byteorder != BFD_ENDIAN_BIG)
3042    return 0;
3043
3044  if (command_line.endian == ENDIAN_LITTLE
3045      && target->byteorder != BFD_ENDIAN_LITTLE)
3046    return 0;
3047
3048  /* Must be the same flavour.  */
3049  if (target->flavour != original->flavour)
3050    return 0;
3051
3052  /* Ignore generic big and little endian elf vectors.  */
3053  if (strcmp (target->name, "elf32-big") == 0
3054      || strcmp (target->name, "elf64-big") == 0
3055      || strcmp (target->name, "elf32-little") == 0
3056      || strcmp (target->name, "elf64-little") == 0)
3057    return 0;
3058
3059  /* If we have not found a potential winner yet, then record this one.  */
3060  if (winner == NULL)
3061    {
3062      winner = target;
3063      return 0;
3064    }
3065
3066  /* Oh dear, we now have two potential candidates for a successful match.
3067     Compare their names and choose the better one.  */
3068  if (name_compare (target->name, original->name)
3069      > name_compare (winner->name, original->name))
3070    winner = target;
3071
3072  /* Keep on searching until wqe have checked them all.  */
3073  return 0;
3074}
3075
3076/* Return the BFD target format of the first input file.  */
3077
3078static char *
3079get_first_input_target (void)
3080{
3081  char *target = NULL;
3082
3083  LANG_FOR_EACH_INPUT_STATEMENT (s)
3084    {
3085      if (s->header.type == lang_input_statement_enum
3086	  && s->flags.real)
3087	{
3088	  ldfile_open_file (s);
3089
3090	  if (s->the_bfd != NULL
3091	      && bfd_check_format (s->the_bfd, bfd_object))
3092	    {
3093	      target = bfd_get_target (s->the_bfd);
3094
3095	      if (target != NULL)
3096		break;
3097	    }
3098	}
3099    }
3100
3101  return target;
3102}
3103
3104const char *
3105lang_get_output_target (void)
3106{
3107  const char *target;
3108
3109  /* Has the user told us which output format to use?  */
3110  if (output_target != NULL)
3111    return output_target;
3112
3113  /* No - has the current target been set to something other than
3114     the default?  */
3115  if (current_target != default_target && current_target != NULL)
3116    return current_target;
3117
3118  /* No - can we determine the format of the first input file?  */
3119  target = get_first_input_target ();
3120  if (target != NULL)
3121    return target;
3122
3123  /* Failed - use the default output target.  */
3124  return default_target;
3125}
3126
3127/* Open the output file.  */
3128
3129static void
3130open_output (const char *name)
3131{
3132  output_target = lang_get_output_target ();
3133
3134  /* Has the user requested a particular endianness on the command
3135     line?  */
3136  if (command_line.endian != ENDIAN_UNSET)
3137    {
3138      /* Get the chosen target.  */
3139      const bfd_target *target
3140	= bfd_iterate_over_targets (get_target, (void *) output_target);
3141
3142      /* If the target is not supported, we cannot do anything.  */
3143      if (target != NULL)
3144	{
3145	  enum bfd_endian desired_endian;
3146
3147	  if (command_line.endian == ENDIAN_BIG)
3148	    desired_endian = BFD_ENDIAN_BIG;
3149	  else
3150	    desired_endian = BFD_ENDIAN_LITTLE;
3151
3152	  /* See if the target has the wrong endianness.  This should
3153	     not happen if the linker script has provided big and
3154	     little endian alternatives, but some scrips don't do
3155	     this.  */
3156	  if (target->byteorder != desired_endian)
3157	    {
3158	      /* If it does, then see if the target provides
3159		 an alternative with the correct endianness.  */
3160	      if (target->alternative_target != NULL
3161		  && (target->alternative_target->byteorder == desired_endian))
3162		output_target = target->alternative_target->name;
3163	      else
3164		{
3165		  /* Try to find a target as similar as possible to
3166		     the default target, but which has the desired
3167		     endian characteristic.  */
3168		  bfd_iterate_over_targets (closest_target_match,
3169					    (void *) target);
3170
3171		  /* Oh dear - we could not find any targets that
3172		     satisfy our requirements.  */
3173		  if (winner == NULL)
3174		    einfo (_("%P: warning: could not find any targets"
3175			     " that match endianness requirement\n"));
3176		  else
3177		    output_target = winner->name;
3178		}
3179	    }
3180	}
3181    }
3182
3183  link_info.output_bfd = bfd_openw (name, output_target);
3184
3185  if (link_info.output_bfd == NULL)
3186    {
3187      if (bfd_get_error () == bfd_error_invalid_target)
3188	einfo (_("%P%F: target %s not found\n"), output_target);
3189
3190      einfo (_("%P%F: cannot open output file %s: %E\n"), name);
3191    }
3192
3193  delete_output_file_on_failure = TRUE;
3194
3195  if (!bfd_set_format (link_info.output_bfd, bfd_object))
3196    einfo (_("%P%F:%s: can not make object file: %E\n"), name);
3197  if (!bfd_set_arch_mach (link_info.output_bfd,
3198			   ldfile_output_architecture,
3199			   ldfile_output_machine))
3200    einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
3201
3202  link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
3203  if (link_info.hash == NULL)
3204    einfo (_("%P%F: can not create hash table: %E\n"));
3205
3206  bfd_set_gp_size (link_info.output_bfd, g_switch_value);
3207}
3208
3209static void
3210ldlang_open_output (lang_statement_union_type *statement)
3211{
3212  switch (statement->header.type)
3213    {
3214    case lang_output_statement_enum:
3215      ASSERT (link_info.output_bfd == NULL);
3216      open_output (statement->output_statement.name);
3217      ldemul_set_output_arch ();
3218      if (config.magic_demand_paged
3219	  && !bfd_link_relocatable (&link_info))
3220	link_info.output_bfd->flags |= D_PAGED;
3221      else
3222	link_info.output_bfd->flags &= ~D_PAGED;
3223      if (config.text_read_only)
3224	link_info.output_bfd->flags |= WP_TEXT;
3225      else
3226	link_info.output_bfd->flags &= ~WP_TEXT;
3227      if (link_info.traditional_format)
3228	link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
3229      else
3230	link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
3231      break;
3232
3233    case lang_target_statement_enum:
3234      current_target = statement->target_statement.target;
3235      break;
3236    default:
3237      break;
3238    }
3239}
3240
3241static void
3242init_opb (void)
3243{
3244  unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3245					      ldfile_output_machine);
3246  opb_shift = 0;
3247  if (x > 1)
3248    while ((x & 1) == 0)
3249      {
3250	x >>= 1;
3251	++opb_shift;
3252      }
3253  ASSERT (x == 1);
3254}
3255
3256/* Open all the input files.  */
3257
3258enum open_bfd_mode
3259  {
3260    OPEN_BFD_NORMAL = 0,
3261    OPEN_BFD_FORCE = 1,
3262    OPEN_BFD_RESCAN = 2
3263  };
3264#ifdef ENABLE_PLUGINS
3265static lang_input_statement_type *plugin_insert = NULL;
3266#endif
3267
3268static void
3269open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
3270{
3271  for (; s != NULL; s = s->header.next)
3272    {
3273      switch (s->header.type)
3274	{
3275	case lang_constructors_statement_enum:
3276	  open_input_bfds (constructor_list.head, mode);
3277	  break;
3278	case lang_output_section_statement_enum:
3279	  open_input_bfds (s->output_section_statement.children.head, mode);
3280	  break;
3281	case lang_wild_statement_enum:
3282	  /* Maybe we should load the file's symbols.  */
3283	  if ((mode & OPEN_BFD_RESCAN) == 0
3284	      && s->wild_statement.filename
3285	      && !wildcardp (s->wild_statement.filename)
3286	      && !archive_path (s->wild_statement.filename))
3287	    lookup_name (s->wild_statement.filename);
3288	  open_input_bfds (s->wild_statement.children.head, mode);
3289	  break;
3290	case lang_group_statement_enum:
3291	  {
3292	    struct bfd_link_hash_entry *undefs;
3293
3294	    /* We must continually search the entries in the group
3295	       until no new symbols are added to the list of undefined
3296	       symbols.  */
3297
3298	    do
3299	      {
3300		undefs = link_info.hash->undefs_tail;
3301		open_input_bfds (s->group_statement.children.head,
3302				 mode | OPEN_BFD_FORCE);
3303	      }
3304	    while (undefs != link_info.hash->undefs_tail);
3305	  }
3306	  break;
3307	case lang_target_statement_enum:
3308	  current_target = s->target_statement.target;
3309	  break;
3310	case lang_input_statement_enum:
3311	  if (s->input_statement.flags.real)
3312	    {
3313	      lang_statement_union_type **os_tail;
3314	      lang_statement_list_type add;
3315	      bfd *abfd;
3316
3317	      s->input_statement.target = current_target;
3318
3319	      /* If we are being called from within a group, and this
3320		 is an archive which has already been searched, then
3321		 force it to be researched unless the whole archive
3322		 has been loaded already.  Do the same for a rescan.
3323		 Likewise reload --as-needed shared libs.  */
3324	      if (mode != OPEN_BFD_NORMAL
3325#ifdef ENABLE_PLUGINS
3326		  && ((mode & OPEN_BFD_RESCAN) == 0
3327		      || plugin_insert == NULL)
3328#endif
3329		  && s->input_statement.flags.loaded
3330		  && (abfd = s->input_statement.the_bfd) != NULL
3331		  && ((bfd_get_format (abfd) == bfd_archive
3332		       && !s->input_statement.flags.whole_archive)
3333		      || (bfd_get_format (abfd) == bfd_object
3334			  && ((abfd->flags) & DYNAMIC) != 0
3335			  && s->input_statement.flags.add_DT_NEEDED_for_regular
3336			  && bfd_get_flavour (abfd) == bfd_target_elf_flavour
3337			  && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)))
3338		{
3339		  s->input_statement.flags.loaded = FALSE;
3340		  s->input_statement.flags.reload = TRUE;
3341		}
3342
3343	      os_tail = lang_output_section_statement.tail;
3344	      lang_list_init (&add);
3345
3346	      if (!load_symbols (&s->input_statement, &add))
3347		config.make_executable = FALSE;
3348
3349	      if (add.head != NULL)
3350		{
3351		  /* If this was a script with output sections then
3352		     tack any added statements on to the end of the
3353		     list.  This avoids having to reorder the output
3354		     section statement list.  Very likely the user
3355		     forgot -T, and whatever we do here will not meet
3356		     naive user expectations.  */
3357		  if (os_tail != lang_output_section_statement.tail)
3358		    {
3359		      einfo (_("%P: warning: %s contains output sections;"
3360			       " did you forget -T?\n"),
3361			     s->input_statement.filename);
3362		      *stat_ptr->tail = add.head;
3363		      stat_ptr->tail = add.tail;
3364		    }
3365		  else
3366		    {
3367		      *add.tail = s->header.next;
3368		      s->header.next = add.head;
3369		    }
3370		}
3371	    }
3372#ifdef ENABLE_PLUGINS
3373	  /* If we have found the point at which a plugin added new
3374	     files, clear plugin_insert to enable archive rescan.  */
3375	  if (&s->input_statement == plugin_insert)
3376	    plugin_insert = NULL;
3377#endif
3378	  break;
3379	case lang_assignment_statement_enum:
3380	  if (s->assignment_statement.exp->type.node_class != etree_assert
3381	      && s->assignment_statement.exp->assign.defsym)
3382	    /* This is from a --defsym on the command line.  */
3383	    exp_fold_tree_no_dot (s->assignment_statement.exp);
3384	  break;
3385	default:
3386	  break;
3387	}
3388    }
3389
3390  /* Exit if any of the files were missing.  */
3391  if (input_flags.missing_file)
3392    einfo ("%F");
3393}
3394
3395/* Add the supplied name to the symbol table as an undefined reference.
3396   This is a two step process as the symbol table doesn't even exist at
3397   the time the ld command line is processed.  First we put the name
3398   on a list, then, once the output file has been opened, transfer the
3399   name to the symbol table.  */
3400
3401typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
3402
3403#define ldlang_undef_chain_list_head entry_symbol.next
3404
3405void
3406ldlang_add_undef (const char *const name, bfd_boolean cmdline)
3407{
3408  ldlang_undef_chain_list_type *new_undef;
3409
3410  undef_from_cmdline = undef_from_cmdline || cmdline;
3411  new_undef = (ldlang_undef_chain_list_type *) stat_alloc (sizeof (*new_undef));
3412  new_undef->next = ldlang_undef_chain_list_head;
3413  ldlang_undef_chain_list_head = new_undef;
3414
3415  new_undef->name = xstrdup (name);
3416
3417  if (link_info.output_bfd != NULL)
3418    insert_undefined (new_undef->name);
3419}
3420
3421/* Insert NAME as undefined in the symbol table.  */
3422
3423static void
3424insert_undefined (const char *name)
3425{
3426  struct bfd_link_hash_entry *h;
3427
3428  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
3429  if (h == NULL)
3430    einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3431  if (h->type == bfd_link_hash_new)
3432    {
3433      h->type = bfd_link_hash_undefined;
3434      h->u.undef.abfd = NULL;
3435      if (is_elf_hash_table (link_info.hash))
3436	((struct elf_link_hash_entry *) h)->mark = 1;
3437      bfd_link_add_undef (link_info.hash, h);
3438    }
3439}
3440
3441/* Run through the list of undefineds created above and place them
3442   into the linker hash table as undefined symbols belonging to the
3443   script file.  */
3444
3445static void
3446lang_place_undefineds (void)
3447{
3448  ldlang_undef_chain_list_type *ptr;
3449
3450  for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
3451    insert_undefined (ptr->name);
3452}
3453
3454/* Structure used to build the list of symbols that the user has required
3455   be defined.  */
3456
3457struct require_defined_symbol
3458{
3459  const char *name;
3460  struct require_defined_symbol *next;
3461};
3462
3463/* The list of symbols that the user has required be defined.  */
3464
3465static struct require_defined_symbol *require_defined_symbol_list;
3466
3467/* Add a new symbol NAME to the list of symbols that are required to be
3468   defined.  */
3469
3470void
3471ldlang_add_require_defined (const char *const name)
3472{
3473  struct require_defined_symbol *ptr;
3474
3475  ldlang_add_undef (name, TRUE);
3476  ptr = (struct require_defined_symbol *) stat_alloc (sizeof (*ptr));
3477  ptr->next = require_defined_symbol_list;
3478  ptr->name = strdup (name);
3479  require_defined_symbol_list = ptr;
3480}
3481
3482/* Check that all symbols the user required to be defined, are defined,
3483   raise an error if we find a symbol that is not defined.  */
3484
3485static void
3486ldlang_check_require_defined_symbols (void)
3487{
3488  struct require_defined_symbol *ptr;
3489
3490  for (ptr = require_defined_symbol_list; ptr != NULL; ptr = ptr->next)
3491    {
3492      struct bfd_link_hash_entry *h;
3493
3494      h = bfd_link_hash_lookup (link_info.hash, ptr->name,
3495				FALSE, FALSE, TRUE);
3496      if (h == NULL
3497	  || (h->type != bfd_link_hash_defined
3498	      && h->type != bfd_link_hash_defweak))
3499	einfo(_("%P%X: required symbol `%s' not defined\n"), ptr->name);
3500    }
3501}
3502
3503/* Check for all readonly or some readwrite sections.  */
3504
3505static void
3506check_input_sections
3507  (lang_statement_union_type *s,
3508   lang_output_section_statement_type *output_section_statement)
3509{
3510  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3511    {
3512      switch (s->header.type)
3513	{
3514	case lang_wild_statement_enum:
3515	  walk_wild (&s->wild_statement, check_section_callback,
3516		     output_section_statement);
3517	  if (!output_section_statement->all_input_readonly)
3518	    return;
3519	  break;
3520	case lang_constructors_statement_enum:
3521	  check_input_sections (constructor_list.head,
3522				output_section_statement);
3523	  if (!output_section_statement->all_input_readonly)
3524	    return;
3525	  break;
3526	case lang_group_statement_enum:
3527	  check_input_sections (s->group_statement.children.head,
3528				output_section_statement);
3529	  if (!output_section_statement->all_input_readonly)
3530	    return;
3531	  break;
3532	default:
3533	  break;
3534	}
3535    }
3536}
3537
3538/* Update wildcard statements if needed.  */
3539
3540static void
3541update_wild_statements (lang_statement_union_type *s)
3542{
3543  struct wildcard_list *sec;
3544
3545  switch (sort_section)
3546    {
3547    default:
3548      FAIL ();
3549
3550    case none:
3551      break;
3552
3553    case by_name:
3554    case by_alignment:
3555      for (; s != NULL; s = s->header.next)
3556	{
3557	  switch (s->header.type)
3558	    {
3559	    default:
3560	      break;
3561
3562	    case lang_wild_statement_enum:
3563	      for (sec = s->wild_statement.section_list; sec != NULL;
3564		   sec = sec->next)
3565		{
3566		  switch (sec->spec.sorted)
3567		    {
3568		    case none:
3569		      sec->spec.sorted = sort_section;
3570		      break;
3571		    case by_name:
3572		      if (sort_section == by_alignment)
3573			sec->spec.sorted = by_name_alignment;
3574		      break;
3575		    case by_alignment:
3576		      if (sort_section == by_name)
3577			sec->spec.sorted = by_alignment_name;
3578		      break;
3579		    default:
3580		      break;
3581		    }
3582		}
3583	      break;
3584
3585	    case lang_constructors_statement_enum:
3586	      update_wild_statements (constructor_list.head);
3587	      break;
3588
3589	    case lang_output_section_statement_enum:
3590	      /* Don't sort .init/.fini sections.  */
3591	      if (strcmp (s->output_section_statement.name, ".init") != 0
3592		  && strcmp (s->output_section_statement.name, ".fini") != 0)
3593		update_wild_statements
3594		  (s->output_section_statement.children.head);
3595	      break;
3596
3597	    case lang_group_statement_enum:
3598	      update_wild_statements (s->group_statement.children.head);
3599	      break;
3600	    }
3601	}
3602      break;
3603    }
3604}
3605
3606/* Open input files and attach to output sections.  */
3607
3608static void
3609map_input_to_output_sections
3610  (lang_statement_union_type *s, const char *target,
3611   lang_output_section_statement_type *os)
3612{
3613  for (; s != NULL; s = s->header.next)
3614    {
3615      lang_output_section_statement_type *tos;
3616      flagword flags;
3617
3618      switch (s->header.type)
3619	{
3620	case lang_wild_statement_enum:
3621	  wild (&s->wild_statement, target, os);
3622	  break;
3623	case lang_constructors_statement_enum:
3624	  map_input_to_output_sections (constructor_list.head,
3625					target,
3626					os);
3627	  break;
3628	case lang_output_section_statement_enum:
3629	  tos = &s->output_section_statement;
3630	  if (tos->constraint != 0)
3631	    {
3632	      if (tos->constraint != ONLY_IF_RW
3633		  && tos->constraint != ONLY_IF_RO)
3634		break;
3635	      tos->all_input_readonly = TRUE;
3636	      check_input_sections (tos->children.head, tos);
3637	      if (tos->all_input_readonly != (tos->constraint == ONLY_IF_RO))
3638		{
3639		  tos->constraint = -1;
3640		  break;
3641		}
3642	    }
3643	  map_input_to_output_sections (tos->children.head,
3644					target,
3645					tos);
3646	  break;
3647	case lang_output_statement_enum:
3648	  break;
3649	case lang_target_statement_enum:
3650	  target = s->target_statement.target;
3651	  break;
3652	case lang_group_statement_enum:
3653	  map_input_to_output_sections (s->group_statement.children.head,
3654					target,
3655					os);
3656	  break;
3657	case lang_data_statement_enum:
3658	  /* Make sure that any sections mentioned in the expression
3659	     are initialized.  */
3660	  exp_init_os (s->data_statement.exp);
3661	  /* The output section gets CONTENTS, ALLOC and LOAD, but
3662	     these may be overridden by the script.  */
3663	  flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
3664	  switch (os->sectype)
3665	    {
3666	    case normal_section:
3667	    case overlay_section:
3668	      break;
3669	    case noalloc_section:
3670	      flags = SEC_HAS_CONTENTS;
3671	      break;
3672	    case noload_section:
3673	      if (bfd_get_flavour (link_info.output_bfd)
3674		  == bfd_target_elf_flavour)
3675		flags = SEC_NEVER_LOAD | SEC_ALLOC;
3676	      else
3677		flags = SEC_NEVER_LOAD | SEC_HAS_CONTENTS;
3678	      break;
3679	    }
3680	  if (os->bfd_section == NULL)
3681	    init_os (os, flags);
3682	  else
3683	    os->bfd_section->flags |= flags;
3684	  break;
3685	case lang_input_section_enum:
3686	  break;
3687	case lang_fill_statement_enum:
3688	case lang_object_symbols_statement_enum:
3689	case lang_reloc_statement_enum:
3690	case lang_padding_statement_enum:
3691	case lang_input_statement_enum:
3692	  if (os != NULL && os->bfd_section == NULL)
3693	    init_os (os, 0);
3694	  break;
3695	case lang_assignment_statement_enum:
3696	  if (os != NULL && os->bfd_section == NULL)
3697	    init_os (os, 0);
3698
3699	  /* Make sure that any sections mentioned in the assignment
3700	     are initialized.  */
3701	  exp_init_os (s->assignment_statement.exp);
3702	  break;
3703	case lang_address_statement_enum:
3704	  /* Mark the specified section with the supplied address.
3705	     If this section was actually a segment marker, then the
3706	     directive is ignored if the linker script explicitly
3707	     processed the segment marker.  Originally, the linker
3708	     treated segment directives (like -Ttext on the
3709	     command-line) as section directives.  We honor the
3710	     section directive semantics for backwards compatibility;
3711	     linker scripts that do not specifically check for
3712	     SEGMENT_START automatically get the old semantics.  */
3713	  if (!s->address_statement.segment
3714	      || !s->address_statement.segment->used)
3715	    {
3716	      const char *name = s->address_statement.section_name;
3717
3718	      /* Create the output section statement here so that
3719		 orphans with a set address will be placed after other
3720		 script sections.  If we let the orphan placement code
3721		 place them in amongst other sections then the address
3722		 will affect following script sections, which is
3723		 likely to surprise naive users.  */
3724	      tos = lang_output_section_statement_lookup (name, 0, TRUE);
3725	      tos->addr_tree = s->address_statement.address;
3726	      if (tos->bfd_section == NULL)
3727		init_os (tos, 0);
3728	    }
3729	  break;
3730	case lang_insert_statement_enum:
3731	  break;
3732	}
3733    }
3734}
3735
3736/* An insert statement snips out all the linker statements from the
3737   start of the list and places them after the output section
3738   statement specified by the insert.  This operation is complicated
3739   by the fact that we keep a doubly linked list of output section
3740   statements as well as the singly linked list of all statements.  */
3741
3742static void
3743process_insert_statements (void)
3744{
3745  lang_statement_union_type **s;
3746  lang_output_section_statement_type *first_os = NULL;
3747  lang_output_section_statement_type *last_os = NULL;
3748  lang_output_section_statement_type *os;
3749
3750  /* "start of list" is actually the statement immediately after
3751     the special abs_section output statement, so that it isn't
3752     reordered.  */
3753  s = &lang_output_section_statement.head;
3754  while (*(s = &(*s)->header.next) != NULL)
3755    {
3756      if ((*s)->header.type == lang_output_section_statement_enum)
3757	{
3758	  /* Keep pointers to the first and last output section
3759	     statement in the sequence we may be about to move.  */
3760	  os = &(*s)->output_section_statement;
3761
3762	  ASSERT (last_os == NULL || last_os->next == os);
3763	  last_os = os;
3764
3765	  /* Set constraint negative so that lang_output_section_find
3766	     won't match this output section statement.  At this
3767	     stage in linking constraint has values in the range
3768	     [-1, ONLY_IN_RW].  */
3769	  last_os->constraint = -2 - last_os->constraint;
3770	  if (first_os == NULL)
3771	    first_os = last_os;
3772	}
3773      else if ((*s)->header.type == lang_insert_statement_enum)
3774	{
3775	  lang_insert_statement_type *i = &(*s)->insert_statement;
3776	  lang_output_section_statement_type *where;
3777	  lang_statement_union_type **ptr;
3778	  lang_statement_union_type *first;
3779
3780	  where = lang_output_section_find (i->where);
3781	  if (where != NULL && i->is_before)
3782	    {
3783	      do
3784		where = where->prev;
3785	      while (where != NULL && where->constraint < 0);
3786	    }
3787	  if (where == NULL)
3788	    {
3789	      einfo (_("%F%P: %s not found for insert\n"), i->where);
3790	      return;
3791	    }
3792
3793	  /* Deal with reordering the output section statement list.  */
3794	  if (last_os != NULL)
3795	    {
3796	      asection *first_sec, *last_sec;
3797	      struct lang_output_section_statement_struct **next;
3798
3799	      /* Snip out the output sections we are moving.  */
3800	      first_os->prev->next = last_os->next;
3801	      if (last_os->next == NULL)
3802		{
3803		  next = &first_os->prev->next;
3804		  lang_output_section_statement.tail
3805		    = (lang_statement_union_type **) next;
3806		}
3807	      else
3808		last_os->next->prev = first_os->prev;
3809	      /* Add them in at the new position.  */
3810	      last_os->next = where->next;
3811	      if (where->next == NULL)
3812		{
3813		  next = &last_os->next;
3814		  lang_output_section_statement.tail
3815		    = (lang_statement_union_type **) next;
3816		}
3817	      else
3818		where->next->prev = last_os;
3819	      first_os->prev = where;
3820	      where->next = first_os;
3821
3822	      /* Move the bfd sections in the same way.  */
3823	      first_sec = NULL;
3824	      last_sec = NULL;
3825	      for (os = first_os; os != NULL; os = os->next)
3826		{
3827		  os->constraint = -2 - os->constraint;
3828		  if (os->bfd_section != NULL
3829		      && os->bfd_section->owner != NULL)
3830		    {
3831		      last_sec = os->bfd_section;
3832		      if (first_sec == NULL)
3833			first_sec = last_sec;
3834		    }
3835		  if (os == last_os)
3836		    break;
3837		}
3838	      if (last_sec != NULL)
3839		{
3840		  asection *sec = where->bfd_section;
3841		  if (sec == NULL)
3842		    sec = output_prev_sec_find (where);
3843
3844		  /* The place we want to insert must come after the
3845		     sections we are moving.  So if we find no
3846		     section or if the section is the same as our
3847		     last section, then no move is needed.  */
3848		  if (sec != NULL && sec != last_sec)
3849		    {
3850		      /* Trim them off.  */
3851		      if (first_sec->prev != NULL)
3852			first_sec->prev->next = last_sec->next;
3853		      else
3854			link_info.output_bfd->sections = last_sec->next;
3855		      if (last_sec->next != NULL)
3856			last_sec->next->prev = first_sec->prev;
3857		      else
3858			link_info.output_bfd->section_last = first_sec->prev;
3859		      /* Add back.  */
3860		      last_sec->next = sec->next;
3861		      if (sec->next != NULL)
3862			sec->next->prev = last_sec;
3863		      else
3864			link_info.output_bfd->section_last = last_sec;
3865		      first_sec->prev = sec;
3866		      sec->next = first_sec;
3867		    }
3868		}
3869
3870	      first_os = NULL;
3871	      last_os = NULL;
3872	    }
3873
3874	  ptr = insert_os_after (where);
3875	  /* Snip everything after the abs_section output statement we
3876	     know is at the start of the list, up to and including
3877	     the insert statement we are currently processing.  */
3878	  first = lang_output_section_statement.head->header.next;
3879	  lang_output_section_statement.head->header.next = (*s)->header.next;
3880	  /* Add them back where they belong.  */
3881	  *s = *ptr;
3882	  if (*s == NULL)
3883	    statement_list.tail = s;
3884	  *ptr = first;
3885	  s = &lang_output_section_statement.head;
3886	}
3887    }
3888
3889  /* Undo constraint twiddling.  */
3890  for (os = first_os; os != NULL; os = os->next)
3891    {
3892      os->constraint = -2 - os->constraint;
3893      if (os == last_os)
3894	break;
3895    }
3896}
3897
3898/* An output section might have been removed after its statement was
3899   added.  For example, ldemul_before_allocation can remove dynamic
3900   sections if they turn out to be not needed.  Clean them up here.  */
3901
3902void
3903strip_excluded_output_sections (void)
3904{
3905  lang_output_section_statement_type *os;
3906
3907  /* Run lang_size_sections (if not already done).  */
3908  if (expld.phase != lang_mark_phase_enum)
3909    {
3910      expld.phase = lang_mark_phase_enum;
3911      expld.dataseg.phase = exp_dataseg_none;
3912      one_lang_size_sections_pass (NULL, FALSE);
3913      lang_reset_memory_regions ();
3914    }
3915
3916  for (os = &lang_output_section_statement.head->output_section_statement;
3917       os != NULL;
3918       os = os->next)
3919    {
3920      asection *output_section;
3921      bfd_boolean exclude;
3922
3923      if (os->constraint < 0)
3924	continue;
3925
3926      output_section = os->bfd_section;
3927      if (output_section == NULL)
3928	continue;
3929
3930      exclude = (output_section->rawsize == 0
3931		 && (output_section->flags & SEC_KEEP) == 0
3932		 && !bfd_section_removed_from_list (link_info.output_bfd,
3933						    output_section));
3934
3935      /* Some sections have not yet been sized, notably .gnu.version,
3936	 .dynsym, .dynstr and .hash.  These all have SEC_LINKER_CREATED
3937	 input sections, so don't drop output sections that have such
3938	 input sections unless they are also marked SEC_EXCLUDE.  */
3939      if (exclude && output_section->map_head.s != NULL)
3940	{
3941	  asection *s;
3942
3943	  for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
3944	    if ((s->flags & SEC_EXCLUDE) == 0
3945		&& ((s->flags & SEC_LINKER_CREATED) != 0
3946		    || link_info.emitrelocations))
3947	      {
3948		exclude = FALSE;
3949		break;
3950	      }
3951	}
3952
3953      if (exclude)
3954	{
3955	  /* We don't set bfd_section to NULL since bfd_section of the
3956	     removed output section statement may still be used.  */
3957	  if (!os->update_dot)
3958	    os->ignored = TRUE;
3959	  output_section->flags |= SEC_EXCLUDE;
3960	  bfd_section_list_remove (link_info.output_bfd, output_section);
3961	  link_info.output_bfd->section_count--;
3962	}
3963    }
3964}
3965
3966/* Called from ldwrite to clear out asection.map_head and
3967   asection.map_tail for use as link_orders in ldwrite.
3968   FIXME: Except for sh64elf.em which starts creating link_orders in
3969   its after_allocation routine so needs to call it early.  */
3970
3971void
3972lang_clear_os_map (void)
3973{
3974  lang_output_section_statement_type *os;
3975
3976  if (map_head_is_link_order)
3977    return;
3978
3979  for (os = &lang_output_section_statement.head->output_section_statement;
3980       os != NULL;
3981       os = os->next)
3982    {
3983      asection *output_section;
3984
3985      if (os->constraint < 0)
3986	continue;
3987
3988      output_section = os->bfd_section;
3989      if (output_section == NULL)
3990	continue;
3991
3992      /* TODO: Don't just junk map_head.s, turn them into link_orders.  */
3993      output_section->map_head.link_order = NULL;
3994      output_section->map_tail.link_order = NULL;
3995    }
3996
3997  /* Stop future calls to lang_add_section from messing with map_head
3998     and map_tail link_order fields.  */
3999  map_head_is_link_order = TRUE;
4000}
4001
4002static void
4003print_output_section_statement
4004  (lang_output_section_statement_type *output_section_statement)
4005{
4006  asection *section = output_section_statement->bfd_section;
4007  int len;
4008
4009  if (output_section_statement != abs_output_section)
4010    {
4011      minfo ("\n%s", output_section_statement->name);
4012
4013      if (section != NULL)
4014	{
4015	  print_dot = section->vma;
4016
4017	  len = strlen (output_section_statement->name);
4018	  if (len >= SECTION_NAME_MAP_LENGTH - 1)
4019	    {
4020	      print_nl ();
4021	      len = 0;
4022	    }
4023	  while (len < SECTION_NAME_MAP_LENGTH)
4024	    {
4025	      print_space ();
4026	      ++len;
4027	    }
4028
4029	  minfo ("0x%V %W", section->vma, TO_ADDR (section->size));
4030
4031	  if (section->vma != section->lma)
4032	    minfo (_(" load address 0x%V"), section->lma);
4033
4034	  if (output_section_statement->update_dot_tree != NULL)
4035	    exp_fold_tree (output_section_statement->update_dot_tree,
4036			   bfd_abs_section_ptr, &print_dot);
4037	}
4038
4039      print_nl ();
4040    }
4041
4042  print_statement_list (output_section_statement->children.head,
4043			output_section_statement);
4044}
4045
4046static void
4047print_assignment (lang_assignment_statement_type *assignment,
4048		  lang_output_section_statement_type *output_section)
4049{
4050  unsigned int i;
4051  bfd_boolean is_dot;
4052  etree_type *tree;
4053  asection *osec;
4054
4055  for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4056    print_space ();
4057
4058  if (assignment->exp->type.node_class == etree_assert)
4059    {
4060      is_dot = FALSE;
4061      tree = assignment->exp->assert_s.child;
4062    }
4063  else
4064    {
4065      const char *dst = assignment->exp->assign.dst;
4066
4067      is_dot = (dst[0] == '.' && dst[1] == 0);
4068      if (!is_dot)
4069	expld.assign_name = dst;
4070      tree = assignment->exp->assign.src;
4071    }
4072
4073  osec = output_section->bfd_section;
4074  if (osec == NULL)
4075    osec = bfd_abs_section_ptr;
4076
4077  if (assignment->exp->type.node_class != etree_provide)
4078    exp_fold_tree (tree, osec, &print_dot);
4079  else
4080    expld.result.valid_p = FALSE;
4081
4082  if (expld.result.valid_p)
4083    {
4084      bfd_vma value;
4085
4086      if (assignment->exp->type.node_class == etree_assert
4087	  || is_dot
4088	  || expld.assign_name != NULL)
4089	{
4090	  value = expld.result.value;
4091
4092	  if (expld.result.section != NULL)
4093	    value += expld.result.section->vma;
4094
4095	  minfo ("0x%V", value);
4096	  if (is_dot)
4097	    print_dot = value;
4098	}
4099      else
4100	{
4101	  struct bfd_link_hash_entry *h;
4102
4103	  h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
4104				    FALSE, FALSE, TRUE);
4105	  if (h)
4106	    {
4107	      value = h->u.def.value;
4108	      value += h->u.def.section->output_section->vma;
4109	      value += h->u.def.section->output_offset;
4110
4111	      minfo ("[0x%V]", value);
4112	    }
4113	  else
4114	    minfo ("[unresolved]");
4115	}
4116    }
4117  else
4118    {
4119      if (assignment->exp->type.node_class == etree_provide)
4120	minfo ("[!provide]");
4121      else
4122	minfo ("*undef*   ");
4123#ifdef BFD64
4124      minfo ("        ");
4125#endif
4126    }
4127  expld.assign_name = NULL;
4128
4129  minfo ("                ");
4130  exp_print_tree (assignment->exp);
4131  print_nl ();
4132}
4133
4134static void
4135print_input_statement (lang_input_statement_type *statm)
4136{
4137  if (statm->filename != NULL
4138      && (statm->the_bfd == NULL
4139	  || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4140    fprintf (config.map_file, "LOAD %s\n", statm->filename);
4141}
4142
4143/* Print all symbols defined in a particular section.  This is called
4144   via bfd_link_hash_traverse, or by print_all_symbols.  */
4145
4146static bfd_boolean
4147print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4148{
4149  asection *sec = (asection *) ptr;
4150
4151  if ((hash_entry->type == bfd_link_hash_defined
4152       || hash_entry->type == bfd_link_hash_defweak)
4153      && sec == hash_entry->u.def.section)
4154    {
4155      int i;
4156
4157      for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4158	print_space ();
4159      minfo ("0x%V   ",
4160	     (hash_entry->u.def.value
4161	      + hash_entry->u.def.section->output_offset
4162	      + hash_entry->u.def.section->output_section->vma));
4163
4164      minfo ("             %T\n", hash_entry->root.string);
4165    }
4166
4167  return TRUE;
4168}
4169
4170static int
4171hash_entry_addr_cmp (const void *a, const void *b)
4172{
4173  const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4174  const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4175
4176  if (l->u.def.value < r->u.def.value)
4177    return -1;
4178  else if (l->u.def.value > r->u.def.value)
4179    return 1;
4180  else
4181    return 0;
4182}
4183
4184static void
4185print_all_symbols (asection *sec)
4186{
4187  input_section_userdata_type *ud
4188    = (input_section_userdata_type *) get_userdata (sec);
4189  struct map_symbol_def *def;
4190  struct bfd_link_hash_entry **entries;
4191  unsigned int i;
4192
4193  if (!ud)
4194    return;
4195
4196  *ud->map_symbol_def_tail = 0;
4197
4198  /* Sort the symbols by address.  */
4199  entries = (struct bfd_link_hash_entry **)
4200      obstack_alloc (&map_obstack,
4201		     ud->map_symbol_def_count * sizeof (*entries));
4202
4203  for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4204    entries[i] = def->entry;
4205
4206  qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4207	 hash_entry_addr_cmp);
4208
4209  /* Print the symbols.  */
4210  for (i = 0; i < ud->map_symbol_def_count; i++)
4211    print_one_symbol (entries[i], sec);
4212
4213  obstack_free (&map_obstack, entries);
4214}
4215
4216/* Print information about an input section to the map file.  */
4217
4218static void
4219print_input_section (asection *i, bfd_boolean is_discarded)
4220{
4221  bfd_size_type size = i->size;
4222  int len;
4223  bfd_vma addr;
4224
4225  init_opb ();
4226
4227  print_space ();
4228  minfo ("%s", i->name);
4229
4230  len = 1 + strlen (i->name);
4231  if (len >= SECTION_NAME_MAP_LENGTH - 1)
4232    {
4233      print_nl ();
4234      len = 0;
4235    }
4236  while (len < SECTION_NAME_MAP_LENGTH)
4237    {
4238      print_space ();
4239      ++len;
4240    }
4241
4242  if (i->output_section != NULL
4243      && i->output_section->owner == link_info.output_bfd)
4244    addr = i->output_section->vma + i->output_offset;
4245  else
4246    {
4247      addr = print_dot;
4248      if (!is_discarded)
4249	size = 0;
4250    }
4251
4252  minfo ("0x%V %W %B\n", addr, size, i->owner);
4253
4254  if (size != i->rawsize && i->rawsize != 0)
4255    {
4256      len = SECTION_NAME_MAP_LENGTH + 3;
4257#ifdef BFD64
4258      len += 16;
4259#else
4260      len += 8;
4261#endif
4262      while (len > 0)
4263	{
4264	  print_space ();
4265	  --len;
4266	}
4267
4268      minfo (_("%W (size before relaxing)\n"), i->rawsize);
4269    }
4270
4271  if (i->output_section != NULL
4272      && i->output_section->owner == link_info.output_bfd)
4273    {
4274      if (link_info.reduce_memory_overheads)
4275	bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4276      else
4277	print_all_symbols (i);
4278
4279      /* Update print_dot, but make sure that we do not move it
4280	 backwards - this could happen if we have overlays and a
4281	 later overlay is shorter than an earier one.  */
4282      if (addr + TO_ADDR (size) > print_dot)
4283	print_dot = addr + TO_ADDR (size);
4284    }
4285}
4286
4287static void
4288print_fill_statement (lang_fill_statement_type *fill)
4289{
4290  size_t size;
4291  unsigned char *p;
4292  fputs (" FILL mask 0x", config.map_file);
4293  for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4294    fprintf (config.map_file, "%02x", *p);
4295  fputs ("\n", config.map_file);
4296}
4297
4298static void
4299print_data_statement (lang_data_statement_type *data)
4300{
4301  int i;
4302  bfd_vma addr;
4303  bfd_size_type size;
4304  const char *name;
4305
4306  init_opb ();
4307  for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4308    print_space ();
4309
4310  addr = data->output_offset;
4311  if (data->output_section != NULL)
4312    addr += data->output_section->vma;
4313
4314  switch (data->type)
4315    {
4316    default:
4317      abort ();
4318    case BYTE:
4319      size = BYTE_SIZE;
4320      name = "BYTE";
4321      break;
4322    case SHORT:
4323      size = SHORT_SIZE;
4324      name = "SHORT";
4325      break;
4326    case LONG:
4327      size = LONG_SIZE;
4328      name = "LONG";
4329      break;
4330    case QUAD:
4331      size = QUAD_SIZE;
4332      name = "QUAD";
4333      break;
4334    case SQUAD:
4335      size = QUAD_SIZE;
4336      name = "SQUAD";
4337      break;
4338    }
4339
4340  if (size < TO_SIZE ((unsigned) 1))
4341    size = TO_SIZE ((unsigned) 1);
4342  minfo ("0x%V %W %s 0x%v", addr, TO_ADDR (size), name, data->value);
4343
4344  if (data->exp->type.node_class != etree_value)
4345    {
4346      print_space ();
4347      exp_print_tree (data->exp);
4348    }
4349
4350  print_nl ();
4351
4352  print_dot = addr + TO_ADDR (size);
4353}
4354
4355/* Print an address statement.  These are generated by options like
4356   -Ttext.  */
4357
4358static void
4359print_address_statement (lang_address_statement_type *address)
4360{
4361  minfo (_("Address of section %s set to "), address->section_name);
4362  exp_print_tree (address->address);
4363  print_nl ();
4364}
4365
4366/* Print a reloc statement.  */
4367
4368static void
4369print_reloc_statement (lang_reloc_statement_type *reloc)
4370{
4371  int i;
4372  bfd_vma addr;
4373  bfd_size_type size;
4374
4375  init_opb ();
4376  for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4377    print_space ();
4378
4379  addr = reloc->output_offset;
4380  if (reloc->output_section != NULL)
4381    addr += reloc->output_section->vma;
4382
4383  size = bfd_get_reloc_size (reloc->howto);
4384
4385  minfo ("0x%V %W RELOC %s ", addr, TO_ADDR (size), reloc->howto->name);
4386
4387  if (reloc->name != NULL)
4388    minfo ("%s+", reloc->name);
4389  else
4390    minfo ("%s+", reloc->section->name);
4391
4392  exp_print_tree (reloc->addend_exp);
4393
4394  print_nl ();
4395
4396  print_dot = addr + TO_ADDR (size);
4397}
4398
4399static void
4400print_padding_statement (lang_padding_statement_type *s)
4401{
4402  int len;
4403  bfd_vma addr;
4404
4405  init_opb ();
4406  minfo (" *fill*");
4407
4408  len = sizeof " *fill*" - 1;
4409  while (len < SECTION_NAME_MAP_LENGTH)
4410    {
4411      print_space ();
4412      ++len;
4413    }
4414
4415  addr = s->output_offset;
4416  if (s->output_section != NULL)
4417    addr += s->output_section->vma;
4418  minfo ("0x%V %W ", addr, TO_ADDR (s->size));
4419
4420  if (s->fill->size != 0)
4421    {
4422      size_t size;
4423      unsigned char *p;
4424      for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4425	fprintf (config.map_file, "%02x", *p);
4426    }
4427
4428  print_nl ();
4429
4430  print_dot = addr + TO_ADDR (s->size);
4431}
4432
4433static void
4434print_wild_statement (lang_wild_statement_type *w,
4435		      lang_output_section_statement_type *os)
4436{
4437  struct wildcard_list *sec;
4438
4439  print_space ();
4440
4441  if (w->exclude_name_list)
4442    {
4443      name_list *tmp;
4444      minfo ("EXCLUDE_FILE(%s", w->exclude_name_list->name);
4445      for (tmp = w->exclude_name_list->next; tmp; tmp = tmp->next)
4446        minfo (" %s", tmp->name);
4447      minfo (") ");
4448    }
4449
4450  if (w->filenames_sorted)
4451    minfo ("SORT(");
4452  if (w->filename != NULL)
4453    minfo ("%s", w->filename);
4454  else
4455    minfo ("*");
4456  if (w->filenames_sorted)
4457    minfo (")");
4458
4459  minfo ("(");
4460  for (sec = w->section_list; sec; sec = sec->next)
4461    {
4462      if (sec->spec.sorted)
4463	minfo ("SORT(");
4464      if (sec->spec.exclude_name_list != NULL)
4465	{
4466	  name_list *tmp;
4467	  minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4468	  for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4469	    minfo (" %s", tmp->name);
4470	  minfo (") ");
4471	}
4472      if (sec->spec.name != NULL)
4473	minfo ("%s", sec->spec.name);
4474      else
4475	minfo ("*");
4476      if (sec->spec.sorted)
4477	minfo (")");
4478      if (sec->next)
4479	minfo (" ");
4480    }
4481  minfo (")");
4482
4483  print_nl ();
4484
4485  print_statement_list (w->children.head, os);
4486}
4487
4488/* Print a group statement.  */
4489
4490static void
4491print_group (lang_group_statement_type *s,
4492	     lang_output_section_statement_type *os)
4493{
4494  fprintf (config.map_file, "START GROUP\n");
4495  print_statement_list (s->children.head, os);
4496  fprintf (config.map_file, "END GROUP\n");
4497}
4498
4499/* Print the list of statements in S.
4500   This can be called for any statement type.  */
4501
4502static void
4503print_statement_list (lang_statement_union_type *s,
4504		      lang_output_section_statement_type *os)
4505{
4506  while (s != NULL)
4507    {
4508      print_statement (s, os);
4509      s = s->header.next;
4510    }
4511}
4512
4513/* Print the first statement in statement list S.
4514   This can be called for any statement type.  */
4515
4516static void
4517print_statement (lang_statement_union_type *s,
4518		 lang_output_section_statement_type *os)
4519{
4520  switch (s->header.type)
4521    {
4522    default:
4523      fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4524      FAIL ();
4525      break;
4526    case lang_constructors_statement_enum:
4527      if (constructor_list.head != NULL)
4528	{
4529	  if (constructors_sorted)
4530	    minfo (" SORT (CONSTRUCTORS)\n");
4531	  else
4532	    minfo (" CONSTRUCTORS\n");
4533	  print_statement_list (constructor_list.head, os);
4534	}
4535      break;
4536    case lang_wild_statement_enum:
4537      print_wild_statement (&s->wild_statement, os);
4538      break;
4539    case lang_address_statement_enum:
4540      print_address_statement (&s->address_statement);
4541      break;
4542    case lang_object_symbols_statement_enum:
4543      minfo (" CREATE_OBJECT_SYMBOLS\n");
4544      break;
4545    case lang_fill_statement_enum:
4546      print_fill_statement (&s->fill_statement);
4547      break;
4548    case lang_data_statement_enum:
4549      print_data_statement (&s->data_statement);
4550      break;
4551    case lang_reloc_statement_enum:
4552      print_reloc_statement (&s->reloc_statement);
4553      break;
4554    case lang_input_section_enum:
4555      print_input_section (s->input_section.section, FALSE);
4556      break;
4557    case lang_padding_statement_enum:
4558      print_padding_statement (&s->padding_statement);
4559      break;
4560    case lang_output_section_statement_enum:
4561      print_output_section_statement (&s->output_section_statement);
4562      break;
4563    case lang_assignment_statement_enum:
4564      print_assignment (&s->assignment_statement, os);
4565      break;
4566    case lang_target_statement_enum:
4567      fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4568      break;
4569    case lang_output_statement_enum:
4570      minfo ("OUTPUT(%s", s->output_statement.name);
4571      if (output_target != NULL)
4572	minfo (" %s", output_target);
4573      minfo (")\n");
4574      break;
4575    case lang_input_statement_enum:
4576      print_input_statement (&s->input_statement);
4577      break;
4578    case lang_group_statement_enum:
4579      print_group (&s->group_statement, os);
4580      break;
4581    case lang_insert_statement_enum:
4582      minfo ("INSERT %s %s\n",
4583	     s->insert_statement.is_before ? "BEFORE" : "AFTER",
4584	     s->insert_statement.where);
4585      break;
4586    }
4587}
4588
4589static void
4590print_statements (void)
4591{
4592  print_statement_list (statement_list.head, abs_output_section);
4593}
4594
4595/* Print the first N statements in statement list S to STDERR.
4596   If N == 0, nothing is printed.
4597   If N < 0, the entire list is printed.
4598   Intended to be called from GDB.  */
4599
4600void
4601dprint_statement (lang_statement_union_type *s, int n)
4602{
4603  FILE *map_save = config.map_file;
4604
4605  config.map_file = stderr;
4606
4607  if (n < 0)
4608    print_statement_list (s, abs_output_section);
4609  else
4610    {
4611      while (s && --n >= 0)
4612	{
4613	  print_statement (s, abs_output_section);
4614	  s = s->header.next;
4615	}
4616    }
4617
4618  config.map_file = map_save;
4619}
4620
4621static void
4622insert_pad (lang_statement_union_type **ptr,
4623	    fill_type *fill,
4624	    bfd_size_type alignment_needed,
4625	    asection *output_section,
4626	    bfd_vma dot)
4627{
4628  static fill_type zero_fill;
4629  lang_statement_union_type *pad = NULL;
4630
4631  if (ptr != &statement_list.head)
4632    pad = ((lang_statement_union_type *)
4633	   ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4634  if (pad != NULL
4635      && pad->header.type == lang_padding_statement_enum
4636      && pad->padding_statement.output_section == output_section)
4637    {
4638      /* Use the existing pad statement.  */
4639    }
4640  else if ((pad = *ptr) != NULL
4641	   && pad->header.type == lang_padding_statement_enum
4642	   && pad->padding_statement.output_section == output_section)
4643    {
4644      /* Use the existing pad statement.  */
4645    }
4646  else
4647    {
4648      /* Make a new padding statement, linked into existing chain.  */
4649      pad = (lang_statement_union_type *)
4650	  stat_alloc (sizeof (lang_padding_statement_type));
4651      pad->header.next = *ptr;
4652      *ptr = pad;
4653      pad->header.type = lang_padding_statement_enum;
4654      pad->padding_statement.output_section = output_section;
4655      if (fill == NULL)
4656	fill = &zero_fill;
4657      pad->padding_statement.fill = fill;
4658    }
4659  pad->padding_statement.output_offset = dot - output_section->vma;
4660  pad->padding_statement.size = alignment_needed;
4661  output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
4662				  - output_section->vma);
4663}
4664
4665/* Work out how much this section will move the dot point.  */
4666
4667static bfd_vma
4668size_input_section
4669  (lang_statement_union_type **this_ptr,
4670   lang_output_section_statement_type *output_section_statement,
4671   fill_type *fill,
4672   bfd_vma dot)
4673{
4674  lang_input_section_type *is = &((*this_ptr)->input_section);
4675  asection *i = is->section;
4676  asection *o = output_section_statement->bfd_section;
4677
4678  if (i->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4679    i->output_offset = i->vma - o->vma;
4680  else if (((i->flags & SEC_EXCLUDE) != 0)
4681	   || output_section_statement->ignored)
4682    i->output_offset = dot - o->vma;
4683  else
4684    {
4685      bfd_size_type alignment_needed;
4686
4687      /* Align this section first to the input sections requirement,
4688	 then to the output section's requirement.  If this alignment
4689	 is greater than any seen before, then record it too.  Perform
4690	 the alignment by inserting a magic 'padding' statement.  */
4691
4692      if (output_section_statement->subsection_alignment != -1)
4693	i->alignment_power = output_section_statement->subsection_alignment;
4694
4695      if (o->alignment_power < i->alignment_power)
4696	o->alignment_power = i->alignment_power;
4697
4698      alignment_needed = align_power (dot, i->alignment_power) - dot;
4699
4700      if (alignment_needed != 0)
4701	{
4702	  insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4703	  dot += alignment_needed;
4704	}
4705
4706      /* Remember where in the output section this input section goes.  */
4707      i->output_offset = dot - o->vma;
4708
4709      /* Mark how big the output section must be to contain this now.  */
4710      dot += TO_ADDR (i->size);
4711      o->size = TO_SIZE (dot - o->vma);
4712    }
4713
4714  return dot;
4715}
4716
4717struct check_sec
4718{
4719  asection *sec;
4720  bfd_boolean warned;
4721};
4722
4723static int
4724sort_sections_by_lma (const void *arg1, const void *arg2)
4725{
4726  const asection *sec1 = ((const struct check_sec *) arg1)->sec;
4727  const asection *sec2 = ((const struct check_sec *) arg2)->sec;
4728
4729  if (sec1->lma < sec2->lma)
4730    return -1;
4731  else if (sec1->lma > sec2->lma)
4732    return 1;
4733  else if (sec1->id < sec2->id)
4734    return -1;
4735  else if (sec1->id > sec2->id)
4736    return 1;
4737
4738  return 0;
4739}
4740
4741static int
4742sort_sections_by_vma (const void *arg1, const void *arg2)
4743{
4744  const asection *sec1 = ((const struct check_sec *) arg1)->sec;
4745  const asection *sec2 = ((const struct check_sec *) arg2)->sec;
4746
4747  if (sec1->vma < sec2->vma)
4748    return -1;
4749  else if (sec1->vma > sec2->vma)
4750    return 1;
4751  else if (sec1->id < sec2->id)
4752    return -1;
4753  else if (sec1->id > sec2->id)
4754    return 1;
4755
4756  return 0;
4757}
4758
4759#define IS_TBSS(s) \
4760  ((s->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == SEC_THREAD_LOCAL)
4761
4762#define IGNORE_SECTION(s) \
4763  ((s->flags & SEC_ALLOC) == 0 || IS_TBSS (s))
4764
4765/* Check to see if any allocated sections overlap with other allocated
4766   sections.  This can happen if a linker script specifies the output
4767   section addresses of the two sections.  Also check whether any memory
4768   region has overflowed.  */
4769
4770static void
4771lang_check_section_addresses (void)
4772{
4773  asection *s, *p;
4774  struct check_sec *sections;
4775  size_t i, count;
4776  bfd_vma s_start;
4777  bfd_vma s_end;
4778  bfd_vma p_start = 0;
4779  bfd_vma p_end = 0;
4780  lang_memory_region_type *m;
4781  bfd_boolean overlays;
4782
4783  if (bfd_count_sections (link_info.output_bfd) <= 1)
4784    return;
4785
4786  count = bfd_count_sections (link_info.output_bfd);
4787  sections = XNEWVEC (struct check_sec, count);
4788
4789  /* Scan all sections in the output list.  */
4790  count = 0;
4791  for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4792    {
4793      if (IGNORE_SECTION (s)
4794	  || s->size == 0)
4795	continue;
4796
4797      sections[count].sec = s;
4798      sections[count].warned = FALSE;
4799      count++;
4800    }
4801
4802  if (count <= 1)
4803    {
4804      free (sections);
4805      return;
4806    }
4807
4808  qsort (sections, count, sizeof (*sections), sort_sections_by_lma);
4809
4810  /* First check section LMAs.  There should be no overlap of LMAs on
4811     loadable sections, even with overlays.  */
4812  for (p = NULL, i = 0; i < count; i++)
4813    {
4814      s = sections[i].sec;
4815      if ((s->flags & SEC_LOAD) != 0)
4816	{
4817	  s_start = s->lma;
4818	  s_end = s_start + TO_ADDR (s->size) - 1;
4819
4820	  /* Look for an overlap.  We have sorted sections by lma, so
4821	     we know that s_start >= p_start.  Besides the obvious
4822	     case of overlap when the current section starts before
4823	     the previous one ends, we also must have overlap if the
4824	     previous section wraps around the address space.  */
4825	  if (p != NULL
4826	      && (s_start <= p_end
4827		  || p_end < p_start))
4828	    {
4829	      einfo (_("%X%P: section %s LMA [%V,%V]"
4830		       " overlaps section %s LMA [%V,%V]\n"),
4831		     s->name, s_start, s_end, p->name, p_start, p_end);
4832	      sections[i].warned = TRUE;
4833	    }
4834	  p = s;
4835	  p_start = s_start;
4836	  p_end = s_end;
4837	}
4838    }
4839
4840  /* If any non-zero size allocated section (excluding tbss) starts at
4841     exactly the same VMA as another such section, then we have
4842     overlays.  Overlays generated by the OVERLAY keyword will have
4843     this property.  It is possible to intentionally generate overlays
4844     that fail this test, but it would be unusual.  */
4845  qsort (sections, count, sizeof (*sections), sort_sections_by_vma);
4846  overlays = FALSE;
4847  p_start = sections[0].sec->vma;
4848  for (i = 1; i < count; i++)
4849    {
4850      s_start = sections[i].sec->vma;
4851      if (p_start == s_start)
4852	{
4853	  overlays = TRUE;
4854	  break;
4855	}
4856      p_start = s_start;
4857    }
4858
4859  /* Now check section VMAs if no overlays were detected.  */
4860  if (!overlays)
4861    {
4862      for (p = NULL, i = 0; i < count; i++)
4863	{
4864	  s = sections[i].sec;
4865	  s_start = s->vma;
4866	  s_end = s_start + TO_ADDR (s->size) - 1;
4867
4868	  if (p != NULL
4869	      && !sections[i].warned
4870	      && (s_start <= p_end
4871		  || p_end < p_start))
4872	    einfo (_("%X%P: section %s VMA [%V,%V]"
4873		     " overlaps section %s VMA [%V,%V]\n"),
4874		   s->name, s_start, s_end, p->name, p_start, p_end);
4875	  p = s;
4876	  p_start = s_start;
4877	  p_end = s_end;
4878	}
4879    }
4880
4881  free (sections);
4882
4883  /* If any memory region has overflowed, report by how much.
4884     We do not issue this diagnostic for regions that had sections
4885     explicitly placed outside their bounds; os_region_check's
4886     diagnostics are adequate for that case.
4887
4888     FIXME: It is conceivable that m->current - (m->origin + m->length)
4889     might overflow a 32-bit integer.  There is, alas, no way to print
4890     a bfd_vma quantity in decimal.  */
4891  for (m = lang_memory_region_list; m; m = m->next)
4892    if (m->had_full_message)
4893      einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4894	     m->name_list.name, (long)(m->current - (m->origin + m->length)));
4895}
4896
4897/* Make sure the new address is within the region.  We explicitly permit the
4898   current address to be at the exact end of the region when the address is
4899   non-zero, in case the region is at the end of addressable memory and the
4900   calculation wraps around.  */
4901
4902static void
4903os_region_check (lang_output_section_statement_type *os,
4904		 lang_memory_region_type *region,
4905		 etree_type *tree,
4906		 bfd_vma rbase)
4907{
4908  if ((region->current < region->origin
4909       || (region->current - region->origin > region->length))
4910      && ((region->current != region->origin + region->length)
4911	  || rbase == 0))
4912    {
4913      if (tree != NULL)
4914	{
4915	  einfo (_("%X%P: address 0x%v of %B section `%s'"
4916		   " is not within region `%s'\n"),
4917		 region->current,
4918		 os->bfd_section->owner,
4919		 os->bfd_section->name,
4920		 region->name_list.name);
4921	}
4922      else if (!region->had_full_message)
4923	{
4924	  region->had_full_message = TRUE;
4925
4926	  einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4927		 os->bfd_section->owner,
4928		 os->bfd_section->name,
4929		 region->name_list.name);
4930	}
4931    }
4932}
4933
4934/* Set the sizes for all the output sections.  */
4935
4936static bfd_vma
4937lang_size_sections_1
4938  (lang_statement_union_type **prev,
4939   lang_output_section_statement_type *output_section_statement,
4940   fill_type *fill,
4941   bfd_vma dot,
4942   bfd_boolean *relax,
4943   bfd_boolean check_regions)
4944{
4945  lang_statement_union_type *s;
4946
4947  /* Size up the sections from their constituent parts.  */
4948  for (s = *prev; s != NULL; s = s->header.next)
4949    {
4950      switch (s->header.type)
4951	{
4952	case lang_output_section_statement_enum:
4953	  {
4954	    bfd_vma newdot, after, dotdelta;
4955	    lang_output_section_statement_type *os;
4956	    lang_memory_region_type *r;
4957	    int section_alignment = 0;
4958
4959	    os = &s->output_section_statement;
4960	    if (os->constraint == -1)
4961	      break;
4962
4963	    /* FIXME: We shouldn't need to zero section vmas for ld -r
4964	       here, in lang_insert_orphan, or in the default linker scripts.
4965	       This is covering for coff backend linker bugs.  See PR6945.  */
4966	    if (os->addr_tree == NULL
4967		&& bfd_link_relocatable (&link_info)
4968		&& (bfd_get_flavour (link_info.output_bfd)
4969		    == bfd_target_coff_flavour))
4970	      os->addr_tree = exp_intop (0);
4971	    if (os->addr_tree != NULL)
4972	      {
4973		os->processed_vma = FALSE;
4974		exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4975
4976		if (expld.result.valid_p)
4977		  {
4978		    dot = expld.result.value;
4979		    if (expld.result.section != NULL)
4980		      dot += expld.result.section->vma;
4981		  }
4982		else if (expld.phase != lang_mark_phase_enum)
4983		  einfo (_("%F%S: non constant or forward reference"
4984			   " address expression for section %s\n"),
4985			 os->addr_tree, os->name);
4986	      }
4987
4988	    if (os->bfd_section == NULL)
4989	      /* This section was removed or never actually created.  */
4990	      break;
4991
4992	    /* If this is a COFF shared library section, use the size and
4993	       address from the input section.  FIXME: This is COFF
4994	       specific; it would be cleaner if there were some other way
4995	       to do this, but nothing simple comes to mind.  */
4996	    if (((bfd_get_flavour (link_info.output_bfd)
4997		  == bfd_target_ecoff_flavour)
4998		 || (bfd_get_flavour (link_info.output_bfd)
4999		     == bfd_target_coff_flavour))
5000		&& (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
5001	      {
5002		asection *input;
5003
5004		if (os->children.head == NULL
5005		    || os->children.head->header.next != NULL
5006		    || (os->children.head->header.type
5007			!= lang_input_section_enum))
5008		  einfo (_("%P%X: Internal error on COFF shared library"
5009			   " section %s\n"), os->name);
5010
5011		input = os->children.head->input_section.section;
5012		bfd_set_section_vma (os->bfd_section->owner,
5013				     os->bfd_section,
5014				     bfd_section_vma (input->owner, input));
5015		os->bfd_section->size = input->size;
5016		break;
5017	      }
5018
5019	    newdot = dot;
5020	    dotdelta = 0;
5021	    if (bfd_is_abs_section (os->bfd_section))
5022	      {
5023		/* No matter what happens, an abs section starts at zero.  */
5024		ASSERT (os->bfd_section->vma == 0);
5025	      }
5026	    else
5027	      {
5028		if (os->addr_tree == NULL)
5029		  {
5030		    /* No address specified for this section, get one
5031		       from the region specification.  */
5032		    if (os->region == NULL
5033			|| ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
5034			    && os->region->name_list.name[0] == '*'
5035			    && strcmp (os->region->name_list.name,
5036				       DEFAULT_MEMORY_REGION) == 0))
5037		      {
5038			os->region = lang_memory_default (os->bfd_section);
5039		      }
5040
5041		    /* If a loadable section is using the default memory
5042		       region, and some non default memory regions were
5043		       defined, issue an error message.  */
5044		    if (!os->ignored
5045			&& !IGNORE_SECTION (os->bfd_section)
5046			&& !bfd_link_relocatable (&link_info)
5047			&& check_regions
5048			&& strcmp (os->region->name_list.name,
5049				   DEFAULT_MEMORY_REGION) == 0
5050			&& lang_memory_region_list != NULL
5051			&& (strcmp (lang_memory_region_list->name_list.name,
5052				    DEFAULT_MEMORY_REGION) != 0
5053			    || lang_memory_region_list->next != NULL)
5054			&& expld.phase != lang_mark_phase_enum)
5055		      {
5056			/* By default this is an error rather than just a
5057			   warning because if we allocate the section to the
5058			   default memory region we can end up creating an
5059			   excessively large binary, or even seg faulting when
5060			   attempting to perform a negative seek.  See
5061			   sources.redhat.com/ml/binutils/2003-04/msg00423.html
5062			   for an example of this.  This behaviour can be
5063			   overridden by the using the --no-check-sections
5064			   switch.  */
5065			if (command_line.check_section_addresses)
5066			  einfo (_("%P%F: error: no memory region specified"
5067				   " for loadable section `%s'\n"),
5068				 bfd_get_section_name (link_info.output_bfd,
5069						       os->bfd_section));
5070			else
5071			  einfo (_("%P: warning: no memory region specified"
5072				   " for loadable section `%s'\n"),
5073				 bfd_get_section_name (link_info.output_bfd,
5074						       os->bfd_section));
5075		      }
5076
5077		    newdot = os->region->current;
5078		    section_alignment = os->bfd_section->alignment_power;
5079		  }
5080		else
5081		  section_alignment = os->section_alignment;
5082
5083		/* Align to what the section needs.  */
5084		if (section_alignment > 0)
5085		  {
5086		    bfd_vma savedot = newdot;
5087		    newdot = align_power (newdot, section_alignment);
5088
5089		    dotdelta = newdot - savedot;
5090		    if (dotdelta != 0
5091			&& (config.warn_section_align
5092			    || os->addr_tree != NULL)
5093			&& expld.phase != lang_mark_phase_enum)
5094		      einfo (_("%P: warning: changing start of section"
5095			       " %s by %lu bytes\n"),
5096			     os->name, (unsigned long) dotdelta);
5097		  }
5098
5099		bfd_set_section_vma (0, os->bfd_section, newdot);
5100
5101		os->bfd_section->output_offset = 0;
5102	      }
5103
5104	    lang_size_sections_1 (&os->children.head, os,
5105				  os->fill, newdot, relax, check_regions);
5106
5107	    os->processed_vma = TRUE;
5108
5109	    if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5110	      /* Except for some special linker created sections,
5111		 no output section should change from zero size
5112		 after strip_excluded_output_sections.  A non-zero
5113		 size on an ignored section indicates that some
5114		 input section was not sized early enough.  */
5115	      ASSERT (os->bfd_section->size == 0);
5116	    else
5117	      {
5118		dot = os->bfd_section->vma;
5119
5120		/* Put the section within the requested block size, or
5121		   align at the block boundary.  */
5122		after = ((dot
5123			  + TO_ADDR (os->bfd_section->size)
5124			  + os->block_value - 1)
5125			 & - (bfd_vma) os->block_value);
5126
5127		os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
5128	      }
5129
5130	    /* Set section lma.  */
5131	    r = os->region;
5132	    if (r == NULL)
5133	      r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
5134
5135	    if (os->load_base)
5136	      {
5137		bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
5138		os->bfd_section->lma = lma;
5139	      }
5140	    else if (os->lma_region != NULL)
5141	      {
5142		bfd_vma lma = os->lma_region->current;
5143
5144		if (os->align_lma_with_input)
5145		  lma += dotdelta;
5146		else
5147		  {
5148		    /* When LMA_REGION is the same as REGION, align the LMA
5149		       as we did for the VMA, possibly including alignment
5150		       from the bfd section.  If a different region, then
5151		       only align according to the value in the output
5152		       statement.  */
5153		    if (os->lma_region != os->region)
5154		      section_alignment = os->section_alignment;
5155		    if (section_alignment > 0)
5156		      lma = align_power (lma, section_alignment);
5157		  }
5158		os->bfd_section->lma = lma;
5159	      }
5160	    else if (r->last_os != NULL
5161		     && (os->bfd_section->flags & SEC_ALLOC) != 0)
5162	      {
5163		bfd_vma lma;
5164		asection *last;
5165
5166		last = r->last_os->output_section_statement.bfd_section;
5167
5168		/* A backwards move of dot should be accompanied by
5169		   an explicit assignment to the section LMA (ie.
5170		   os->load_base set) because backwards moves can
5171		   create overlapping LMAs.  */
5172		if (dot < last->vma
5173		    && os->bfd_section->size != 0
5174		    && dot + TO_ADDR (os->bfd_section->size) <= last->vma)
5175		  {
5176		    /* If dot moved backwards then leave lma equal to
5177		       vma.  This is the old default lma, which might
5178		       just happen to work when the backwards move is
5179		       sufficiently large.  Nag if this changes anything,
5180		       so people can fix their linker scripts.  */
5181
5182		    if (last->vma != last->lma)
5183		      einfo (_("%P: warning: dot moved backwards "
5184			       "before `%s'\n"), os->name);
5185		  }
5186		else
5187		  {
5188		    /* If this is an overlay, set the current lma to that
5189		       at the end of the previous section.  */
5190		    if (os->sectype == overlay_section)
5191		      lma = last->lma + TO_ADDR (last->size);
5192
5193		    /* Otherwise, keep the same lma to vma relationship
5194		       as the previous section.  */
5195		    else
5196		      lma = dot + last->lma - last->vma;
5197
5198		    if (section_alignment > 0)
5199		      lma = align_power (lma, section_alignment);
5200		    os->bfd_section->lma = lma;
5201		  }
5202	      }
5203	    os->processed_lma = TRUE;
5204
5205	    if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5206	      break;
5207
5208	    /* Keep track of normal sections using the default
5209	       lma region.  We use this to set the lma for
5210	       following sections.  Overlays or other linker
5211	       script assignment to lma might mean that the
5212	       default lma == vma is incorrect.
5213	       To avoid warnings about dot moving backwards when using
5214	       -Ttext, don't start tracking sections until we find one
5215	       of non-zero size or with lma set differently to vma.  */
5216	    if (!IGNORE_SECTION (os->bfd_section)
5217		&& (os->bfd_section->size != 0
5218		    || (r->last_os == NULL
5219			&& os->bfd_section->vma != os->bfd_section->lma)
5220		    || (r->last_os != NULL
5221			&& dot >= (r->last_os->output_section_statement
5222				   .bfd_section->vma)))
5223		&& os->lma_region == NULL
5224		&& !bfd_link_relocatable (&link_info))
5225	      r->last_os = s;
5226
5227	    /* .tbss sections effectively have zero size.  */
5228	    if (!IS_TBSS (os->bfd_section)
5229		|| bfd_link_relocatable (&link_info))
5230	      dotdelta = TO_ADDR (os->bfd_section->size);
5231	    else
5232	      dotdelta = 0;
5233	    dot += dotdelta;
5234
5235	    if (os->update_dot_tree != 0)
5236	      exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5237
5238	    /* Update dot in the region ?
5239	       We only do this if the section is going to be allocated,
5240	       since unallocated sections do not contribute to the region's
5241	       overall size in memory.  */
5242	    if (os->region != NULL
5243		&& (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5244	      {
5245		os->region->current = dot;
5246
5247		if (check_regions)
5248		  /* Make sure the new address is within the region.  */
5249		  os_region_check (os, os->region, os->addr_tree,
5250				   os->bfd_section->vma);
5251
5252		if (os->lma_region != NULL && os->lma_region != os->region
5253		    && ((os->bfd_section->flags & SEC_LOAD)
5254			|| os->align_lma_with_input))
5255		  {
5256		    os->lma_region->current = os->bfd_section->lma + dotdelta;
5257
5258		    if (check_regions)
5259		      os_region_check (os, os->lma_region, NULL,
5260				       os->bfd_section->lma);
5261		  }
5262	      }
5263	  }
5264	  break;
5265
5266	case lang_constructors_statement_enum:
5267	  dot = lang_size_sections_1 (&constructor_list.head,
5268				      output_section_statement,
5269				      fill, dot, relax, check_regions);
5270	  break;
5271
5272	case lang_data_statement_enum:
5273	  {
5274	    unsigned int size = 0;
5275
5276	    s->data_statement.output_offset =
5277	      dot - output_section_statement->bfd_section->vma;
5278	    s->data_statement.output_section =
5279	      output_section_statement->bfd_section;
5280
5281	    /* We might refer to provided symbols in the expression, and
5282	       need to mark them as needed.  */
5283	    exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5284
5285	    switch (s->data_statement.type)
5286	      {
5287	      default:
5288		abort ();
5289	      case QUAD:
5290	      case SQUAD:
5291		size = QUAD_SIZE;
5292		break;
5293	      case LONG:
5294		size = LONG_SIZE;
5295		break;
5296	      case SHORT:
5297		size = SHORT_SIZE;
5298		break;
5299	      case BYTE:
5300		size = BYTE_SIZE;
5301		break;
5302	      }
5303	    if (size < TO_SIZE ((unsigned) 1))
5304	      size = TO_SIZE ((unsigned) 1);
5305	    dot += TO_ADDR (size);
5306	    output_section_statement->bfd_section->size
5307	      = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5308
5309	  }
5310	  break;
5311
5312	case lang_reloc_statement_enum:
5313	  {
5314	    int size;
5315
5316	    s->reloc_statement.output_offset =
5317	      dot - output_section_statement->bfd_section->vma;
5318	    s->reloc_statement.output_section =
5319	      output_section_statement->bfd_section;
5320	    size = bfd_get_reloc_size (s->reloc_statement.howto);
5321	    dot += TO_ADDR (size);
5322	    output_section_statement->bfd_section->size
5323	      = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5324	  }
5325	  break;
5326
5327	case lang_wild_statement_enum:
5328	  dot = lang_size_sections_1 (&s->wild_statement.children.head,
5329				      output_section_statement,
5330				      fill, dot, relax, check_regions);
5331	  break;
5332
5333	case lang_object_symbols_statement_enum:
5334	  link_info.create_object_symbols_section =
5335	    output_section_statement->bfd_section;
5336	  break;
5337
5338	case lang_output_statement_enum:
5339	case lang_target_statement_enum:
5340	  break;
5341
5342	case lang_input_section_enum:
5343	  {
5344	    asection *i;
5345
5346	    i = s->input_section.section;
5347	    if (relax)
5348	      {
5349		bfd_boolean again;
5350
5351		if (!bfd_relax_section (i->owner, i, &link_info, &again))
5352		  einfo (_("%P%F: can't relax section: %E\n"));
5353		if (again)
5354		  *relax = TRUE;
5355	      }
5356	    dot = size_input_section (prev, output_section_statement,
5357				      fill, dot);
5358	  }
5359	  break;
5360
5361	case lang_input_statement_enum:
5362	  break;
5363
5364	case lang_fill_statement_enum:
5365	  s->fill_statement.output_section =
5366	    output_section_statement->bfd_section;
5367
5368	  fill = s->fill_statement.fill;
5369	  break;
5370
5371	case lang_assignment_statement_enum:
5372	  {
5373	    bfd_vma newdot = dot;
5374	    etree_type *tree = s->assignment_statement.exp;
5375
5376	    expld.dataseg.relro = exp_dataseg_relro_none;
5377
5378	    exp_fold_tree (tree,
5379			   output_section_statement->bfd_section,
5380			   &newdot);
5381
5382	    if (expld.dataseg.relro == exp_dataseg_relro_start)
5383	      {
5384		if (!expld.dataseg.relro_start_stat)
5385		  expld.dataseg.relro_start_stat = s;
5386		else
5387		  {
5388		    ASSERT (expld.dataseg.relro_start_stat == s);
5389		  }
5390	      }
5391	    else if (expld.dataseg.relro == exp_dataseg_relro_end)
5392	      {
5393		if (!expld.dataseg.relro_end_stat)
5394		  expld.dataseg.relro_end_stat = s;
5395		else
5396		  {
5397		    ASSERT (expld.dataseg.relro_end_stat == s);
5398		  }
5399	      }
5400	    expld.dataseg.relro = exp_dataseg_relro_none;
5401
5402	    /* This symbol may be relative to this section.  */
5403	    if ((tree->type.node_class == etree_provided
5404		 || tree->type.node_class == etree_assign)
5405		&& (tree->assign.dst [0] != '.'
5406		    || tree->assign.dst [1] != '\0'))
5407	      output_section_statement->update_dot = 1;
5408
5409	    if (!output_section_statement->ignored)
5410	      {
5411		if (output_section_statement == abs_output_section)
5412		  {
5413		    /* If we don't have an output section, then just adjust
5414		       the default memory address.  */
5415		    lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5416					       FALSE)->current = newdot;
5417		  }
5418		else if (newdot != dot)
5419		  {
5420		    /* Insert a pad after this statement.  We can't
5421		       put the pad before when relaxing, in case the
5422		       assignment references dot.  */
5423		    insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5424				output_section_statement->bfd_section, dot);
5425
5426		    /* Don't neuter the pad below when relaxing.  */
5427		    s = s->header.next;
5428
5429		    /* If dot is advanced, this implies that the section
5430		       should have space allocated to it, unless the
5431		       user has explicitly stated that the section
5432		       should not be allocated.  */
5433		    if (output_section_statement->sectype != noalloc_section
5434			&& (output_section_statement->sectype != noload_section
5435			    || (bfd_get_flavour (link_info.output_bfd)
5436				== bfd_target_elf_flavour)))
5437		      output_section_statement->bfd_section->flags |= SEC_ALLOC;
5438		  }
5439		dot = newdot;
5440	      }
5441	  }
5442	  break;
5443
5444	case lang_padding_statement_enum:
5445	  /* If this is the first time lang_size_sections is called,
5446	     we won't have any padding statements.  If this is the
5447	     second or later passes when relaxing, we should allow
5448	     padding to shrink.  If padding is needed on this pass, it
5449	     will be added back in.  */
5450	  s->padding_statement.size = 0;
5451
5452	  /* Make sure output_offset is valid.  If relaxation shrinks
5453	     the section and this pad isn't needed, it's possible to
5454	     have output_offset larger than the final size of the
5455	     section.  bfd_set_section_contents will complain even for
5456	     a pad size of zero.  */
5457	  s->padding_statement.output_offset
5458	    = dot - output_section_statement->bfd_section->vma;
5459	  break;
5460
5461	case lang_group_statement_enum:
5462	  dot = lang_size_sections_1 (&s->group_statement.children.head,
5463				      output_section_statement,
5464				      fill, dot, relax, check_regions);
5465	  break;
5466
5467	case lang_insert_statement_enum:
5468	  break;
5469
5470	  /* We can only get here when relaxing is turned on.  */
5471	case lang_address_statement_enum:
5472	  break;
5473
5474	default:
5475	  FAIL ();
5476	  break;
5477	}
5478      prev = &s->header.next;
5479    }
5480  return dot;
5481}
5482
5483/* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5484   The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5485   CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5486   segments.  We are allowed an opportunity to override this decision.  */
5487
5488bfd_boolean
5489ldlang_override_segment_assignment (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5490				    bfd *abfd ATTRIBUTE_UNUSED,
5491				    asection *current_section,
5492				    asection *previous_section,
5493				    bfd_boolean new_segment)
5494{
5495  lang_output_section_statement_type *cur;
5496  lang_output_section_statement_type *prev;
5497
5498  /* The checks below are only necessary when the BFD library has decided
5499     that the two sections ought to be placed into the same segment.  */
5500  if (new_segment)
5501    return TRUE;
5502
5503  /* Paranoia checks.  */
5504  if (current_section == NULL || previous_section == NULL)
5505    return new_segment;
5506
5507  /* If this flag is set, the target never wants code and non-code
5508     sections comingled in the same segment.  */
5509  if (config.separate_code
5510      && ((current_section->flags ^ previous_section->flags) & SEC_CODE))
5511    return TRUE;
5512
5513  /* Find the memory regions associated with the two sections.
5514     We call lang_output_section_find() here rather than scanning the list
5515     of output sections looking for a matching section pointer because if
5516     we have a large number of sections then a hash lookup is faster.  */
5517  cur  = lang_output_section_find (current_section->name);
5518  prev = lang_output_section_find (previous_section->name);
5519
5520  /* More paranoia.  */
5521  if (cur == NULL || prev == NULL)
5522    return new_segment;
5523
5524  /* If the regions are different then force the sections to live in
5525     different segments.  See the email thread starting at the following
5526     URL for the reasons why this is necessary:
5527     http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5528  return cur->region != prev->region;
5529}
5530
5531void
5532one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5533{
5534  lang_statement_iteration++;
5535  lang_size_sections_1 (&statement_list.head, abs_output_section,
5536			0, 0, relax, check_regions);
5537}
5538
5539void
5540lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5541{
5542  expld.phase = lang_allocating_phase_enum;
5543  expld.dataseg.phase = exp_dataseg_none;
5544
5545  one_lang_size_sections_pass (relax, check_regions);
5546  if (expld.dataseg.phase == exp_dataseg_end_seen
5547      && link_info.relro && expld.dataseg.relro_end)
5548    {
5549      bfd_vma initial_base, relro_end, desired_end;
5550      asection *sec;
5551
5552      /* Compute the expected PT_GNU_RELRO segment end.  */
5553      relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5554		   & ~(expld.dataseg.pagesize - 1));
5555
5556      /* Adjust by the offset arg of DATA_SEGMENT_RELRO_END.  */
5557      desired_end = relro_end - expld.dataseg.relro_offset;
5558
5559      /* For sections in the relro segment..  */
5560      for (sec = link_info.output_bfd->section_last; sec; sec = sec->prev)
5561	if ((sec->flags & SEC_ALLOC) != 0
5562	    && sec->vma >= expld.dataseg.base
5563	    && sec->vma < expld.dataseg.relro_end - expld.dataseg.relro_offset)
5564	  {
5565	    /* Where do we want to put this section so that it ends as
5566	       desired?  */
5567	    bfd_vma start, end, bump;
5568
5569	    end = start = sec->vma;
5570	    if (!IS_TBSS (sec))
5571	      end += TO_ADDR (sec->size);
5572	    bump = desired_end - end;
5573	    /* We'd like to increase START by BUMP, but we must heed
5574	       alignment so the increase might be less than optimum.  */
5575	    start += bump;
5576	    start &= ~(((bfd_vma) 1 << sec->alignment_power) - 1);
5577	    /* This is now the desired end for the previous section.  */
5578	    desired_end = start;
5579	  }
5580
5581      expld.dataseg.phase = exp_dataseg_relro_adjust;
5582      ASSERT (desired_end >= expld.dataseg.base);
5583      initial_base = expld.dataseg.base;
5584      expld.dataseg.base = desired_end;
5585      lang_reset_memory_regions ();
5586      one_lang_size_sections_pass (relax, check_regions);
5587
5588      if (expld.dataseg.relro_end > relro_end)
5589	{
5590	  /* Assignments to dot, or to output section address in a
5591	     user script have increased padding over the original.
5592	     Revert.  */
5593	  expld.dataseg.base = initial_base;
5594	  lang_reset_memory_regions ();
5595	  one_lang_size_sections_pass (relax, check_regions);
5596	}
5597
5598      link_info.relro_start = expld.dataseg.base;
5599      link_info.relro_end = expld.dataseg.relro_end;
5600    }
5601  else if (expld.dataseg.phase == exp_dataseg_end_seen)
5602    {
5603      /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5604	 a page could be saved in the data segment.  */
5605      bfd_vma first, last;
5606
5607      first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5608      last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5609      if (first && last
5610	  && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5611	      != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5612	  && first + last <= expld.dataseg.pagesize)
5613	{
5614	  expld.dataseg.phase = exp_dataseg_adjust;
5615	  lang_reset_memory_regions ();
5616	  one_lang_size_sections_pass (relax, check_regions);
5617	}
5618      else
5619	expld.dataseg.phase = exp_dataseg_done;
5620    }
5621  else
5622    expld.dataseg.phase = exp_dataseg_done;
5623}
5624
5625static lang_output_section_statement_type *current_section;
5626static lang_assignment_statement_type *current_assign;
5627static bfd_boolean prefer_next_section;
5628
5629/* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5630
5631static bfd_vma
5632lang_do_assignments_1 (lang_statement_union_type *s,
5633		       lang_output_section_statement_type *current_os,
5634		       fill_type *fill,
5635		       bfd_vma dot,
5636		       bfd_boolean *found_end)
5637{
5638  for (; s != NULL; s = s->header.next)
5639    {
5640      switch (s->header.type)
5641	{
5642	case lang_constructors_statement_enum:
5643	  dot = lang_do_assignments_1 (constructor_list.head,
5644				       current_os, fill, dot, found_end);
5645	  break;
5646
5647	case lang_output_section_statement_enum:
5648	  {
5649	    lang_output_section_statement_type *os;
5650	    bfd_vma newdot;
5651
5652	    os = &(s->output_section_statement);
5653	    os->after_end = *found_end;
5654	    if (os->bfd_section != NULL && !os->ignored)
5655	      {
5656		if ((os->bfd_section->flags & SEC_ALLOC) != 0)
5657		  {
5658		    current_section = os;
5659		    prefer_next_section = FALSE;
5660		  }
5661		dot = os->bfd_section->vma;
5662	      }
5663	    newdot = lang_do_assignments_1 (os->children.head,
5664					    os, os->fill, dot, found_end);
5665	    if (!os->ignored)
5666	      {
5667		if (os->bfd_section != NULL)
5668		  {
5669		    /* .tbss sections effectively have zero size.  */
5670		    if (!IS_TBSS (os->bfd_section)
5671			|| bfd_link_relocatable (&link_info))
5672		      dot += TO_ADDR (os->bfd_section->size);
5673
5674		    if (os->update_dot_tree != NULL)
5675		      exp_fold_tree (os->update_dot_tree,
5676				     bfd_abs_section_ptr, &dot);
5677		  }
5678		else
5679		  dot = newdot;
5680	      }
5681	  }
5682	  break;
5683
5684	case lang_wild_statement_enum:
5685
5686	  dot = lang_do_assignments_1 (s->wild_statement.children.head,
5687				       current_os, fill, dot, found_end);
5688	  break;
5689
5690	case lang_object_symbols_statement_enum:
5691	case lang_output_statement_enum:
5692	case lang_target_statement_enum:
5693	  break;
5694
5695	case lang_data_statement_enum:
5696	  exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5697	  if (expld.result.valid_p)
5698	    {
5699	      s->data_statement.value = expld.result.value;
5700	      if (expld.result.section != NULL)
5701		s->data_statement.value += expld.result.section->vma;
5702	    }
5703	  else if (expld.phase == lang_final_phase_enum)
5704	    einfo (_("%F%P: invalid data statement\n"));
5705	  {
5706	    unsigned int size;
5707	    switch (s->data_statement.type)
5708	      {
5709	      default:
5710		abort ();
5711	      case QUAD:
5712	      case SQUAD:
5713		size = QUAD_SIZE;
5714		break;
5715	      case LONG:
5716		size = LONG_SIZE;
5717		break;
5718	      case SHORT:
5719		size = SHORT_SIZE;
5720		break;
5721	      case BYTE:
5722		size = BYTE_SIZE;
5723		break;
5724	      }
5725	    if (size < TO_SIZE ((unsigned) 1))
5726	      size = TO_SIZE ((unsigned) 1);
5727	    dot += TO_ADDR (size);
5728	  }
5729	  break;
5730
5731	case lang_reloc_statement_enum:
5732	  exp_fold_tree (s->reloc_statement.addend_exp,
5733			 bfd_abs_section_ptr, &dot);
5734	  if (expld.result.valid_p)
5735	    s->reloc_statement.addend_value = expld.result.value;
5736	  else if (expld.phase == lang_final_phase_enum)
5737	    einfo (_("%F%P: invalid reloc statement\n"));
5738	  dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5739	  break;
5740
5741	case lang_input_section_enum:
5742	  {
5743	    asection *in = s->input_section.section;
5744
5745	    if ((in->flags & SEC_EXCLUDE) == 0)
5746	      dot += TO_ADDR (in->size);
5747	  }
5748	  break;
5749
5750	case lang_input_statement_enum:
5751	  break;
5752
5753	case lang_fill_statement_enum:
5754	  fill = s->fill_statement.fill;
5755	  break;
5756
5757	case lang_assignment_statement_enum:
5758	  current_assign = &s->assignment_statement;
5759	  if (current_assign->exp->type.node_class != etree_assert)
5760	    {
5761	      const char *p = current_assign->exp->assign.dst;
5762
5763	      if (current_os == abs_output_section && p[0] == '.' && p[1] == 0)
5764		prefer_next_section = TRUE;
5765
5766	      while (*p == '_')
5767		++p;
5768	      if (strcmp (p, "end") == 0)
5769		*found_end = TRUE;
5770	    }
5771	  exp_fold_tree (s->assignment_statement.exp,
5772			 (current_os->bfd_section != NULL
5773			  ? current_os->bfd_section : bfd_und_section_ptr),
5774			 &dot);
5775	  break;
5776
5777	case lang_padding_statement_enum:
5778	  dot += TO_ADDR (s->padding_statement.size);
5779	  break;
5780
5781	case lang_group_statement_enum:
5782	  dot = lang_do_assignments_1 (s->group_statement.children.head,
5783				       current_os, fill, dot, found_end);
5784	  break;
5785
5786	case lang_insert_statement_enum:
5787	  break;
5788
5789	case lang_address_statement_enum:
5790	  break;
5791
5792	default:
5793	  FAIL ();
5794	  break;
5795	}
5796    }
5797  return dot;
5798}
5799
5800void
5801lang_do_assignments (lang_phase_type phase)
5802{
5803  bfd_boolean found_end = FALSE;
5804
5805  current_section = NULL;
5806  prefer_next_section = FALSE;
5807  expld.phase = phase;
5808  lang_statement_iteration++;
5809  lang_do_assignments_1 (statement_list.head,
5810			 abs_output_section, NULL, 0, &found_end);
5811}
5812
5813/* For an assignment statement outside of an output section statement,
5814   choose the best of neighbouring output sections to use for values
5815   of "dot".  */
5816
5817asection *
5818section_for_dot (void)
5819{
5820  asection *s;
5821
5822  /* Assignments belong to the previous output section, unless there
5823     has been an assignment to "dot", in which case following
5824     assignments belong to the next output section.  (The assumption
5825     is that an assignment to "dot" is setting up the address for the
5826     next output section.)  Except that past the assignment to "_end"
5827     we always associate with the previous section.  This exception is
5828     for targets like SH that define an alloc .stack or other
5829     weirdness after non-alloc sections.  */
5830  if (current_section == NULL || prefer_next_section)
5831    {
5832      lang_statement_union_type *stmt;
5833      lang_output_section_statement_type *os;
5834
5835      for (stmt = (lang_statement_union_type *) current_assign;
5836	   stmt != NULL;
5837	   stmt = stmt->header.next)
5838	if (stmt->header.type == lang_output_section_statement_enum)
5839	  break;
5840
5841      os = &stmt->output_section_statement;
5842      while (os != NULL
5843	     && !os->after_end
5844	     && (os->bfd_section == NULL
5845		 || (os->bfd_section->flags & SEC_EXCLUDE) != 0
5846		 || bfd_section_removed_from_list (link_info.output_bfd,
5847						   os->bfd_section)))
5848	os = os->next;
5849
5850      if (current_section == NULL || os == NULL || !os->after_end)
5851	{
5852	  if (os != NULL)
5853	    s = os->bfd_section;
5854	  else
5855	    s = link_info.output_bfd->section_last;
5856	  while (s != NULL
5857		 && ((s->flags & SEC_ALLOC) == 0
5858		     || (s->flags & SEC_THREAD_LOCAL) != 0))
5859	    s = s->prev;
5860	  if (s != NULL)
5861	    return s;
5862
5863	  return bfd_abs_section_ptr;
5864	}
5865    }
5866
5867  s = current_section->bfd_section;
5868
5869  /* The section may have been stripped.  */
5870  while (s != NULL
5871	 && ((s->flags & SEC_EXCLUDE) != 0
5872	     || (s->flags & SEC_ALLOC) == 0
5873	     || (s->flags & SEC_THREAD_LOCAL) != 0
5874	     || bfd_section_removed_from_list (link_info.output_bfd, s)))
5875    s = s->prev;
5876  if (s == NULL)
5877    s = link_info.output_bfd->sections;
5878  while (s != NULL
5879	 && ((s->flags & SEC_ALLOC) == 0
5880	     || (s->flags & SEC_THREAD_LOCAL) != 0))
5881    s = s->next;
5882  if (s != NULL)
5883    return s;
5884
5885  return bfd_abs_section_ptr;
5886}
5887
5888/* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5889   operator .startof. (section_name), it produces an undefined symbol
5890   .startof.section_name.  Similarly, when it sees
5891   .sizeof. (section_name), it produces an undefined symbol
5892   .sizeof.section_name.  For all the output sections, we look for
5893   such symbols, and set them to the correct value.  */
5894
5895static void
5896lang_set_startof (void)
5897{
5898  asection *s;
5899
5900  if (bfd_link_relocatable (&link_info))
5901    return;
5902
5903  for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5904    {
5905      const char *secname;
5906      char *buf;
5907      struct bfd_link_hash_entry *h;
5908
5909      secname = bfd_get_section_name (link_info.output_bfd, s);
5910      buf = (char *) xmalloc (10 + strlen (secname));
5911
5912      sprintf (buf, ".startof.%s", secname);
5913      h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5914      if (h != NULL && h->type == bfd_link_hash_undefined)
5915	{
5916	  h->type = bfd_link_hash_defined;
5917	  h->u.def.value = 0;
5918	  h->u.def.section = s;
5919	}
5920
5921      sprintf (buf, ".sizeof.%s", secname);
5922      h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5923      if (h != NULL && h->type == bfd_link_hash_undefined)
5924	{
5925	  h->type = bfd_link_hash_defined;
5926	  h->u.def.value = TO_ADDR (s->size);
5927	  h->u.def.section = bfd_abs_section_ptr;
5928	}
5929
5930      free (buf);
5931    }
5932}
5933
5934static void
5935lang_end (void)
5936{
5937  struct bfd_link_hash_entry *h;
5938  bfd_boolean warn;
5939
5940  if ((bfd_link_relocatable (&link_info) && !link_info.gc_sections)
5941      || bfd_link_dll (&link_info))
5942    warn = entry_from_cmdline;
5943  else
5944    warn = TRUE;
5945
5946  /* Force the user to specify a root when generating a relocatable with
5947     --gc-sections.  */
5948  if (link_info.gc_sections && bfd_link_relocatable (&link_info)
5949      && !(entry_from_cmdline || undef_from_cmdline))
5950    einfo (_("%P%F: gc-sections requires either an entry or "
5951	     "an undefined symbol\n"));
5952
5953  if (entry_symbol.name == NULL)
5954    {
5955      /* No entry has been specified.  Look for the default entry, but
5956	 don't warn if we don't find it.  */
5957      entry_symbol.name = entry_symbol_default;
5958      warn = FALSE;
5959    }
5960
5961  h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5962			    FALSE, FALSE, TRUE);
5963  if (h != NULL
5964      && (h->type == bfd_link_hash_defined
5965	  || h->type == bfd_link_hash_defweak)
5966      && h->u.def.section->output_section != NULL)
5967    {
5968      bfd_vma val;
5969
5970      val = (h->u.def.value
5971	     + bfd_get_section_vma (link_info.output_bfd,
5972				    h->u.def.section->output_section)
5973	     + h->u.def.section->output_offset);
5974      if (!bfd_set_start_address (link_info.output_bfd, val))
5975	einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5976    }
5977  else
5978    {
5979      bfd_vma val;
5980      const char *send;
5981
5982      /* We couldn't find the entry symbol.  Try parsing it as a
5983	 number.  */
5984      val = bfd_scan_vma (entry_symbol.name, &send, 0);
5985      if (*send == '\0')
5986	{
5987	  if (!bfd_set_start_address (link_info.output_bfd, val))
5988	    einfo (_("%P%F: can't set start address\n"));
5989	}
5990      else
5991	{
5992	  asection *ts;
5993
5994	  /* Can't find the entry symbol, and it's not a number.  Use
5995	     the first address in the text section.  */
5996	  ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5997	  if (ts != NULL)
5998	    {
5999	      if (warn)
6000		einfo (_("%P: warning: cannot find entry symbol %s;"
6001			 " defaulting to %V\n"),
6002		       entry_symbol.name,
6003		       bfd_get_section_vma (link_info.output_bfd, ts));
6004	      if (!(bfd_set_start_address
6005		    (link_info.output_bfd,
6006		     bfd_get_section_vma (link_info.output_bfd, ts))))
6007		einfo (_("%P%F: can't set start address\n"));
6008	    }
6009	  else
6010	    {
6011	      if (warn)
6012		einfo (_("%P: warning: cannot find entry symbol %s;"
6013			 " not setting start address\n"),
6014		       entry_symbol.name);
6015	    }
6016	}
6017    }
6018}
6019
6020/* This is a small function used when we want to ignore errors from
6021   BFD.  */
6022
6023static void
6024ignore_bfd_errors (const char *fmt ATTRIBUTE_UNUSED,
6025		   va_list ap ATTRIBUTE_UNUSED)
6026{
6027  /* Don't do anything.  */
6028}
6029
6030/* Check that the architecture of all the input files is compatible
6031   with the output file.  Also call the backend to let it do any
6032   other checking that is needed.  */
6033
6034static void
6035lang_check (void)
6036{
6037  lang_statement_union_type *file;
6038  bfd *input_bfd;
6039  const bfd_arch_info_type *compatible;
6040
6041  for (file = file_chain.head; file != NULL; file = file->input_statement.next)
6042    {
6043#ifdef ENABLE_PLUGINS
6044      /* Don't check format of files claimed by plugin.  */
6045      if (file->input_statement.flags.claimed)
6046	continue;
6047#endif /* ENABLE_PLUGINS */
6048      input_bfd = file->input_statement.the_bfd;
6049      compatible
6050	= bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
6051				   command_line.accept_unknown_input_arch);
6052
6053      /* In general it is not possible to perform a relocatable
6054	 link between differing object formats when the input
6055	 file has relocations, because the relocations in the
6056	 input format may not have equivalent representations in
6057	 the output format (and besides BFD does not translate
6058	 relocs for other link purposes than a final link).  */
6059      if ((bfd_link_relocatable (&link_info)
6060	   || link_info.emitrelocations)
6061	  && (compatible == NULL
6062	      || (bfd_get_flavour (input_bfd)
6063		  != bfd_get_flavour (link_info.output_bfd)))
6064	  && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
6065	{
6066	  einfo (_("%P%F: Relocatable linking with relocations from"
6067		   " format %s (%B) to format %s (%B) is not supported\n"),
6068		 bfd_get_target (input_bfd), input_bfd,
6069		 bfd_get_target (link_info.output_bfd), link_info.output_bfd);
6070	  /* einfo with %F exits.  */
6071	}
6072
6073      if (compatible == NULL)
6074	{
6075	  if (command_line.warn_mismatch)
6076	    einfo (_("%P%X: %s architecture of input file `%B'"
6077		     " is incompatible with %s output\n"),
6078		   bfd_printable_name (input_bfd), input_bfd,
6079		   bfd_printable_name (link_info.output_bfd));
6080	}
6081      else if (bfd_count_sections (input_bfd))
6082	{
6083	  /* If the input bfd has no contents, it shouldn't set the
6084	     private data of the output bfd.  */
6085
6086	  bfd_error_handler_type pfn = NULL;
6087
6088	  /* If we aren't supposed to warn about mismatched input
6089	     files, temporarily set the BFD error handler to a
6090	     function which will do nothing.  We still want to call
6091	     bfd_merge_private_bfd_data, since it may set up
6092	     information which is needed in the output file.  */
6093	  if (!command_line.warn_mismatch)
6094	    pfn = bfd_set_error_handler (ignore_bfd_errors);
6095	  if (!bfd_merge_private_bfd_data (input_bfd, &link_info))
6096	    {
6097	      if (command_line.warn_mismatch)
6098		einfo (_("%P%X: failed to merge target specific data"
6099			 " of file %B\n"), input_bfd);
6100	    }
6101	  if (!command_line.warn_mismatch)
6102	    bfd_set_error_handler (pfn);
6103	}
6104    }
6105}
6106
6107/* Look through all the global common symbols and attach them to the
6108   correct section.  The -sort-common command line switch may be used
6109   to roughly sort the entries by alignment.  */
6110
6111static void
6112lang_common (void)
6113{
6114  if (command_line.inhibit_common_definition)
6115    return;
6116  if (bfd_link_relocatable (&link_info)
6117      && !command_line.force_common_definition)
6118    return;
6119
6120  if (!config.sort_common)
6121    bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
6122  else
6123    {
6124      unsigned int power;
6125
6126      if (config.sort_common == sort_descending)
6127	{
6128	  for (power = 4; power > 0; power--)
6129	    bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6130
6131	  power = 0;
6132	  bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6133	}
6134      else
6135	{
6136	  for (power = 0; power <= 4; power++)
6137	    bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6138
6139	  power = (unsigned int) -1;
6140	  bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
6141	}
6142    }
6143}
6144
6145/* Place one common symbol in the correct section.  */
6146
6147static bfd_boolean
6148lang_one_common (struct bfd_link_hash_entry *h, void *info)
6149{
6150  unsigned int power_of_two;
6151  bfd_vma size;
6152  asection *section;
6153
6154  if (h->type != bfd_link_hash_common)
6155    return TRUE;
6156
6157  size = h->u.c.size;
6158  power_of_two = h->u.c.p->alignment_power;
6159
6160  if (config.sort_common == sort_descending
6161      && power_of_two < *(unsigned int *) info)
6162    return TRUE;
6163  else if (config.sort_common == sort_ascending
6164	   && power_of_two > *(unsigned int *) info)
6165    return TRUE;
6166
6167  section = h->u.c.p->section;
6168  if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
6169    einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
6170	   h->root.string);
6171
6172  if (config.map_file != NULL)
6173    {
6174      static bfd_boolean header_printed;
6175      int len;
6176      char *name;
6177      char buf[50];
6178
6179      if (!header_printed)
6180	{
6181	  minfo (_("\nAllocating common symbols\n"));
6182	  minfo (_("Common symbol       size              file\n\n"));
6183	  header_printed = TRUE;
6184	}
6185
6186      name = bfd_demangle (link_info.output_bfd, h->root.string,
6187			   DMGL_ANSI | DMGL_PARAMS);
6188      if (name == NULL)
6189	{
6190	  minfo ("%s", h->root.string);
6191	  len = strlen (h->root.string);
6192	}
6193      else
6194	{
6195	  minfo ("%s", name);
6196	  len = strlen (name);
6197	  free (name);
6198	}
6199
6200      if (len >= 19)
6201	{
6202	  print_nl ();
6203	  len = 0;
6204	}
6205      while (len < 20)
6206	{
6207	  print_space ();
6208	  ++len;
6209	}
6210
6211      minfo ("0x");
6212      if (size <= 0xffffffff)
6213	sprintf (buf, "%lx", (unsigned long) size);
6214      else
6215	sprintf_vma (buf, size);
6216      minfo ("%s", buf);
6217      len = strlen (buf);
6218
6219      while (len < 16)
6220	{
6221	  print_space ();
6222	  ++len;
6223	}
6224
6225      minfo ("%B\n", section->owner);
6226    }
6227
6228  return TRUE;
6229}
6230
6231/* Handle a single orphan section S, placing the orphan into an appropriate
6232   output section.  The effects of the --orphan-handling command line
6233   option are handled here.  */
6234
6235static void
6236ldlang_place_orphan (asection *s)
6237{
6238  if (config.orphan_handling == orphan_handling_discard)
6239    {
6240      lang_output_section_statement_type *os;
6241      os = lang_output_section_statement_lookup (DISCARD_SECTION_NAME, 0,
6242						 TRUE);
6243      if (os->addr_tree == NULL
6244	  && (bfd_link_relocatable (&link_info)
6245	      || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6246	os->addr_tree = exp_intop (0);
6247      lang_add_section (&os->children, s, NULL, os);
6248    }
6249  else
6250    {
6251      lang_output_section_statement_type *os;
6252      const char *name = s->name;
6253      int constraint = 0;
6254
6255      if (config.orphan_handling == orphan_handling_error)
6256	einfo ("%X%P: error: unplaced orphan section `%A' from `%B'.\n",
6257	       s, s->owner);
6258
6259      if (config.unique_orphan_sections || unique_section_p (s, NULL))
6260	constraint = SPECIAL;
6261
6262      os = ldemul_place_orphan (s, name, constraint);
6263      if (os == NULL)
6264	{
6265	  os = lang_output_section_statement_lookup (name, constraint, TRUE);
6266	  if (os->addr_tree == NULL
6267	      && (bfd_link_relocatable (&link_info)
6268		  || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6269	    os->addr_tree = exp_intop (0);
6270	  lang_add_section (&os->children, s, NULL, os);
6271	}
6272
6273      if (config.orphan_handling == orphan_handling_warn)
6274	einfo ("%P: warning: orphan section `%A' from `%B' being "
6275	       "placed in section `%s'.\n",
6276	       s, s->owner, os->name);
6277    }
6278}
6279
6280/* Run through the input files and ensure that every input section has
6281   somewhere to go.  If one is found without a destination then create
6282   an input request and place it into the statement tree.  */
6283
6284static void
6285lang_place_orphans (void)
6286{
6287  LANG_FOR_EACH_INPUT_STATEMENT (file)
6288    {
6289      asection *s;
6290
6291      for (s = file->the_bfd->sections; s != NULL; s = s->next)
6292	{
6293	  if (s->output_section == NULL)
6294	    {
6295	      /* This section of the file is not attached, root
6296		 around for a sensible place for it to go.  */
6297
6298	      if (file->flags.just_syms)
6299		bfd_link_just_syms (file->the_bfd, s, &link_info);
6300	      else if ((s->flags & SEC_EXCLUDE) != 0)
6301		s->output_section = bfd_abs_section_ptr;
6302	      else if (strcmp (s->name, "COMMON") == 0)
6303		{
6304		  /* This is a lonely common section which must have
6305		     come from an archive.  We attach to the section
6306		     with the wildcard.  */
6307		  if (!bfd_link_relocatable (&link_info)
6308		      || command_line.force_common_definition)
6309		    {
6310		      if (default_common_section == NULL)
6311			default_common_section
6312			  = lang_output_section_statement_lookup (".bss", 0,
6313								  TRUE);
6314		      lang_add_section (&default_common_section->children, s,
6315					NULL, default_common_section);
6316		    }
6317		}
6318	      else
6319		ldlang_place_orphan (s);
6320	    }
6321	}
6322    }
6323}
6324
6325void
6326lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
6327{
6328  flagword *ptr_flags;
6329
6330  ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6331
6332  while (*flags)
6333    {
6334      switch (*flags)
6335	{
6336	  /* PR 17900: An exclamation mark in the attributes reverses
6337	     the sense of any of the attributes that follow.  */
6338	case '!':
6339	  invert = !invert;
6340	  ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6341	  break;
6342
6343	case 'A': case 'a':
6344	  *ptr_flags |= SEC_ALLOC;
6345	  break;
6346
6347	case 'R': case 'r':
6348	  *ptr_flags |= SEC_READONLY;
6349	  break;
6350
6351	case 'W': case 'w':
6352	  *ptr_flags |= SEC_DATA;
6353	  break;
6354
6355	case 'X': case 'x':
6356	  *ptr_flags |= SEC_CODE;
6357	  break;
6358
6359	case 'L': case 'l':
6360	case 'I': case 'i':
6361	  *ptr_flags |= SEC_LOAD;
6362	  break;
6363
6364	default:
6365	  einfo (_("%P%F: invalid character %c (%d) in flags\n"),
6366		 *flags, *flags);
6367	  break;
6368	}
6369      flags++;
6370    }
6371}
6372
6373/* Call a function on each input file.  This function will be called
6374   on an archive, but not on the elements.  */
6375
6376void
6377lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6378{
6379  lang_input_statement_type *f;
6380
6381  for (f = (lang_input_statement_type *) input_file_chain.head;
6382       f != NULL;
6383       f = (lang_input_statement_type *) f->next_real_file)
6384    func (f);
6385}
6386
6387/* Call a function on each file.  The function will be called on all
6388   the elements of an archive which are included in the link, but will
6389   not be called on the archive file itself.  */
6390
6391void
6392lang_for_each_file (void (*func) (lang_input_statement_type *))
6393{
6394  LANG_FOR_EACH_INPUT_STATEMENT (f)
6395    {
6396      func (f);
6397    }
6398}
6399
6400void
6401ldlang_add_file (lang_input_statement_type *entry)
6402{
6403  lang_statement_append (&file_chain,
6404			 (lang_statement_union_type *) entry,
6405			 &entry->next);
6406
6407  /* The BFD linker needs to have a list of all input BFDs involved in
6408     a link.  */
6409  ASSERT (entry->the_bfd->link.next == NULL);
6410  ASSERT (entry->the_bfd != link_info.output_bfd);
6411
6412  *link_info.input_bfds_tail = entry->the_bfd;
6413  link_info.input_bfds_tail = &entry->the_bfd->link.next;
6414  entry->the_bfd->usrdata = entry;
6415  bfd_set_gp_size (entry->the_bfd, g_switch_value);
6416
6417  /* Look through the sections and check for any which should not be
6418     included in the link.  We need to do this now, so that we can
6419     notice when the backend linker tries to report multiple
6420     definition errors for symbols which are in sections we aren't
6421     going to link.  FIXME: It might be better to entirely ignore
6422     symbols which are defined in sections which are going to be
6423     discarded.  This would require modifying the backend linker for
6424     each backend which might set the SEC_LINK_ONCE flag.  If we do
6425     this, we should probably handle SEC_EXCLUDE in the same way.  */
6426
6427  bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6428}
6429
6430void
6431lang_add_output (const char *name, int from_script)
6432{
6433  /* Make -o on command line override OUTPUT in script.  */
6434  if (!had_output_filename || !from_script)
6435    {
6436      output_filename = name;
6437      had_output_filename = TRUE;
6438    }
6439}
6440
6441static int
6442topower (int x)
6443{
6444  unsigned int i = 1;
6445  int l;
6446
6447  if (x < 0)
6448    return -1;
6449
6450  for (l = 0; l < 32; l++)
6451    {
6452      if (i >= (unsigned int) x)
6453	return l;
6454      i <<= 1;
6455    }
6456
6457  return 0;
6458}
6459
6460lang_output_section_statement_type *
6461lang_enter_output_section_statement (const char *output_section_statement_name,
6462				     etree_type *address_exp,
6463				     enum section_type sectype,
6464				     etree_type *align,
6465				     etree_type *subalign,
6466				     etree_type *ebase,
6467				     int constraint,
6468				     int align_with_input)
6469{
6470  lang_output_section_statement_type *os;
6471
6472  os = lang_output_section_statement_lookup (output_section_statement_name,
6473					     constraint, TRUE);
6474  current_section = os;
6475
6476  if (os->addr_tree == NULL)
6477    {
6478      os->addr_tree = address_exp;
6479    }
6480  os->sectype = sectype;
6481  if (sectype != noload_section)
6482    os->flags = SEC_NO_FLAGS;
6483  else
6484    os->flags = SEC_NEVER_LOAD;
6485  os->block_value = 1;
6486
6487  /* Make next things chain into subchain of this.  */
6488  push_stat_ptr (&os->children);
6489
6490  os->align_lma_with_input = align_with_input == ALIGN_WITH_INPUT;
6491  if (os->align_lma_with_input && align != NULL)
6492    einfo (_("%F%P:%S: error: align with input and explicit align specified\n"),
6493	   NULL);
6494
6495  os->subsection_alignment =
6496    topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6497  os->section_alignment =
6498    topower (exp_get_value_int (align, -1, "section alignment"));
6499
6500  os->load_base = ebase;
6501  return os;
6502}
6503
6504void
6505lang_final (void)
6506{
6507  lang_output_statement_type *new_stmt;
6508
6509  new_stmt = new_stat (lang_output_statement, stat_ptr);
6510  new_stmt->name = output_filename;
6511}
6512
6513/* Reset the current counters in the regions.  */
6514
6515void
6516lang_reset_memory_regions (void)
6517{
6518  lang_memory_region_type *p = lang_memory_region_list;
6519  asection *o;
6520  lang_output_section_statement_type *os;
6521
6522  for (p = lang_memory_region_list; p != NULL; p = p->next)
6523    {
6524      p->current = p->origin;
6525      p->last_os = NULL;
6526    }
6527
6528  for (os = &lang_output_section_statement.head->output_section_statement;
6529       os != NULL;
6530       os = os->next)
6531    {
6532      os->processed_vma = FALSE;
6533      os->processed_lma = FALSE;
6534    }
6535
6536  for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6537    {
6538      /* Save the last size for possible use by bfd_relax_section.  */
6539      o->rawsize = o->size;
6540      o->size = 0;
6541    }
6542}
6543
6544/* Worker for lang_gc_sections_1.  */
6545
6546static void
6547gc_section_callback (lang_wild_statement_type *ptr,
6548		     struct wildcard_list *sec ATTRIBUTE_UNUSED,
6549		     asection *section,
6550		     struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6551		     lang_input_statement_type *file ATTRIBUTE_UNUSED,
6552		     void *data ATTRIBUTE_UNUSED)
6553{
6554  /* If the wild pattern was marked KEEP, the member sections
6555     should be as well.  */
6556  if (ptr->keep_sections)
6557    section->flags |= SEC_KEEP;
6558}
6559
6560/* Iterate over sections marking them against GC.  */
6561
6562static void
6563lang_gc_sections_1 (lang_statement_union_type *s)
6564{
6565  for (; s != NULL; s = s->header.next)
6566    {
6567      switch (s->header.type)
6568	{
6569	case lang_wild_statement_enum:
6570	  walk_wild (&s->wild_statement, gc_section_callback, NULL);
6571	  break;
6572	case lang_constructors_statement_enum:
6573	  lang_gc_sections_1 (constructor_list.head);
6574	  break;
6575	case lang_output_section_statement_enum:
6576	  lang_gc_sections_1 (s->output_section_statement.children.head);
6577	  break;
6578	case lang_group_statement_enum:
6579	  lang_gc_sections_1 (s->group_statement.children.head);
6580	  break;
6581	default:
6582	  break;
6583	}
6584    }
6585}
6586
6587static void
6588lang_gc_sections (void)
6589{
6590  /* Keep all sections so marked in the link script.  */
6591  lang_gc_sections_1 (statement_list.head);
6592
6593  /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6594     the special case of debug info.  (See bfd/stabs.c)
6595     Twiddle the flag here, to simplify later linker code.  */
6596  if (bfd_link_relocatable (&link_info))
6597    {
6598      LANG_FOR_EACH_INPUT_STATEMENT (f)
6599	{
6600	  asection *sec;
6601#ifdef ENABLE_PLUGINS
6602	  if (f->flags.claimed)
6603	    continue;
6604#endif
6605	  for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6606	    if ((sec->flags & SEC_DEBUGGING) == 0)
6607	      sec->flags &= ~SEC_EXCLUDE;
6608	}
6609    }
6610
6611  if (link_info.gc_sections)
6612    bfd_gc_sections (link_info.output_bfd, &link_info);
6613}
6614
6615/* Worker for lang_find_relro_sections_1.  */
6616
6617static void
6618find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6619			     struct wildcard_list *sec ATTRIBUTE_UNUSED,
6620			     asection *section,
6621			     struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6622			     lang_input_statement_type *file ATTRIBUTE_UNUSED,
6623			     void *data)
6624{
6625  /* Discarded, excluded and ignored sections effectively have zero
6626     size.  */
6627  if (section->output_section != NULL
6628      && section->output_section->owner == link_info.output_bfd
6629      && (section->output_section->flags & SEC_EXCLUDE) == 0
6630      && !IGNORE_SECTION (section)
6631      && section->size != 0)
6632    {
6633      bfd_boolean *has_relro_section = (bfd_boolean *) data;
6634      *has_relro_section = TRUE;
6635    }
6636}
6637
6638/* Iterate over sections for relro sections.  */
6639
6640static void
6641lang_find_relro_sections_1 (lang_statement_union_type *s,
6642			    bfd_boolean *has_relro_section)
6643{
6644  if (*has_relro_section)
6645    return;
6646
6647  for (; s != NULL; s = s->header.next)
6648    {
6649      if (s == expld.dataseg.relro_end_stat)
6650	break;
6651
6652      switch (s->header.type)
6653	{
6654	case lang_wild_statement_enum:
6655	  walk_wild (&s->wild_statement,
6656		     find_relro_section_callback,
6657		     has_relro_section);
6658	  break;
6659	case lang_constructors_statement_enum:
6660	  lang_find_relro_sections_1 (constructor_list.head,
6661				      has_relro_section);
6662	  break;
6663	case lang_output_section_statement_enum:
6664	  lang_find_relro_sections_1 (s->output_section_statement.children.head,
6665				      has_relro_section);
6666	  break;
6667	case lang_group_statement_enum:
6668	  lang_find_relro_sections_1 (s->group_statement.children.head,
6669				      has_relro_section);
6670	  break;
6671	default:
6672	  break;
6673	}
6674    }
6675}
6676
6677static void
6678lang_find_relro_sections (void)
6679{
6680  bfd_boolean has_relro_section = FALSE;
6681
6682  /* Check all sections in the link script.  */
6683
6684  lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6685			      &has_relro_section);
6686
6687  if (!has_relro_section)
6688    link_info.relro = FALSE;
6689}
6690
6691/* Relax all sections until bfd_relax_section gives up.  */
6692
6693void
6694lang_relax_sections (bfd_boolean need_layout)
6695{
6696  if (RELAXATION_ENABLED)
6697    {
6698      /* We may need more than one relaxation pass.  */
6699      int i = link_info.relax_pass;
6700
6701      /* The backend can use it to determine the current pass.  */
6702      link_info.relax_pass = 0;
6703
6704      while (i--)
6705	{
6706	  /* Keep relaxing until bfd_relax_section gives up.  */
6707	  bfd_boolean relax_again;
6708
6709	  link_info.relax_trip = -1;
6710	  do
6711	    {
6712	      link_info.relax_trip++;
6713
6714	      /* Note: pe-dll.c does something like this also.  If you find
6715		 you need to change this code, you probably need to change
6716		 pe-dll.c also.  DJ  */
6717
6718	      /* Do all the assignments with our current guesses as to
6719		 section sizes.  */
6720	      lang_do_assignments (lang_assigning_phase_enum);
6721
6722	      /* We must do this after lang_do_assignments, because it uses
6723		 size.  */
6724	      lang_reset_memory_regions ();
6725
6726	      /* Perform another relax pass - this time we know where the
6727		 globals are, so can make a better guess.  */
6728	      relax_again = FALSE;
6729	      lang_size_sections (&relax_again, FALSE);
6730	    }
6731	  while (relax_again);
6732
6733	  link_info.relax_pass++;
6734	}
6735      need_layout = TRUE;
6736    }
6737
6738  if (need_layout)
6739    {
6740      /* Final extra sizing to report errors.  */
6741      lang_do_assignments (lang_assigning_phase_enum);
6742      lang_reset_memory_regions ();
6743      lang_size_sections (NULL, TRUE);
6744    }
6745}
6746
6747#ifdef ENABLE_PLUGINS
6748/* Find the insert point for the plugin's replacement files.  We
6749   place them after the first claimed real object file, or if the
6750   first claimed object is an archive member, after the last real
6751   object file immediately preceding the archive.  In the event
6752   no objects have been claimed at all, we return the first dummy
6753   object file on the list as the insert point; that works, but
6754   the callee must be careful when relinking the file_chain as it
6755   is not actually on that chain, only the statement_list and the
6756   input_file list; in that case, the replacement files must be
6757   inserted at the head of the file_chain.  */
6758
6759static lang_input_statement_type *
6760find_replacements_insert_point (void)
6761{
6762  lang_input_statement_type *claim1, *lastobject;
6763  lastobject = &input_file_chain.head->input_statement;
6764  for (claim1 = &file_chain.head->input_statement;
6765       claim1 != NULL;
6766       claim1 = &claim1->next->input_statement)
6767    {
6768      if (claim1->flags.claimed)
6769	return claim1->flags.claim_archive ? lastobject : claim1;
6770      /* Update lastobject if this is a real object file.  */
6771      if (claim1->the_bfd != NULL && claim1->the_bfd->my_archive == NULL)
6772	lastobject = claim1;
6773    }
6774  /* No files were claimed by the plugin.  Choose the last object
6775     file found on the list (maybe the first, dummy entry) as the
6776     insert point.  */
6777  return lastobject;
6778}
6779
6780/* Insert SRCLIST into DESTLIST after given element by chaining
6781   on FIELD as the next-pointer.  (Counterintuitively does not need
6782   a pointer to the actual after-node itself, just its chain field.)  */
6783
6784static void
6785lang_list_insert_after (lang_statement_list_type *destlist,
6786			lang_statement_list_type *srclist,
6787			lang_statement_union_type **field)
6788{
6789  *(srclist->tail) = *field;
6790  *field = srclist->head;
6791  if (destlist->tail == field)
6792    destlist->tail = srclist->tail;
6793}
6794
6795/* Detach new nodes added to DESTLIST since the time ORIGLIST
6796   was taken as a copy of it and leave them in ORIGLIST.  */
6797
6798static void
6799lang_list_remove_tail (lang_statement_list_type *destlist,
6800		       lang_statement_list_type *origlist)
6801{
6802  union lang_statement_union **savetail;
6803  /* Check that ORIGLIST really is an earlier state of DESTLIST.  */
6804  ASSERT (origlist->head == destlist->head);
6805  savetail = origlist->tail;
6806  origlist->head = *(savetail);
6807  origlist->tail = destlist->tail;
6808  destlist->tail = savetail;
6809  *savetail = NULL;
6810}
6811#endif /* ENABLE_PLUGINS */
6812
6813/* Add NAME to the list of garbage collection entry points.  */
6814
6815void
6816lang_add_gc_name (const char *name)
6817{
6818  struct bfd_sym_chain *sym;
6819
6820  if (name == NULL)
6821    return;
6822
6823  sym = (struct bfd_sym_chain *) stat_alloc (sizeof (*sym));
6824
6825  sym->next = link_info.gc_sym_list;
6826  sym->name = name;
6827  link_info.gc_sym_list = sym;
6828}
6829
6830/* Check relocations.  */
6831
6832static void
6833lang_check_relocs (void)
6834{
6835  if (link_info.check_relocs_after_open_input)
6836    {
6837      bfd *abfd;
6838
6839      for (abfd = link_info.input_bfds;
6840	   abfd != (bfd *) NULL; abfd = abfd->link.next)
6841	if (!bfd_link_check_relocs (abfd, &link_info))
6842	  {
6843	    /* No object output, fail return.  */
6844	    config.make_executable = FALSE;
6845	    /* Note: we do not abort the loop, but rather
6846	       continue the scan in case there are other
6847	       bad relocations to report.  */
6848	  }
6849    }
6850}
6851
6852void
6853lang_process (void)
6854{
6855  /* Finalize dynamic list.  */
6856  if (link_info.dynamic_list)
6857    lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6858
6859  current_target = default_target;
6860
6861  /* Open the output file.  */
6862  lang_for_each_statement (ldlang_open_output);
6863  init_opb ();
6864
6865  ldemul_create_output_section_statements ();
6866
6867  /* Add to the hash table all undefineds on the command line.  */
6868  lang_place_undefineds ();
6869
6870  if (!bfd_section_already_linked_table_init ())
6871    einfo (_("%P%F: Failed to create hash table\n"));
6872
6873  /* Create a bfd for each input file.  */
6874  current_target = default_target;
6875  open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
6876
6877#ifdef ENABLE_PLUGINS
6878  if (link_info.lto_plugin_active)
6879    {
6880      lang_statement_list_type added;
6881      lang_statement_list_type files, inputfiles;
6882
6883      /* Now all files are read, let the plugin(s) decide if there
6884	 are any more to be added to the link before we call the
6885	 emulation's after_open hook.  We create a private list of
6886	 input statements for this purpose, which we will eventually
6887	 insert into the global statement list after the first claimed
6888	 file.  */
6889      added = *stat_ptr;
6890      /* We need to manipulate all three chains in synchrony.  */
6891      files = file_chain;
6892      inputfiles = input_file_chain;
6893      if (plugin_call_all_symbols_read ())
6894	einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6895	       plugin_error_plugin ());
6896      /* Open any newly added files, updating the file chains.  */
6897      open_input_bfds (*added.tail, OPEN_BFD_NORMAL);
6898      /* Restore the global list pointer now they have all been added.  */
6899      lang_list_remove_tail (stat_ptr, &added);
6900      /* And detach the fresh ends of the file lists.  */
6901      lang_list_remove_tail (&file_chain, &files);
6902      lang_list_remove_tail (&input_file_chain, &inputfiles);
6903      /* Were any new files added?  */
6904      if (added.head != NULL)
6905	{
6906	  /* If so, we will insert them into the statement list immediately
6907	     after the first input file that was claimed by the plugin.  */
6908	  plugin_insert = find_replacements_insert_point ();
6909	  /* If a plugin adds input files without having claimed any, we
6910	     don't really have a good idea where to place them.  Just putting
6911	     them at the start or end of the list is liable to leave them
6912	     outside the crtbegin...crtend range.  */
6913	  ASSERT (plugin_insert != NULL);
6914	  /* Splice the new statement list into the old one.  */
6915	  lang_list_insert_after (stat_ptr, &added,
6916				  &plugin_insert->header.next);
6917	  /* Likewise for the file chains.  */
6918	  lang_list_insert_after (&input_file_chain, &inputfiles,
6919				  &plugin_insert->next_real_file);
6920	  /* We must be careful when relinking file_chain; we may need to
6921	     insert the new files at the head of the list if the insert
6922	     point chosen is the dummy first input file.  */
6923	  if (plugin_insert->filename)
6924	    lang_list_insert_after (&file_chain, &files, &plugin_insert->next);
6925	  else
6926	    lang_list_insert_after (&file_chain, &files, &file_chain.head);
6927
6928	  /* Rescan archives in case new undefined symbols have appeared.  */
6929	  open_input_bfds (statement_list.head, OPEN_BFD_RESCAN);
6930	}
6931    }
6932#endif /* ENABLE_PLUGINS */
6933
6934  /* Make sure that nobody has tried to add a symbol to this list
6935     before now.  */
6936  ASSERT (link_info.gc_sym_list == NULL);
6937
6938  link_info.gc_sym_list = &entry_symbol;
6939
6940  if (entry_symbol.name == NULL)
6941    {
6942      link_info.gc_sym_list = ldlang_undef_chain_list_head;
6943
6944      /* entry_symbol is normally initialied by a ENTRY definition in the
6945	 linker script or the -e command line option.  But if neither of
6946	 these have been used, the target specific backend may still have
6947	 provided an entry symbol via a call to lang_default_entry().
6948	 Unfortunately this value will not be processed until lang_end()
6949	 is called, long after this function has finished.  So detect this
6950	 case here and add the target's entry symbol to the list of starting
6951	 points for garbage collection resolution.  */
6952      lang_add_gc_name (entry_symbol_default);
6953    }
6954
6955  lang_add_gc_name (link_info.init_function);
6956  lang_add_gc_name (link_info.fini_function);
6957
6958  ldemul_after_open ();
6959  if (config.map_file != NULL)
6960    lang_print_asneeded ();
6961
6962  bfd_section_already_linked_table_free ();
6963
6964  /* Make sure that we're not mixing architectures.  We call this
6965     after all the input files have been opened, but before we do any
6966     other processing, so that any operations merge_private_bfd_data
6967     does on the output file will be known during the rest of the
6968     link.  */
6969  lang_check ();
6970
6971  /* Handle .exports instead of a version script if we're told to do so.  */
6972  if (command_line.version_exports_section)
6973    lang_do_version_exports_section ();
6974
6975  /* Build all sets based on the information gathered from the input
6976     files.  */
6977  ldctor_build_sets ();
6978
6979  /* PR 13683: We must rerun the assignments prior to running garbage
6980     collection in order to make sure that all symbol aliases are resolved.  */
6981  lang_do_assignments (lang_mark_phase_enum);
6982
6983  lang_do_memory_regions();
6984  expld.phase = lang_first_phase_enum;
6985
6986  /* Size up the common data.  */
6987  lang_common ();
6988
6989  /* Remove unreferenced sections if asked to.  */
6990  lang_gc_sections ();
6991
6992  /* Check relocations.  */
6993  lang_check_relocs ();
6994
6995  /* Update wild statements.  */
6996  update_wild_statements (statement_list.head);
6997
6998  /* Run through the contours of the script and attach input sections
6999     to the correct output sections.  */
7000  lang_statement_iteration++;
7001  map_input_to_output_sections (statement_list.head, NULL, NULL);
7002
7003  process_insert_statements ();
7004
7005  /* Find any sections not attached explicitly and handle them.  */
7006  lang_place_orphans ();
7007
7008  if (!bfd_link_relocatable (&link_info))
7009    {
7010      asection *found;
7011
7012      /* Merge SEC_MERGE sections.  This has to be done after GC of
7013	 sections, so that GCed sections are not merged, but before
7014	 assigning dynamic symbols, since removing whole input sections
7015	 is hard then.  */
7016      bfd_merge_sections (link_info.output_bfd, &link_info);
7017
7018      /* Look for a text section and set the readonly attribute in it.  */
7019      found = bfd_get_section_by_name (link_info.output_bfd, ".text");
7020
7021      if (found != NULL)
7022	{
7023	  if (config.text_read_only)
7024	    found->flags |= SEC_READONLY;
7025	  else
7026	    found->flags &= ~SEC_READONLY;
7027	}
7028    }
7029
7030  /* Do anything special before sizing sections.  This is where ELF
7031     and other back-ends size dynamic sections.  */
7032  ldemul_before_allocation ();
7033
7034  /* We must record the program headers before we try to fix the
7035     section positions, since they will affect SIZEOF_HEADERS.  */
7036  lang_record_phdrs ();
7037
7038  /* Check relro sections.  */
7039  if (link_info.relro && !bfd_link_relocatable (&link_info))
7040    lang_find_relro_sections ();
7041
7042  /* Size up the sections.  */
7043  lang_size_sections (NULL, !RELAXATION_ENABLED);
7044
7045  /* See if anything special should be done now we know how big
7046     everything is.  This is where relaxation is done.  */
7047  ldemul_after_allocation ();
7048
7049  /* Fix any .startof. or .sizeof. symbols.  */
7050  lang_set_startof ();
7051
7052  /* Do all the assignments, now that we know the final resting places
7053     of all the symbols.  */
7054  lang_do_assignments (lang_final_phase_enum);
7055
7056  ldemul_finish ();
7057
7058  /* Convert absolute symbols to section relative.  */
7059  ldexp_finalize_syms ();
7060
7061  /* Make sure that the section addresses make sense.  */
7062  if (command_line.check_section_addresses)
7063    lang_check_section_addresses ();
7064
7065  /* Check any required symbols are known.  */
7066  ldlang_check_require_defined_symbols ();
7067
7068  lang_end ();
7069}
7070
7071/* EXPORTED TO YACC */
7072
7073void
7074lang_add_wild (struct wildcard_spec *filespec,
7075	       struct wildcard_list *section_list,
7076	       bfd_boolean keep_sections)
7077{
7078  struct wildcard_list *curr, *next;
7079  lang_wild_statement_type *new_stmt;
7080
7081  /* Reverse the list as the parser puts it back to front.  */
7082  for (curr = section_list, section_list = NULL;
7083       curr != NULL;
7084       section_list = curr, curr = next)
7085    {
7086      if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
7087	placed_commons = TRUE;
7088
7089      next = curr->next;
7090      curr->next = section_list;
7091    }
7092
7093  if (filespec != NULL && filespec->name != NULL)
7094    {
7095      if (strcmp (filespec->name, "*") == 0)
7096	filespec->name = NULL;
7097      else if (!wildcardp (filespec->name))
7098	lang_has_input_file = TRUE;
7099    }
7100
7101  new_stmt = new_stat (lang_wild_statement, stat_ptr);
7102  new_stmt->filename = NULL;
7103  new_stmt->filenames_sorted = FALSE;
7104  new_stmt->section_flag_list = NULL;
7105  new_stmt->exclude_name_list = NULL;
7106  if (filespec != NULL)
7107    {
7108      new_stmt->filename = filespec->name;
7109      new_stmt->filenames_sorted = filespec->sorted == by_name;
7110      new_stmt->section_flag_list = filespec->section_flag_list;
7111      new_stmt->exclude_name_list = filespec->exclude_name_list;
7112    }
7113  new_stmt->section_list = section_list;
7114  new_stmt->keep_sections = keep_sections;
7115  lang_list_init (&new_stmt->children);
7116  analyze_walk_wild_section_handler (new_stmt);
7117}
7118
7119void
7120lang_section_start (const char *name, etree_type *address,
7121		    const segment_type *segment)
7122{
7123  lang_address_statement_type *ad;
7124
7125  ad = new_stat (lang_address_statement, stat_ptr);
7126  ad->section_name = name;
7127  ad->address = address;
7128  ad->segment = segment;
7129}
7130
7131/* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
7132   because of a -e argument on the command line, or zero if this is
7133   called by ENTRY in a linker script.  Command line arguments take
7134   precedence.  */
7135
7136void
7137lang_add_entry (const char *name, bfd_boolean cmdline)
7138{
7139  if (entry_symbol.name == NULL
7140      || cmdline
7141      || !entry_from_cmdline)
7142    {
7143      entry_symbol.name = name;
7144      entry_from_cmdline = cmdline;
7145    }
7146}
7147
7148/* Set the default start symbol to NAME.  .em files should use this,
7149   not lang_add_entry, to override the use of "start" if neither the
7150   linker script nor the command line specifies an entry point.  NAME
7151   must be permanently allocated.  */
7152void
7153lang_default_entry (const char *name)
7154{
7155  entry_symbol_default = name;
7156}
7157
7158void
7159lang_add_target (const char *name)
7160{
7161  lang_target_statement_type *new_stmt;
7162
7163  new_stmt = new_stat (lang_target_statement, stat_ptr);
7164  new_stmt->target = name;
7165}
7166
7167void
7168lang_add_map (const char *name)
7169{
7170  while (*name)
7171    {
7172      switch (*name)
7173	{
7174	case 'F':
7175	  map_option_f = TRUE;
7176	  break;
7177	}
7178      name++;
7179    }
7180}
7181
7182void
7183lang_add_fill (fill_type *fill)
7184{
7185  lang_fill_statement_type *new_stmt;
7186
7187  new_stmt = new_stat (lang_fill_statement, stat_ptr);
7188  new_stmt->fill = fill;
7189}
7190
7191void
7192lang_add_data (int type, union etree_union *exp)
7193{
7194  lang_data_statement_type *new_stmt;
7195
7196  new_stmt = new_stat (lang_data_statement, stat_ptr);
7197  new_stmt->exp = exp;
7198  new_stmt->type = type;
7199}
7200
7201/* Create a new reloc statement.  RELOC is the BFD relocation type to
7202   generate.  HOWTO is the corresponding howto structure (we could
7203   look this up, but the caller has already done so).  SECTION is the
7204   section to generate a reloc against, or NAME is the name of the
7205   symbol to generate a reloc against.  Exactly one of SECTION and
7206   NAME must be NULL.  ADDEND is an expression for the addend.  */
7207
7208void
7209lang_add_reloc (bfd_reloc_code_real_type reloc,
7210		reloc_howto_type *howto,
7211		asection *section,
7212		const char *name,
7213		union etree_union *addend)
7214{
7215  lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
7216
7217  p->reloc = reloc;
7218  p->howto = howto;
7219  p->section = section;
7220  p->name = name;
7221  p->addend_exp = addend;
7222
7223  p->addend_value = 0;
7224  p->output_section = NULL;
7225  p->output_offset = 0;
7226}
7227
7228lang_assignment_statement_type *
7229lang_add_assignment (etree_type *exp)
7230{
7231  lang_assignment_statement_type *new_stmt;
7232
7233  new_stmt = new_stat (lang_assignment_statement, stat_ptr);
7234  new_stmt->exp = exp;
7235  return new_stmt;
7236}
7237
7238void
7239lang_add_attribute (enum statement_enum attribute)
7240{
7241  new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
7242}
7243
7244void
7245lang_startup (const char *name)
7246{
7247  if (first_file->filename != NULL)
7248    {
7249      einfo (_("%P%F: multiple STARTUP files\n"));
7250    }
7251  first_file->filename = name;
7252  first_file->local_sym_name = name;
7253  first_file->flags.real = TRUE;
7254}
7255
7256void
7257lang_float (bfd_boolean maybe)
7258{
7259  lang_float_flag = maybe;
7260}
7261
7262
7263/* Work out the load- and run-time regions from a script statement, and
7264   store them in *LMA_REGION and *REGION respectively.
7265
7266   MEMSPEC is the name of the run-time region, or the value of
7267   DEFAULT_MEMORY_REGION if the statement didn't specify one.
7268   LMA_MEMSPEC is the name of the load-time region, or null if the
7269   statement didn't specify one.HAVE_LMA_P is TRUE if the statement
7270   had an explicit load address.
7271
7272   It is an error to specify both a load region and a load address.  */
7273
7274static void
7275lang_get_regions (lang_memory_region_type **region,
7276		  lang_memory_region_type **lma_region,
7277		  const char *memspec,
7278		  const char *lma_memspec,
7279		  bfd_boolean have_lma,
7280		  bfd_boolean have_vma)
7281{
7282  *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
7283
7284  /* If no runtime region or VMA has been specified, but the load region
7285     has been specified, then use the load region for the runtime region
7286     as well.  */
7287  if (lma_memspec != NULL
7288      && !have_vma
7289      && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
7290    *region = *lma_region;
7291  else
7292    *region = lang_memory_region_lookup (memspec, FALSE);
7293
7294  if (have_lma && lma_memspec != 0)
7295    einfo (_("%X%P:%S: section has both a load address and a load region\n"),
7296	   NULL);
7297}
7298
7299void
7300lang_leave_output_section_statement (fill_type *fill, const char *memspec,
7301				     lang_output_section_phdr_list *phdrs,
7302				     const char *lma_memspec)
7303{
7304  lang_get_regions (&current_section->region,
7305		    &current_section->lma_region,
7306		    memspec, lma_memspec,
7307		    current_section->load_base != NULL,
7308		    current_section->addr_tree != NULL);
7309
7310  /* If this section has no load region or base, but uses the same
7311     region as the previous section, then propagate the previous
7312     section's load region.  */
7313
7314  if (current_section->lma_region == NULL
7315      && current_section->load_base == NULL
7316      && current_section->addr_tree == NULL
7317      && current_section->region == current_section->prev->region)
7318    current_section->lma_region = current_section->prev->lma_region;
7319
7320  current_section->fill = fill;
7321  current_section->phdrs = phdrs;
7322  pop_stat_ptr ();
7323}
7324
7325void
7326lang_statement_append (lang_statement_list_type *list,
7327		       lang_statement_union_type *element,
7328		       lang_statement_union_type **field)
7329{
7330  *(list->tail) = element;
7331  list->tail = field;
7332}
7333
7334/* Set the output format type.  -oformat overrides scripts.  */
7335
7336void
7337lang_add_output_format (const char *format,
7338			const char *big,
7339			const char *little,
7340			int from_script)
7341{
7342  if (output_target == NULL || !from_script)
7343    {
7344      if (command_line.endian == ENDIAN_BIG
7345	  && big != NULL)
7346	format = big;
7347      else if (command_line.endian == ENDIAN_LITTLE
7348	       && little != NULL)
7349	format = little;
7350
7351      output_target = format;
7352    }
7353}
7354
7355void
7356lang_add_insert (const char *where, int is_before)
7357{
7358  lang_insert_statement_type *new_stmt;
7359
7360  new_stmt = new_stat (lang_insert_statement, stat_ptr);
7361  new_stmt->where = where;
7362  new_stmt->is_before = is_before;
7363  saved_script_handle = previous_script_handle;
7364}
7365
7366/* Enter a group.  This creates a new lang_group_statement, and sets
7367   stat_ptr to build new statements within the group.  */
7368
7369void
7370lang_enter_group (void)
7371{
7372  lang_group_statement_type *g;
7373
7374  g = new_stat (lang_group_statement, stat_ptr);
7375  lang_list_init (&g->children);
7376  push_stat_ptr (&g->children);
7377}
7378
7379/* Leave a group.  This just resets stat_ptr to start writing to the
7380   regular list of statements again.  Note that this will not work if
7381   groups can occur inside anything else which can adjust stat_ptr,
7382   but currently they can't.  */
7383
7384void
7385lang_leave_group (void)
7386{
7387  pop_stat_ptr ();
7388}
7389
7390/* Add a new program header.  This is called for each entry in a PHDRS
7391   command in a linker script.  */
7392
7393void
7394lang_new_phdr (const char *name,
7395	       etree_type *type,
7396	       bfd_boolean filehdr,
7397	       bfd_boolean phdrs,
7398	       etree_type *at,
7399	       etree_type *flags)
7400{
7401  struct lang_phdr *n, **pp;
7402  bfd_boolean hdrs;
7403
7404  n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
7405  n->next = NULL;
7406  n->name = name;
7407  n->type = exp_get_value_int (type, 0, "program header type");
7408  n->filehdr = filehdr;
7409  n->phdrs = phdrs;
7410  n->at = at;
7411  n->flags = flags;
7412
7413  hdrs = n->type == 1 && (phdrs || filehdr);
7414
7415  for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
7416    if (hdrs
7417	&& (*pp)->type == 1
7418	&& !((*pp)->filehdr || (*pp)->phdrs))
7419      {
7420	einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported"
7421		 " when prior PT_LOAD headers lack them\n"), NULL);
7422	hdrs = FALSE;
7423      }
7424
7425  *pp = n;
7426}
7427
7428/* Record the program header information in the output BFD.  FIXME: We
7429   should not be calling an ELF specific function here.  */
7430
7431static void
7432lang_record_phdrs (void)
7433{
7434  unsigned int alc;
7435  asection **secs;
7436  lang_output_section_phdr_list *last;
7437  struct lang_phdr *l;
7438  lang_output_section_statement_type *os;
7439
7440  alc = 10;
7441  secs = (asection **) xmalloc (alc * sizeof (asection *));
7442  last = NULL;
7443
7444  for (l = lang_phdr_list; l != NULL; l = l->next)
7445    {
7446      unsigned int c;
7447      flagword flags;
7448      bfd_vma at;
7449
7450      c = 0;
7451      for (os = &lang_output_section_statement.head->output_section_statement;
7452	   os != NULL;
7453	   os = os->next)
7454	{
7455	  lang_output_section_phdr_list *pl;
7456
7457	  if (os->constraint < 0)
7458	    continue;
7459
7460	  pl = os->phdrs;
7461	  if (pl != NULL)
7462	    last = pl;
7463	  else
7464	    {
7465	      if (os->sectype == noload_section
7466		  || os->bfd_section == NULL
7467		  || (os->bfd_section->flags & SEC_ALLOC) == 0)
7468		continue;
7469
7470	      /* Don't add orphans to PT_INTERP header.  */
7471	      if (l->type == 3)
7472		continue;
7473
7474	      if (last == NULL)
7475		{
7476		  lang_output_section_statement_type *tmp_os;
7477
7478		  /* If we have not run across a section with a program
7479		     header assigned to it yet, then scan forwards to find
7480		     one.  This prevents inconsistencies in the linker's
7481		     behaviour when a script has specified just a single
7482		     header and there are sections in that script which are
7483		     not assigned to it, and which occur before the first
7484		     use of that header. See here for more details:
7485		     http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7486		  for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7487		    if (tmp_os->phdrs)
7488		      {
7489			last = tmp_os->phdrs;
7490			break;
7491		      }
7492		  if (last == NULL)
7493		    einfo (_("%F%P: no sections assigned to phdrs\n"));
7494		}
7495	      pl = last;
7496	    }
7497
7498	  if (os->bfd_section == NULL)
7499	    continue;
7500
7501	  for (; pl != NULL; pl = pl->next)
7502	    {
7503	      if (strcmp (pl->name, l->name) == 0)
7504		{
7505		  if (c >= alc)
7506		    {
7507		      alc *= 2;
7508		      secs = (asection **) xrealloc (secs,
7509						     alc * sizeof (asection *));
7510		    }
7511		  secs[c] = os->bfd_section;
7512		  ++c;
7513		  pl->used = TRUE;
7514		}
7515	    }
7516	}
7517
7518      if (l->flags == NULL)
7519	flags = 0;
7520      else
7521	flags = exp_get_vma (l->flags, 0, "phdr flags");
7522
7523      if (l->at == NULL)
7524	at = 0;
7525      else
7526	at = exp_get_vma (l->at, 0, "phdr load address");
7527
7528      if (!bfd_record_phdr (link_info.output_bfd, l->type,
7529			    l->flags != NULL, flags, l->at != NULL,
7530			    at, l->filehdr, l->phdrs, c, secs))
7531	einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7532    }
7533
7534  free (secs);
7535
7536  /* Make sure all the phdr assignments succeeded.  */
7537  for (os = &lang_output_section_statement.head->output_section_statement;
7538       os != NULL;
7539       os = os->next)
7540    {
7541      lang_output_section_phdr_list *pl;
7542
7543      if (os->constraint < 0
7544	  || os->bfd_section == NULL)
7545	continue;
7546
7547      for (pl = os->phdrs;
7548	   pl != NULL;
7549	   pl = pl->next)
7550	if (!pl->used && strcmp (pl->name, "NONE") != 0)
7551	  einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7552		 os->name, pl->name);
7553    }
7554}
7555
7556/* Record a list of sections which may not be cross referenced.  */
7557
7558void
7559lang_add_nocrossref (lang_nocrossref_type *l)
7560{
7561  struct lang_nocrossrefs *n;
7562
7563  n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7564  n->next = nocrossref_list;
7565  n->list = l;
7566  n->onlyfirst = FALSE;
7567  nocrossref_list = n;
7568
7569  /* Set notice_all so that we get informed about all symbols.  */
7570  link_info.notice_all = TRUE;
7571}
7572
7573/* Record a section that cannot be referenced from a list of sections.  */
7574
7575void
7576lang_add_nocrossref_to (lang_nocrossref_type *l)
7577{
7578  lang_add_nocrossref (l);
7579  nocrossref_list->onlyfirst = TRUE;
7580}
7581
7582/* Overlay handling.  We handle overlays with some static variables.  */
7583
7584/* The overlay virtual address.  */
7585static etree_type *overlay_vma;
7586/* And subsection alignment.  */
7587static etree_type *overlay_subalign;
7588
7589/* An expression for the maximum section size seen so far.  */
7590static etree_type *overlay_max;
7591
7592/* A list of all the sections in this overlay.  */
7593
7594struct overlay_list {
7595  struct overlay_list *next;
7596  lang_output_section_statement_type *os;
7597};
7598
7599static struct overlay_list *overlay_list;
7600
7601/* Start handling an overlay.  */
7602
7603void
7604lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7605{
7606  /* The grammar should prevent nested overlays from occurring.  */
7607  ASSERT (overlay_vma == NULL
7608	  && overlay_subalign == NULL
7609	  && overlay_max == NULL);
7610
7611  overlay_vma = vma_expr;
7612  overlay_subalign = subalign;
7613}
7614
7615/* Start a section in an overlay.  We handle this by calling
7616   lang_enter_output_section_statement with the correct VMA.
7617   lang_leave_overlay sets up the LMA and memory regions.  */
7618
7619void
7620lang_enter_overlay_section (const char *name)
7621{
7622  struct overlay_list *n;
7623  etree_type *size;
7624
7625  lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7626				       0, overlay_subalign, 0, 0, 0);
7627
7628  /* If this is the first section, then base the VMA of future
7629     sections on this one.  This will work correctly even if `.' is
7630     used in the addresses.  */
7631  if (overlay_list == NULL)
7632    overlay_vma = exp_nameop (ADDR, name);
7633
7634  /* Remember the section.  */
7635  n = (struct overlay_list *) xmalloc (sizeof *n);
7636  n->os = current_section;
7637  n->next = overlay_list;
7638  overlay_list = n;
7639
7640  size = exp_nameop (SIZEOF, name);
7641
7642  /* Arrange to work out the maximum section end address.  */
7643  if (overlay_max == NULL)
7644    overlay_max = size;
7645  else
7646    overlay_max = exp_binop (MAX_K, overlay_max, size);
7647}
7648
7649/* Finish a section in an overlay.  There isn't any special to do
7650   here.  */
7651
7652void
7653lang_leave_overlay_section (fill_type *fill,
7654			    lang_output_section_phdr_list *phdrs)
7655{
7656  const char *name;
7657  char *clean, *s2;
7658  const char *s1;
7659  char *buf;
7660
7661  name = current_section->name;
7662
7663  /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7664     region and that no load-time region has been specified.  It doesn't
7665     really matter what we say here, since lang_leave_overlay will
7666     override it.  */
7667  lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7668
7669  /* Define the magic symbols.  */
7670
7671  clean = (char *) xmalloc (strlen (name) + 1);
7672  s2 = clean;
7673  for (s1 = name; *s1 != '\0'; s1++)
7674    if (ISALNUM (*s1) || *s1 == '_')
7675      *s2++ = *s1;
7676  *s2 = '\0';
7677
7678  buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7679  sprintf (buf, "__load_start_%s", clean);
7680  lang_add_assignment (exp_provide (buf,
7681				    exp_nameop (LOADADDR, name),
7682				    FALSE));
7683
7684  buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7685  sprintf (buf, "__load_stop_%s", clean);
7686  lang_add_assignment (exp_provide (buf,
7687				    exp_binop ('+',
7688					       exp_nameop (LOADADDR, name),
7689					       exp_nameop (SIZEOF, name)),
7690				    FALSE));
7691
7692  free (clean);
7693}
7694
7695/* Finish an overlay.  If there are any overlay wide settings, this
7696   looks through all the sections in the overlay and sets them.  */
7697
7698void
7699lang_leave_overlay (etree_type *lma_expr,
7700		    int nocrossrefs,
7701		    fill_type *fill,
7702		    const char *memspec,
7703		    lang_output_section_phdr_list *phdrs,
7704		    const char *lma_memspec)
7705{
7706  lang_memory_region_type *region;
7707  lang_memory_region_type *lma_region;
7708  struct overlay_list *l;
7709  lang_nocrossref_type *nocrossref;
7710
7711  lang_get_regions (&region, &lma_region,
7712		    memspec, lma_memspec,
7713		    lma_expr != NULL, FALSE);
7714
7715  nocrossref = NULL;
7716
7717  /* After setting the size of the last section, set '.' to end of the
7718     overlay region.  */
7719  if (overlay_list != NULL)
7720    {
7721      overlay_list->os->update_dot = 1;
7722      overlay_list->os->update_dot_tree
7723	= exp_assign (".", exp_binop ('+', overlay_vma, overlay_max), FALSE);
7724    }
7725
7726  l = overlay_list;
7727  while (l != NULL)
7728    {
7729      struct overlay_list *next;
7730
7731      if (fill != NULL && l->os->fill == NULL)
7732	l->os->fill = fill;
7733
7734      l->os->region = region;
7735      l->os->lma_region = lma_region;
7736
7737      /* The first section has the load address specified in the
7738	 OVERLAY statement.  The rest are worked out from that.
7739	 The base address is not needed (and should be null) if
7740	 an LMA region was specified.  */
7741      if (l->next == 0)
7742	{
7743	  l->os->load_base = lma_expr;
7744	  l->os->sectype = normal_section;
7745	}
7746      if (phdrs != NULL && l->os->phdrs == NULL)
7747	l->os->phdrs = phdrs;
7748
7749      if (nocrossrefs)
7750	{
7751	  lang_nocrossref_type *nc;
7752
7753	  nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7754	  nc->name = l->os->name;
7755	  nc->next = nocrossref;
7756	  nocrossref = nc;
7757	}
7758
7759      next = l->next;
7760      free (l);
7761      l = next;
7762    }
7763
7764  if (nocrossref != NULL)
7765    lang_add_nocrossref (nocrossref);
7766
7767  overlay_vma = NULL;
7768  overlay_list = NULL;
7769  overlay_max = NULL;
7770}
7771
7772/* Version handling.  This is only useful for ELF.  */
7773
7774/* If PREV is NULL, return first version pattern matching particular symbol.
7775   If PREV is non-NULL, return first version pattern matching particular
7776   symbol after PREV (previously returned by lang_vers_match).  */
7777
7778static struct bfd_elf_version_expr *
7779lang_vers_match (struct bfd_elf_version_expr_head *head,
7780		 struct bfd_elf_version_expr *prev,
7781		 const char *sym)
7782{
7783  const char *c_sym;
7784  const char *cxx_sym = sym;
7785  const char *java_sym = sym;
7786  struct bfd_elf_version_expr *expr = NULL;
7787  enum demangling_styles curr_style;
7788
7789  curr_style = CURRENT_DEMANGLING_STYLE;
7790  cplus_demangle_set_style (no_demangling);
7791  c_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_NO_OPTS);
7792  if (!c_sym)
7793    c_sym = sym;
7794  cplus_demangle_set_style (curr_style);
7795
7796  if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7797    {
7798      cxx_sym = bfd_demangle (link_info.output_bfd, sym,
7799			      DMGL_PARAMS | DMGL_ANSI);
7800      if (!cxx_sym)
7801	cxx_sym = sym;
7802    }
7803  if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7804    {
7805      java_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_JAVA);
7806      if (!java_sym)
7807	java_sym = sym;
7808    }
7809
7810  if (head->htab && (prev == NULL || prev->literal))
7811    {
7812      struct bfd_elf_version_expr e;
7813
7814      switch (prev ? prev->mask : 0)
7815	{
7816	case 0:
7817	  if (head->mask & BFD_ELF_VERSION_C_TYPE)
7818	    {
7819	      e.pattern = c_sym;
7820	      expr = (struct bfd_elf_version_expr *)
7821		  htab_find ((htab_t) head->htab, &e);
7822	      while (expr && strcmp (expr->pattern, c_sym) == 0)
7823		if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7824		  goto out_ret;
7825		else
7826		  expr = expr->next;
7827	    }
7828	  /* Fallthrough */
7829	case BFD_ELF_VERSION_C_TYPE:
7830	  if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7831	    {
7832	      e.pattern = cxx_sym;
7833	      expr = (struct bfd_elf_version_expr *)
7834		  htab_find ((htab_t) head->htab, &e);
7835	      while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7836		if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7837		  goto out_ret;
7838		else
7839		  expr = expr->next;
7840	    }
7841	  /* Fallthrough */
7842	case BFD_ELF_VERSION_CXX_TYPE:
7843	  if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7844	    {
7845	      e.pattern = java_sym;
7846	      expr = (struct bfd_elf_version_expr *)
7847		  htab_find ((htab_t) head->htab, &e);
7848	      while (expr && strcmp (expr->pattern, java_sym) == 0)
7849		if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7850		  goto out_ret;
7851		else
7852		  expr = expr->next;
7853	    }
7854	  /* Fallthrough */
7855	default:
7856	  break;
7857	}
7858    }
7859
7860  /* Finally, try the wildcards.  */
7861  if (prev == NULL || prev->literal)
7862    expr = head->remaining;
7863  else
7864    expr = prev->next;
7865  for (; expr; expr = expr->next)
7866    {
7867      const char *s;
7868
7869      if (!expr->pattern)
7870	continue;
7871
7872      if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7873	break;
7874
7875      if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7876	s = java_sym;
7877      else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7878	s = cxx_sym;
7879      else
7880	s = c_sym;
7881      if (fnmatch (expr->pattern, s, 0) == 0)
7882	break;
7883    }
7884
7885 out_ret:
7886  if (c_sym != sym)
7887    free ((char *) c_sym);
7888  if (cxx_sym != sym)
7889    free ((char *) cxx_sym);
7890  if (java_sym != sym)
7891    free ((char *) java_sym);
7892  return expr;
7893}
7894
7895/* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7896   return a pointer to the symbol name with any backslash quotes removed.  */
7897
7898static const char *
7899realsymbol (const char *pattern)
7900{
7901  const char *p;
7902  bfd_boolean changed = FALSE, backslash = FALSE;
7903  char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7904
7905  for (p = pattern, s = symbol; *p != '\0'; ++p)
7906    {
7907      /* It is a glob pattern only if there is no preceding
7908	 backslash.  */
7909      if (backslash)
7910	{
7911	  /* Remove the preceding backslash.  */
7912	  *(s - 1) = *p;
7913	  backslash = FALSE;
7914	  changed = TRUE;
7915	}
7916      else
7917	{
7918	  if (*p == '?' || *p == '*' || *p == '[')
7919	    {
7920	      free (symbol);
7921	      return NULL;
7922	    }
7923
7924	  *s++ = *p;
7925	  backslash = *p == '\\';
7926	}
7927    }
7928
7929  if (changed)
7930    {
7931      *s = '\0';
7932      return symbol;
7933    }
7934  else
7935    {
7936      free (symbol);
7937      return pattern;
7938    }
7939}
7940
7941/* This is called for each variable name or match expression.  NEW_NAME is
7942   the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7943   pattern to be matched against symbol names.  */
7944
7945struct bfd_elf_version_expr *
7946lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7947		       const char *new_name,
7948		       const char *lang,
7949		       bfd_boolean literal_p)
7950{
7951  struct bfd_elf_version_expr *ret;
7952
7953  ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7954  ret->next = orig;
7955  ret->symver = 0;
7956  ret->script = 0;
7957  ret->literal = TRUE;
7958  ret->pattern = literal_p ? new_name : realsymbol (new_name);
7959  if (ret->pattern == NULL)
7960    {
7961      ret->pattern = new_name;
7962      ret->literal = FALSE;
7963    }
7964
7965  if (lang == NULL || strcasecmp (lang, "C") == 0)
7966    ret->mask = BFD_ELF_VERSION_C_TYPE;
7967  else if (strcasecmp (lang, "C++") == 0)
7968    ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7969  else if (strcasecmp (lang, "Java") == 0)
7970    ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7971  else
7972    {
7973      einfo (_("%X%P: unknown language `%s' in version information\n"),
7974	     lang);
7975      ret->mask = BFD_ELF_VERSION_C_TYPE;
7976    }
7977
7978  return ldemul_new_vers_pattern (ret);
7979}
7980
7981/* This is called for each set of variable names and match
7982   expressions.  */
7983
7984struct bfd_elf_version_tree *
7985lang_new_vers_node (struct bfd_elf_version_expr *globals,
7986		    struct bfd_elf_version_expr *locals)
7987{
7988  struct bfd_elf_version_tree *ret;
7989
7990  ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7991  ret->globals.list = globals;
7992  ret->locals.list = locals;
7993  ret->match = lang_vers_match;
7994  ret->name_indx = (unsigned int) -1;
7995  return ret;
7996}
7997
7998/* This static variable keeps track of version indices.  */
7999
8000static int version_index;
8001
8002static hashval_t
8003version_expr_head_hash (const void *p)
8004{
8005  const struct bfd_elf_version_expr *e =
8006      (const struct bfd_elf_version_expr *) p;
8007
8008  return htab_hash_string (e->pattern);
8009}
8010
8011static int
8012version_expr_head_eq (const void *p1, const void *p2)
8013{
8014  const struct bfd_elf_version_expr *e1 =
8015      (const struct bfd_elf_version_expr *) p1;
8016  const struct bfd_elf_version_expr *e2 =
8017      (const struct bfd_elf_version_expr *) p2;
8018
8019  return strcmp (e1->pattern, e2->pattern) == 0;
8020}
8021
8022static void
8023lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
8024{
8025  size_t count = 0;
8026  struct bfd_elf_version_expr *e, *next;
8027  struct bfd_elf_version_expr **list_loc, **remaining_loc;
8028
8029  for (e = head->list; e; e = e->next)
8030    {
8031      if (e->literal)
8032	count++;
8033      head->mask |= e->mask;
8034    }
8035
8036  if (count)
8037    {
8038      head->htab = htab_create (count * 2, version_expr_head_hash,
8039				version_expr_head_eq, NULL);
8040      list_loc = &head->list;
8041      remaining_loc = &head->remaining;
8042      for (e = head->list; e; e = next)
8043	{
8044	  next = e->next;
8045	  if (!e->literal)
8046	    {
8047	      *remaining_loc = e;
8048	      remaining_loc = &e->next;
8049	    }
8050	  else
8051	    {
8052	      void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
8053
8054	      if (*loc)
8055		{
8056		  struct bfd_elf_version_expr *e1, *last;
8057
8058		  e1 = (struct bfd_elf_version_expr *) *loc;
8059		  last = NULL;
8060		  do
8061		    {
8062		      if (e1->mask == e->mask)
8063			{
8064			  last = NULL;
8065			  break;
8066			}
8067		      last = e1;
8068		      e1 = e1->next;
8069		    }
8070		  while (e1 && strcmp (e1->pattern, e->pattern) == 0);
8071
8072		  if (last == NULL)
8073		    {
8074		      /* This is a duplicate.  */
8075		      /* FIXME: Memory leak.  Sometimes pattern is not
8076			 xmalloced alone, but in larger chunk of memory.  */
8077		      /* free (e->pattern); */
8078		      free (e);
8079		    }
8080		  else
8081		    {
8082		      e->next = last->next;
8083		      last->next = e;
8084		    }
8085		}
8086	      else
8087		{
8088		  *loc = e;
8089		  *list_loc = e;
8090		  list_loc = &e->next;
8091		}
8092	    }
8093	}
8094      *remaining_loc = NULL;
8095      *list_loc = head->remaining;
8096    }
8097  else
8098    head->remaining = head->list;
8099}
8100
8101/* This is called when we know the name and dependencies of the
8102   version.  */
8103
8104void
8105lang_register_vers_node (const char *name,
8106			 struct bfd_elf_version_tree *version,
8107			 struct bfd_elf_version_deps *deps)
8108{
8109  struct bfd_elf_version_tree *t, **pp;
8110  struct bfd_elf_version_expr *e1;
8111
8112  if (name == NULL)
8113    name = "";
8114
8115  if (link_info.version_info != NULL
8116      && (name[0] == '\0' || link_info.version_info->name[0] == '\0'))
8117    {
8118      einfo (_("%X%P: anonymous version tag cannot be combined"
8119	       " with other version tags\n"));
8120      free (version);
8121      return;
8122    }
8123
8124  /* Make sure this node has a unique name.  */
8125  for (t = link_info.version_info; t != NULL; t = t->next)
8126    if (strcmp (t->name, name) == 0)
8127      einfo (_("%X%P: duplicate version tag `%s'\n"), name);
8128
8129  lang_finalize_version_expr_head (&version->globals);
8130  lang_finalize_version_expr_head (&version->locals);
8131
8132  /* Check the global and local match names, and make sure there
8133     aren't any duplicates.  */
8134
8135  for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
8136    {
8137      for (t = link_info.version_info; t != NULL; t = t->next)
8138	{
8139	  struct bfd_elf_version_expr *e2;
8140
8141	  if (t->locals.htab && e1->literal)
8142	    {
8143	      e2 = (struct bfd_elf_version_expr *)
8144		  htab_find ((htab_t) t->locals.htab, e1);
8145	      while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
8146		{
8147		  if (e1->mask == e2->mask)
8148		    einfo (_("%X%P: duplicate expression `%s'"
8149			     " in version information\n"), e1->pattern);
8150		  e2 = e2->next;
8151		}
8152	    }
8153	  else if (!e1->literal)
8154	    for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
8155	      if (strcmp (e1->pattern, e2->pattern) == 0
8156		  && e1->mask == e2->mask)
8157		einfo (_("%X%P: duplicate expression `%s'"
8158			 " in version information\n"), e1->pattern);
8159	}
8160    }
8161
8162  for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
8163    {
8164      for (t = link_info.version_info; t != NULL; t = t->next)
8165	{
8166	  struct bfd_elf_version_expr *e2;
8167
8168	  if (t->globals.htab && e1->literal)
8169	    {
8170	      e2 = (struct bfd_elf_version_expr *)
8171		  htab_find ((htab_t) t->globals.htab, e1);
8172	      while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
8173		{
8174		  if (e1->mask == e2->mask)
8175		    einfo (_("%X%P: duplicate expression `%s'"
8176			     " in version information\n"),
8177			   e1->pattern);
8178		  e2 = e2->next;
8179		}
8180	    }
8181	  else if (!e1->literal)
8182	    for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
8183	      if (strcmp (e1->pattern, e2->pattern) == 0
8184		  && e1->mask == e2->mask)
8185		einfo (_("%X%P: duplicate expression `%s'"
8186			 " in version information\n"), e1->pattern);
8187	}
8188    }
8189
8190  version->deps = deps;
8191  version->name = name;
8192  if (name[0] != '\0')
8193    {
8194      ++version_index;
8195      version->vernum = version_index;
8196    }
8197  else
8198    version->vernum = 0;
8199
8200  for (pp = &link_info.version_info; *pp != NULL; pp = &(*pp)->next)
8201    ;
8202  *pp = version;
8203}
8204
8205/* This is called when we see a version dependency.  */
8206
8207struct bfd_elf_version_deps *
8208lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
8209{
8210  struct bfd_elf_version_deps *ret;
8211  struct bfd_elf_version_tree *t;
8212
8213  ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
8214  ret->next = list;
8215
8216  for (t = link_info.version_info; t != NULL; t = t->next)
8217    {
8218      if (strcmp (t->name, name) == 0)
8219	{
8220	  ret->version_needed = t;
8221	  return ret;
8222	}
8223    }
8224
8225  einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
8226
8227  ret->version_needed = NULL;
8228  return ret;
8229}
8230
8231static void
8232lang_do_version_exports_section (void)
8233{
8234  struct bfd_elf_version_expr *greg = NULL, *lreg;
8235
8236  LANG_FOR_EACH_INPUT_STATEMENT (is)
8237    {
8238      asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
8239      char *contents, *p;
8240      bfd_size_type len;
8241
8242      if (sec == NULL)
8243	continue;
8244
8245      len = sec->size;
8246      contents = (char *) xmalloc (len);
8247      if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
8248	einfo (_("%X%P: unable to read .exports section contents\n"), sec);
8249
8250      p = contents;
8251      while (p < contents + len)
8252	{
8253	  greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
8254	  p = strchr (p, '\0') + 1;
8255	}
8256
8257      /* Do not free the contents, as we used them creating the regex.  */
8258
8259      /* Do not include this section in the link.  */
8260      sec->flags |= SEC_EXCLUDE | SEC_KEEP;
8261    }
8262
8263  lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
8264  lang_register_vers_node (command_line.version_exports_section,
8265			   lang_new_vers_node (greg, lreg), NULL);
8266}
8267
8268/* Evaluate LENGTH and ORIGIN parts of MEMORY spec */
8269
8270static void
8271lang_do_memory_regions (void)
8272{
8273  lang_memory_region_type *r = lang_memory_region_list;
8274
8275  for (; r != NULL; r = r->next)
8276    {
8277      if (r->origin_exp)
8278	{
8279	  exp_fold_tree_no_dot (r->origin_exp);
8280	  if (expld.result.valid_p)
8281	    {
8282	      r->origin = expld.result.value;
8283	      r->current = r->origin;
8284	    }
8285	  else
8286	    einfo (_("%F%P: invalid origin for memory region %s\n"),
8287		   r->name_list.name);
8288	}
8289      if (r->length_exp)
8290	{
8291	  exp_fold_tree_no_dot (r->length_exp);
8292	  if (expld.result.valid_p)
8293	    r->length = expld.result.value;
8294	  else
8295	    einfo (_("%F%P: invalid length for memory region %s\n"),
8296		   r->name_list.name);
8297	}
8298    }
8299}
8300
8301void
8302lang_add_unique (const char *name)
8303{
8304  struct unique_sections *ent;
8305
8306  for (ent = unique_section_list; ent; ent = ent->next)
8307    if (strcmp (ent->name, name) == 0)
8308      return;
8309
8310  ent = (struct unique_sections *) xmalloc (sizeof *ent);
8311  ent->name = xstrdup (name);
8312  ent->next = unique_section_list;
8313  unique_section_list = ent;
8314}
8315
8316/* Append the list of dynamic symbols to the existing one.  */
8317
8318void
8319lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
8320{
8321  if (link_info.dynamic_list)
8322    {
8323      struct bfd_elf_version_expr *tail;
8324      for (tail = dynamic; tail->next != NULL; tail = tail->next)
8325	;
8326      tail->next = link_info.dynamic_list->head.list;
8327      link_info.dynamic_list->head.list = dynamic;
8328    }
8329  else
8330    {
8331      struct bfd_elf_dynamic_list *d;
8332
8333      d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
8334      d->head.list = dynamic;
8335      d->match = lang_vers_match;
8336      link_info.dynamic_list = d;
8337    }
8338}
8339
8340/* Append the list of C++ typeinfo dynamic symbols to the existing
8341   one.  */
8342
8343void
8344lang_append_dynamic_list_cpp_typeinfo (void)
8345{
8346  const char *symbols[] =
8347    {
8348      "typeinfo name for*",
8349      "typeinfo for*"
8350    };
8351  struct bfd_elf_version_expr *dynamic = NULL;
8352  unsigned int i;
8353
8354  for (i = 0; i < ARRAY_SIZE (symbols); i++)
8355    dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8356				     FALSE);
8357
8358  lang_append_dynamic_list (dynamic);
8359}
8360
8361/* Append the list of C++ operator new and delete dynamic symbols to the
8362   existing one.  */
8363
8364void
8365lang_append_dynamic_list_cpp_new (void)
8366{
8367  const char *symbols[] =
8368    {
8369      "operator new*",
8370      "operator delete*"
8371    };
8372  struct bfd_elf_version_expr *dynamic = NULL;
8373  unsigned int i;
8374
8375  for (i = 0; i < ARRAY_SIZE (symbols); i++)
8376    dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8377				     FALSE);
8378
8379  lang_append_dynamic_list (dynamic);
8380}
8381
8382/* Scan a space and/or comma separated string of features.  */
8383
8384void
8385lang_ld_feature (char *str)
8386{
8387  char *p, *q;
8388
8389  p = str;
8390  while (*p)
8391    {
8392      char sep;
8393      while (*p == ',' || ISSPACE (*p))
8394	++p;
8395      if (!*p)
8396	break;
8397      q = p + 1;
8398      while (*q && *q != ',' && !ISSPACE (*q))
8399	++q;
8400      sep = *q;
8401      *q = 0;
8402      if (strcasecmp (p, "SANE_EXPR") == 0)
8403	config.sane_expr = TRUE;
8404      else
8405	einfo (_("%X%P: unknown feature `%s'\n"), p);
8406      *q = sep;
8407      p = q;
8408    }
8409}
8410
8411/* Pretty print memory amount.  */
8412
8413static void
8414lang_print_memory_size (bfd_vma sz)
8415{
8416  if ((sz & 0x3fffffff) == 0)
8417    printf ("%10" BFD_VMA_FMT "u GB", sz >> 30);
8418  else if ((sz & 0xfffff) == 0)
8419    printf ("%10" BFD_VMA_FMT "u MB", sz >> 20);
8420  else if ((sz & 0x3ff) == 0)
8421    printf ("%10" BFD_VMA_FMT "u KB", sz >> 10);
8422  else
8423    printf (" %10" BFD_VMA_FMT "u B", sz);
8424}
8425
8426/* Implement --print-memory-usage: disply per region memory usage.  */
8427
8428void
8429lang_print_memory_usage (void)
8430{
8431  lang_memory_region_type *r;
8432
8433  printf ("Memory region         Used Size  Region Size  %%age Used\n");
8434  for (r = lang_memory_region_list; r->next != NULL; r = r->next)
8435    {
8436      bfd_vma used_length = r->current - r->origin;
8437      double percent;
8438
8439      printf ("%16s: ",r->name_list.name);
8440      lang_print_memory_size (used_length);
8441      lang_print_memory_size ((bfd_vma) r->length);
8442
8443      percent = used_length * 100.0 / r->length;
8444
8445      printf ("    %6.2f%%\n", percent);
8446    }
8447}
8448