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