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