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 *
stat_alloc(size_t size)135 stat_alloc (size_t size)
136 {
137   return obstack_alloc (&stat_obstack, size);
138 }
139 
140 static int
name_match(const char * pattern,const char * name)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 *
archive_path(const char * pattern)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
input_statement_is_archive_path(const char * file_spec,char * sep,lang_input_statement_type * f)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
unique_section_p(const asection * sec,const lang_output_section_statement_type * os)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
walk_wild_consider_section(lang_wild_statement_type * ptr,lang_input_statement_type * file,asection * s,struct wildcard_list * sec,callback_t callback,void * data)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
walk_wild_section_general(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
section_iterator_callback(bfd * abfd ATTRIBUTE_UNUSED,asection * s,void * data)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 *
find_section(lang_input_statement_type * file,struct wildcard_list * sec,bfd_boolean * multiple_sections_found)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
is_simple_wild(const char * name)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
match_simple_wild(const char * pattern,const char * name)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
get_init_priority(const char * name)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
compare_section(sort_type sort,asection * asec,asection * bsec)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 **
wild_sort_fast(lang_wild_statement_type * wild,struct wildcard_list * sec,lang_input_statement_type * file ATTRIBUTE_UNUSED,asection * section)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
output_section_callback_fast(lang_wild_statement_type * ptr,struct wildcard_list * sec,asection * section,struct flag_info * sflag_list ATTRIBUTE_UNUSED,lang_input_statement_type * file,void * output)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
output_section_callback_tree_to_list(lang_wild_statement_type * ptr,lang_section_bst_type * tree,void * output)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
walk_wild_section_specs1_wild0(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
walk_wild_section_specs1_wild1(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
walk_wild_section_specs2_wild1(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
walk_wild_section_specs3_wild2(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
walk_wild_section_specs4_wild2(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
walk_wild_section(lang_wild_statement_type * ptr,lang_input_statement_type * file,callback_t callback,void * data)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
wild_spec_can_overlap(const char * name1,const char * name2)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
analyze_walk_wild_section_handler(lang_wild_statement_type * ptr)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
walk_wild_file(lang_wild_statement_type * s,lang_input_statement_type * f,callback_t callback,void * data)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
walk_wild(lang_wild_statement_type * s,callback_t callback,void * data)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
lang_for_each_statement_worker(void (* func)(lang_statement_union_type *),lang_statement_union_type * s)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
lang_for_each_statement(void (* func)(lang_statement_union_type *))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
lang_list_init(lang_statement_list_type * list)988 lang_list_init (lang_statement_list_type *list)
989 {
990   list->head = NULL;
991   list->tail = &list->head;
992 }
993 
994 void
push_stat_ptr(lang_statement_list_type * new_ptr)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
pop_stat_ptr(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 *
new_statement(enum statement_enum type,size_t size,lang_statement_list_type * list)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 *
new_afile(const char * name,lang_input_file_enum_type file_type,const char * target,bfd_boolean add_to_list)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 *
lang_add_input_file(const char * name,lang_input_file_enum_type file_type,const char * target)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 *
output_section_statement_newfunc(struct bfd_hash_entry * entry,struct bfd_hash_table * table,const char * string)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
output_section_statement_table_init(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
output_section_statement_table_free(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
lang_init(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
lang_finish(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 *
lang_memory_region_lookup(const char * const name,bfd_boolean create)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
lang_memory_region_alias(const char * alias,const char * region_name)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 *
lang_memory_default(asection * section)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 *
lang_output_section_get(const asection * output_section)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 *
lang_output_section_statement_lookup(const char * name,int constraint,bfd_boolean create)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 *
next_matching_output_section_statement(lang_output_section_statement_type * os,int constraint)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 *
lang_output_section_find_by_flags(const asection * sec,lang_output_section_statement_type ** exact,lang_match_sec_type_func match_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 *
output_prev_sec_find(lang_output_section_statement_type * os)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 **
insert_os_after(lang_output_section_statement_type * after)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 *
lang_insert_orphan(asection * s,const char * secname,int constraint,lang_output_section_statement_type * after,struct orphan_save * place,etree_type * address,lang_statement_list_type * add_child)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
lang_print_asneeded(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
lang_map_flags(flagword flag)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
lang_map(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
sort_def_symbol(struct bfd_link_hash_entry * hash_entry,void * info ATTRIBUTE_UNUSED)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
init_os(lang_output_section_statement_type * s,flagword flags)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
exp_init_os(etree_type * exp)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
section_already_linked(bfd * abfd,asection * sec,void * data)2273 section_already_linked (bfd *abfd, asection *sec, void *data)
2274 {
2275   lang_input_statement_type *entry = (lang_input_statement_type *) data;
2276 
2277   /* If we are only reading symbols from this object, then we want to
2278      discard all sections.  */
2279   if (entry->flags.just_syms)
2280     {
2281       bfd_link_just_syms (abfd, sec, &link_info);
2282       return;
2283     }
2284 
2285   if (!(abfd->flags & DYNAMIC))
2286     bfd_section_already_linked (abfd, sec, &link_info);
2287 }
2288 
2289 /* The wild routines.
2290 
2291    These expand statements like *(.text) and foo.o to a list of
2292    explicit actions, like foo.o(.text), bar.o(.text) and
2293    foo.o(.text, .data).  */
2294 
2295 /* Add SECTION to the output section OUTPUT.  Do this by creating a
2296    lang_input_section statement which is placed at PTR.  */
2297 
2298 void
lang_add_section(lang_statement_list_type * ptr,asection * section,struct flag_info * sflag_info,lang_output_section_statement_type * output)2299 lang_add_section (lang_statement_list_type *ptr,
2300 		  asection *section,
2301 		  struct flag_info *sflag_info,
2302 		  lang_output_section_statement_type *output)
2303 {
2304   flagword flags = section->flags;
2305 
2306   bfd_boolean discard;
2307   lang_input_section_type *new_section;
2308   bfd *abfd = link_info.output_bfd;
2309 
2310   /* Discard sections marked with SEC_EXCLUDE.  */
2311   discard = (flags & SEC_EXCLUDE) != 0;
2312 
2313   /* Discard input sections which are assigned to a section named
2314      DISCARD_SECTION_NAME.  */
2315   if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
2316     discard = TRUE;
2317 
2318   /* Discard debugging sections if we are stripping debugging
2319      information.  */
2320   if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
2321       && (flags & SEC_DEBUGGING) != 0)
2322     discard = TRUE;
2323 
2324   if (discard)
2325     {
2326       if (section->output_section == NULL)
2327 	{
2328 	  /* This prevents future calls from assigning this section.  */
2329 	  section->output_section = bfd_abs_section_ptr;
2330 	}
2331       return;
2332     }
2333 
2334   if (sflag_info)
2335     {
2336       bfd_boolean keep;
2337 
2338       keep = bfd_lookup_section_flags (&link_info, sflag_info, section);
2339       if (!keep)
2340 	return;
2341     }
2342 
2343   if (section->output_section != NULL)
2344     return;
2345 
2346   /* We don't copy the SEC_NEVER_LOAD flag from an input section
2347      to an output section, because we want to be able to include a
2348      SEC_NEVER_LOAD section in the middle of an otherwise loaded
2349      section (I don't know why we want to do this, but we do).
2350      build_link_order in ldwrite.c handles this case by turning
2351      the embedded SEC_NEVER_LOAD section into a fill.  */
2352   flags &= ~ SEC_NEVER_LOAD;
2353 
2354   /* If final link, don't copy the SEC_LINK_ONCE flags, they've
2355      already been processed.  One reason to do this is that on pe
2356      format targets, .text$foo sections go into .text and it's odd
2357      to see .text with SEC_LINK_ONCE set.  */
2358 
2359   if (!link_info.relocatable)
2360     flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC);
2361 
2362   switch (output->sectype)
2363     {
2364     case normal_section:
2365     case overlay_section:
2366       break;
2367     case noalloc_section:
2368       flags &= ~SEC_ALLOC;
2369       break;
2370     case noload_section:
2371       flags &= ~SEC_LOAD;
2372       flags |= SEC_NEVER_LOAD;
2373       /* Unfortunately GNU ld has managed to evolve two different
2374 	 meanings to NOLOAD in scripts.  ELF gets a .bss style noload,
2375 	 alloc, no contents section.  All others get a noload, noalloc
2376 	 section.  */
2377       if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
2378 	flags &= ~SEC_HAS_CONTENTS;
2379       else
2380 	flags &= ~SEC_ALLOC;
2381       break;
2382     }
2383 
2384   if (output->bfd_section == NULL)
2385     init_os (output, flags);
2386 
2387   /* If SEC_READONLY is not set in the input section, then clear
2388      it from the output section.  */
2389   output->bfd_section->flags &= flags | ~SEC_READONLY;
2390 
2391   if (output->bfd_section->linker_has_input)
2392     {
2393       /* Only set SEC_READONLY flag on the first input section.  */
2394       flags &= ~ SEC_READONLY;
2395 
2396       /* Keep SEC_MERGE and SEC_STRINGS only if they are the same.  */
2397       if ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
2398 	  != (flags & (SEC_MERGE | SEC_STRINGS))
2399 	  || ((flags & SEC_MERGE) != 0
2400 	      && output->bfd_section->entsize != section->entsize))
2401 	{
2402 	  output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
2403 	  flags &= ~ (SEC_MERGE | SEC_STRINGS);
2404 	}
2405     }
2406   output->bfd_section->flags |= flags;
2407 
2408   if (!output->bfd_section->linker_has_input)
2409     {
2410       output->bfd_section->linker_has_input = 1;
2411       /* This must happen after flags have been updated.  The output
2412 	 section may have been created before we saw its first input
2413 	 section, eg. for a data statement.  */
2414       bfd_init_private_section_data (section->owner, section,
2415 				     link_info.output_bfd,
2416 				     output->bfd_section,
2417 				     &link_info);
2418       if ((flags & SEC_MERGE) != 0)
2419 	output->bfd_section->entsize = section->entsize;
2420     }
2421 
2422   if ((flags & SEC_TIC54X_BLOCK) != 0
2423       && bfd_get_arch (section->owner) == bfd_arch_tic54x)
2424     {
2425       /* FIXME: This value should really be obtained from the bfd...  */
2426       output->block_value = 128;
2427     }
2428 
2429   if (section->alignment_power > output->bfd_section->alignment_power)
2430     output->bfd_section->alignment_power = section->alignment_power;
2431 
2432   section->output_section = output->bfd_section;
2433 
2434   if (!map_head_is_link_order)
2435     {
2436       asection *s = output->bfd_section->map_tail.s;
2437       output->bfd_section->map_tail.s = section;
2438       section->map_head.s = NULL;
2439       section->map_tail.s = s;
2440       if (s != NULL)
2441 	s->map_head.s = section;
2442       else
2443 	output->bfd_section->map_head.s = section;
2444     }
2445 
2446   /* Add a section reference to the list.  */
2447   new_section = new_stat (lang_input_section, ptr);
2448   new_section->section = section;
2449 }
2450 
2451 /* Handle wildcard sorting.  This returns the lang_input_section which
2452    should follow the one we are going to create for SECTION and FILE,
2453    based on the sorting requirements of WILD.  It returns NULL if the
2454    new section should just go at the end of the current list.  */
2455 
2456 static lang_statement_union_type *
wild_sort(lang_wild_statement_type * wild,struct wildcard_list * sec,lang_input_statement_type * file,asection * section)2457 wild_sort (lang_wild_statement_type *wild,
2458 	   struct wildcard_list *sec,
2459 	   lang_input_statement_type *file,
2460 	   asection *section)
2461 {
2462   lang_statement_union_type *l;
2463 
2464   if (!wild->filenames_sorted
2465       && (sec == NULL || sec->spec.sorted == none))
2466     return NULL;
2467 
2468   for (l = wild->children.head; l != NULL; l = l->header.next)
2469     {
2470       lang_input_section_type *ls;
2471 
2472       if (l->header.type != lang_input_section_enum)
2473 	continue;
2474       ls = &l->input_section;
2475 
2476       /* Sorting by filename takes precedence over sorting by section
2477 	 name.  */
2478 
2479       if (wild->filenames_sorted)
2480 	{
2481 	  const char *fn, *ln;
2482 	  bfd_boolean fa, la;
2483 	  int i;
2484 
2485 	  /* The PE support for the .idata section as generated by
2486 	     dlltool assumes that files will be sorted by the name of
2487 	     the archive and then the name of the file within the
2488 	     archive.  */
2489 
2490 	  if (file->the_bfd != NULL
2491 	      && bfd_my_archive (file->the_bfd) != NULL)
2492 	    {
2493 	      fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
2494 	      fa = TRUE;
2495 	    }
2496 	  else
2497 	    {
2498 	      fn = file->filename;
2499 	      fa = FALSE;
2500 	    }
2501 
2502 	  if (bfd_my_archive (ls->section->owner) != NULL)
2503 	    {
2504 	      ln = bfd_get_filename (bfd_my_archive (ls->section->owner));
2505 	      la = TRUE;
2506 	    }
2507 	  else
2508 	    {
2509 	      ln = ls->section->owner->filename;
2510 	      la = FALSE;
2511 	    }
2512 
2513 	  i = filename_cmp (fn, ln);
2514 	  if (i > 0)
2515 	    continue;
2516 	  else if (i < 0)
2517 	    break;
2518 
2519 	  if (fa || la)
2520 	    {
2521 	      if (fa)
2522 		fn = file->filename;
2523 	      if (la)
2524 		ln = ls->section->owner->filename;
2525 
2526 	      i = filename_cmp (fn, ln);
2527 	      if (i > 0)
2528 		continue;
2529 	      else if (i < 0)
2530 		break;
2531 	    }
2532 	}
2533 
2534       /* Here either the files are not sorted by name, or we are
2535 	 looking at the sections for this file.  */
2536 
2537       if (sec != NULL
2538 	  && sec->spec.sorted != none
2539 	  && sec->spec.sorted != by_none)
2540 	if (compare_section (sec->spec.sorted, section, ls->section) < 0)
2541 	  break;
2542     }
2543 
2544   return l;
2545 }
2546 
2547 /* Expand a wild statement for a particular FILE.  SECTION may be
2548    NULL, in which case it is a wild card.  */
2549 
2550 static void
output_section_callback(lang_wild_statement_type * ptr,struct wildcard_list * sec,asection * section,struct flag_info * sflag_info,lang_input_statement_type * file,void * output)2551 output_section_callback (lang_wild_statement_type *ptr,
2552 			 struct wildcard_list *sec,
2553 			 asection *section,
2554 			 struct flag_info *sflag_info,
2555 			 lang_input_statement_type *file,
2556 			 void *output)
2557 {
2558   lang_statement_union_type *before;
2559   lang_output_section_statement_type *os;
2560 
2561   os = (lang_output_section_statement_type *) output;
2562 
2563   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2564   if (unique_section_p (section, os))
2565     return;
2566 
2567   before = wild_sort (ptr, sec, file, section);
2568 
2569   /* Here BEFORE points to the lang_input_section which
2570      should follow the one we are about to add.  If BEFORE
2571      is NULL, then the section should just go at the end
2572      of the current list.  */
2573 
2574   if (before == NULL)
2575     lang_add_section (&ptr->children, section, sflag_info, os);
2576   else
2577     {
2578       lang_statement_list_type list;
2579       lang_statement_union_type **pp;
2580 
2581       lang_list_init (&list);
2582       lang_add_section (&list, section, sflag_info, os);
2583 
2584       /* If we are discarding the section, LIST.HEAD will
2585 	 be NULL.  */
2586       if (list.head != NULL)
2587 	{
2588 	  ASSERT (list.head->header.next == NULL);
2589 
2590 	  for (pp = &ptr->children.head;
2591 	       *pp != before;
2592 	       pp = &(*pp)->header.next)
2593 	    ASSERT (*pp != NULL);
2594 
2595 	  list.head->header.next = *pp;
2596 	  *pp = list.head;
2597 	}
2598     }
2599 }
2600 
2601 /* Check if all sections in a wild statement for a particular FILE
2602    are readonly.  */
2603 
2604 static void
check_section_callback(lang_wild_statement_type * ptr ATTRIBUTE_UNUSED,struct wildcard_list * sec ATTRIBUTE_UNUSED,asection * section,struct flag_info * sflag_info ATTRIBUTE_UNUSED,lang_input_statement_type * file ATTRIBUTE_UNUSED,void * output)2605 check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2606 			struct wildcard_list *sec ATTRIBUTE_UNUSED,
2607 			asection *section,
2608 			struct flag_info *sflag_info ATTRIBUTE_UNUSED,
2609 			lang_input_statement_type *file ATTRIBUTE_UNUSED,
2610 			void *output)
2611 {
2612   lang_output_section_statement_type *os;
2613 
2614   os = (lang_output_section_statement_type *) output;
2615 
2616   /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2617   if (unique_section_p (section, os))
2618     return;
2619 
2620   if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2621     os->all_input_readonly = FALSE;
2622 }
2623 
2624 /* This is passed a file name which must have been seen already and
2625    added to the statement tree.  We will see if it has been opened
2626    already and had its symbols read.  If not then we'll read it.  */
2627 
2628 static lang_input_statement_type *
lookup_name(const char * name)2629 lookup_name (const char *name)
2630 {
2631   lang_input_statement_type *search;
2632 
2633   for (search = (lang_input_statement_type *) input_file_chain.head;
2634        search != NULL;
2635        search = (lang_input_statement_type *) search->next_real_file)
2636     {
2637       /* Use the local_sym_name as the name of the file that has
2638 	 already been loaded as filename might have been transformed
2639 	 via the search directory lookup mechanism.  */
2640       const char *filename = search->local_sym_name;
2641 
2642       if (filename != NULL
2643 	  && filename_cmp (filename, name) == 0)
2644 	break;
2645     }
2646 
2647   if (search == NULL)
2648     search = new_afile (name, lang_input_file_is_search_file_enum,
2649 			default_target, FALSE);
2650 
2651   /* If we have already added this file, or this file is not real
2652      don't add this file.  */
2653   if (search->flags.loaded || !search->flags.real)
2654     return search;
2655 
2656   if (! load_symbols (search, NULL))
2657     return NULL;
2658 
2659   return search;
2660 }
2661 
2662 /* Save LIST as a list of libraries whose symbols should not be exported.  */
2663 
2664 struct excluded_lib
2665 {
2666   char *name;
2667   struct excluded_lib *next;
2668 };
2669 static struct excluded_lib *excluded_libs;
2670 
2671 void
add_excluded_libs(const char * list)2672 add_excluded_libs (const char *list)
2673 {
2674   const char *p = list, *end;
2675 
2676   while (*p != '\0')
2677     {
2678       struct excluded_lib *entry;
2679       end = strpbrk (p, ",:");
2680       if (end == NULL)
2681 	end = p + strlen (p);
2682       entry = (struct excluded_lib *) xmalloc (sizeof (*entry));
2683       entry->next = excluded_libs;
2684       entry->name = (char *) xmalloc (end - p + 1);
2685       memcpy (entry->name, p, end - p);
2686       entry->name[end - p] = '\0';
2687       excluded_libs = entry;
2688       if (*end == '\0')
2689 	break;
2690       p = end + 1;
2691     }
2692 }
2693 
2694 static void
check_excluded_libs(bfd * abfd)2695 check_excluded_libs (bfd *abfd)
2696 {
2697   struct excluded_lib *lib = excluded_libs;
2698 
2699   while (lib)
2700     {
2701       int len = strlen (lib->name);
2702       const char *filename = lbasename (abfd->filename);
2703 
2704       if (strcmp (lib->name, "ALL") == 0)
2705 	{
2706 	  abfd->no_export = TRUE;
2707 	  return;
2708 	}
2709 
2710       if (filename_ncmp (lib->name, filename, len) == 0
2711 	  && (filename[len] == '\0'
2712 	      || (filename[len] == '.' && filename[len + 1] == 'a'
2713 		  && filename[len + 2] == '\0')))
2714 	{
2715 	  abfd->no_export = TRUE;
2716 	  return;
2717 	}
2718 
2719       lib = lib->next;
2720     }
2721 }
2722 
2723 /* Get the symbols for an input file.  */
2724 
2725 bfd_boolean
load_symbols(lang_input_statement_type * entry,lang_statement_list_type * place)2726 load_symbols (lang_input_statement_type *entry,
2727 	      lang_statement_list_type *place)
2728 {
2729   char **matching;
2730 
2731   if (entry->flags.loaded)
2732     return TRUE;
2733 
2734   ldfile_open_file (entry);
2735 
2736   /* Do not process further if the file was missing.  */
2737   if (entry->flags.missing_file)
2738     return TRUE;
2739 
2740   if (! bfd_check_format (entry->the_bfd, bfd_archive)
2741       && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2742     {
2743       bfd_error_type err;
2744       struct lang_input_statement_flags save_flags;
2745       extern FILE *yyin;
2746 
2747       err = bfd_get_error ();
2748 
2749       /* See if the emulation has some special knowledge.  */
2750       if (ldemul_unrecognized_file (entry))
2751 	return TRUE;
2752 
2753       if (err == bfd_error_file_ambiguously_recognized)
2754 	{
2755 	  char **p;
2756 
2757 	  einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2758 	  einfo (_("%B: matching formats:"), entry->the_bfd);
2759 	  for (p = matching; *p != NULL; p++)
2760 	    einfo (" %s", *p);
2761 	  einfo ("%F\n");
2762 	}
2763       else if (err != bfd_error_file_not_recognized
2764 	       || place == NULL)
2765 	einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2766 
2767       bfd_close (entry->the_bfd);
2768       entry->the_bfd = NULL;
2769 
2770       /* Try to interpret the file as a linker script.  */
2771       save_flags = input_flags;
2772       ldfile_open_command_file (entry->filename);
2773 
2774       push_stat_ptr (place);
2775       input_flags.add_DT_NEEDED_for_regular
2776 	= entry->flags.add_DT_NEEDED_for_regular;
2777       input_flags.add_DT_NEEDED_for_dynamic
2778 	= entry->flags.add_DT_NEEDED_for_dynamic;
2779       input_flags.whole_archive = entry->flags.whole_archive;
2780       input_flags.dynamic = entry->flags.dynamic;
2781 
2782       ldfile_assumed_script = TRUE;
2783       parser_input = input_script;
2784       yyparse ();
2785       ldfile_assumed_script = FALSE;
2786 
2787       /* missing_file is sticky.  sysrooted will already have been
2788 	 restored when seeing EOF in yyparse, but no harm to restore
2789 	 again.  */
2790       save_flags.missing_file |= input_flags.missing_file;
2791       input_flags = save_flags;
2792       pop_stat_ptr ();
2793       fclose (yyin);
2794       yyin = NULL;
2795       entry->flags.loaded = TRUE;
2796 
2797       return TRUE;
2798     }
2799 
2800   if (ldemul_recognized_file (entry))
2801     return TRUE;
2802 
2803   /* We don't call ldlang_add_file for an archive.  Instead, the
2804      add_symbols entry point will call ldlang_add_file, via the
2805      add_archive_element callback, for each element of the archive
2806      which is used.  */
2807   switch (bfd_get_format (entry->the_bfd))
2808     {
2809     default:
2810       break;
2811 
2812     case bfd_object:
2813       if (!entry->flags.reload)
2814 	ldlang_add_file (entry);
2815       if (trace_files || verbose)
2816 	info_msg ("%I\n", entry);
2817       break;
2818 
2819     case bfd_archive:
2820       check_excluded_libs (entry->the_bfd);
2821 
2822       if (entry->flags.whole_archive)
2823 	{
2824 	  bfd *member = NULL;
2825 	  bfd_boolean loaded = TRUE;
2826 
2827 	  for (;;)
2828 	    {
2829 	      bfd *subsbfd;
2830 	      member = bfd_openr_next_archived_file (entry->the_bfd, member);
2831 
2832 	      if (member == NULL)
2833 		break;
2834 
2835 	      if (! bfd_check_format (member, bfd_object))
2836 		{
2837 		  einfo (_("%F%B: member %B in archive is not an object\n"),
2838 			 entry->the_bfd, member);
2839 		  loaded = FALSE;
2840 		}
2841 
2842 	      subsbfd = member;
2843 	      if (!(*link_info.callbacks
2844 		    ->add_archive_element) (&link_info, member,
2845 					    "--whole-archive", &subsbfd))
2846 		abort ();
2847 
2848 	      /* Potentially, the add_archive_element hook may have set a
2849 		 substitute BFD for us.  */
2850 	      if (!bfd_link_add_symbols (subsbfd, &link_info))
2851 		{
2852 		  einfo (_("%F%B: error adding symbols: %E\n"), member);
2853 		  loaded = FALSE;
2854 		}
2855 	    }
2856 
2857 	  entry->flags.loaded = loaded;
2858 	  return loaded;
2859 	}
2860       break;
2861     }
2862 
2863   if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2864     entry->flags.loaded = TRUE;
2865   else
2866     einfo (_("%F%B: error adding symbols: %E\n"), entry->the_bfd);
2867 
2868   return entry->flags.loaded;
2869 }
2870 
2871 /* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
2872    may be NULL, indicating that it is a wildcard.  Separate
2873    lang_input_section statements are created for each part of the
2874    expansion; they are added after the wild statement S.  OUTPUT is
2875    the output section.  */
2876 
2877 static void
wild(lang_wild_statement_type * s,const char * target ATTRIBUTE_UNUSED,lang_output_section_statement_type * output)2878 wild (lang_wild_statement_type *s,
2879       const char *target ATTRIBUTE_UNUSED,
2880       lang_output_section_statement_type *output)
2881 {
2882   struct wildcard_list *sec;
2883 
2884   if (s->handler_data[0]
2885       && s->handler_data[0]->spec.sorted == by_name
2886       && !s->filenames_sorted)
2887     {
2888       lang_section_bst_type *tree;
2889 
2890       walk_wild (s, output_section_callback_fast, output);
2891 
2892       tree = s->tree;
2893       if (tree)
2894 	{
2895 	  output_section_callback_tree_to_list (s, tree, output);
2896 	  s->tree = NULL;
2897 	}
2898     }
2899   else
2900     walk_wild (s, output_section_callback, output);
2901 
2902   if (default_common_section == NULL)
2903     for (sec = s->section_list; sec != NULL; sec = sec->next)
2904       if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2905 	{
2906 	  /* Remember the section that common is going to in case we
2907 	     later get something which doesn't know where to put it.  */
2908 	  default_common_section = output;
2909 	  break;
2910 	}
2911 }
2912 
2913 /* Return TRUE iff target is the sought target.  */
2914 
2915 static int
get_target(const bfd_target * target,void * data)2916 get_target (const bfd_target *target, void *data)
2917 {
2918   const char *sought = (const char *) data;
2919 
2920   return strcmp (target->name, sought) == 0;
2921 }
2922 
2923 /* Like strcpy() but convert to lower case as well.  */
2924 
2925 static void
stricpy(char * dest,char * src)2926 stricpy (char *dest, char *src)
2927 {
2928   char c;
2929 
2930   while ((c = *src++) != 0)
2931     *dest++ = TOLOWER (c);
2932 
2933   *dest = 0;
2934 }
2935 
2936 /* Remove the first occurrence of needle (if any) in haystack
2937    from haystack.  */
2938 
2939 static void
strcut(char * haystack,char * needle)2940 strcut (char *haystack, char *needle)
2941 {
2942   haystack = strstr (haystack, needle);
2943 
2944   if (haystack)
2945     {
2946       char *src;
2947 
2948       for (src = haystack + strlen (needle); *src;)
2949 	*haystack++ = *src++;
2950 
2951       *haystack = 0;
2952     }
2953 }
2954 
2955 /* Compare two target format name strings.
2956    Return a value indicating how "similar" they are.  */
2957 
2958 static int
name_compare(char * first,char * second)2959 name_compare (char *first, char *second)
2960 {
2961   char *copy1;
2962   char *copy2;
2963   int result;
2964 
2965   copy1 = (char *) xmalloc (strlen (first) + 1);
2966   copy2 = (char *) xmalloc (strlen (second) + 1);
2967 
2968   /* Convert the names to lower case.  */
2969   stricpy (copy1, first);
2970   stricpy (copy2, second);
2971 
2972   /* Remove size and endian strings from the name.  */
2973   strcut (copy1, "big");
2974   strcut (copy1, "little");
2975   strcut (copy2, "big");
2976   strcut (copy2, "little");
2977 
2978   /* Return a value based on how many characters match,
2979      starting from the beginning.   If both strings are
2980      the same then return 10 * their length.  */
2981   for (result = 0; copy1[result] == copy2[result]; result++)
2982     if (copy1[result] == 0)
2983       {
2984 	result *= 10;
2985 	break;
2986       }
2987 
2988   free (copy1);
2989   free (copy2);
2990 
2991   return result;
2992 }
2993 
2994 /* Set by closest_target_match() below.  */
2995 static const bfd_target *winner;
2996 
2997 /* Scan all the valid bfd targets looking for one that has the endianness
2998    requirement that was specified on the command line, and is the nearest
2999    match to the original output target.  */
3000 
3001 static int
closest_target_match(const bfd_target * target,void * data)3002 closest_target_match (const bfd_target *target, void *data)
3003 {
3004   const bfd_target *original = (const bfd_target *) data;
3005 
3006   if (command_line.endian == ENDIAN_BIG
3007       && target->byteorder != BFD_ENDIAN_BIG)
3008     return 0;
3009 
3010   if (command_line.endian == ENDIAN_LITTLE
3011       && target->byteorder != BFD_ENDIAN_LITTLE)
3012     return 0;
3013 
3014   /* Must be the same flavour.  */
3015   if (target->flavour != original->flavour)
3016     return 0;
3017 
3018   /* Ignore generic big and little endian elf vectors.  */
3019   if (strcmp (target->name, "elf32-big") == 0
3020       || strcmp (target->name, "elf64-big") == 0
3021       || strcmp (target->name, "elf32-little") == 0
3022       || strcmp (target->name, "elf64-little") == 0)
3023     return 0;
3024 
3025   /* If we have not found a potential winner yet, then record this one.  */
3026   if (winner == NULL)
3027     {
3028       winner = target;
3029       return 0;
3030     }
3031 
3032   /* Oh dear, we now have two potential candidates for a successful match.
3033      Compare their names and choose the better one.  */
3034   if (name_compare (target->name, original->name)
3035       > name_compare (winner->name, original->name))
3036     winner = target;
3037 
3038   /* Keep on searching until wqe have checked them all.  */
3039   return 0;
3040 }
3041 
3042 /* Return the BFD target format of the first input file.  */
3043 
3044 static char *
get_first_input_target(void)3045 get_first_input_target (void)
3046 {
3047   char *target = NULL;
3048 
3049   LANG_FOR_EACH_INPUT_STATEMENT (s)
3050     {
3051       if (s->header.type == lang_input_statement_enum
3052 	  && s->flags.real)
3053 	{
3054 	  ldfile_open_file (s);
3055 
3056 	  if (s->the_bfd != NULL
3057 	      && bfd_check_format (s->the_bfd, bfd_object))
3058 	    {
3059 	      target = bfd_get_target (s->the_bfd);
3060 
3061 	      if (target != NULL)
3062 		break;
3063 	    }
3064 	}
3065     }
3066 
3067   return target;
3068 }
3069 
3070 const char *
lang_get_output_target(void)3071 lang_get_output_target (void)
3072 {
3073   const char *target;
3074 
3075   /* Has the user told us which output format to use?  */
3076   if (output_target != NULL)
3077     return output_target;
3078 
3079   /* No - has the current target been set to something other than
3080      the default?  */
3081   if (current_target != default_target && current_target != NULL)
3082     return current_target;
3083 
3084   /* No - can we determine the format of the first input file?  */
3085   target = get_first_input_target ();
3086   if (target != NULL)
3087     return target;
3088 
3089   /* Failed - use the default output target.  */
3090   return default_target;
3091 }
3092 
3093 /* Open the output file.  */
3094 
3095 static void
open_output(const char * name)3096 open_output (const char *name)
3097 {
3098   output_target = lang_get_output_target ();
3099 
3100   /* Has the user requested a particular endianness on the command
3101      line?  */
3102   if (command_line.endian != ENDIAN_UNSET)
3103     {
3104       const bfd_target *target;
3105       enum bfd_endian desired_endian;
3106 
3107       /* Get the chosen target.  */
3108       target = bfd_search_for_target (get_target, (void *) output_target);
3109 
3110       /* If the target is not supported, we cannot do anything.  */
3111       if (target != NULL)
3112 	{
3113 	  if (command_line.endian == ENDIAN_BIG)
3114 	    desired_endian = BFD_ENDIAN_BIG;
3115 	  else
3116 	    desired_endian = BFD_ENDIAN_LITTLE;
3117 
3118 	  /* See if the target has the wrong endianness.  This should
3119 	     not happen if the linker script has provided big and
3120 	     little endian alternatives, but some scrips don't do
3121 	     this.  */
3122 	  if (target->byteorder != desired_endian)
3123 	    {
3124 	      /* If it does, then see if the target provides
3125 		 an alternative with the correct endianness.  */
3126 	      if (target->alternative_target != NULL
3127 		  && (target->alternative_target->byteorder == desired_endian))
3128 		output_target = target->alternative_target->name;
3129 	      else
3130 		{
3131 		  /* Try to find a target as similar as possible to
3132 		     the default target, but which has the desired
3133 		     endian characteristic.  */
3134 		  bfd_search_for_target (closest_target_match,
3135 					 (void *) target);
3136 
3137 		  /* Oh dear - we could not find any targets that
3138 		     satisfy our requirements.  */
3139 		  if (winner == NULL)
3140 		    einfo (_("%P: warning: could not find any targets"
3141 			     " that match endianness requirement\n"));
3142 		  else
3143 		    output_target = winner->name;
3144 		}
3145 	    }
3146 	}
3147     }
3148 
3149   link_info.output_bfd = bfd_openw (name, output_target);
3150 
3151   if (link_info.output_bfd == NULL)
3152     {
3153       if (bfd_get_error () == bfd_error_invalid_target)
3154 	einfo (_("%P%F: target %s not found\n"), output_target);
3155 
3156       einfo (_("%P%F: cannot open output file %s: %E\n"), name);
3157     }
3158 
3159   delete_output_file_on_failure = TRUE;
3160 
3161   if (! bfd_set_format (link_info.output_bfd, bfd_object))
3162     einfo (_("%P%F:%s: can not make object file: %E\n"), name);
3163   if (! bfd_set_arch_mach (link_info.output_bfd,
3164 			   ldfile_output_architecture,
3165 			   ldfile_output_machine))
3166     einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
3167 
3168   link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
3169   if (link_info.hash == NULL)
3170     einfo (_("%P%F: can not create hash table: %E\n"));
3171 
3172   bfd_set_gp_size (link_info.output_bfd, g_switch_value);
3173 }
3174 
3175 static void
ldlang_open_output(lang_statement_union_type * statement)3176 ldlang_open_output (lang_statement_union_type *statement)
3177 {
3178   switch (statement->header.type)
3179     {
3180     case lang_output_statement_enum:
3181       ASSERT (link_info.output_bfd == NULL);
3182       open_output (statement->output_statement.name);
3183       ldemul_set_output_arch ();
3184       if (config.magic_demand_paged && !link_info.relocatable)
3185 	link_info.output_bfd->flags |= D_PAGED;
3186       else
3187 	link_info.output_bfd->flags &= ~D_PAGED;
3188       if (config.text_read_only)
3189 	link_info.output_bfd->flags |= WP_TEXT;
3190       else
3191 	link_info.output_bfd->flags &= ~WP_TEXT;
3192       if (link_info.traditional_format)
3193 	link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
3194       else
3195 	link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
3196       break;
3197 
3198     case lang_target_statement_enum:
3199       current_target = statement->target_statement.target;
3200       break;
3201     default:
3202       break;
3203     }
3204 }
3205 
3206 /* Convert between addresses in bytes and sizes in octets.
3207    For currently supported targets, octets_per_byte is always a power
3208    of two, so we can use shifts.  */
3209 #define TO_ADDR(X) ((X) >> opb_shift)
3210 #define TO_SIZE(X) ((X) << opb_shift)
3211 
3212 /* Support the above.  */
3213 static unsigned int opb_shift = 0;
3214 
3215 static void
init_opb(void)3216 init_opb (void)
3217 {
3218   unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3219 					      ldfile_output_machine);
3220   opb_shift = 0;
3221   if (x > 1)
3222     while ((x & 1) == 0)
3223       {
3224 	x >>= 1;
3225 	++opb_shift;
3226       }
3227   ASSERT (x == 1);
3228 }
3229 
3230 /* Open all the input files.  */
3231 
3232 enum open_bfd_mode
3233   {
3234     OPEN_BFD_NORMAL = 0,
3235     OPEN_BFD_FORCE = 1,
3236     OPEN_BFD_RESCAN = 2
3237   };
3238 #ifdef ENABLE_PLUGINS
3239 static lang_input_statement_type *plugin_insert = NULL;
3240 #endif
3241 
3242 static void
open_input_bfds(lang_statement_union_type * s,enum open_bfd_mode mode)3243 open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
3244 {
3245   for (; s != NULL; s = s->header.next)
3246     {
3247       switch (s->header.type)
3248 	{
3249 	case lang_constructors_statement_enum:
3250 	  open_input_bfds (constructor_list.head, mode);
3251 	  break;
3252 	case lang_output_section_statement_enum:
3253 	  open_input_bfds (s->output_section_statement.children.head, mode);
3254 	  break;
3255 	case lang_wild_statement_enum:
3256 	  /* Maybe we should load the file's symbols.  */
3257 	  if ((mode & OPEN_BFD_RESCAN) == 0
3258 	      && s->wild_statement.filename
3259 	      && !wildcardp (s->wild_statement.filename)
3260 	      && !archive_path (s->wild_statement.filename))
3261 	    lookup_name (s->wild_statement.filename);
3262 	  open_input_bfds (s->wild_statement.children.head, mode);
3263 	  break;
3264 	case lang_group_statement_enum:
3265 	  {
3266 	    struct bfd_link_hash_entry *undefs;
3267 
3268 	    /* We must continually search the entries in the group
3269 	       until no new symbols are added to the list of undefined
3270 	       symbols.  */
3271 
3272 	    do
3273 	      {
3274 		undefs = link_info.hash->undefs_tail;
3275 		open_input_bfds (s->group_statement.children.head,
3276 				 mode | OPEN_BFD_FORCE);
3277 	      }
3278 	    while (undefs != link_info.hash->undefs_tail);
3279 	  }
3280 	  break;
3281 	case lang_target_statement_enum:
3282 	  current_target = s->target_statement.target;
3283 	  break;
3284 	case lang_input_statement_enum:
3285 	  if (s->input_statement.flags.real)
3286 	    {
3287 	      lang_statement_union_type **os_tail;
3288 	      lang_statement_list_type add;
3289 	      bfd *abfd;
3290 
3291 	      s->input_statement.target = current_target;
3292 
3293 	      /* If we are being called from within a group, and this
3294 		 is an archive which has already been searched, then
3295 		 force it to be researched unless the whole archive
3296 		 has been loaded already.  Do the same for a rescan.
3297 		 Likewise reload --as-needed shared libs.  */
3298 	      if (mode != OPEN_BFD_NORMAL
3299 #ifdef ENABLE_PLUGINS
3300 		  && ((mode & OPEN_BFD_RESCAN) == 0
3301 		      || plugin_insert == NULL)
3302 #endif
3303 		  && s->input_statement.flags.loaded
3304 		  && (abfd = s->input_statement.the_bfd) != NULL
3305 		  && ((bfd_get_format (abfd) == bfd_archive
3306 		       && !s->input_statement.flags.whole_archive)
3307 		      || (bfd_get_format (abfd) == bfd_object
3308 			  && ((abfd->flags) & DYNAMIC) != 0
3309 			  && s->input_statement.flags.add_DT_NEEDED_for_regular
3310 			  && bfd_get_flavour (abfd) == bfd_target_elf_flavour
3311 			  && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)))
3312 		{
3313 		  s->input_statement.flags.loaded = FALSE;
3314 		  s->input_statement.flags.reload = TRUE;
3315 		}
3316 
3317 	      os_tail = lang_output_section_statement.tail;
3318 	      lang_list_init (&add);
3319 
3320 	      if (! load_symbols (&s->input_statement, &add))
3321 		config.make_executable = FALSE;
3322 
3323 	      if (add.head != NULL)
3324 		{
3325 		  /* If this was a script with output sections then
3326 		     tack any added statements on to the end of the
3327 		     list.  This avoids having to reorder the output
3328 		     section statement list.  Very likely the user
3329 		     forgot -T, and whatever we do here will not meet
3330 		     naive user expectations.  */
3331 		  if (os_tail != lang_output_section_statement.tail)
3332 		    {
3333 		      einfo (_("%P: warning: %s contains output sections;"
3334 			       " did you forget -T?\n"),
3335 			     s->input_statement.filename);
3336 		      *stat_ptr->tail = add.head;
3337 		      stat_ptr->tail = add.tail;
3338 		    }
3339 		  else
3340 		    {
3341 		      *add.tail = s->header.next;
3342 		      s->header.next = add.head;
3343 		    }
3344 		}
3345 	    }
3346 #ifdef ENABLE_PLUGINS
3347 	  /* If we have found the point at which a plugin added new
3348 	     files, clear plugin_insert to enable archive rescan.  */
3349 	  if (&s->input_statement == plugin_insert)
3350 	    plugin_insert = NULL;
3351 #endif
3352 	  break;
3353 	case lang_assignment_statement_enum:
3354 	  if (s->assignment_statement.exp->assign.defsym)
3355 	    /* This is from a --defsym on the command line.  */
3356 	    exp_fold_tree_no_dot (s->assignment_statement.exp);
3357 	  break;
3358 	default:
3359 	  break;
3360 	}
3361     }
3362 
3363   /* Exit if any of the files were missing.  */
3364   if (input_flags.missing_file)
3365     einfo ("%F");
3366 }
3367 
3368 /* New-function for the definedness hash table.  */
3369 
3370 static struct bfd_hash_entry *
lang_definedness_newfunc(struct bfd_hash_entry * entry,struct bfd_hash_table * table ATTRIBUTE_UNUSED,const char * name ATTRIBUTE_UNUSED)3371 lang_definedness_newfunc (struct bfd_hash_entry *entry,
3372 			  struct bfd_hash_table *table ATTRIBUTE_UNUSED,
3373 			  const char *name ATTRIBUTE_UNUSED)
3374 {
3375   struct lang_definedness_hash_entry *ret
3376     = (struct lang_definedness_hash_entry *) entry;
3377 
3378   if (ret == NULL)
3379     ret = (struct lang_definedness_hash_entry *)
3380       bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
3381 
3382   if (ret == NULL)
3383     einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
3384 
3385   ret->by_object = 0;
3386   ret->by_script = 0;
3387   ret->iteration = 0;
3388   return &ret->root;
3389 }
3390 
3391 /* Called during processing of linker script script expressions.
3392    For symbols assigned in a linker script, return a struct describing
3393    where the symbol is defined relative to the current expression,
3394    otherwise return NULL.  */
3395 
3396 struct lang_definedness_hash_entry *
lang_symbol_defined(const char * name)3397 lang_symbol_defined (const char *name)
3398 {
3399   return ((struct lang_definedness_hash_entry *)
3400 	  bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE));
3401 }
3402 
3403 /* Update the definedness state of NAME.  */
3404 
3405 void
lang_update_definedness(const char * name,struct bfd_link_hash_entry * h)3406 lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
3407 {
3408   struct lang_definedness_hash_entry *defentry
3409     = (struct lang_definedness_hash_entry *)
3410     bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE);
3411 
3412   if (defentry == NULL)
3413     einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
3414 
3415   /* If the symbol was already defined, and not by a script, then it
3416      must be defined by an object file.  */
3417   if (!defentry->by_script
3418       && h->type != bfd_link_hash_undefined
3419       && h->type != bfd_link_hash_common
3420       && h->type != bfd_link_hash_new)
3421     defentry->by_object = 1;
3422 
3423   defentry->by_script = 1;
3424   defentry->iteration = lang_statement_iteration;
3425 }
3426 
3427 /* Add the supplied name to the symbol table as an undefined reference.
3428    This is a two step process as the symbol table doesn't even exist at
3429    the time the ld command line is processed.  First we put the name
3430    on a list, then, once the output file has been opened, transfer the
3431    name to the symbol table.  */
3432 
3433 typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
3434 
3435 #define ldlang_undef_chain_list_head entry_symbol.next
3436 
3437 void
ldlang_add_undef(const char * const name,bfd_boolean cmdline)3438 ldlang_add_undef (const char *const name, bfd_boolean cmdline)
3439 {
3440   ldlang_undef_chain_list_type *new_undef;
3441 
3442   undef_from_cmdline = undef_from_cmdline || cmdline;
3443   new_undef = (ldlang_undef_chain_list_type *) stat_alloc (sizeof (*new_undef));
3444   new_undef->next = ldlang_undef_chain_list_head;
3445   ldlang_undef_chain_list_head = new_undef;
3446 
3447   new_undef->name = xstrdup (name);
3448 
3449   if (link_info.output_bfd != NULL)
3450     insert_undefined (new_undef->name);
3451 }
3452 
3453 /* Insert NAME as undefined in the symbol table.  */
3454 
3455 static void
insert_undefined(const char * name)3456 insert_undefined (const char *name)
3457 {
3458   struct bfd_link_hash_entry *h;
3459 
3460   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
3461   if (h == NULL)
3462     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3463   if (h->type == bfd_link_hash_new)
3464     {
3465       h->type = bfd_link_hash_undefined;
3466       h->u.undef.abfd = NULL;
3467       bfd_link_add_undef (link_info.hash, h);
3468     }
3469 }
3470 
3471 /* Run through the list of undefineds created above and place them
3472    into the linker hash table as undefined symbols belonging to the
3473    script file.  */
3474 
3475 static void
lang_place_undefineds(void)3476 lang_place_undefineds (void)
3477 {
3478   ldlang_undef_chain_list_type *ptr;
3479 
3480   for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
3481     insert_undefined (ptr->name);
3482 }
3483 
3484 /* Check for all readonly or some readwrite sections.  */
3485 
3486 static void
check_input_sections(lang_statement_union_type * s,lang_output_section_statement_type * output_section_statement)3487 check_input_sections
3488   (lang_statement_union_type *s,
3489    lang_output_section_statement_type *output_section_statement)
3490 {
3491   for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3492     {
3493       switch (s->header.type)
3494 	{
3495 	case lang_wild_statement_enum:
3496 	  walk_wild (&s->wild_statement, check_section_callback,
3497 		     output_section_statement);
3498 	  if (! output_section_statement->all_input_readonly)
3499 	    return;
3500 	  break;
3501 	case lang_constructors_statement_enum:
3502 	  check_input_sections (constructor_list.head,
3503 				output_section_statement);
3504 	  if (! output_section_statement->all_input_readonly)
3505 	    return;
3506 	  break;
3507 	case lang_group_statement_enum:
3508 	  check_input_sections (s->group_statement.children.head,
3509 				output_section_statement);
3510 	  if (! output_section_statement->all_input_readonly)
3511 	    return;
3512 	  break;
3513 	default:
3514 	  break;
3515 	}
3516     }
3517 }
3518 
3519 /* Update wildcard statements if needed.  */
3520 
3521 static void
update_wild_statements(lang_statement_union_type * s)3522 update_wild_statements (lang_statement_union_type *s)
3523 {
3524   struct wildcard_list *sec;
3525 
3526   switch (sort_section)
3527     {
3528     default:
3529       FAIL ();
3530 
3531     case none:
3532       break;
3533 
3534     case by_name:
3535     case by_alignment:
3536       for (; s != NULL; s = s->header.next)
3537 	{
3538 	  switch (s->header.type)
3539 	    {
3540 	    default:
3541 	      break;
3542 
3543 	    case lang_wild_statement_enum:
3544 	      for (sec = s->wild_statement.section_list; sec != NULL;
3545 		   sec = sec->next)
3546 		{
3547 		  switch (sec->spec.sorted)
3548 		    {
3549 		    case none:
3550 		      sec->spec.sorted = sort_section;
3551 		      break;
3552 		    case by_name:
3553 		      if (sort_section == by_alignment)
3554 			sec->spec.sorted = by_name_alignment;
3555 		      break;
3556 		    case by_alignment:
3557 		      if (sort_section == by_name)
3558 			sec->spec.sorted = by_alignment_name;
3559 		      break;
3560 		    default:
3561 		      break;
3562 		    }
3563 		}
3564 	      break;
3565 
3566 	    case lang_constructors_statement_enum:
3567 	      update_wild_statements (constructor_list.head);
3568 	      break;
3569 
3570 	    case lang_output_section_statement_enum:
3571 	      /* Don't sort .init/.fini sections.  */
3572 	      if (strcmp (s->output_section_statement.name, ".init") != 0
3573 		  && strcmp (s->output_section_statement.name, ".fini") != 0)
3574 		update_wild_statements
3575 		  (s->output_section_statement.children.head);
3576 	      break;
3577 
3578 	    case lang_group_statement_enum:
3579 	      update_wild_statements (s->group_statement.children.head);
3580 	      break;
3581 	    }
3582 	}
3583       break;
3584     }
3585 }
3586 
3587 /* Open input files and attach to output sections.  */
3588 
3589 static void
map_input_to_output_sections(lang_statement_union_type * s,const char * target,lang_output_section_statement_type * os)3590 map_input_to_output_sections
3591   (lang_statement_union_type *s, const char *target,
3592    lang_output_section_statement_type *os)
3593 {
3594   for (; s != NULL; s = s->header.next)
3595     {
3596       lang_output_section_statement_type *tos;
3597       flagword flags;
3598 
3599       switch (s->header.type)
3600 	{
3601 	case lang_wild_statement_enum:
3602 	  wild (&s->wild_statement, target, os);
3603 	  break;
3604 	case lang_constructors_statement_enum:
3605 	  map_input_to_output_sections (constructor_list.head,
3606 					target,
3607 					os);
3608 	  break;
3609 	case lang_output_section_statement_enum:
3610 	  tos = &s->output_section_statement;
3611 	  if (tos->constraint != 0)
3612 	    {
3613 	      if (tos->constraint != ONLY_IF_RW
3614 		  && tos->constraint != ONLY_IF_RO)
3615 		break;
3616 	      tos->all_input_readonly = TRUE;
3617 	      check_input_sections (tos->children.head, tos);
3618 	      if (tos->all_input_readonly != (tos->constraint == ONLY_IF_RO))
3619 		{
3620 		  tos->constraint = -1;
3621 		  break;
3622 		}
3623 	    }
3624 	  map_input_to_output_sections (tos->children.head,
3625 					target,
3626 					tos);
3627 	  break;
3628 	case lang_output_statement_enum:
3629 	  break;
3630 	case lang_target_statement_enum:
3631 	  target = s->target_statement.target;
3632 	  break;
3633 	case lang_group_statement_enum:
3634 	  map_input_to_output_sections (s->group_statement.children.head,
3635 					target,
3636 					os);
3637 	  break;
3638 	case lang_data_statement_enum:
3639 	  /* Make sure that any sections mentioned in the expression
3640 	     are initialized.  */
3641 	  exp_init_os (s->data_statement.exp);
3642 	  /* The output section gets CONTENTS, ALLOC and LOAD, but
3643 	     these may be overridden by the script.  */
3644 	  flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
3645 	  switch (os->sectype)
3646 	    {
3647 	    case normal_section:
3648 	    case overlay_section:
3649 	      break;
3650 	    case noalloc_section:
3651 	      flags = SEC_HAS_CONTENTS;
3652 	      break;
3653 	    case noload_section:
3654 	      if (bfd_get_flavour (link_info.output_bfd)
3655 		  == bfd_target_elf_flavour)
3656 		flags = SEC_NEVER_LOAD | SEC_ALLOC;
3657 	      else
3658 		flags = SEC_NEVER_LOAD | SEC_HAS_CONTENTS;
3659 	      break;
3660 	    }
3661 	  if (os->bfd_section == NULL)
3662 	    init_os (os, flags);
3663 	  else
3664 	    os->bfd_section->flags |= flags;
3665 	  break;
3666 	case lang_input_section_enum:
3667 	  break;
3668 	case lang_fill_statement_enum:
3669 	case lang_object_symbols_statement_enum:
3670 	case lang_reloc_statement_enum:
3671 	case lang_padding_statement_enum:
3672 	case lang_input_statement_enum:
3673 	  if (os != NULL && os->bfd_section == NULL)
3674 	    init_os (os, 0);
3675 	  break;
3676 	case lang_assignment_statement_enum:
3677 	  if (os != NULL && os->bfd_section == NULL)
3678 	    init_os (os, 0);
3679 
3680 	  /* Make sure that any sections mentioned in the assignment
3681 	     are initialized.  */
3682 	  exp_init_os (s->assignment_statement.exp);
3683 	  break;
3684 	case lang_address_statement_enum:
3685 	  /* Mark the specified section with the supplied address.
3686 	     If this section was actually a segment marker, then the
3687 	     directive is ignored if the linker script explicitly
3688 	     processed the segment marker.  Originally, the linker
3689 	     treated segment directives (like -Ttext on the
3690 	     command-line) as section directives.  We honor the
3691 	     section directive semantics for backwards compatibilty;
3692 	     linker scripts that do not specifically check for
3693 	     SEGMENT_START automatically get the old semantics.  */
3694 	  if (!s->address_statement.segment
3695 	      || !s->address_statement.segment->used)
3696 	    {
3697 	      const char *name = s->address_statement.section_name;
3698 
3699 	      /* Create the output section statement here so that
3700 		 orphans with a set address will be placed after other
3701 		 script sections.  If we let the orphan placement code
3702 		 place them in amongst other sections then the address
3703 		 will affect following script sections, which is
3704 		 likely to surprise naive users.  */
3705 	      tos = lang_output_section_statement_lookup (name, 0, TRUE);
3706 	      tos->addr_tree = s->address_statement.address;
3707 	      if (tos->bfd_section == NULL)
3708 		init_os (tos, 0);
3709 	    }
3710 	  break;
3711 	case lang_insert_statement_enum:
3712 	  break;
3713 	}
3714     }
3715 }
3716 
3717 /* An insert statement snips out all the linker statements from the
3718    start of the list and places them after the output section
3719    statement specified by the insert.  This operation is complicated
3720    by the fact that we keep a doubly linked list of output section
3721    statements as well as the singly linked list of all statements.  */
3722 
3723 static void
process_insert_statements(void)3724 process_insert_statements (void)
3725 {
3726   lang_statement_union_type **s;
3727   lang_output_section_statement_type *first_os = NULL;
3728   lang_output_section_statement_type *last_os = NULL;
3729   lang_output_section_statement_type *os;
3730 
3731   /* "start of list" is actually the statement immediately after
3732      the special abs_section output statement, so that it isn't
3733      reordered.  */
3734   s = &lang_output_section_statement.head;
3735   while (*(s = &(*s)->header.next) != NULL)
3736     {
3737       if ((*s)->header.type == lang_output_section_statement_enum)
3738 	{
3739 	  /* Keep pointers to the first and last output section
3740 	     statement in the sequence we may be about to move.  */
3741 	  os = &(*s)->output_section_statement;
3742 
3743 	  ASSERT (last_os == NULL || last_os->next == os);
3744 	  last_os = os;
3745 
3746 	  /* Set constraint negative so that lang_output_section_find
3747 	     won't match this output section statement.  At this
3748 	     stage in linking constraint has values in the range
3749 	     [-1, ONLY_IN_RW].  */
3750 	  last_os->constraint = -2 - last_os->constraint;
3751 	  if (first_os == NULL)
3752 	    first_os = last_os;
3753 	}
3754       else if ((*s)->header.type == lang_insert_statement_enum)
3755 	{
3756 	  lang_insert_statement_type *i = &(*s)->insert_statement;
3757 	  lang_output_section_statement_type *where;
3758 	  lang_statement_union_type **ptr;
3759 	  lang_statement_union_type *first;
3760 
3761 	  where = lang_output_section_find (i->where);
3762 	  if (where != NULL && i->is_before)
3763 	    {
3764 	      do
3765 		where = where->prev;
3766 	      while (where != NULL && where->constraint < 0);
3767 	    }
3768 	  if (where == NULL)
3769 	    {
3770 	      einfo (_("%F%P: %s not found for insert\n"), i->where);
3771 	      return;
3772 	    }
3773 
3774 	  /* Deal with reordering the output section statement list.  */
3775 	  if (last_os != NULL)
3776 	    {
3777 	      asection *first_sec, *last_sec;
3778 	      struct lang_output_section_statement_struct **next;
3779 
3780 	      /* Snip out the output sections we are moving.  */
3781 	      first_os->prev->next = last_os->next;
3782 	      if (last_os->next == NULL)
3783 		{
3784 		  next = &first_os->prev->next;
3785 		  lang_output_section_statement.tail
3786 		    = (lang_statement_union_type **) next;
3787 		}
3788 	      else
3789 		last_os->next->prev = first_os->prev;
3790 	      /* Add them in at the new position.  */
3791 	      last_os->next = where->next;
3792 	      if (where->next == NULL)
3793 		{
3794 		  next = &last_os->next;
3795 		  lang_output_section_statement.tail
3796 		    = (lang_statement_union_type **) next;
3797 		}
3798 	      else
3799 		where->next->prev = last_os;
3800 	      first_os->prev = where;
3801 	      where->next = first_os;
3802 
3803 	      /* Move the bfd sections in the same way.  */
3804 	      first_sec = NULL;
3805 	      last_sec = NULL;
3806 	      for (os = first_os; os != NULL; os = os->next)
3807 		{
3808 		  os->constraint = -2 - os->constraint;
3809 		  if (os->bfd_section != NULL
3810 		      && os->bfd_section->owner != NULL)
3811 		    {
3812 		      last_sec = os->bfd_section;
3813 		      if (first_sec == NULL)
3814 			first_sec = last_sec;
3815 		    }
3816 		  if (os == last_os)
3817 		    break;
3818 		}
3819 	      if (last_sec != NULL)
3820 		{
3821 		  asection *sec = where->bfd_section;
3822 		  if (sec == NULL)
3823 		    sec = output_prev_sec_find (where);
3824 
3825 		  /* The place we want to insert must come after the
3826 		     sections we are moving.  So if we find no
3827 		     section or if the section is the same as our
3828 		     last section, then no move is needed.  */
3829 		  if (sec != NULL && sec != last_sec)
3830 		    {
3831 		      /* Trim them off.  */
3832 		      if (first_sec->prev != NULL)
3833 			first_sec->prev->next = last_sec->next;
3834 		      else
3835 			link_info.output_bfd->sections = last_sec->next;
3836 		      if (last_sec->next != NULL)
3837 			last_sec->next->prev = first_sec->prev;
3838 		      else
3839 			link_info.output_bfd->section_last = first_sec->prev;
3840 		      /* Add back.  */
3841 		      last_sec->next = sec->next;
3842 		      if (sec->next != NULL)
3843 			sec->next->prev = last_sec;
3844 		      else
3845 			link_info.output_bfd->section_last = last_sec;
3846 		      first_sec->prev = sec;
3847 		      sec->next = first_sec;
3848 		    }
3849 		}
3850 
3851 	      first_os = NULL;
3852 	      last_os = NULL;
3853 	    }
3854 
3855 	  ptr = insert_os_after (where);
3856 	  /* Snip everything after the abs_section output statement we
3857 	     know is at the start of the list, up to and including
3858 	     the insert statement we are currently processing.  */
3859 	  first = lang_output_section_statement.head->header.next;
3860 	  lang_output_section_statement.head->header.next = (*s)->header.next;
3861 	  /* Add them back where they belong.  */
3862 	  *s = *ptr;
3863 	  if (*s == NULL)
3864 	    statement_list.tail = s;
3865 	  *ptr = first;
3866 	  s = &lang_output_section_statement.head;
3867 	}
3868     }
3869 
3870   /* Undo constraint twiddling.  */
3871   for (os = first_os; os != NULL; os = os->next)
3872     {
3873       os->constraint = -2 - os->constraint;
3874       if (os == last_os)
3875 	break;
3876     }
3877 }
3878 
3879 /* An output section might have been removed after its statement was
3880    added.  For example, ldemul_before_allocation can remove dynamic
3881    sections if they turn out to be not needed.  Clean them up here.  */
3882 
3883 void
strip_excluded_output_sections(void)3884 strip_excluded_output_sections (void)
3885 {
3886   lang_output_section_statement_type *os;
3887 
3888   /* Run lang_size_sections (if not already done).  */
3889   if (expld.phase != lang_mark_phase_enum)
3890     {
3891       expld.phase = lang_mark_phase_enum;
3892       expld.dataseg.phase = exp_dataseg_none;
3893       one_lang_size_sections_pass (NULL, FALSE);
3894       lang_reset_memory_regions ();
3895     }
3896 
3897   for (os = &lang_output_section_statement.head->output_section_statement;
3898        os != NULL;
3899        os = os->next)
3900     {
3901       asection *output_section;
3902       bfd_boolean exclude;
3903 
3904       if (os->constraint < 0)
3905 	continue;
3906 
3907       output_section = os->bfd_section;
3908       if (output_section == NULL)
3909 	continue;
3910 
3911       exclude = (output_section->rawsize == 0
3912 		 && (output_section->flags & SEC_KEEP) == 0
3913 		 && !bfd_section_removed_from_list (link_info.output_bfd,
3914 						    output_section));
3915 
3916       /* Some sections have not yet been sized, notably .gnu.version,
3917 	 .dynsym, .dynstr and .hash.  These all have SEC_LINKER_CREATED
3918 	 input sections, so don't drop output sections that have such
3919 	 input sections unless they are also marked SEC_EXCLUDE.  */
3920       if (exclude && output_section->map_head.s != NULL)
3921 	{
3922 	  asection *s;
3923 
3924 	  for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
3925 	    if ((s->flags & SEC_EXCLUDE) == 0
3926 		&& ((s->flags & SEC_LINKER_CREATED) != 0
3927 		    || link_info.emitrelocations))
3928 	      {
3929 		exclude = FALSE;
3930 		break;
3931 	      }
3932 	}
3933 
3934       if (exclude)
3935 	{
3936 	  /* We don't set bfd_section to NULL since bfd_section of the
3937 	     removed output section statement may still be used.  */
3938 	  if (!os->update_dot)
3939 	    os->ignored = TRUE;
3940 	  output_section->flags |= SEC_EXCLUDE;
3941 	  bfd_section_list_remove (link_info.output_bfd, output_section);
3942 	  link_info.output_bfd->section_count--;
3943 	}
3944     }
3945 }
3946 
3947 /* Called from ldwrite to clear out asection.map_head and
3948    asection.map_tail for use as link_orders in ldwrite.
3949    FIXME: Except for sh64elf.em which starts creating link_orders in
3950    its after_allocation routine so needs to call it early.  */
3951 
3952 void
lang_clear_os_map(void)3953 lang_clear_os_map (void)
3954 {
3955   lang_output_section_statement_type *os;
3956 
3957   if (map_head_is_link_order)
3958     return;
3959 
3960   for (os = &lang_output_section_statement.head->output_section_statement;
3961        os != NULL;
3962        os = os->next)
3963     {
3964       asection *output_section;
3965 
3966       if (os->constraint < 0)
3967 	continue;
3968 
3969       output_section = os->bfd_section;
3970       if (output_section == NULL)
3971 	continue;
3972 
3973       /* TODO: Don't just junk map_head.s, turn them into link_orders.  */
3974       output_section->map_head.link_order = NULL;
3975       output_section->map_tail.link_order = NULL;
3976     }
3977 
3978   /* Stop future calls to lang_add_section from messing with map_head
3979      and map_tail link_order fields.  */
3980   map_head_is_link_order = TRUE;
3981 }
3982 
3983 static void
print_output_section_statement(lang_output_section_statement_type * output_section_statement)3984 print_output_section_statement
3985   (lang_output_section_statement_type *output_section_statement)
3986 {
3987   asection *section = output_section_statement->bfd_section;
3988   int len;
3989 
3990   if (output_section_statement != abs_output_section)
3991     {
3992       minfo ("\n%s", output_section_statement->name);
3993 
3994       if (section != NULL)
3995 	{
3996 	  print_dot = section->vma;
3997 
3998 	  len = strlen (output_section_statement->name);
3999 	  if (len >= SECTION_NAME_MAP_LENGTH - 1)
4000 	    {
4001 	      print_nl ();
4002 	      len = 0;
4003 	    }
4004 	  while (len < SECTION_NAME_MAP_LENGTH)
4005 	    {
4006 	      print_space ();
4007 	      ++len;
4008 	    }
4009 
4010 	  minfo ("0x%V %W", section->vma, section->size);
4011 
4012 	  if (section->vma != section->lma)
4013 	    minfo (_(" load address 0x%V"), section->lma);
4014 
4015 	  if (output_section_statement->update_dot_tree != NULL)
4016 	    exp_fold_tree (output_section_statement->update_dot_tree,
4017 			   bfd_abs_section_ptr, &print_dot);
4018 	}
4019 
4020       print_nl ();
4021     }
4022 
4023   print_statement_list (output_section_statement->children.head,
4024 			output_section_statement);
4025 }
4026 
4027 static void
print_assignment(lang_assignment_statement_type * assignment,lang_output_section_statement_type * output_section)4028 print_assignment (lang_assignment_statement_type *assignment,
4029 		  lang_output_section_statement_type *output_section)
4030 {
4031   unsigned int i;
4032   bfd_boolean is_dot;
4033   etree_type *tree;
4034   asection *osec;
4035 
4036   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4037     print_space ();
4038 
4039   if (assignment->exp->type.node_class == etree_assert)
4040     {
4041       is_dot = FALSE;
4042       tree = assignment->exp->assert_s.child;
4043     }
4044   else
4045     {
4046       const char *dst = assignment->exp->assign.dst;
4047 
4048       is_dot = (dst[0] == '.' && dst[1] == 0);
4049       if (!is_dot)
4050 	expld.assign_name = dst;
4051       tree = assignment->exp->assign.src;
4052     }
4053 
4054   osec = output_section->bfd_section;
4055   if (osec == NULL)
4056     osec = bfd_abs_section_ptr;
4057   exp_fold_tree (tree, osec, &print_dot);
4058   if (expld.result.valid_p)
4059     {
4060       bfd_vma value;
4061 
4062       if (assignment->exp->type.node_class == etree_assert
4063 	  || is_dot
4064 	  || expld.assign_name != NULL)
4065 	{
4066 	  value = expld.result.value;
4067 
4068 	  if (expld.result.section != NULL)
4069 	    value += expld.result.section->vma;
4070 
4071 	  minfo ("0x%V", value);
4072 	  if (is_dot)
4073 	    print_dot = value;
4074 	}
4075       else
4076 	{
4077 	  struct bfd_link_hash_entry *h;
4078 
4079 	  h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
4080 				    FALSE, FALSE, TRUE);
4081 	  if (h)
4082 	    {
4083 	      value = h->u.def.value;
4084 	      value += h->u.def.section->output_section->vma;
4085 	      value += h->u.def.section->output_offset;
4086 
4087 	      minfo ("[0x%V]", value);
4088 	    }
4089 	  else
4090 	    minfo ("[unresolved]");
4091 	}
4092     }
4093   else
4094     {
4095       minfo ("*undef*   ");
4096 #ifdef BFD64
4097       minfo ("        ");
4098 #endif
4099     }
4100   expld.assign_name = NULL;
4101 
4102   minfo ("                ");
4103   exp_print_tree (assignment->exp);
4104   print_nl ();
4105 }
4106 
4107 static void
print_input_statement(lang_input_statement_type * statm)4108 print_input_statement (lang_input_statement_type *statm)
4109 {
4110   if (statm->filename != NULL
4111       && (statm->the_bfd == NULL
4112 	  || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4113     fprintf (config.map_file, "LOAD %s\n", statm->filename);
4114 }
4115 
4116 /* Print all symbols defined in a particular section.  This is called
4117    via bfd_link_hash_traverse, or by print_all_symbols.  */
4118 
4119 static bfd_boolean
print_one_symbol(struct bfd_link_hash_entry * hash_entry,void * ptr)4120 print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4121 {
4122   asection *sec = (asection *) ptr;
4123 
4124   if ((hash_entry->type == bfd_link_hash_defined
4125        || hash_entry->type == bfd_link_hash_defweak)
4126       && sec == hash_entry->u.def.section)
4127     {
4128       int i;
4129 
4130       for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4131 	print_space ();
4132       minfo ("0x%V   ",
4133 	     (hash_entry->u.def.value
4134 	      + hash_entry->u.def.section->output_offset
4135 	      + hash_entry->u.def.section->output_section->vma));
4136 
4137       minfo ("             %T\n", hash_entry->root.string);
4138     }
4139 
4140   return TRUE;
4141 }
4142 
4143 static int
hash_entry_addr_cmp(const void * a,const void * b)4144 hash_entry_addr_cmp (const void *a, const void *b)
4145 {
4146   const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4147   const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4148 
4149   if (l->u.def.value < r->u.def.value)
4150     return -1;
4151   else if (l->u.def.value > r->u.def.value)
4152     return 1;
4153   else
4154     return 0;
4155 }
4156 
4157 static void
print_all_symbols(asection * sec)4158 print_all_symbols (asection *sec)
4159 {
4160   input_section_userdata_type *ud
4161     = (input_section_userdata_type *) get_userdata (sec);
4162   struct map_symbol_def *def;
4163   struct bfd_link_hash_entry **entries;
4164   unsigned int i;
4165 
4166   if (!ud)
4167     return;
4168 
4169   *ud->map_symbol_def_tail = 0;
4170 
4171   /* Sort the symbols by address.  */
4172   entries = (struct bfd_link_hash_entry **)
4173       obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
4174 
4175   for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4176     entries[i] = def->entry;
4177 
4178   qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4179 	 hash_entry_addr_cmp);
4180 
4181   /* Print the symbols.  */
4182   for (i = 0; i < ud->map_symbol_def_count; i++)
4183     print_one_symbol (entries[i], sec);
4184 
4185   obstack_free (&map_obstack, entries);
4186 }
4187 
4188 /* Print information about an input section to the map file.  */
4189 
4190 static void
print_input_section(asection * i,bfd_boolean is_discarded)4191 print_input_section (asection *i, bfd_boolean is_discarded)
4192 {
4193   bfd_size_type size = i->size;
4194   int len;
4195   bfd_vma addr;
4196 
4197   init_opb ();
4198 
4199   print_space ();
4200   minfo ("%s", i->name);
4201 
4202   len = 1 + strlen (i->name);
4203   if (len >= SECTION_NAME_MAP_LENGTH - 1)
4204     {
4205       print_nl ();
4206       len = 0;
4207     }
4208   while (len < SECTION_NAME_MAP_LENGTH)
4209     {
4210       print_space ();
4211       ++len;
4212     }
4213 
4214   if (i->output_section != NULL
4215       && i->output_section->owner == link_info.output_bfd)
4216     addr = i->output_section->vma + i->output_offset;
4217   else
4218     {
4219       addr = print_dot;
4220       if (!is_discarded)
4221 	size = 0;
4222     }
4223 
4224   minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
4225 
4226   if (size != i->rawsize && i->rawsize != 0)
4227     {
4228       len = SECTION_NAME_MAP_LENGTH + 3;
4229 #ifdef BFD64
4230       len += 16;
4231 #else
4232       len += 8;
4233 #endif
4234       while (len > 0)
4235 	{
4236 	  print_space ();
4237 	  --len;
4238 	}
4239 
4240       minfo (_("%W (size before relaxing)\n"), i->rawsize);
4241     }
4242 
4243   if (i->output_section != NULL
4244       && i->output_section->owner == link_info.output_bfd)
4245     {
4246       if (link_info.reduce_memory_overheads)
4247 	bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4248       else
4249 	print_all_symbols (i);
4250 
4251       /* Update print_dot, but make sure that we do not move it
4252 	 backwards - this could happen if we have overlays and a
4253 	 later overlay is shorter than an earier one.  */
4254       if (addr + TO_ADDR (size) > print_dot)
4255 	print_dot = addr + TO_ADDR (size);
4256     }
4257 }
4258 
4259 static void
print_fill_statement(lang_fill_statement_type * fill)4260 print_fill_statement (lang_fill_statement_type *fill)
4261 {
4262   size_t size;
4263   unsigned char *p;
4264   fputs (" FILL mask 0x", config.map_file);
4265   for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4266     fprintf (config.map_file, "%02x", *p);
4267   fputs ("\n", config.map_file);
4268 }
4269 
4270 static void
print_data_statement(lang_data_statement_type * data)4271 print_data_statement (lang_data_statement_type *data)
4272 {
4273   int i;
4274   bfd_vma addr;
4275   bfd_size_type size;
4276   const char *name;
4277 
4278   init_opb ();
4279   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4280     print_space ();
4281 
4282   addr = data->output_offset;
4283   if (data->output_section != NULL)
4284     addr += data->output_section->vma;
4285 
4286   switch (data->type)
4287     {
4288     default:
4289       abort ();
4290     case BYTE:
4291       size = BYTE_SIZE;
4292       name = "BYTE";
4293       break;
4294     case SHORT:
4295       size = SHORT_SIZE;
4296       name = "SHORT";
4297       break;
4298     case LONG:
4299       size = LONG_SIZE;
4300       name = "LONG";
4301       break;
4302     case QUAD:
4303       size = QUAD_SIZE;
4304       name = "QUAD";
4305       break;
4306     case SQUAD:
4307       size = QUAD_SIZE;
4308       name = "SQUAD";
4309       break;
4310     }
4311 
4312   minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
4313 
4314   if (data->exp->type.node_class != etree_value)
4315     {
4316       print_space ();
4317       exp_print_tree (data->exp);
4318     }
4319 
4320   print_nl ();
4321 
4322   print_dot = addr + TO_ADDR (size);
4323 }
4324 
4325 /* Print an address statement.  These are generated by options like
4326    -Ttext.  */
4327 
4328 static void
print_address_statement(lang_address_statement_type * address)4329 print_address_statement (lang_address_statement_type *address)
4330 {
4331   minfo (_("Address of section %s set to "), address->section_name);
4332   exp_print_tree (address->address);
4333   print_nl ();
4334 }
4335 
4336 /* Print a reloc statement.  */
4337 
4338 static void
print_reloc_statement(lang_reloc_statement_type * reloc)4339 print_reloc_statement (lang_reloc_statement_type *reloc)
4340 {
4341   int i;
4342   bfd_vma addr;
4343   bfd_size_type size;
4344 
4345   init_opb ();
4346   for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4347     print_space ();
4348 
4349   addr = reloc->output_offset;
4350   if (reloc->output_section != NULL)
4351     addr += reloc->output_section->vma;
4352 
4353   size = bfd_get_reloc_size (reloc->howto);
4354 
4355   minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
4356 
4357   if (reloc->name != NULL)
4358     minfo ("%s+", reloc->name);
4359   else
4360     minfo ("%s+", reloc->section->name);
4361 
4362   exp_print_tree (reloc->addend_exp);
4363 
4364   print_nl ();
4365 
4366   print_dot = addr + TO_ADDR (size);
4367 }
4368 
4369 static void
print_padding_statement(lang_padding_statement_type * s)4370 print_padding_statement (lang_padding_statement_type *s)
4371 {
4372   int len;
4373   bfd_vma addr;
4374 
4375   init_opb ();
4376   minfo (" *fill*");
4377 
4378   len = sizeof " *fill*" - 1;
4379   while (len < SECTION_NAME_MAP_LENGTH)
4380     {
4381       print_space ();
4382       ++len;
4383     }
4384 
4385   addr = s->output_offset;
4386   if (s->output_section != NULL)
4387     addr += s->output_section->vma;
4388   minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4389 
4390   if (s->fill->size != 0)
4391     {
4392       size_t size;
4393       unsigned char *p;
4394       for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4395 	fprintf (config.map_file, "%02x", *p);
4396     }
4397 
4398   print_nl ();
4399 
4400   print_dot = addr + TO_ADDR (s->size);
4401 }
4402 
4403 static void
print_wild_statement(lang_wild_statement_type * w,lang_output_section_statement_type * os)4404 print_wild_statement (lang_wild_statement_type *w,
4405 		      lang_output_section_statement_type *os)
4406 {
4407   struct wildcard_list *sec;
4408 
4409   print_space ();
4410 
4411   if (w->filenames_sorted)
4412     minfo ("SORT(");
4413   if (w->filename != NULL)
4414     minfo ("%s", w->filename);
4415   else
4416     minfo ("*");
4417   if (w->filenames_sorted)
4418     minfo (")");
4419 
4420   minfo ("(");
4421   for (sec = w->section_list; sec; sec = sec->next)
4422     {
4423       if (sec->spec.sorted)
4424 	minfo ("SORT(");
4425       if (sec->spec.exclude_name_list != NULL)
4426 	{
4427 	  name_list *tmp;
4428 	  minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4429 	  for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4430 	    minfo (" %s", tmp->name);
4431 	  minfo (") ");
4432 	}
4433       if (sec->spec.name != NULL)
4434 	minfo ("%s", sec->spec.name);
4435       else
4436 	minfo ("*");
4437       if (sec->spec.sorted)
4438 	minfo (")");
4439       if (sec->next)
4440 	minfo (" ");
4441     }
4442   minfo (")");
4443 
4444   print_nl ();
4445 
4446   print_statement_list (w->children.head, os);
4447 }
4448 
4449 /* Print a group statement.  */
4450 
4451 static void
print_group(lang_group_statement_type * s,lang_output_section_statement_type * os)4452 print_group (lang_group_statement_type *s,
4453 	     lang_output_section_statement_type *os)
4454 {
4455   fprintf (config.map_file, "START GROUP\n");
4456   print_statement_list (s->children.head, os);
4457   fprintf (config.map_file, "END GROUP\n");
4458 }
4459 
4460 /* Print the list of statements in S.
4461    This can be called for any statement type.  */
4462 
4463 static void
print_statement_list(lang_statement_union_type * s,lang_output_section_statement_type * os)4464 print_statement_list (lang_statement_union_type *s,
4465 		      lang_output_section_statement_type *os)
4466 {
4467   while (s != NULL)
4468     {
4469       print_statement (s, os);
4470       s = s->header.next;
4471     }
4472 }
4473 
4474 /* Print the first statement in statement list S.
4475    This can be called for any statement type.  */
4476 
4477 static void
print_statement(lang_statement_union_type * s,lang_output_section_statement_type * os)4478 print_statement (lang_statement_union_type *s,
4479 		 lang_output_section_statement_type *os)
4480 {
4481   switch (s->header.type)
4482     {
4483     default:
4484       fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4485       FAIL ();
4486       break;
4487     case lang_constructors_statement_enum:
4488       if (constructor_list.head != NULL)
4489 	{
4490 	  if (constructors_sorted)
4491 	    minfo (" SORT (CONSTRUCTORS)\n");
4492 	  else
4493 	    minfo (" CONSTRUCTORS\n");
4494 	  print_statement_list (constructor_list.head, os);
4495 	}
4496       break;
4497     case lang_wild_statement_enum:
4498       print_wild_statement (&s->wild_statement, os);
4499       break;
4500     case lang_address_statement_enum:
4501       print_address_statement (&s->address_statement);
4502       break;
4503     case lang_object_symbols_statement_enum:
4504       minfo (" CREATE_OBJECT_SYMBOLS\n");
4505       break;
4506     case lang_fill_statement_enum:
4507       print_fill_statement (&s->fill_statement);
4508       break;
4509     case lang_data_statement_enum:
4510       print_data_statement (&s->data_statement);
4511       break;
4512     case lang_reloc_statement_enum:
4513       print_reloc_statement (&s->reloc_statement);
4514       break;
4515     case lang_input_section_enum:
4516       print_input_section (s->input_section.section, FALSE);
4517       break;
4518     case lang_padding_statement_enum:
4519       print_padding_statement (&s->padding_statement);
4520       break;
4521     case lang_output_section_statement_enum:
4522       print_output_section_statement (&s->output_section_statement);
4523       break;
4524     case lang_assignment_statement_enum:
4525       print_assignment (&s->assignment_statement, os);
4526       break;
4527     case lang_target_statement_enum:
4528       fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4529       break;
4530     case lang_output_statement_enum:
4531       minfo ("OUTPUT(%s", s->output_statement.name);
4532       if (output_target != NULL)
4533 	minfo (" %s", output_target);
4534       minfo (")\n");
4535       break;
4536     case lang_input_statement_enum:
4537       print_input_statement (&s->input_statement);
4538       break;
4539     case lang_group_statement_enum:
4540       print_group (&s->group_statement, os);
4541       break;
4542     case lang_insert_statement_enum:
4543       minfo ("INSERT %s %s\n",
4544 	     s->insert_statement.is_before ? "BEFORE" : "AFTER",
4545 	     s->insert_statement.where);
4546       break;
4547     }
4548 }
4549 
4550 static void
print_statements(void)4551 print_statements (void)
4552 {
4553   print_statement_list (statement_list.head, abs_output_section);
4554 }
4555 
4556 /* Print the first N statements in statement list S to STDERR.
4557    If N == 0, nothing is printed.
4558    If N < 0, the entire list is printed.
4559    Intended to be called from GDB.  */
4560 
4561 void
dprint_statement(lang_statement_union_type * s,int n)4562 dprint_statement (lang_statement_union_type *s, int n)
4563 {
4564   FILE *map_save = config.map_file;
4565 
4566   config.map_file = stderr;
4567 
4568   if (n < 0)
4569     print_statement_list (s, abs_output_section);
4570   else
4571     {
4572       while (s && --n >= 0)
4573 	{
4574 	  print_statement (s, abs_output_section);
4575 	  s = s->header.next;
4576 	}
4577     }
4578 
4579   config.map_file = map_save;
4580 }
4581 
4582 static void
insert_pad(lang_statement_union_type ** ptr,fill_type * fill,bfd_size_type alignment_needed,asection * output_section,bfd_vma dot)4583 insert_pad (lang_statement_union_type **ptr,
4584 	    fill_type *fill,
4585 	    bfd_size_type alignment_needed,
4586 	    asection *output_section,
4587 	    bfd_vma dot)
4588 {
4589   static fill_type zero_fill;
4590   lang_statement_union_type *pad = NULL;
4591 
4592   if (ptr != &statement_list.head)
4593     pad = ((lang_statement_union_type *)
4594 	   ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4595   if (pad != NULL
4596       && pad->header.type == lang_padding_statement_enum
4597       && pad->padding_statement.output_section == output_section)
4598     {
4599       /* Use the existing pad statement.  */
4600     }
4601   else if ((pad = *ptr) != NULL
4602 	   && pad->header.type == lang_padding_statement_enum
4603 	   && pad->padding_statement.output_section == output_section)
4604     {
4605       /* Use the existing pad statement.  */
4606     }
4607   else
4608     {
4609       /* Make a new padding statement, linked into existing chain.  */
4610       pad = (lang_statement_union_type *)
4611 	  stat_alloc (sizeof (lang_padding_statement_type));
4612       pad->header.next = *ptr;
4613       *ptr = pad;
4614       pad->header.type = lang_padding_statement_enum;
4615       pad->padding_statement.output_section = output_section;
4616       if (fill == NULL)
4617 	fill = &zero_fill;
4618       pad->padding_statement.fill = fill;
4619     }
4620   pad->padding_statement.output_offset = dot - output_section->vma;
4621   pad->padding_statement.size = alignment_needed;
4622   output_section->size = TO_SIZE (dot + TO_ADDR (alignment_needed)
4623 				  - output_section->vma);
4624 }
4625 
4626 /* Work out how much this section will move the dot point.  */
4627 
4628 static bfd_vma
size_input_section(lang_statement_union_type ** this_ptr,lang_output_section_statement_type * output_section_statement,fill_type * fill,bfd_vma dot)4629 size_input_section
4630   (lang_statement_union_type **this_ptr,
4631    lang_output_section_statement_type *output_section_statement,
4632    fill_type *fill,
4633    bfd_vma dot)
4634 {
4635   lang_input_section_type *is = &((*this_ptr)->input_section);
4636   asection *i = is->section;
4637   asection *o = output_section_statement->bfd_section;
4638 
4639   if (i->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4640     i->output_offset = i->vma - o->vma;
4641   else if ((i->flags & SEC_EXCLUDE) != 0)
4642     i->output_offset = dot - o->vma;
4643   else
4644     {
4645       bfd_size_type alignment_needed;
4646 
4647       /* Align this section first to the input sections requirement,
4648 	 then to the output section's requirement.  If this alignment
4649 	 is greater than any seen before, then record it too.  Perform
4650 	 the alignment by inserting a magic 'padding' statement.  */
4651 
4652       if (output_section_statement->subsection_alignment != -1)
4653 	i->alignment_power = output_section_statement->subsection_alignment;
4654 
4655       if (o->alignment_power < i->alignment_power)
4656 	o->alignment_power = i->alignment_power;
4657 
4658       alignment_needed = align_power (dot, i->alignment_power) - dot;
4659 
4660       if (alignment_needed != 0)
4661 	{
4662 	  insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4663 	  dot += alignment_needed;
4664 	}
4665 
4666       /* Remember where in the output section this input section goes.  */
4667       i->output_offset = dot - o->vma;
4668 
4669       /* Mark how big the output section must be to contain this now.  */
4670       dot += TO_ADDR (i->size);
4671       o->size = TO_SIZE (dot - o->vma);
4672     }
4673 
4674   return dot;
4675 }
4676 
4677 static int
sort_sections_by_lma(const void * arg1,const void * arg2)4678 sort_sections_by_lma (const void *arg1, const void *arg2)
4679 {
4680   const asection *sec1 = *(const asection **) arg1;
4681   const asection *sec2 = *(const asection **) arg2;
4682 
4683   if (bfd_section_lma (sec1->owner, sec1)
4684       < bfd_section_lma (sec2->owner, sec2))
4685     return -1;
4686   else if (bfd_section_lma (sec1->owner, sec1)
4687 	   > bfd_section_lma (sec2->owner, sec2))
4688     return 1;
4689   else if (sec1->id < sec2->id)
4690     return -1;
4691   else if (sec1->id > sec2->id)
4692     return 1;
4693 
4694   return 0;
4695 }
4696 
4697 #define IGNORE_SECTION(s) \
4698   ((s->flags & SEC_ALLOC) == 0				\
4699    || ((s->flags & SEC_THREAD_LOCAL) != 0		\
4700 	&& (s->flags & SEC_LOAD) == 0))
4701 
4702 /* Check to see if any allocated sections overlap with other allocated
4703    sections.  This can happen if a linker script specifies the output
4704    section addresses of the two sections.  Also check whether any memory
4705    region has overflowed.  */
4706 
4707 static void
lang_check_section_addresses(void)4708 lang_check_section_addresses (void)
4709 {
4710   asection *s, *p;
4711   asection **sections, **spp;
4712   unsigned int count;
4713   bfd_vma s_start;
4714   bfd_vma s_end;
4715   bfd_vma p_start;
4716   bfd_vma p_end;
4717   bfd_size_type amt;
4718   lang_memory_region_type *m;
4719 
4720   if (bfd_count_sections (link_info.output_bfd) <= 1)
4721     return;
4722 
4723   amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4724   sections = (asection **) xmalloc (amt);
4725 
4726   /* Scan all sections in the output list.  */
4727   count = 0;
4728   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4729     {
4730       /* Only consider loadable sections with real contents.  */
4731       if (!(s->flags & SEC_LOAD)
4732 	  || !(s->flags & SEC_ALLOC)
4733 	  || s->size == 0)
4734 	continue;
4735 
4736       sections[count] = s;
4737       count++;
4738     }
4739 
4740   if (count <= 1)
4741     return;
4742 
4743   qsort (sections, (size_t) count, sizeof (asection *),
4744 	 sort_sections_by_lma);
4745 
4746   spp = sections;
4747   s = *spp++;
4748   s_start = s->lma;
4749   s_end = s_start + TO_ADDR (s->size) - 1;
4750   for (count--; count; count--)
4751     {
4752       /* We must check the sections' LMA addresses not their VMA
4753 	 addresses because overlay sections can have overlapping VMAs
4754 	 but they must have distinct LMAs.  */
4755       p = s;
4756       p_start = s_start;
4757       p_end = s_end;
4758       s = *spp++;
4759       s_start = s->lma;
4760       s_end = s_start + TO_ADDR (s->size) - 1;
4761 
4762       /* Look for an overlap.  We have sorted sections by lma, so we
4763 	 know that s_start >= p_start.  Besides the obvious case of
4764 	 overlap when the current section starts before the previous
4765 	 one ends, we also must have overlap if the previous section
4766 	 wraps around the address space.  */
4767       if (s_start <= p_end
4768 	  || p_end < p_start)
4769 	einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
4770 	       s->name, s_start, s_end, p->name, p_start, p_end);
4771     }
4772 
4773   free (sections);
4774 
4775   /* If any memory region has overflowed, report by how much.
4776      We do not issue this diagnostic for regions that had sections
4777      explicitly placed outside their bounds; os_region_check's
4778      diagnostics are adequate for that case.
4779 
4780      FIXME: It is conceivable that m->current - (m->origin + m->length)
4781      might overflow a 32-bit integer.  There is, alas, no way to print
4782      a bfd_vma quantity in decimal.  */
4783   for (m = lang_memory_region_list; m; m = m->next)
4784     if (m->had_full_message)
4785       einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4786 	     m->name_list.name, (long)(m->current - (m->origin + m->length)));
4787 
4788 }
4789 
4790 /* Make sure the new address is within the region.  We explicitly permit the
4791    current address to be at the exact end of the region when the address is
4792    non-zero, in case the region is at the end of addressable memory and the
4793    calculation wraps around.  */
4794 
4795 static void
os_region_check(lang_output_section_statement_type * os,lang_memory_region_type * region,etree_type * tree,bfd_vma rbase)4796 os_region_check (lang_output_section_statement_type *os,
4797 		 lang_memory_region_type *region,
4798 		 etree_type *tree,
4799 		 bfd_vma rbase)
4800 {
4801   if ((region->current < region->origin
4802        || (region->current - region->origin > region->length))
4803       && ((region->current != region->origin + region->length)
4804 	  || rbase == 0))
4805     {
4806       if (tree != NULL)
4807 	{
4808 	  einfo (_("%X%P: address 0x%v of %B section `%s'"
4809 		   " is not within region `%s'\n"),
4810 		 region->current,
4811 		 os->bfd_section->owner,
4812 		 os->bfd_section->name,
4813 		 region->name_list.name);
4814 	}
4815       else if (!region->had_full_message)
4816 	{
4817 	  region->had_full_message = TRUE;
4818 
4819 	  einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4820 		 os->bfd_section->owner,
4821 		 os->bfd_section->name,
4822 		 region->name_list.name);
4823 	}
4824     }
4825 }
4826 
4827 /* Set the sizes for all the output sections.  */
4828 
4829 static bfd_vma
lang_size_sections_1(lang_statement_union_type ** prev,lang_output_section_statement_type * output_section_statement,fill_type * fill,bfd_vma dot,bfd_boolean * relax,bfd_boolean check_regions)4830 lang_size_sections_1
4831   (lang_statement_union_type **prev,
4832    lang_output_section_statement_type *output_section_statement,
4833    fill_type *fill,
4834    bfd_vma dot,
4835    bfd_boolean *relax,
4836    bfd_boolean check_regions)
4837 {
4838   lang_statement_union_type *s;
4839 
4840   /* Size up the sections from their constituent parts.  */
4841   for (s = *prev; s != NULL; s = s->header.next)
4842     {
4843       switch (s->header.type)
4844 	{
4845 	case lang_output_section_statement_enum:
4846 	  {
4847 	    bfd_vma newdot, after, dotdelta;
4848 	    lang_output_section_statement_type *os;
4849 	    lang_memory_region_type *r;
4850 	    int section_alignment = 0;
4851 
4852 	    os = &s->output_section_statement;
4853 	    if (os->constraint == -1)
4854 	      break;
4855 
4856 	    /* FIXME: We shouldn't need to zero section vmas for ld -r
4857 	       here, in lang_insert_orphan, or in the default linker scripts.
4858 	       This is covering for coff backend linker bugs.  See PR6945.  */
4859 	    if (os->addr_tree == NULL
4860 		&& link_info.relocatable
4861 		&& (bfd_get_flavour (link_info.output_bfd)
4862 		    == bfd_target_coff_flavour))
4863 	      os->addr_tree = exp_intop (0);
4864 	    if (os->addr_tree != NULL)
4865 	      {
4866 		os->processed_vma = FALSE;
4867 		exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4868 
4869 		if (expld.result.valid_p)
4870 		  {
4871 		    dot = expld.result.value;
4872 		    if (expld.result.section != NULL)
4873 		      dot += expld.result.section->vma;
4874 		  }
4875 		else if (expld.phase != lang_mark_phase_enum)
4876 		  einfo (_("%F%S: non constant or forward reference"
4877 			   " address expression for section %s\n"),
4878 			 os->addr_tree, os->name);
4879 	      }
4880 
4881 	    if (os->bfd_section == NULL)
4882 	      /* This section was removed or never actually created.  */
4883 	      break;
4884 
4885 	    /* If this is a COFF shared library section, use the size and
4886 	       address from the input section.  FIXME: This is COFF
4887 	       specific; it would be cleaner if there were some other way
4888 	       to do this, but nothing simple comes to mind.  */
4889 	    if (((bfd_get_flavour (link_info.output_bfd)
4890 		  == bfd_target_ecoff_flavour)
4891 		 || (bfd_get_flavour (link_info.output_bfd)
4892 		     == bfd_target_coff_flavour))
4893 		&& (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4894 	      {
4895 		asection *input;
4896 
4897 		if (os->children.head == NULL
4898 		    || os->children.head->header.next != NULL
4899 		    || (os->children.head->header.type
4900 			!= lang_input_section_enum))
4901 		  einfo (_("%P%X: Internal error on COFF shared library"
4902 			   " section %s\n"), os->name);
4903 
4904 		input = os->children.head->input_section.section;
4905 		bfd_set_section_vma (os->bfd_section->owner,
4906 				     os->bfd_section,
4907 				     bfd_section_vma (input->owner, input));
4908 		os->bfd_section->size = input->size;
4909 		break;
4910 	      }
4911 
4912 	    newdot = dot;
4913 	    dotdelta = 0;
4914 	    if (bfd_is_abs_section (os->bfd_section))
4915 	      {
4916 		/* No matter what happens, an abs section starts at zero.  */
4917 		ASSERT (os->bfd_section->vma == 0);
4918 	      }
4919 	    else
4920 	      {
4921 		if (os->addr_tree == NULL)
4922 		  {
4923 		    /* No address specified for this section, get one
4924 		       from the region specification.  */
4925 		    if (os->region == NULL
4926 			|| ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4927 			    && os->region->name_list.name[0] == '*'
4928 			    && strcmp (os->region->name_list.name,
4929 				       DEFAULT_MEMORY_REGION) == 0))
4930 		      {
4931 			os->region = lang_memory_default (os->bfd_section);
4932 		      }
4933 
4934 		    /* If a loadable section is using the default memory
4935 		       region, and some non default memory regions were
4936 		       defined, issue an error message.  */
4937 		    if (!os->ignored
4938 			&& !IGNORE_SECTION (os->bfd_section)
4939 			&& ! link_info.relocatable
4940 			&& check_regions
4941 			&& strcmp (os->region->name_list.name,
4942 				   DEFAULT_MEMORY_REGION) == 0
4943 			&& lang_memory_region_list != NULL
4944 			&& (strcmp (lang_memory_region_list->name_list.name,
4945 				    DEFAULT_MEMORY_REGION) != 0
4946 			    || lang_memory_region_list->next != NULL)
4947 			&& expld.phase != lang_mark_phase_enum)
4948 		      {
4949 			/* By default this is an error rather than just a
4950 			   warning because if we allocate the section to the
4951 			   default memory region we can end up creating an
4952 			   excessively large binary, or even seg faulting when
4953 			   attempting to perform a negative seek.  See
4954 			   sources.redhat.com/ml/binutils/2003-04/msg00423.html
4955 			   for an example of this.  This behaviour can be
4956 			   overridden by the using the --no-check-sections
4957 			   switch.  */
4958 			if (command_line.check_section_addresses)
4959 			  einfo (_("%P%F: error: no memory region specified"
4960 				   " for loadable section `%s'\n"),
4961 				 bfd_get_section_name (link_info.output_bfd,
4962 						       os->bfd_section));
4963 			else
4964 			  einfo (_("%P: warning: no memory region specified"
4965 				   " for loadable section `%s'\n"),
4966 				 bfd_get_section_name (link_info.output_bfd,
4967 						       os->bfd_section));
4968 		      }
4969 
4970 		    newdot = os->region->current;
4971 		    section_alignment = os->bfd_section->alignment_power;
4972 		  }
4973 		else
4974 		  section_alignment = os->section_alignment;
4975 
4976 		/* Align to what the section needs.  */
4977 		if (section_alignment > 0)
4978 		  {
4979 		    bfd_vma savedot = newdot;
4980 		    newdot = align_power (newdot, section_alignment);
4981 
4982 		    dotdelta = newdot - savedot;
4983 		    if (dotdelta != 0
4984 			&& (config.warn_section_align
4985 			    || os->addr_tree != NULL)
4986 			&& expld.phase != lang_mark_phase_enum)
4987 		      einfo (_("%P: warning: changing start of section"
4988 			       " %s by %lu bytes\n"),
4989 			     os->name, (unsigned long) dotdelta);
4990 		  }
4991 
4992 		bfd_set_section_vma (0, os->bfd_section, newdot);
4993 
4994 		os->bfd_section->output_offset = 0;
4995 	      }
4996 
4997 	    lang_size_sections_1 (&os->children.head, os,
4998 				  os->fill, newdot, relax, check_regions);
4999 
5000 	    os->processed_vma = TRUE;
5001 
5002 	    if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5003 	      /* Except for some special linker created sections,
5004 		 no output section should change from zero size
5005 		 after strip_excluded_output_sections.  A non-zero
5006 		 size on an ignored section indicates that some
5007 		 input section was not sized early enough.  */
5008 	      ASSERT (os->bfd_section->size == 0);
5009 	    else
5010 	      {
5011 		dot = os->bfd_section->vma;
5012 
5013 		/* Put the section within the requested block size, or
5014 		   align at the block boundary.  */
5015 		after = ((dot
5016 			  + TO_ADDR (os->bfd_section->size)
5017 			  + os->block_value - 1)
5018 			 & - (bfd_vma) os->block_value);
5019 
5020 		os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
5021 	      }
5022 
5023 	    /* Set section lma.  */
5024 	    r = os->region;
5025 	    if (r == NULL)
5026 	      r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
5027 
5028 	    if (os->load_base)
5029 	      {
5030 		bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
5031 		os->bfd_section->lma = lma;
5032 	      }
5033 	    else if (os->lma_region != NULL)
5034 	      {
5035 		bfd_vma lma = os->lma_region->current;
5036 
5037 		if (os->align_lma_with_input)
5038 		  lma += dotdelta;
5039 		else
5040 		  {
5041 		    /* When LMA_REGION is the same as REGION, align the LMA
5042 		       as we did for the VMA, possibly including alignment
5043 		       from the bfd section.  If a different region, then
5044 		       only align according to the value in the output
5045 		       statement.  */
5046 		    if (os->lma_region != os->region)
5047 		      section_alignment = os->section_alignment;
5048 		    if (section_alignment > 0)
5049 		      lma = align_power (lma, section_alignment);
5050 		  }
5051 		os->bfd_section->lma = lma;
5052 	      }
5053 	    else if (r->last_os != NULL
5054 		     && (os->bfd_section->flags & SEC_ALLOC) != 0)
5055 	      {
5056 		bfd_vma lma;
5057 		asection *last;
5058 
5059 		last = r->last_os->output_section_statement.bfd_section;
5060 
5061 		/* A backwards move of dot should be accompanied by
5062 		   an explicit assignment to the section LMA (ie.
5063 		   os->load_base set) because backwards moves can
5064 		   create overlapping LMAs.  */
5065 		if (dot < last->vma
5066 		    && os->bfd_section->size != 0
5067 		    && dot + os->bfd_section->size <= last->vma)
5068 		  {
5069 		    /* If dot moved backwards then leave lma equal to
5070 		       vma.  This is the old default lma, which might
5071 		       just happen to work when the backwards move is
5072 		       sufficiently large.  Nag if this changes anything,
5073 		       so people can fix their linker scripts.  */
5074 
5075 		    if (last->vma != last->lma)
5076 		      einfo (_("%P: warning: dot moved backwards before `%s'\n"),
5077 			     os->name);
5078 		  }
5079 		else
5080 		  {
5081 		    /* If this is an overlay, set the current lma to that
5082 		       at the end of the previous section.  */
5083 		    if (os->sectype == overlay_section)
5084 		      lma = last->lma + last->size;
5085 
5086 		    /* Otherwise, keep the same lma to vma relationship
5087 		       as the previous section.  */
5088 		    else
5089 		      lma = dot + last->lma - last->vma;
5090 
5091 		    if (section_alignment > 0)
5092 		      lma = align_power (lma, section_alignment);
5093 		    os->bfd_section->lma = lma;
5094 		  }
5095 	      }
5096 	    os->processed_lma = TRUE;
5097 
5098 	    if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5099 	      break;
5100 
5101 	    /* Keep track of normal sections using the default
5102 	       lma region.  We use this to set the lma for
5103 	       following sections.  Overlays or other linker
5104 	       script assignment to lma might mean that the
5105 	       default lma == vma is incorrect.
5106 	       To avoid warnings about dot moving backwards when using
5107 	       -Ttext, don't start tracking sections until we find one
5108 	       of non-zero size or with lma set differently to vma.  */
5109 	    if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5110 		 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
5111 		&& (os->bfd_section->flags & SEC_ALLOC) != 0
5112 		&& (os->bfd_section->size != 0
5113 		    || (r->last_os == NULL
5114 			&& os->bfd_section->vma != os->bfd_section->lma)
5115 		    || (r->last_os != NULL
5116 			&& dot >= (r->last_os->output_section_statement
5117 				   .bfd_section->vma)))
5118 		&& os->lma_region == NULL
5119 		&& !link_info.relocatable)
5120 	      r->last_os = s;
5121 
5122 	    /* .tbss sections effectively have zero size.  */
5123 	    if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5124 		|| (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5125 		|| link_info.relocatable)
5126 	      dotdelta = TO_ADDR (os->bfd_section->size);
5127 	    else
5128 	      dotdelta = 0;
5129 	    dot += dotdelta;
5130 
5131 	    if (os->update_dot_tree != 0)
5132 	      exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5133 
5134 	    /* Update dot in the region ?
5135 	       We only do this if the section is going to be allocated,
5136 	       since unallocated sections do not contribute to the region's
5137 	       overall size in memory.  */
5138 	    if (os->region != NULL
5139 		&& (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5140 	      {
5141 		os->region->current = dot;
5142 
5143 		if (check_regions)
5144 		  /* Make sure the new address is within the region.  */
5145 		  os_region_check (os, os->region, os->addr_tree,
5146 				   os->bfd_section->vma);
5147 
5148 		if (os->lma_region != NULL && os->lma_region != os->region
5149 		    && ((os->bfd_section->flags & SEC_LOAD)
5150 			|| os->align_lma_with_input))
5151 		  {
5152 		    os->lma_region->current = os->bfd_section->lma + dotdelta;
5153 
5154 		    if (check_regions)
5155 		      os_region_check (os, os->lma_region, NULL,
5156 				       os->bfd_section->lma);
5157 		  }
5158 	      }
5159 	  }
5160 	  break;
5161 
5162 	case lang_constructors_statement_enum:
5163 	  dot = lang_size_sections_1 (&constructor_list.head,
5164 				      output_section_statement,
5165 				      fill, dot, relax, check_regions);
5166 	  break;
5167 
5168 	case lang_data_statement_enum:
5169 	  {
5170 	    unsigned int size = 0;
5171 
5172 	    s->data_statement.output_offset =
5173 	      dot - output_section_statement->bfd_section->vma;
5174 	    s->data_statement.output_section =
5175 	      output_section_statement->bfd_section;
5176 
5177 	    /* We might refer to provided symbols in the expression, and
5178 	       need to mark them as needed.  */
5179 	    exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5180 
5181 	    switch (s->data_statement.type)
5182 	      {
5183 	      default:
5184 		abort ();
5185 	      case QUAD:
5186 	      case SQUAD:
5187 		size = QUAD_SIZE;
5188 		break;
5189 	      case LONG:
5190 		size = LONG_SIZE;
5191 		break;
5192 	      case SHORT:
5193 		size = SHORT_SIZE;
5194 		break;
5195 	      case BYTE:
5196 		size = BYTE_SIZE;
5197 		break;
5198 	      }
5199 	    if (size < TO_SIZE ((unsigned) 1))
5200 	      size = TO_SIZE ((unsigned) 1);
5201 	    dot += TO_ADDR (size);
5202 	    output_section_statement->bfd_section->size
5203 	      = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5204 
5205 	  }
5206 	  break;
5207 
5208 	case lang_reloc_statement_enum:
5209 	  {
5210 	    int size;
5211 
5212 	    s->reloc_statement.output_offset =
5213 	      dot - output_section_statement->bfd_section->vma;
5214 	    s->reloc_statement.output_section =
5215 	      output_section_statement->bfd_section;
5216 	    size = bfd_get_reloc_size (s->reloc_statement.howto);
5217 	    dot += TO_ADDR (size);
5218 	    output_section_statement->bfd_section->size
5219 	      = TO_SIZE (dot - output_section_statement->bfd_section->vma);
5220 	  }
5221 	  break;
5222 
5223 	case lang_wild_statement_enum:
5224 	  dot = lang_size_sections_1 (&s->wild_statement.children.head,
5225 				      output_section_statement,
5226 				      fill, dot, relax, check_regions);
5227 	  break;
5228 
5229 	case lang_object_symbols_statement_enum:
5230 	  link_info.create_object_symbols_section =
5231 	    output_section_statement->bfd_section;
5232 	  break;
5233 
5234 	case lang_output_statement_enum:
5235 	case lang_target_statement_enum:
5236 	  break;
5237 
5238 	case lang_input_section_enum:
5239 	  {
5240 	    asection *i;
5241 
5242 	    i = s->input_section.section;
5243 	    if (relax)
5244 	      {
5245 		bfd_boolean again;
5246 
5247 		if (! bfd_relax_section (i->owner, i, &link_info, &again))
5248 		  einfo (_("%P%F: can't relax section: %E\n"));
5249 		if (again)
5250 		  *relax = TRUE;
5251 	      }
5252 	    dot = size_input_section (prev, output_section_statement,
5253 				      fill, dot);
5254 	  }
5255 	  break;
5256 
5257 	case lang_input_statement_enum:
5258 	  break;
5259 
5260 	case lang_fill_statement_enum:
5261 	  s->fill_statement.output_section =
5262 	    output_section_statement->bfd_section;
5263 
5264 	  fill = s->fill_statement.fill;
5265 	  break;
5266 
5267 	case lang_assignment_statement_enum:
5268 	  {
5269 	    bfd_vma newdot = dot;
5270 	    etree_type *tree = s->assignment_statement.exp;
5271 
5272 	    expld.dataseg.relro = exp_dataseg_relro_none;
5273 
5274 	    exp_fold_tree (tree,
5275 			   output_section_statement->bfd_section,
5276 			   &newdot);
5277 
5278 	    if (expld.dataseg.relro == exp_dataseg_relro_start)
5279 	      {
5280 		if (!expld.dataseg.relro_start_stat)
5281 		  expld.dataseg.relro_start_stat = s;
5282 		else
5283 		  {
5284 		    ASSERT (expld.dataseg.relro_start_stat == s);
5285 		  }
5286 	      }
5287 	    else if (expld.dataseg.relro == exp_dataseg_relro_end)
5288 	      {
5289 		if (!expld.dataseg.relro_end_stat)
5290 		  expld.dataseg.relro_end_stat = s;
5291 		else
5292 		  {
5293 		    ASSERT (expld.dataseg.relro_end_stat == s);
5294 		  }
5295 	      }
5296 	    expld.dataseg.relro = exp_dataseg_relro_none;
5297 
5298 	    /* This symbol is relative to this section.  */
5299 	    if ((tree->type.node_class == etree_provided
5300 		 || tree->type.node_class == etree_assign)
5301 		&& (tree->assign.dst [0] != '.'
5302 		    || tree->assign.dst [1] != '\0'))
5303 	      output_section_statement->update_dot = 1;
5304 
5305 	    if (!output_section_statement->ignored)
5306 	      {
5307 		if (output_section_statement == abs_output_section)
5308 		  {
5309 		    /* If we don't have an output section, then just adjust
5310 		       the default memory address.  */
5311 		    lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5312 					       FALSE)->current = newdot;
5313 		  }
5314 		else if (newdot != dot)
5315 		  {
5316 		    /* Insert a pad after this statement.  We can't
5317 		       put the pad before when relaxing, in case the
5318 		       assignment references dot.  */
5319 		    insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5320 				output_section_statement->bfd_section, dot);
5321 
5322 		    /* Don't neuter the pad below when relaxing.  */
5323 		    s = s->header.next;
5324 
5325 		    /* If dot is advanced, this implies that the section
5326 		       should have space allocated to it, unless the
5327 		       user has explicitly stated that the section
5328 		       should not be allocated.  */
5329 		    if (output_section_statement->sectype != noalloc_section
5330 			&& (output_section_statement->sectype != noload_section
5331 			    || (bfd_get_flavour (link_info.output_bfd)
5332 				== bfd_target_elf_flavour)))
5333 		      output_section_statement->bfd_section->flags |= SEC_ALLOC;
5334 		  }
5335 		dot = newdot;
5336 	      }
5337 	  }
5338 	  break;
5339 
5340 	case lang_padding_statement_enum:
5341 	  /* If this is the first time lang_size_sections is called,
5342 	     we won't have any padding statements.  If this is the
5343 	     second or later passes when relaxing, we should allow
5344 	     padding to shrink.  If padding is needed on this pass, it
5345 	     will be added back in.  */
5346 	  s->padding_statement.size = 0;
5347 
5348 	  /* Make sure output_offset is valid.  If relaxation shrinks
5349 	     the section and this pad isn't needed, it's possible to
5350 	     have output_offset larger than the final size of the
5351 	     section.  bfd_set_section_contents will complain even for
5352 	     a pad size of zero.  */
5353 	  s->padding_statement.output_offset
5354 	    = dot - output_section_statement->bfd_section->vma;
5355 	  break;
5356 
5357 	case lang_group_statement_enum:
5358 	  dot = lang_size_sections_1 (&s->group_statement.children.head,
5359 				      output_section_statement,
5360 				      fill, dot, relax, check_regions);
5361 	  break;
5362 
5363 	case lang_insert_statement_enum:
5364 	  break;
5365 
5366 	  /* We can only get here when relaxing is turned on.  */
5367 	case lang_address_statement_enum:
5368 	  break;
5369 
5370 	default:
5371 	  FAIL ();
5372 	  break;
5373 	}
5374       prev = &s->header.next;
5375     }
5376   return dot;
5377 }
5378 
5379 /* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5380    The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5381    CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5382    segments.  We are allowed an opportunity to override this decision.  */
5383 
5384 bfd_boolean
ldlang_override_segment_assignment(struct bfd_link_info * info ATTRIBUTE_UNUSED,bfd * abfd ATTRIBUTE_UNUSED,asection * current_section,asection * previous_section,bfd_boolean new_segment)5385 ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5386 				    bfd * abfd ATTRIBUTE_UNUSED,
5387 				    asection * current_section,
5388 				    asection * previous_section,
5389 				    bfd_boolean new_segment)
5390 {
5391   lang_output_section_statement_type * cur;
5392   lang_output_section_statement_type * prev;
5393 
5394   /* The checks below are only necessary when the BFD library has decided
5395      that the two sections ought to be placed into the same segment.  */
5396   if (new_segment)
5397     return TRUE;
5398 
5399   /* Paranoia checks.  */
5400   if (current_section == NULL || previous_section == NULL)
5401     return new_segment;
5402 
5403   /* If this flag is set, the target never wants code and non-code
5404      sections comingled in the same segment.  */
5405   if (config.separate_code
5406       && ((current_section->flags ^ previous_section->flags) & SEC_CODE))
5407     return TRUE;
5408 
5409   /* Find the memory regions associated with the two sections.
5410      We call lang_output_section_find() here rather than scanning the list
5411      of output sections looking for a matching section pointer because if
5412      we have a large number of sections then a hash lookup is faster.  */
5413   cur  = lang_output_section_find (current_section->name);
5414   prev = lang_output_section_find (previous_section->name);
5415 
5416   /* More paranoia.  */
5417   if (cur == NULL || prev == NULL)
5418     return new_segment;
5419 
5420   /* If the regions are different then force the sections to live in
5421      different segments.  See the email thread starting at the following
5422      URL for the reasons why this is necessary:
5423      http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5424   return cur->region != prev->region;
5425 }
5426 
5427 void
one_lang_size_sections_pass(bfd_boolean * relax,bfd_boolean check_regions)5428 one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5429 {
5430   lang_statement_iteration++;
5431   lang_size_sections_1 (&statement_list.head, abs_output_section,
5432 			0, 0, relax, check_regions);
5433 }
5434 
5435 void
lang_size_sections(bfd_boolean * relax,bfd_boolean check_regions)5436 lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5437 {
5438   expld.phase = lang_allocating_phase_enum;
5439   expld.dataseg.phase = exp_dataseg_none;
5440 
5441   one_lang_size_sections_pass (relax, check_regions);
5442   if (expld.dataseg.phase == exp_dataseg_end_seen
5443       && link_info.relro && expld.dataseg.relro_end)
5444     {
5445       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5446 	 to put expld.dataseg.relro_end on a (common) page boundary.  */
5447       bfd_vma min_base, relro_end, maxpage;
5448 
5449       expld.dataseg.phase = exp_dataseg_relro_adjust;
5450       maxpage = expld.dataseg.maxpagesize;
5451       /* MIN_BASE is the absolute minimum address we are allowed to start the
5452 	 read-write segment (byte before will be mapped read-only).  */
5453       min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5454       expld.dataseg.base += (-expld.dataseg.relro_end
5455 			     & (expld.dataseg.pagesize - 1));
5456       /* Compute the expected PT_GNU_RELRO segment end.  */
5457       relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5458 		   & ~(expld.dataseg.pagesize - 1));
5459       if (min_base + maxpage < expld.dataseg.base)
5460 	{
5461 	  expld.dataseg.base -= maxpage;
5462 	  relro_end -= maxpage;
5463 	}
5464       lang_reset_memory_regions ();
5465       one_lang_size_sections_pass (relax, check_regions);
5466       if (expld.dataseg.relro_end > relro_end)
5467 	{
5468 	  /* The alignment of sections between DATA_SEGMENT_ALIGN
5469 	     and DATA_SEGMENT_RELRO_END can cause excessive padding to
5470 	     be inserted at DATA_SEGMENT_RELRO_END.  Try to start a
5471 	     bit lower so that the section alignments will fit in.  */
5472 	  asection *sec;
5473 	  unsigned int max_alignment_power = 0;
5474 
5475 	  /* Find maximum alignment power of sections between
5476 	     DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5477 	  for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5478 	    if (sec->vma >= expld.dataseg.base
5479 		&& sec->vma < expld.dataseg.relro_end
5480 		&& sec->alignment_power > max_alignment_power)
5481 	      max_alignment_power = sec->alignment_power;
5482 
5483 	  if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5484 	    {
5485 	      /* Aligning the adjusted base guarantees the padding
5486 		 between sections won't change.  This is better than
5487 		 simply subtracting 1 << max_alignment_power which is
5488 		 what we used to do here.  */
5489 	      expld.dataseg.base &= ~((1 << max_alignment_power) - 1);
5490 	      lang_reset_memory_regions ();
5491 	      one_lang_size_sections_pass (relax, check_regions);
5492 	    }
5493 	}
5494       link_info.relro_start = expld.dataseg.base;
5495       link_info.relro_end = expld.dataseg.relro_end;
5496     }
5497   else if (expld.dataseg.phase == exp_dataseg_end_seen)
5498     {
5499       /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5500 	 a page could be saved in the data segment.  */
5501       bfd_vma first, last;
5502 
5503       first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5504       last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5505       if (first && last
5506 	  && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5507 	      != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5508 	  && first + last <= expld.dataseg.pagesize)
5509 	{
5510 	  expld.dataseg.phase = exp_dataseg_adjust;
5511 	  lang_reset_memory_regions ();
5512 	  one_lang_size_sections_pass (relax, check_regions);
5513 	}
5514       else
5515 	expld.dataseg.phase = exp_dataseg_done;
5516     }
5517   else
5518     expld.dataseg.phase = exp_dataseg_done;
5519 }
5520 
5521 /* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5522 
5523 static bfd_vma
lang_do_assignments_1(lang_statement_union_type * s,lang_output_section_statement_type * current_os,fill_type * fill,bfd_vma dot)5524 lang_do_assignments_1 (lang_statement_union_type *s,
5525 		       lang_output_section_statement_type *current_os,
5526 		       fill_type *fill,
5527 		       bfd_vma dot)
5528 {
5529   for (; s != NULL; s = s->header.next)
5530     {
5531       switch (s->header.type)
5532 	{
5533 	case lang_constructors_statement_enum:
5534 	  dot = lang_do_assignments_1 (constructor_list.head,
5535 				       current_os, fill, dot);
5536 	  break;
5537 
5538 	case lang_output_section_statement_enum:
5539 	  {
5540 	    lang_output_section_statement_type *os;
5541 
5542 	    os = &(s->output_section_statement);
5543 	    if (os->bfd_section != NULL && !os->ignored)
5544 	      {
5545 		dot = os->bfd_section->vma;
5546 
5547 		lang_do_assignments_1 (os->children.head,
5548 				       os, os->fill, dot);
5549 
5550 		/* .tbss sections effectively have zero size.  */
5551 		if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5552 		    || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5553 		    || link_info.relocatable)
5554 		  dot += TO_ADDR (os->bfd_section->size);
5555 
5556 		if (os->update_dot_tree != NULL)
5557 		  exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5558 	      }
5559 	  }
5560 	  break;
5561 
5562 	case lang_wild_statement_enum:
5563 
5564 	  dot = lang_do_assignments_1 (s->wild_statement.children.head,
5565 				       current_os, fill, dot);
5566 	  break;
5567 
5568 	case lang_object_symbols_statement_enum:
5569 	case lang_output_statement_enum:
5570 	case lang_target_statement_enum:
5571 	  break;
5572 
5573 	case lang_data_statement_enum:
5574 	  exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5575 	  if (expld.result.valid_p)
5576 	    {
5577 	      s->data_statement.value = expld.result.value;
5578 	      if (expld.result.section != NULL)
5579 		s->data_statement.value += expld.result.section->vma;
5580 	    }
5581 	  else
5582 	    einfo (_("%F%P: invalid data statement\n"));
5583 	  {
5584 	    unsigned int size;
5585 	    switch (s->data_statement.type)
5586 	      {
5587 	      default:
5588 		abort ();
5589 	      case QUAD:
5590 	      case SQUAD:
5591 		size = QUAD_SIZE;
5592 		break;
5593 	      case LONG:
5594 		size = LONG_SIZE;
5595 		break;
5596 	      case SHORT:
5597 		size = SHORT_SIZE;
5598 		break;
5599 	      case BYTE:
5600 		size = BYTE_SIZE;
5601 		break;
5602 	      }
5603 	    if (size < TO_SIZE ((unsigned) 1))
5604 	      size = TO_SIZE ((unsigned) 1);
5605 	    dot += TO_ADDR (size);
5606 	  }
5607 	  break;
5608 
5609 	case lang_reloc_statement_enum:
5610 	  exp_fold_tree (s->reloc_statement.addend_exp,
5611 			 bfd_abs_section_ptr, &dot);
5612 	  if (expld.result.valid_p)
5613 	    s->reloc_statement.addend_value = expld.result.value;
5614 	  else
5615 	    einfo (_("%F%P: invalid reloc statement\n"));
5616 	  dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5617 	  break;
5618 
5619 	case lang_input_section_enum:
5620 	  {
5621 	    asection *in = s->input_section.section;
5622 
5623 	    if ((in->flags & SEC_EXCLUDE) == 0)
5624 	      dot += TO_ADDR (in->size);
5625 	  }
5626 	  break;
5627 
5628 	case lang_input_statement_enum:
5629 	  break;
5630 
5631 	case lang_fill_statement_enum:
5632 	  fill = s->fill_statement.fill;
5633 	  break;
5634 
5635 	case lang_assignment_statement_enum:
5636 	  exp_fold_tree (s->assignment_statement.exp,
5637 			 current_os->bfd_section,
5638 			 &dot);
5639 	  break;
5640 
5641 	case lang_padding_statement_enum:
5642 	  dot += TO_ADDR (s->padding_statement.size);
5643 	  break;
5644 
5645 	case lang_group_statement_enum:
5646 	  dot = lang_do_assignments_1 (s->group_statement.children.head,
5647 				       current_os, fill, dot);
5648 	  break;
5649 
5650 	case lang_insert_statement_enum:
5651 	  break;
5652 
5653 	case lang_address_statement_enum:
5654 	  break;
5655 
5656 	default:
5657 	  FAIL ();
5658 	  break;
5659 	}
5660     }
5661   return dot;
5662 }
5663 
5664 void
lang_do_assignments(lang_phase_type phase)5665 lang_do_assignments (lang_phase_type phase)
5666 {
5667   expld.phase = phase;
5668   lang_statement_iteration++;
5669   lang_do_assignments_1 (statement_list.head,
5670 			 abs_output_section, NULL, 0);
5671 }
5672 
5673 /* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5674    operator .startof. (section_name), it produces an undefined symbol
5675    .startof.section_name.  Similarly, when it sees
5676    .sizeof. (section_name), it produces an undefined symbol
5677    .sizeof.section_name.  For all the output sections, we look for
5678    such symbols, and set them to the correct value.  */
5679 
5680 static void
lang_set_startof(void)5681 lang_set_startof (void)
5682 {
5683   asection *s;
5684 
5685   if (link_info.relocatable)
5686     return;
5687 
5688   for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5689     {
5690       const char *secname;
5691       char *buf;
5692       struct bfd_link_hash_entry *h;
5693 
5694       secname = bfd_get_section_name (link_info.output_bfd, s);
5695       buf = (char *) xmalloc (10 + strlen (secname));
5696 
5697       sprintf (buf, ".startof.%s", secname);
5698       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5699       if (h != NULL && h->type == bfd_link_hash_undefined)
5700 	{
5701 	  h->type = bfd_link_hash_defined;
5702 	  h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5703 	  h->u.def.section = bfd_abs_section_ptr;
5704 	}
5705 
5706       sprintf (buf, ".sizeof.%s", secname);
5707       h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5708       if (h != NULL && h->type == bfd_link_hash_undefined)
5709 	{
5710 	  h->type = bfd_link_hash_defined;
5711 	  h->u.def.value = TO_ADDR (s->size);
5712 	  h->u.def.section = bfd_abs_section_ptr;
5713 	}
5714 
5715       free (buf);
5716     }
5717 }
5718 
5719 static void
lang_end(void)5720 lang_end (void)
5721 {
5722   struct bfd_link_hash_entry *h;
5723   bfd_boolean warn;
5724 
5725   if ((link_info.relocatable && !link_info.gc_sections)
5726       || (link_info.shared && !link_info.executable))
5727     warn = entry_from_cmdline;
5728   else
5729     warn = TRUE;
5730 
5731   /* Force the user to specify a root when generating a relocatable with
5732      --gc-sections.  */
5733   if (link_info.gc_sections && link_info.relocatable
5734       && !(entry_from_cmdline || undef_from_cmdline))
5735     einfo (_("%P%F: gc-sections requires either an entry or "
5736 	     "an undefined symbol\n"));
5737 
5738   if (entry_symbol.name == NULL)
5739     {
5740       /* No entry has been specified.  Look for the default entry, but
5741 	 don't warn if we don't find it.  */
5742       entry_symbol.name = entry_symbol_default;
5743       warn = FALSE;
5744     }
5745 
5746   h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5747 			    FALSE, FALSE, TRUE);
5748   if (h != NULL
5749       && (h->type == bfd_link_hash_defined
5750 	  || h->type == bfd_link_hash_defweak)
5751       && h->u.def.section->output_section != NULL)
5752     {
5753       bfd_vma val;
5754 
5755       val = (h->u.def.value
5756 	     + bfd_get_section_vma (link_info.output_bfd,
5757 				    h->u.def.section->output_section)
5758 	     + h->u.def.section->output_offset);
5759       if (! bfd_set_start_address (link_info.output_bfd, val))
5760 	einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5761     }
5762   else
5763     {
5764       bfd_vma val;
5765       const char *send;
5766 
5767       /* We couldn't find the entry symbol.  Try parsing it as a
5768 	 number.  */
5769       val = bfd_scan_vma (entry_symbol.name, &send, 0);
5770       if (*send == '\0')
5771 	{
5772 	  if (! bfd_set_start_address (link_info.output_bfd, val))
5773 	    einfo (_("%P%F: can't set start address\n"));
5774 	}
5775       else
5776 	{
5777 	  asection *ts;
5778 
5779 	  /* Can't find the entry symbol, and it's not a number.  Use
5780 	     the first address in the text section.  */
5781 	  ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5782 	  if (ts != NULL)
5783 	    {
5784 	      if (warn)
5785 		einfo (_("%P: warning: cannot find entry symbol %s;"
5786 			 " defaulting to %V\n"),
5787 		       entry_symbol.name,
5788 		       bfd_get_section_vma (link_info.output_bfd, ts));
5789 	      if (!(bfd_set_start_address
5790 		    (link_info.output_bfd,
5791 		     bfd_get_section_vma (link_info.output_bfd, ts))))
5792 		einfo (_("%P%F: can't set start address\n"));
5793 	    }
5794 	  else
5795 	    {
5796 	      if (warn)
5797 		einfo (_("%P: warning: cannot find entry symbol %s;"
5798 			 " not setting start address\n"),
5799 		       entry_symbol.name);
5800 	    }
5801 	}
5802     }
5803 }
5804 
5805 /* This is a small function used when we want to ignore errors from
5806    BFD.  */
5807 
5808 static void
ignore_bfd_errors(const char * s ATTRIBUTE_UNUSED,...)5809 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5810 {
5811   /* Don't do anything.  */
5812 }
5813 
5814 /* Check that the architecture of all the input files is compatible
5815    with the output file.  Also call the backend to let it do any
5816    other checking that is needed.  */
5817 
5818 static void
lang_check(void)5819 lang_check (void)
5820 {
5821   lang_statement_union_type *file;
5822   bfd *input_bfd;
5823   const bfd_arch_info_type *compatible;
5824 
5825   for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5826     {
5827 #ifdef ENABLE_PLUGINS
5828       /* Don't check format of files claimed by plugin.  */
5829       if (file->input_statement.flags.claimed)
5830 	continue;
5831 #endif /* ENABLE_PLUGINS */
5832       input_bfd = file->input_statement.the_bfd;
5833       compatible
5834 	= bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5835 				   command_line.accept_unknown_input_arch);
5836 
5837       /* In general it is not possible to perform a relocatable
5838 	 link between differing object formats when the input
5839 	 file has relocations, because the relocations in the
5840 	 input format may not have equivalent representations in
5841 	 the output format (and besides BFD does not translate
5842 	 relocs for other link purposes than a final link).  */
5843       if ((link_info.relocatable || link_info.emitrelocations)
5844 	  && (compatible == NULL
5845 	      || (bfd_get_flavour (input_bfd)
5846 		  != bfd_get_flavour (link_info.output_bfd)))
5847 	  && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5848 	{
5849 	  einfo (_("%P%F: Relocatable linking with relocations from"
5850 		   " format %s (%B) to format %s (%B) is not supported\n"),
5851 		 bfd_get_target (input_bfd), input_bfd,
5852 		 bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5853 	  /* einfo with %F exits.  */
5854 	}
5855 
5856       if (compatible == NULL)
5857 	{
5858 	  if (command_line.warn_mismatch)
5859 	    einfo (_("%P%X: %s architecture of input file `%B'"
5860 		     " is incompatible with %s output\n"),
5861 		   bfd_printable_name (input_bfd), input_bfd,
5862 		   bfd_printable_name (link_info.output_bfd));
5863 	}
5864       else if (bfd_count_sections (input_bfd))
5865 	{
5866 	  /* If the input bfd has no contents, it shouldn't set the
5867 	     private data of the output bfd.  */
5868 
5869 	  bfd_error_handler_type pfn = NULL;
5870 
5871 	  /* If we aren't supposed to warn about mismatched input
5872 	     files, temporarily set the BFD error handler to a
5873 	     function which will do nothing.  We still want to call
5874 	     bfd_merge_private_bfd_data, since it may set up
5875 	     information which is needed in the output file.  */
5876 	  if (! command_line.warn_mismatch)
5877 	    pfn = bfd_set_error_handler (ignore_bfd_errors);
5878 	  if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5879 	    {
5880 	      if (command_line.warn_mismatch)
5881 		einfo (_("%P%X: failed to merge target specific data"
5882 			 " of file %B\n"), input_bfd);
5883 	    }
5884 	  if (! command_line.warn_mismatch)
5885 	    bfd_set_error_handler (pfn);
5886 	}
5887     }
5888 }
5889 
5890 /* Look through all the global common symbols and attach them to the
5891    correct section.  The -sort-common command line switch may be used
5892    to roughly sort the entries by alignment.  */
5893 
5894 static void
lang_common(void)5895 lang_common (void)
5896 {
5897   if (command_line.inhibit_common_definition)
5898     return;
5899   if (link_info.relocatable
5900       && ! command_line.force_common_definition)
5901     return;
5902 
5903   if (! config.sort_common)
5904     bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5905   else
5906     {
5907       unsigned int power;
5908 
5909       if (config.sort_common == sort_descending)
5910 	{
5911 	  for (power = 4; power > 0; power--)
5912 	    bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5913 
5914 	  power = 0;
5915 	  bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5916 	}
5917       else
5918 	{
5919 	  for (power = 0; power <= 4; power++)
5920 	    bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5921 
5922 	  power = (unsigned int) -1;
5923 	  bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5924 	}
5925     }
5926 }
5927 
5928 /* Place one common symbol in the correct section.  */
5929 
5930 static bfd_boolean
lang_one_common(struct bfd_link_hash_entry * h,void * info)5931 lang_one_common (struct bfd_link_hash_entry *h, void *info)
5932 {
5933   unsigned int power_of_two;
5934   bfd_vma size;
5935   asection *section;
5936 
5937   if (h->type != bfd_link_hash_common)
5938     return TRUE;
5939 
5940   size = h->u.c.size;
5941   power_of_two = h->u.c.p->alignment_power;
5942 
5943   if (config.sort_common == sort_descending
5944       && power_of_two < *(unsigned int *) info)
5945     return TRUE;
5946   else if (config.sort_common == sort_ascending
5947 	   && power_of_two > *(unsigned int *) info)
5948     return TRUE;
5949 
5950   section = h->u.c.p->section;
5951   if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5952     einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5953 	   h->root.string);
5954 
5955   if (config.map_file != NULL)
5956     {
5957       static bfd_boolean header_printed;
5958       int len;
5959       char *name;
5960       char buf[50];
5961 
5962       if (! header_printed)
5963 	{
5964 	  minfo (_("\nAllocating common symbols\n"));
5965 	  minfo (_("Common symbol       size              file\n\n"));
5966 	  header_printed = TRUE;
5967 	}
5968 
5969       name = bfd_demangle (link_info.output_bfd, h->root.string,
5970 			   DMGL_ANSI | DMGL_PARAMS);
5971       if (name == NULL)
5972 	{
5973 	  minfo ("%s", h->root.string);
5974 	  len = strlen (h->root.string);
5975 	}
5976       else
5977 	{
5978 	  minfo ("%s", name);
5979 	  len = strlen (name);
5980 	  free (name);
5981 	}
5982 
5983       if (len >= 19)
5984 	{
5985 	  print_nl ();
5986 	  len = 0;
5987 	}
5988       while (len < 20)
5989 	{
5990 	  print_space ();
5991 	  ++len;
5992 	}
5993 
5994       minfo ("0x");
5995       if (size <= 0xffffffff)
5996 	sprintf (buf, "%lx", (unsigned long) size);
5997       else
5998 	sprintf_vma (buf, size);
5999       minfo ("%s", buf);
6000       len = strlen (buf);
6001 
6002       while (len < 16)
6003 	{
6004 	  print_space ();
6005 	  ++len;
6006 	}
6007 
6008       minfo ("%B\n", section->owner);
6009     }
6010 
6011   return TRUE;
6012 }
6013 
6014 /* Run through the input files and ensure that every input section has
6015    somewhere to go.  If one is found without a destination then create
6016    an input request and place it into the statement tree.  */
6017 
6018 static void
lang_place_orphans(void)6019 lang_place_orphans (void)
6020 {
6021   LANG_FOR_EACH_INPUT_STATEMENT (file)
6022     {
6023       asection *s;
6024 
6025       for (s = file->the_bfd->sections; s != NULL; s = s->next)
6026 	{
6027 	  if (s->output_section == NULL)
6028 	    {
6029 	      /* This section of the file is not attached, root
6030 		 around for a sensible place for it to go.  */
6031 
6032 	      if (file->flags.just_syms)
6033 		bfd_link_just_syms (file->the_bfd, s, &link_info);
6034 	      else if ((s->flags & SEC_EXCLUDE) != 0)
6035 		s->output_section = bfd_abs_section_ptr;
6036 	      else if (strcmp (s->name, "COMMON") == 0)
6037 		{
6038 		  /* This is a lonely common section which must have
6039 		     come from an archive.  We attach to the section
6040 		     with the wildcard.  */
6041 		  if (! link_info.relocatable
6042 		      || command_line.force_common_definition)
6043 		    {
6044 		      if (default_common_section == NULL)
6045 			default_common_section
6046 			  = lang_output_section_statement_lookup (".bss", 0,
6047 								  TRUE);
6048 		      lang_add_section (&default_common_section->children, s,
6049 					NULL, default_common_section);
6050 		    }
6051 		}
6052 	      else
6053 		{
6054 		  const char *name = s->name;
6055 		  int constraint = 0;
6056 
6057 		  if (config.unique_orphan_sections
6058 		      || unique_section_p (s, NULL))
6059 		    constraint = SPECIAL;
6060 
6061 		  if (!ldemul_place_orphan (s, name, constraint))
6062 		    {
6063 		      lang_output_section_statement_type *os;
6064 		      os = lang_output_section_statement_lookup (name,
6065 								 constraint,
6066 								 TRUE);
6067 		      if (os->addr_tree == NULL
6068 			  && (link_info.relocatable
6069 			      || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6070 			os->addr_tree = exp_intop (0);
6071 		      lang_add_section (&os->children, s, NULL, os);
6072 		    }
6073 		}
6074 	    }
6075 	}
6076     }
6077 }
6078 
6079 void
lang_set_flags(lang_memory_region_type * ptr,const char * flags,int invert)6080 lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
6081 {
6082   flagword *ptr_flags;
6083 
6084   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6085   while (*flags)
6086     {
6087       switch (*flags)
6088 	{
6089 	case 'A': case 'a':
6090 	  *ptr_flags |= SEC_ALLOC;
6091 	  break;
6092 
6093 	case 'R': case 'r':
6094 	  *ptr_flags |= SEC_READONLY;
6095 	  break;
6096 
6097 	case 'W': case 'w':
6098 	  *ptr_flags |= SEC_DATA;
6099 	  break;
6100 
6101 	case 'X': case 'x':
6102 	  *ptr_flags |= SEC_CODE;
6103 	  break;
6104 
6105 	case 'L': case 'l':
6106 	case 'I': case 'i':
6107 	  *ptr_flags |= SEC_LOAD;
6108 	  break;
6109 
6110 	default:
6111 	  einfo (_("%P%F: invalid syntax in flags\n"));
6112 	  break;
6113 	}
6114       flags++;
6115     }
6116 }
6117 
6118 /* Call a function on each input file.  This function will be called
6119    on an archive, but not on the elements.  */
6120 
6121 void
lang_for_each_input_file(void (* func)(lang_input_statement_type *))6122 lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6123 {
6124   lang_input_statement_type *f;
6125 
6126   for (f = (lang_input_statement_type *) input_file_chain.head;
6127        f != NULL;
6128        f = (lang_input_statement_type *) f->next_real_file)
6129     func (f);
6130 }
6131 
6132 /* Call a function on each file.  The function will be called on all
6133    the elements of an archive which are included in the link, but will
6134    not be called on the archive file itself.  */
6135 
6136 void
lang_for_each_file(void (* func)(lang_input_statement_type *))6137 lang_for_each_file (void (*func) (lang_input_statement_type *))
6138 {
6139   LANG_FOR_EACH_INPUT_STATEMENT (f)
6140     {
6141       func (f);
6142     }
6143 }
6144 
6145 void
ldlang_add_file(lang_input_statement_type * entry)6146 ldlang_add_file (lang_input_statement_type *entry)
6147 {
6148   lang_statement_append (&file_chain,
6149 			 (lang_statement_union_type *) entry,
6150 			 &entry->next);
6151 
6152   /* The BFD linker needs to have a list of all input BFDs involved in
6153      a link.  */
6154   ASSERT (entry->the_bfd->link.next == NULL);
6155   ASSERT (entry->the_bfd != link_info.output_bfd);
6156 
6157   *link_info.input_bfds_tail = entry->the_bfd;
6158   link_info.input_bfds_tail = &entry->the_bfd->link.next;
6159   entry->the_bfd->usrdata = entry;
6160   bfd_set_gp_size (entry->the_bfd, g_switch_value);
6161 
6162   /* Look through the sections and check for any which should not be
6163      included in the link.  We need to do this now, so that we can
6164      notice when the backend linker tries to report multiple
6165      definition errors for symbols which are in sections we aren't
6166      going to link.  FIXME: It might be better to entirely ignore
6167      symbols which are defined in sections which are going to be
6168      discarded.  This would require modifying the backend linker for
6169      each backend which might set the SEC_LINK_ONCE flag.  If we do
6170      this, we should probably handle SEC_EXCLUDE in the same way.  */
6171 
6172   bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6173 }
6174 
6175 void
lang_add_output(const char * name,int from_script)6176 lang_add_output (const char *name, int from_script)
6177 {
6178   /* Make -o on command line override OUTPUT in script.  */
6179   if (!had_output_filename || !from_script)
6180     {
6181       output_filename = name;
6182       had_output_filename = TRUE;
6183     }
6184 }
6185 
6186 static lang_output_section_statement_type *current_section;
6187 
6188 static int
topower(int x)6189 topower (int x)
6190 {
6191   unsigned int i = 1;
6192   int l;
6193 
6194   if (x < 0)
6195     return -1;
6196 
6197   for (l = 0; l < 32; l++)
6198     {
6199       if (i >= (unsigned int) x)
6200 	return l;
6201       i <<= 1;
6202     }
6203 
6204   return 0;
6205 }
6206 
6207 lang_output_section_statement_type *
lang_enter_output_section_statement(const char * output_section_statement_name,etree_type * address_exp,enum section_type sectype,etree_type * align,etree_type * subalign,etree_type * ebase,int constraint,int align_with_input)6208 lang_enter_output_section_statement (const char *output_section_statement_name,
6209 				     etree_type *address_exp,
6210 				     enum section_type sectype,
6211 				     etree_type *align,
6212 				     etree_type *subalign,
6213 				     etree_type *ebase,
6214 				     int constraint,
6215 				     int align_with_input)
6216 {
6217   lang_output_section_statement_type *os;
6218 
6219   os = lang_output_section_statement_lookup (output_section_statement_name,
6220 					     constraint, TRUE);
6221   current_section = os;
6222 
6223   if (os->addr_tree == NULL)
6224     {
6225       os->addr_tree = address_exp;
6226     }
6227   os->sectype = sectype;
6228   if (sectype != noload_section)
6229     os->flags = SEC_NO_FLAGS;
6230   else
6231     os->flags = SEC_NEVER_LOAD;
6232   os->block_value = 1;
6233 
6234   /* Make next things chain into subchain of this.  */
6235   push_stat_ptr (&os->children);
6236 
6237   os->align_lma_with_input = align_with_input == ALIGN_WITH_INPUT;
6238   if (os->align_lma_with_input && align != NULL)
6239     einfo (_("%F%P:%S: error: align with input and explicit align specified\n"), NULL);
6240 
6241   os->subsection_alignment =
6242     topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6243   os->section_alignment =
6244     topower (exp_get_value_int (align, -1, "section alignment"));
6245 
6246   os->load_base = ebase;
6247   return os;
6248 }
6249 
6250 void
lang_final(void)6251 lang_final (void)
6252 {
6253   lang_output_statement_type *new_stmt;
6254 
6255   new_stmt = new_stat (lang_output_statement, stat_ptr);
6256   new_stmt->name = output_filename;
6257 
6258 }
6259 
6260 /* Reset the current counters in the regions.  */
6261 
6262 void
lang_reset_memory_regions(void)6263 lang_reset_memory_regions (void)
6264 {
6265   lang_memory_region_type *p = lang_memory_region_list;
6266   asection *o;
6267   lang_output_section_statement_type *os;
6268 
6269   for (p = lang_memory_region_list; p != NULL; p = p->next)
6270     {
6271       p->current = p->origin;
6272       p->last_os = NULL;
6273     }
6274 
6275   for (os = &lang_output_section_statement.head->output_section_statement;
6276        os != NULL;
6277        os = os->next)
6278     {
6279       os->processed_vma = FALSE;
6280       os->processed_lma = FALSE;
6281     }
6282 
6283   for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6284     {
6285       /* Save the last size for possible use by bfd_relax_section.  */
6286       o->rawsize = o->size;
6287       o->size = 0;
6288     }
6289 }
6290 
6291 /* Worker for lang_gc_sections_1.  */
6292 
6293 static void
gc_section_callback(lang_wild_statement_type * ptr,struct wildcard_list * sec ATTRIBUTE_UNUSED,asection * section,struct flag_info * sflag_info ATTRIBUTE_UNUSED,lang_input_statement_type * file ATTRIBUTE_UNUSED,void * data ATTRIBUTE_UNUSED)6294 gc_section_callback (lang_wild_statement_type *ptr,
6295 		     struct wildcard_list *sec ATTRIBUTE_UNUSED,
6296 		     asection *section,
6297 		     struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6298 		     lang_input_statement_type *file ATTRIBUTE_UNUSED,
6299 		     void *data ATTRIBUTE_UNUSED)
6300 {
6301   /* If the wild pattern was marked KEEP, the member sections
6302      should be as well.  */
6303   if (ptr->keep_sections)
6304     section->flags |= SEC_KEEP;
6305 }
6306 
6307 /* Iterate over sections marking them against GC.  */
6308 
6309 static void
lang_gc_sections_1(lang_statement_union_type * s)6310 lang_gc_sections_1 (lang_statement_union_type *s)
6311 {
6312   for (; s != NULL; s = s->header.next)
6313     {
6314       switch (s->header.type)
6315 	{
6316 	case lang_wild_statement_enum:
6317 	  walk_wild (&s->wild_statement, gc_section_callback, NULL);
6318 	  break;
6319 	case lang_constructors_statement_enum:
6320 	  lang_gc_sections_1 (constructor_list.head);
6321 	  break;
6322 	case lang_output_section_statement_enum:
6323 	  lang_gc_sections_1 (s->output_section_statement.children.head);
6324 	  break;
6325 	case lang_group_statement_enum:
6326 	  lang_gc_sections_1 (s->group_statement.children.head);
6327 	  break;
6328 	default:
6329 	  break;
6330 	}
6331     }
6332 }
6333 
6334 static void
lang_gc_sections(void)6335 lang_gc_sections (void)
6336 {
6337   /* Keep all sections so marked in the link script.  */
6338 
6339   lang_gc_sections_1 (statement_list.head);
6340 
6341   /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6342      the special case of debug info.  (See bfd/stabs.c)
6343      Twiddle the flag here, to simplify later linker code.  */
6344   if (link_info.relocatable)
6345     {
6346       LANG_FOR_EACH_INPUT_STATEMENT (f)
6347 	{
6348 	  asection *sec;
6349 #ifdef ENABLE_PLUGINS
6350 	  if (f->flags.claimed)
6351 	    continue;
6352 #endif
6353 	  for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6354 	    if ((sec->flags & SEC_DEBUGGING) == 0)
6355 	      sec->flags &= ~SEC_EXCLUDE;
6356 	}
6357     }
6358 
6359   if (link_info.gc_sections)
6360     bfd_gc_sections (link_info.output_bfd, &link_info);
6361 }
6362 
6363 /* Worker for lang_find_relro_sections_1.  */
6364 
6365 static void
find_relro_section_callback(lang_wild_statement_type * ptr ATTRIBUTE_UNUSED,struct wildcard_list * sec ATTRIBUTE_UNUSED,asection * section,struct flag_info * sflag_info ATTRIBUTE_UNUSED,lang_input_statement_type * file ATTRIBUTE_UNUSED,void * data)6366 find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6367 			     struct wildcard_list *sec ATTRIBUTE_UNUSED,
6368 			     asection *section,
6369 			     struct flag_info *sflag_info ATTRIBUTE_UNUSED,
6370 			     lang_input_statement_type *file ATTRIBUTE_UNUSED,
6371 			     void *data)
6372 {
6373   /* Discarded, excluded and ignored sections effectively have zero
6374      size.  */
6375   if (section->output_section != NULL
6376       && section->output_section->owner == link_info.output_bfd
6377       && (section->output_section->flags & SEC_EXCLUDE) == 0
6378       && !IGNORE_SECTION (section)
6379       && section->size != 0)
6380     {
6381       bfd_boolean *has_relro_section = (bfd_boolean *) data;
6382       *has_relro_section = TRUE;
6383     }
6384 }
6385 
6386 /* Iterate over sections for relro sections.  */
6387 
6388 static void
lang_find_relro_sections_1(lang_statement_union_type * s,bfd_boolean * has_relro_section)6389 lang_find_relro_sections_1 (lang_statement_union_type *s,
6390 			    bfd_boolean *has_relro_section)
6391 {
6392   if (*has_relro_section)
6393     return;
6394 
6395   for (; s != NULL; s = s->header.next)
6396     {
6397       if (s == expld.dataseg.relro_end_stat)
6398 	break;
6399 
6400       switch (s->header.type)
6401 	{
6402 	case lang_wild_statement_enum:
6403 	  walk_wild (&s->wild_statement,
6404 		     find_relro_section_callback,
6405 		     has_relro_section);
6406 	  break;
6407 	case lang_constructors_statement_enum:
6408 	  lang_find_relro_sections_1 (constructor_list.head,
6409 				      has_relro_section);
6410 	  break;
6411 	case lang_output_section_statement_enum:
6412 	  lang_find_relro_sections_1 (s->output_section_statement.children.head,
6413 				      has_relro_section);
6414 	  break;
6415 	case lang_group_statement_enum:
6416 	  lang_find_relro_sections_1 (s->group_statement.children.head,
6417 				      has_relro_section);
6418 	  break;
6419 	default:
6420 	  break;
6421 	}
6422     }
6423 }
6424 
6425 static void
lang_find_relro_sections(void)6426 lang_find_relro_sections (void)
6427 {
6428   bfd_boolean has_relro_section = FALSE;
6429 
6430   /* Check all sections in the link script.  */
6431 
6432   lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6433 			      &has_relro_section);
6434 
6435   if (!has_relro_section)
6436     link_info.relro = FALSE;
6437 }
6438 
6439 /* Relax all sections until bfd_relax_section gives up.  */
6440 
6441 void
lang_relax_sections(bfd_boolean need_layout)6442 lang_relax_sections (bfd_boolean need_layout)
6443 {
6444   if (RELAXATION_ENABLED)
6445     {
6446       /* We may need more than one relaxation pass.  */
6447       int i = link_info.relax_pass;
6448 
6449       /* The backend can use it to determine the current pass.  */
6450       link_info.relax_pass = 0;
6451 
6452       while (i--)
6453 	{
6454 	  /* Keep relaxing until bfd_relax_section gives up.  */
6455 	  bfd_boolean relax_again;
6456 
6457 	  link_info.relax_trip = -1;
6458 	  do
6459 	    {
6460 	      link_info.relax_trip++;
6461 
6462 	      /* Note: pe-dll.c does something like this also.  If you find
6463 		 you need to change this code, you probably need to change
6464 		 pe-dll.c also.  DJ  */
6465 
6466 	      /* Do all the assignments with our current guesses as to
6467 		 section sizes.  */
6468 	      lang_do_assignments (lang_assigning_phase_enum);
6469 
6470 	      /* We must do this after lang_do_assignments, because it uses
6471 		 size.  */
6472 	      lang_reset_memory_regions ();
6473 
6474 	      /* Perform another relax pass - this time we know where the
6475 		 globals are, so can make a better guess.  */
6476 	      relax_again = FALSE;
6477 	      lang_size_sections (&relax_again, FALSE);
6478 	    }
6479 	  while (relax_again);
6480 
6481 	  link_info.relax_pass++;
6482 	}
6483       need_layout = TRUE;
6484     }
6485 
6486   if (need_layout)
6487     {
6488       /* Final extra sizing to report errors.  */
6489       lang_do_assignments (lang_assigning_phase_enum);
6490       lang_reset_memory_regions ();
6491       lang_size_sections (NULL, TRUE);
6492     }
6493 }
6494 
6495 #ifdef ENABLE_PLUGINS
6496 /* Find the insert point for the plugin's replacement files.  We
6497    place them after the first claimed real object file, or if the
6498    first claimed object is an archive member, after the last real
6499    object file immediately preceding the archive.  In the event
6500    no objects have been claimed at all, we return the first dummy
6501    object file on the list as the insert point; that works, but
6502    the callee must be careful when relinking the file_chain as it
6503    is not actually on that chain, only the statement_list and the
6504    input_file list; in that case, the replacement files must be
6505    inserted at the head of the file_chain.  */
6506 
6507 static lang_input_statement_type *
find_replacements_insert_point(void)6508 find_replacements_insert_point (void)
6509 {
6510   lang_input_statement_type *claim1, *lastobject;
6511   lastobject = &input_file_chain.head->input_statement;
6512   for (claim1 = &file_chain.head->input_statement;
6513        claim1 != NULL;
6514        claim1 = &claim1->next->input_statement)
6515     {
6516       if (claim1->flags.claimed)
6517 	return claim1->flags.claim_archive ? lastobject : claim1;
6518       /* Update lastobject if this is a real object file.  */
6519       if (claim1->the_bfd && (claim1->the_bfd->my_archive == NULL))
6520 	lastobject = claim1;
6521     }
6522   /* No files were claimed by the plugin.  Choose the last object
6523      file found on the list (maybe the first, dummy entry) as the
6524      insert point.  */
6525   return lastobject;
6526 }
6527 
6528 /* Insert SRCLIST into DESTLIST after given element by chaining
6529    on FIELD as the next-pointer.  (Counterintuitively does not need
6530    a pointer to the actual after-node itself, just its chain field.)  */
6531 
6532 static void
lang_list_insert_after(lang_statement_list_type * destlist,lang_statement_list_type * srclist,lang_statement_union_type ** field)6533 lang_list_insert_after (lang_statement_list_type *destlist,
6534 			lang_statement_list_type *srclist,
6535 			lang_statement_union_type **field)
6536 {
6537   *(srclist->tail) = *field;
6538   *field = srclist->head;
6539   if (destlist->tail == field)
6540     destlist->tail = srclist->tail;
6541 }
6542 
6543 /* Detach new nodes added to DESTLIST since the time ORIGLIST
6544    was taken as a copy of it and leave them in ORIGLIST.  */
6545 
6546 static void
lang_list_remove_tail(lang_statement_list_type * destlist,lang_statement_list_type * origlist)6547 lang_list_remove_tail (lang_statement_list_type *destlist,
6548 		       lang_statement_list_type *origlist)
6549 {
6550   union lang_statement_union **savetail;
6551   /* Check that ORIGLIST really is an earlier state of DESTLIST.  */
6552   ASSERT (origlist->head == destlist->head);
6553   savetail = origlist->tail;
6554   origlist->head = *(savetail);
6555   origlist->tail = destlist->tail;
6556   destlist->tail = savetail;
6557   *savetail = NULL;
6558 }
6559 #endif /* ENABLE_PLUGINS */
6560 
6561 void
lang_process(void)6562 lang_process (void)
6563 {
6564   /* Finalize dynamic list.  */
6565   if (link_info.dynamic_list)
6566     lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6567 
6568   current_target = default_target;
6569 
6570   /* Open the output file.  */
6571   lang_for_each_statement (ldlang_open_output);
6572   init_opb ();
6573 
6574   ldemul_create_output_section_statements ();
6575 
6576   /* Add to the hash table all undefineds on the command line.  */
6577   lang_place_undefineds ();
6578 
6579   if (!bfd_section_already_linked_table_init ())
6580     einfo (_("%P%F: Failed to create hash table\n"));
6581 
6582   /* Create a bfd for each input file.  */
6583   current_target = default_target;
6584   open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
6585 
6586 #ifdef ENABLE_PLUGINS
6587   if (plugin_active_plugins_p ())
6588     {
6589       lang_statement_list_type added;
6590       lang_statement_list_type files, inputfiles;
6591 
6592       /* Now all files are read, let the plugin(s) decide if there
6593 	 are any more to be added to the link before we call the
6594 	 emulation's after_open hook.  We create a private list of
6595 	 input statements for this purpose, which we will eventually
6596 	 insert into the global statment list after the first claimed
6597 	 file.  */
6598       added = *stat_ptr;
6599       /* We need to manipulate all three chains in synchrony.  */
6600       files = file_chain;
6601       inputfiles = input_file_chain;
6602       if (plugin_call_all_symbols_read ())
6603 	einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6604 	       plugin_error_plugin ());
6605       /* Open any newly added files, updating the file chains.  */
6606       link_info.loading_lto_outputs = TRUE;
6607       open_input_bfds (*added.tail, OPEN_BFD_NORMAL);
6608       /* Restore the global list pointer now they have all been added.  */
6609       lang_list_remove_tail (stat_ptr, &added);
6610       /* And detach the fresh ends of the file lists.  */
6611       lang_list_remove_tail (&file_chain, &files);
6612       lang_list_remove_tail (&input_file_chain, &inputfiles);
6613       /* Were any new files added?  */
6614       if (added.head != NULL)
6615 	{
6616 	  /* If so, we will insert them into the statement list immediately
6617 	     after the first input file that was claimed by the plugin.  */
6618 	  plugin_insert = find_replacements_insert_point ();
6619 	  /* If a plugin adds input files without having claimed any, we
6620 	     don't really have a good idea where to place them.  Just putting
6621 	     them at the start or end of the list is liable to leave them
6622 	     outside the crtbegin...crtend range.  */
6623 	  ASSERT (plugin_insert != NULL);
6624 	  /* Splice the new statement list into the old one.  */
6625 	  lang_list_insert_after (stat_ptr, &added,
6626 				  &plugin_insert->header.next);
6627 	  /* Likewise for the file chains.  */
6628 	  lang_list_insert_after (&input_file_chain, &inputfiles,
6629 				  &plugin_insert->next_real_file);
6630 	  /* We must be careful when relinking file_chain; we may need to
6631 	     insert the new files at the head of the list if the insert
6632 	     point chosen is the dummy first input file.  */
6633 	  if (plugin_insert->filename)
6634 	    lang_list_insert_after (&file_chain, &files, &plugin_insert->next);
6635 	  else
6636 	    lang_list_insert_after (&file_chain, &files, &file_chain.head);
6637 
6638 	  /* Rescan archives in case new undefined symbols have appeared.  */
6639 	  open_input_bfds (statement_list.head, OPEN_BFD_RESCAN);
6640 	}
6641     }
6642 #endif /* ENABLE_PLUGINS */
6643 
6644   link_info.gc_sym_list = &entry_symbol;
6645   if (entry_symbol.name == NULL)
6646     link_info.gc_sym_list = ldlang_undef_chain_list_head;
6647 
6648   ldemul_after_open ();
6649   if (config.map_file != NULL)
6650     lang_print_asneeded ();
6651 
6652   bfd_section_already_linked_table_free ();
6653 
6654   /* Make sure that we're not mixing architectures.  We call this
6655      after all the input files have been opened, but before we do any
6656      other processing, so that any operations merge_private_bfd_data
6657      does on the output file will be known during the rest of the
6658      link.  */
6659   lang_check ();
6660 
6661   /* Handle .exports instead of a version script if we're told to do so.  */
6662   if (command_line.version_exports_section)
6663     lang_do_version_exports_section ();
6664 
6665   /* Build all sets based on the information gathered from the input
6666      files.  */
6667   ldctor_build_sets ();
6668 
6669   /* PR 13683: We must rerun the assignments prior to running garbage
6670      collection in order to make sure that all symbol aliases are resolved.  */
6671   lang_do_assignments (lang_mark_phase_enum);
6672   expld.phase = lang_first_phase_enum;
6673 
6674   /* Remove unreferenced sections if asked to.  */
6675   lang_gc_sections ();
6676 
6677   /* Size up the common data.  */
6678   lang_common ();
6679 
6680   /* Update wild statements.  */
6681   update_wild_statements (statement_list.head);
6682 
6683   /* Run through the contours of the script and attach input sections
6684      to the correct output sections.  */
6685   lang_statement_iteration++;
6686   map_input_to_output_sections (statement_list.head, NULL, NULL);
6687 
6688   process_insert_statements ();
6689 
6690   /* Find any sections not attached explicitly and handle them.  */
6691   lang_place_orphans ();
6692 
6693   if (! link_info.relocatable)
6694     {
6695       asection *found;
6696 
6697       /* Merge SEC_MERGE sections.  This has to be done after GC of
6698 	 sections, so that GCed sections are not merged, but before
6699 	 assigning dynamic symbols, since removing whole input sections
6700 	 is hard then.  */
6701       bfd_merge_sections (link_info.output_bfd, &link_info);
6702 
6703       /* Look for a text section and set the readonly attribute in it.  */
6704       found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6705 
6706       if (found != NULL)
6707 	{
6708 	  if (config.text_read_only)
6709 	    found->flags |= SEC_READONLY;
6710 	  else
6711 	    found->flags &= ~SEC_READONLY;
6712 	}
6713     }
6714 
6715   /* Do anything special before sizing sections.  This is where ELF
6716      and other back-ends size dynamic sections.  */
6717   ldemul_before_allocation ();
6718 
6719   /* We must record the program headers before we try to fix the
6720      section positions, since they will affect SIZEOF_HEADERS.  */
6721   lang_record_phdrs ();
6722 
6723   /* Check relro sections.  */
6724   if (link_info.relro && ! link_info.relocatable)
6725     lang_find_relro_sections ();
6726 
6727   /* Size up the sections.  */
6728   lang_size_sections (NULL, ! RELAXATION_ENABLED);
6729 
6730   /* See if anything special should be done now we know how big
6731      everything is.  This is where relaxation is done.  */
6732   ldemul_after_allocation ();
6733 
6734   /* Fix any .startof. or .sizeof. symbols.  */
6735   lang_set_startof ();
6736 
6737   /* Do all the assignments, now that we know the final resting places
6738      of all the symbols.  */
6739   lang_do_assignments (lang_final_phase_enum);
6740 
6741   ldemul_finish ();
6742 
6743   /* Make sure that the section addresses make sense.  */
6744   if (command_line.check_section_addresses)
6745     lang_check_section_addresses ();
6746 
6747   lang_end ();
6748 }
6749 
6750 /* EXPORTED TO YACC */
6751 
6752 void
lang_add_wild(struct wildcard_spec * filespec,struct wildcard_list * section_list,bfd_boolean keep_sections)6753 lang_add_wild (struct wildcard_spec *filespec,
6754 	       struct wildcard_list *section_list,
6755 	       bfd_boolean keep_sections)
6756 {
6757   struct wildcard_list *curr, *next;
6758   lang_wild_statement_type *new_stmt;
6759 
6760   /* Reverse the list as the parser puts it back to front.  */
6761   for (curr = section_list, section_list = NULL;
6762        curr != NULL;
6763        section_list = curr, curr = next)
6764     {
6765       if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6766 	placed_commons = TRUE;
6767 
6768       next = curr->next;
6769       curr->next = section_list;
6770     }
6771 
6772   if (filespec != NULL && filespec->name != NULL)
6773     {
6774       if (strcmp (filespec->name, "*") == 0)
6775 	filespec->name = NULL;
6776       else if (! wildcardp (filespec->name))
6777 	lang_has_input_file = TRUE;
6778     }
6779 
6780   new_stmt = new_stat (lang_wild_statement, stat_ptr);
6781   new_stmt->filename = NULL;
6782   new_stmt->filenames_sorted = FALSE;
6783   new_stmt->section_flag_list = NULL;
6784   if (filespec != NULL)
6785     {
6786       new_stmt->filename = filespec->name;
6787       new_stmt->filenames_sorted = filespec->sorted == by_name;
6788       new_stmt->section_flag_list = filespec->section_flag_list;
6789     }
6790   new_stmt->section_list = section_list;
6791   new_stmt->keep_sections = keep_sections;
6792   lang_list_init (&new_stmt->children);
6793   analyze_walk_wild_section_handler (new_stmt);
6794 }
6795 
6796 void
lang_section_start(const char * name,etree_type * address,const segment_type * segment)6797 lang_section_start (const char *name, etree_type *address,
6798 		    const segment_type *segment)
6799 {
6800   lang_address_statement_type *ad;
6801 
6802   ad = new_stat (lang_address_statement, stat_ptr);
6803   ad->section_name = name;
6804   ad->address = address;
6805   ad->segment = segment;
6806 }
6807 
6808 /* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6809    because of a -e argument on the command line, or zero if this is
6810    called by ENTRY in a linker script.  Command line arguments take
6811    precedence.  */
6812 
6813 void
lang_add_entry(const char * name,bfd_boolean cmdline)6814 lang_add_entry (const char *name, bfd_boolean cmdline)
6815 {
6816   if (entry_symbol.name == NULL
6817       || cmdline
6818       || ! entry_from_cmdline)
6819     {
6820       entry_symbol.name = name;
6821       entry_from_cmdline = cmdline;
6822     }
6823 }
6824 
6825 /* Set the default start symbol to NAME.  .em files should use this,
6826    not lang_add_entry, to override the use of "start" if neither the
6827    linker script nor the command line specifies an entry point.  NAME
6828    must be permanently allocated.  */
6829 void
lang_default_entry(const char * name)6830 lang_default_entry (const char *name)
6831 {
6832   entry_symbol_default = name;
6833 }
6834 
6835 void
lang_add_target(const char * name)6836 lang_add_target (const char *name)
6837 {
6838   lang_target_statement_type *new_stmt;
6839 
6840   new_stmt = new_stat (lang_target_statement, stat_ptr);
6841   new_stmt->target = name;
6842 }
6843 
6844 void
lang_add_map(const char * name)6845 lang_add_map (const char *name)
6846 {
6847   while (*name)
6848     {
6849       switch (*name)
6850 	{
6851 	case 'F':
6852 	  map_option_f = TRUE;
6853 	  break;
6854 	}
6855       name++;
6856     }
6857 }
6858 
6859 void
lang_add_fill(fill_type * fill)6860 lang_add_fill (fill_type *fill)
6861 {
6862   lang_fill_statement_type *new_stmt;
6863 
6864   new_stmt = new_stat (lang_fill_statement, stat_ptr);
6865   new_stmt->fill = fill;
6866 }
6867 
6868 void
lang_add_data(int type,union etree_union * exp)6869 lang_add_data (int type, union etree_union *exp)
6870 {
6871   lang_data_statement_type *new_stmt;
6872 
6873   new_stmt = new_stat (lang_data_statement, stat_ptr);
6874   new_stmt->exp = exp;
6875   new_stmt->type = type;
6876 }
6877 
6878 /* Create a new reloc statement.  RELOC is the BFD relocation type to
6879    generate.  HOWTO is the corresponding howto structure (we could
6880    look this up, but the caller has already done so).  SECTION is the
6881    section to generate a reloc against, or NAME is the name of the
6882    symbol to generate a reloc against.  Exactly one of SECTION and
6883    NAME must be NULL.  ADDEND is an expression for the addend.  */
6884 
6885 void
lang_add_reloc(bfd_reloc_code_real_type reloc,reloc_howto_type * howto,asection * section,const char * name,union etree_union * addend)6886 lang_add_reloc (bfd_reloc_code_real_type reloc,
6887 		reloc_howto_type *howto,
6888 		asection *section,
6889 		const char *name,
6890 		union etree_union *addend)
6891 {
6892   lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6893 
6894   p->reloc = reloc;
6895   p->howto = howto;
6896   p->section = section;
6897   p->name = name;
6898   p->addend_exp = addend;
6899 
6900   p->addend_value = 0;
6901   p->output_section = NULL;
6902   p->output_offset = 0;
6903 }
6904 
6905 lang_assignment_statement_type *
lang_add_assignment(etree_type * exp)6906 lang_add_assignment (etree_type *exp)
6907 {
6908   lang_assignment_statement_type *new_stmt;
6909 
6910   new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6911   new_stmt->exp = exp;
6912   return new_stmt;
6913 }
6914 
6915 void
lang_add_attribute(enum statement_enum attribute)6916 lang_add_attribute (enum statement_enum attribute)
6917 {
6918   new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6919 }
6920 
6921 void
lang_startup(const char * name)6922 lang_startup (const char *name)
6923 {
6924   if (first_file->filename != NULL)
6925     {
6926       einfo (_("%P%F: multiple STARTUP files\n"));
6927     }
6928   first_file->filename = name;
6929   first_file->local_sym_name = name;
6930   first_file->flags.real = TRUE;
6931 }
6932 
6933 void
lang_float(bfd_boolean maybe)6934 lang_float (bfd_boolean maybe)
6935 {
6936   lang_float_flag = maybe;
6937 }
6938 
6939 
6940 /* Work out the load- and run-time regions from a script statement, and
6941    store them in *LMA_REGION and *REGION respectively.
6942 
6943    MEMSPEC is the name of the run-time region, or the value of
6944    DEFAULT_MEMORY_REGION if the statement didn't specify one.
6945    LMA_MEMSPEC is the name of the load-time region, or null if the
6946    statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6947    had an explicit load address.
6948 
6949    It is an error to specify both a load region and a load address.  */
6950 
6951 static void
lang_get_regions(lang_memory_region_type ** region,lang_memory_region_type ** lma_region,const char * memspec,const char * lma_memspec,bfd_boolean have_lma,bfd_boolean have_vma)6952 lang_get_regions (lang_memory_region_type **region,
6953 		  lang_memory_region_type **lma_region,
6954 		  const char *memspec,
6955 		  const char *lma_memspec,
6956 		  bfd_boolean have_lma,
6957 		  bfd_boolean have_vma)
6958 {
6959   *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6960 
6961   /* If no runtime region or VMA has been specified, but the load region
6962      has been specified, then use the load region for the runtime region
6963      as well.  */
6964   if (lma_memspec != NULL
6965       && ! have_vma
6966       && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6967     *region = *lma_region;
6968   else
6969     *region = lang_memory_region_lookup (memspec, FALSE);
6970 
6971   if (have_lma && lma_memspec != 0)
6972     einfo (_("%X%P:%S: section has both a load address and a load region\n"),
6973 	   NULL);
6974 }
6975 
6976 void
lang_leave_output_section_statement(fill_type * fill,const char * memspec,lang_output_section_phdr_list * phdrs,const char * lma_memspec)6977 lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6978 				     lang_output_section_phdr_list *phdrs,
6979 				     const char *lma_memspec)
6980 {
6981   lang_get_regions (&current_section->region,
6982 		    &current_section->lma_region,
6983 		    memspec, lma_memspec,
6984 		    current_section->load_base != NULL,
6985 		    current_section->addr_tree != NULL);
6986 
6987   /* If this section has no load region or base, but uses the same
6988      region as the previous section, then propagate the previous
6989      section's load region.  */
6990 
6991   if (current_section->lma_region == NULL
6992       && current_section->load_base == NULL
6993       && current_section->addr_tree == NULL
6994       && current_section->region == current_section->prev->region)
6995     current_section->lma_region = current_section->prev->lma_region;
6996 
6997   current_section->fill = fill;
6998   current_section->phdrs = phdrs;
6999   pop_stat_ptr ();
7000 }
7001 
7002 /* Create an absolute symbol with the given name with the value of the
7003    address of first byte of the section named.
7004 
7005    If the symbol already exists, then do nothing.  */
7006 
7007 void
lang_abs_symbol_at_beginning_of(const char * secname,const char * name)7008 lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
7009 {
7010   struct bfd_link_hash_entry *h;
7011 
7012   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
7013   if (h == NULL)
7014     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
7015 
7016   if (h->type == bfd_link_hash_new
7017       || h->type == bfd_link_hash_undefined)
7018     {
7019       asection *sec;
7020 
7021       h->type = bfd_link_hash_defined;
7022 
7023       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
7024       if (sec == NULL)
7025 	h->u.def.value = 0;
7026       else
7027 	h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
7028 
7029       h->u.def.section = bfd_abs_section_ptr;
7030     }
7031 }
7032 
7033 /* Create an absolute symbol with the given name with the value of the
7034    address of the first byte after the end of the section named.
7035 
7036    If the symbol already exists, then do nothing.  */
7037 
7038 void
lang_abs_symbol_at_end_of(const char * secname,const char * name)7039 lang_abs_symbol_at_end_of (const char *secname, const char *name)
7040 {
7041   struct bfd_link_hash_entry *h;
7042 
7043   h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
7044   if (h == NULL)
7045     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
7046 
7047   if (h->type == bfd_link_hash_new
7048       || h->type == bfd_link_hash_undefined)
7049     {
7050       asection *sec;
7051 
7052       h->type = bfd_link_hash_defined;
7053 
7054       sec = bfd_get_section_by_name (link_info.output_bfd, secname);
7055       if (sec == NULL)
7056 	h->u.def.value = 0;
7057       else
7058 	h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
7059 			  + TO_ADDR (sec->size));
7060 
7061       h->u.def.section = bfd_abs_section_ptr;
7062     }
7063 }
7064 
7065 
7066 void
lang_statement_append(lang_statement_list_type * list,lang_statement_union_type * element,lang_statement_union_type ** field)7067 lang_statement_append (lang_statement_list_type *list,
7068 		       lang_statement_union_type *element,
7069 		       lang_statement_union_type **field)
7070 {
7071   *(list->tail) = element;
7072   list->tail = field;
7073 }
7074 
7075 /* Set the output format type.  -oformat overrides scripts.  */
7076 
7077 void
lang_add_output_format(const char * format,const char * big,const char * little,int from_script)7078 lang_add_output_format (const char *format,
7079 			const char *big,
7080 			const char *little,
7081 			int from_script)
7082 {
7083   if (output_target == NULL || !from_script)
7084     {
7085       if (command_line.endian == ENDIAN_BIG
7086 	  && big != NULL)
7087 	format = big;
7088       else if (command_line.endian == ENDIAN_LITTLE
7089 	       && little != NULL)
7090 	format = little;
7091 
7092       output_target = format;
7093     }
7094 }
7095 
7096 void
lang_add_insert(const char * where,int is_before)7097 lang_add_insert (const char *where, int is_before)
7098 {
7099   lang_insert_statement_type *new_stmt;
7100 
7101   new_stmt = new_stat (lang_insert_statement, stat_ptr);
7102   new_stmt->where = where;
7103   new_stmt->is_before = is_before;
7104   saved_script_handle = previous_script_handle;
7105 }
7106 
7107 /* Enter a group.  This creates a new lang_group_statement, and sets
7108    stat_ptr to build new statements within the group.  */
7109 
7110 void
lang_enter_group(void)7111 lang_enter_group (void)
7112 {
7113   lang_group_statement_type *g;
7114 
7115   g = new_stat (lang_group_statement, stat_ptr);
7116   lang_list_init (&g->children);
7117   push_stat_ptr (&g->children);
7118 }
7119 
7120 /* Leave a group.  This just resets stat_ptr to start writing to the
7121    regular list of statements again.  Note that this will not work if
7122    groups can occur inside anything else which can adjust stat_ptr,
7123    but currently they can't.  */
7124 
7125 void
lang_leave_group(void)7126 lang_leave_group (void)
7127 {
7128   pop_stat_ptr ();
7129 }
7130 
7131 /* Add a new program header.  This is called for each entry in a PHDRS
7132    command in a linker script.  */
7133 
7134 void
lang_new_phdr(const char * name,etree_type * type,bfd_boolean filehdr,bfd_boolean phdrs,etree_type * at,etree_type * flags)7135 lang_new_phdr (const char *name,
7136 	       etree_type *type,
7137 	       bfd_boolean filehdr,
7138 	       bfd_boolean phdrs,
7139 	       etree_type *at,
7140 	       etree_type *flags)
7141 {
7142   struct lang_phdr *n, **pp;
7143   bfd_boolean hdrs;
7144 
7145   n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
7146   n->next = NULL;
7147   n->name = name;
7148   n->type = exp_get_value_int (type, 0, "program header type");
7149   n->filehdr = filehdr;
7150   n->phdrs = phdrs;
7151   n->at = at;
7152   n->flags = flags;
7153 
7154   hdrs = n->type == 1 && (phdrs || filehdr);
7155 
7156   for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
7157     if (hdrs
7158 	&& (*pp)->type == 1
7159 	&& !((*pp)->filehdr || (*pp)->phdrs))
7160       {
7161 	einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported"
7162 		 " when prior PT_LOAD headers lack them\n"), NULL);
7163 	hdrs = FALSE;
7164       }
7165 
7166   *pp = n;
7167 }
7168 
7169 /* Record the program header information in the output BFD.  FIXME: We
7170    should not be calling an ELF specific function here.  */
7171 
7172 static void
lang_record_phdrs(void)7173 lang_record_phdrs (void)
7174 {
7175   unsigned int alc;
7176   asection **secs;
7177   lang_output_section_phdr_list *last;
7178   struct lang_phdr *l;
7179   lang_output_section_statement_type *os;
7180 
7181   alc = 10;
7182   secs = (asection **) xmalloc (alc * sizeof (asection *));
7183   last = NULL;
7184 
7185   for (l = lang_phdr_list; l != NULL; l = l->next)
7186     {
7187       unsigned int c;
7188       flagword flags;
7189       bfd_vma at;
7190 
7191       c = 0;
7192       for (os = &lang_output_section_statement.head->output_section_statement;
7193 	   os != NULL;
7194 	   os = os->next)
7195 	{
7196 	  lang_output_section_phdr_list *pl;
7197 
7198 	  if (os->constraint < 0)
7199 	    continue;
7200 
7201 	  pl = os->phdrs;
7202 	  if (pl != NULL)
7203 	    last = pl;
7204 	  else
7205 	    {
7206 	      if (os->sectype == noload_section
7207 		  || os->bfd_section == NULL
7208 		  || (os->bfd_section->flags & SEC_ALLOC) == 0)
7209 		continue;
7210 
7211 	      /* Don't add orphans to PT_INTERP header.  */
7212 	      if (l->type == 3)
7213 		continue;
7214 
7215 	      if (last == NULL)
7216 		{
7217 		  lang_output_section_statement_type * tmp_os;
7218 
7219 		  /* If we have not run across a section with a program
7220 		     header assigned to it yet, then scan forwards to find
7221 		     one.  This prevents inconsistencies in the linker's
7222 		     behaviour when a script has specified just a single
7223 		     header and there are sections in that script which are
7224 		     not assigned to it, and which occur before the first
7225 		     use of that header. See here for more details:
7226 		     http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7227 		  for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7228 		    if (tmp_os->phdrs)
7229 		      {
7230 			last = tmp_os->phdrs;
7231 			break;
7232 		      }
7233 		  if (last == NULL)
7234 		    einfo (_("%F%P: no sections assigned to phdrs\n"));
7235 		}
7236 	      pl = last;
7237 	    }
7238 
7239 	  if (os->bfd_section == NULL)
7240 	    continue;
7241 
7242 	  for (; pl != NULL; pl = pl->next)
7243 	    {
7244 	      if (strcmp (pl->name, l->name) == 0)
7245 		{
7246 		  if (c >= alc)
7247 		    {
7248 		      alc *= 2;
7249 		      secs = (asection **) xrealloc (secs,
7250 						     alc * sizeof (asection *));
7251 		    }
7252 		  secs[c] = os->bfd_section;
7253 		  ++c;
7254 		  pl->used = TRUE;
7255 		}
7256 	    }
7257 	}
7258 
7259       if (l->flags == NULL)
7260 	flags = 0;
7261       else
7262 	flags = exp_get_vma (l->flags, 0, "phdr flags");
7263 
7264       if (l->at == NULL)
7265 	at = 0;
7266       else
7267 	at = exp_get_vma (l->at, 0, "phdr load address");
7268 
7269       if (! bfd_record_phdr (link_info.output_bfd, l->type,
7270 			     l->flags != NULL, flags, l->at != NULL,
7271 			     at, l->filehdr, l->phdrs, c, secs))
7272 	einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7273     }
7274 
7275   free (secs);
7276 
7277   /* Make sure all the phdr assignments succeeded.  */
7278   for (os = &lang_output_section_statement.head->output_section_statement;
7279        os != NULL;
7280        os = os->next)
7281     {
7282       lang_output_section_phdr_list *pl;
7283 
7284       if (os->constraint < 0
7285 	  || os->bfd_section == NULL)
7286 	continue;
7287 
7288       for (pl = os->phdrs;
7289 	   pl != NULL;
7290 	   pl = pl->next)
7291 	if (! pl->used && strcmp (pl->name, "NONE") != 0)
7292 	  einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7293 		 os->name, pl->name);
7294     }
7295 }
7296 
7297 /* Record a list of sections which may not be cross referenced.  */
7298 
7299 void
lang_add_nocrossref(lang_nocrossref_type * l)7300 lang_add_nocrossref (lang_nocrossref_type *l)
7301 {
7302   struct lang_nocrossrefs *n;
7303 
7304   n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7305   n->next = nocrossref_list;
7306   n->list = l;
7307   nocrossref_list = n;
7308 
7309   /* Set notice_all so that we get informed about all symbols.  */
7310   link_info.notice_all = TRUE;
7311 }
7312 
7313 /* Overlay handling.  We handle overlays with some static variables.  */
7314 
7315 /* The overlay virtual address.  */
7316 static etree_type *overlay_vma;
7317 /* And subsection alignment.  */
7318 static etree_type *overlay_subalign;
7319 
7320 /* An expression for the maximum section size seen so far.  */
7321 static etree_type *overlay_max;
7322 
7323 /* A list of all the sections in this overlay.  */
7324 
7325 struct overlay_list {
7326   struct overlay_list *next;
7327   lang_output_section_statement_type *os;
7328 };
7329 
7330 static struct overlay_list *overlay_list;
7331 
7332 /* Start handling an overlay.  */
7333 
7334 void
lang_enter_overlay(etree_type * vma_expr,etree_type * subalign)7335 lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7336 {
7337   /* The grammar should prevent nested overlays from occurring.  */
7338   ASSERT (overlay_vma == NULL
7339 	  && overlay_subalign == NULL
7340 	  && overlay_max == NULL);
7341 
7342   overlay_vma = vma_expr;
7343   overlay_subalign = subalign;
7344 }
7345 
7346 /* Start a section in an overlay.  We handle this by calling
7347    lang_enter_output_section_statement with the correct VMA.
7348    lang_leave_overlay sets up the LMA and memory regions.  */
7349 
7350 void
lang_enter_overlay_section(const char * name)7351 lang_enter_overlay_section (const char *name)
7352 {
7353   struct overlay_list *n;
7354   etree_type *size;
7355 
7356   lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7357 				       0, overlay_subalign, 0, 0, 0);
7358 
7359   /* If this is the first section, then base the VMA of future
7360      sections on this one.  This will work correctly even if `.' is
7361      used in the addresses.  */
7362   if (overlay_list == NULL)
7363     overlay_vma = exp_nameop (ADDR, name);
7364 
7365   /* Remember the section.  */
7366   n = (struct overlay_list *) xmalloc (sizeof *n);
7367   n->os = current_section;
7368   n->next = overlay_list;
7369   overlay_list = n;
7370 
7371   size = exp_nameop (SIZEOF, name);
7372 
7373   /* Arrange to work out the maximum section end address.  */
7374   if (overlay_max == NULL)
7375     overlay_max = size;
7376   else
7377     overlay_max = exp_binop (MAX_K, overlay_max, size);
7378 }
7379 
7380 /* Finish a section in an overlay.  There isn't any special to do
7381    here.  */
7382 
7383 void
lang_leave_overlay_section(fill_type * fill,lang_output_section_phdr_list * phdrs)7384 lang_leave_overlay_section (fill_type *fill,
7385 			    lang_output_section_phdr_list *phdrs)
7386 {
7387   const char *name;
7388   char *clean, *s2;
7389   const char *s1;
7390   char *buf;
7391 
7392   name = current_section->name;
7393 
7394   /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7395      region and that no load-time region has been specified.  It doesn't
7396      really matter what we say here, since lang_leave_overlay will
7397      override it.  */
7398   lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7399 
7400   /* Define the magic symbols.  */
7401 
7402   clean = (char *) xmalloc (strlen (name) + 1);
7403   s2 = clean;
7404   for (s1 = name; *s1 != '\0'; s1++)
7405     if (ISALNUM (*s1) || *s1 == '_')
7406       *s2++ = *s1;
7407   *s2 = '\0';
7408 
7409   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7410   sprintf (buf, "__load_start_%s", clean);
7411   lang_add_assignment (exp_provide (buf,
7412 				    exp_nameop (LOADADDR, name),
7413 				    FALSE));
7414 
7415   buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7416   sprintf (buf, "__load_stop_%s", clean);
7417   lang_add_assignment (exp_provide (buf,
7418 				    exp_binop ('+',
7419 					       exp_nameop (LOADADDR, name),
7420 					       exp_nameop (SIZEOF, name)),
7421 				    FALSE));
7422 
7423   free (clean);
7424 }
7425 
7426 /* Finish an overlay.  If there are any overlay wide settings, this
7427    looks through all the sections in the overlay and sets them.  */
7428 
7429 void
lang_leave_overlay(etree_type * lma_expr,int nocrossrefs,fill_type * fill,const char * memspec,lang_output_section_phdr_list * phdrs,const char * lma_memspec)7430 lang_leave_overlay (etree_type *lma_expr,
7431 		    int nocrossrefs,
7432 		    fill_type *fill,
7433 		    const char *memspec,
7434 		    lang_output_section_phdr_list *phdrs,
7435 		    const char *lma_memspec)
7436 {
7437   lang_memory_region_type *region;
7438   lang_memory_region_type *lma_region;
7439   struct overlay_list *l;
7440   lang_nocrossref_type *nocrossref;
7441 
7442   lang_get_regions (&region, &lma_region,
7443 		    memspec, lma_memspec,
7444 		    lma_expr != NULL, FALSE);
7445 
7446   nocrossref = NULL;
7447 
7448   /* After setting the size of the last section, set '.' to end of the
7449      overlay region.  */
7450   if (overlay_list != NULL)
7451     {
7452       overlay_list->os->update_dot = 1;
7453       overlay_list->os->update_dot_tree
7454 	= exp_assign (".", exp_binop ('+', overlay_vma, overlay_max), FALSE);
7455     }
7456 
7457   l = overlay_list;
7458   while (l != NULL)
7459     {
7460       struct overlay_list *next;
7461 
7462       if (fill != NULL && l->os->fill == NULL)
7463 	l->os->fill = fill;
7464 
7465       l->os->region = region;
7466       l->os->lma_region = lma_region;
7467 
7468       /* The first section has the load address specified in the
7469 	 OVERLAY statement.  The rest are worked out from that.
7470 	 The base address is not needed (and should be null) if
7471 	 an LMA region was specified.  */
7472       if (l->next == 0)
7473 	{
7474 	  l->os->load_base = lma_expr;
7475 	  l->os->sectype = normal_section;
7476 	}
7477       if (phdrs != NULL && l->os->phdrs == NULL)
7478 	l->os->phdrs = phdrs;
7479 
7480       if (nocrossrefs)
7481 	{
7482 	  lang_nocrossref_type *nc;
7483 
7484 	  nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7485 	  nc->name = l->os->name;
7486 	  nc->next = nocrossref;
7487 	  nocrossref = nc;
7488 	}
7489 
7490       next = l->next;
7491       free (l);
7492       l = next;
7493     }
7494 
7495   if (nocrossref != NULL)
7496     lang_add_nocrossref (nocrossref);
7497 
7498   overlay_vma = NULL;
7499   overlay_list = NULL;
7500   overlay_max = NULL;
7501 }
7502 
7503 /* Version handling.  This is only useful for ELF.  */
7504 
7505 /* If PREV is NULL, return first version pattern matching particular symbol.
7506    If PREV is non-NULL, return first version pattern matching particular
7507    symbol after PREV (previously returned by lang_vers_match).  */
7508 
7509 static struct bfd_elf_version_expr *
lang_vers_match(struct bfd_elf_version_expr_head * head,struct bfd_elf_version_expr * prev,const char * sym)7510 lang_vers_match (struct bfd_elf_version_expr_head *head,
7511 		 struct bfd_elf_version_expr *prev,
7512 		 const char *sym)
7513 {
7514   const char *c_sym;
7515   const char *cxx_sym = sym;
7516   const char *java_sym = sym;
7517   struct bfd_elf_version_expr *expr = NULL;
7518   enum demangling_styles curr_style;
7519 
7520   curr_style = CURRENT_DEMANGLING_STYLE;
7521   cplus_demangle_set_style (no_demangling);
7522   c_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_NO_OPTS);
7523   if (!c_sym)
7524     c_sym = sym;
7525   cplus_demangle_set_style (curr_style);
7526 
7527   if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7528     {
7529       cxx_sym = bfd_demangle (link_info.output_bfd, sym,
7530 			      DMGL_PARAMS | DMGL_ANSI);
7531       if (!cxx_sym)
7532 	cxx_sym = sym;
7533     }
7534   if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7535     {
7536       java_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_JAVA);
7537       if (!java_sym)
7538 	java_sym = sym;
7539     }
7540 
7541   if (head->htab && (prev == NULL || prev->literal))
7542     {
7543       struct bfd_elf_version_expr e;
7544 
7545       switch (prev ? prev->mask : 0)
7546 	{
7547 	case 0:
7548 	  if (head->mask & BFD_ELF_VERSION_C_TYPE)
7549 	    {
7550 	      e.pattern = c_sym;
7551 	      expr = (struct bfd_elf_version_expr *)
7552 		  htab_find ((htab_t) head->htab, &e);
7553 	      while (expr && strcmp (expr->pattern, c_sym) == 0)
7554 		if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7555 		  goto out_ret;
7556 		else
7557 		  expr = expr->next;
7558 	    }
7559 	  /* Fallthrough */
7560 	case BFD_ELF_VERSION_C_TYPE:
7561 	  if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7562 	    {
7563 	      e.pattern = cxx_sym;
7564 	      expr = (struct bfd_elf_version_expr *)
7565 		  htab_find ((htab_t) head->htab, &e);
7566 	      while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7567 		if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7568 		  goto out_ret;
7569 		else
7570 		  expr = expr->next;
7571 	    }
7572 	  /* Fallthrough */
7573 	case BFD_ELF_VERSION_CXX_TYPE:
7574 	  if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7575 	    {
7576 	      e.pattern = java_sym;
7577 	      expr = (struct bfd_elf_version_expr *)
7578 		  htab_find ((htab_t) head->htab, &e);
7579 	      while (expr && strcmp (expr->pattern, java_sym) == 0)
7580 		if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7581 		  goto out_ret;
7582 		else
7583 		  expr = expr->next;
7584 	    }
7585 	  /* Fallthrough */
7586 	default:
7587 	  break;
7588 	}
7589     }
7590 
7591   /* Finally, try the wildcards.  */
7592   if (prev == NULL || prev->literal)
7593     expr = head->remaining;
7594   else
7595     expr = prev->next;
7596   for (; expr; expr = expr->next)
7597     {
7598       const char *s;
7599 
7600       if (!expr->pattern)
7601 	continue;
7602 
7603       if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7604 	break;
7605 
7606       if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7607 	s = java_sym;
7608       else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7609 	s = cxx_sym;
7610       else
7611 	s = c_sym;
7612       if (fnmatch (expr->pattern, s, 0) == 0)
7613 	break;
7614     }
7615 
7616  out_ret:
7617   if (c_sym != sym)
7618     free ((char *) c_sym);
7619   if (cxx_sym != sym)
7620     free ((char *) cxx_sym);
7621   if (java_sym != sym)
7622     free ((char *) java_sym);
7623   return expr;
7624 }
7625 
7626 /* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7627    return a pointer to the symbol name with any backslash quotes removed.  */
7628 
7629 static const char *
realsymbol(const char * pattern)7630 realsymbol (const char *pattern)
7631 {
7632   const char *p;
7633   bfd_boolean changed = FALSE, backslash = FALSE;
7634   char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7635 
7636   for (p = pattern, s = symbol; *p != '\0'; ++p)
7637     {
7638       /* It is a glob pattern only if there is no preceding
7639 	 backslash.  */
7640       if (backslash)
7641 	{
7642 	  /* Remove the preceding backslash.  */
7643 	  *(s - 1) = *p;
7644 	  backslash = FALSE;
7645 	  changed = TRUE;
7646 	}
7647       else
7648 	{
7649 	  if (*p == '?' || *p == '*' || *p == '[')
7650 	    {
7651 	      free (symbol);
7652 	      return NULL;
7653 	    }
7654 
7655 	  *s++ = *p;
7656 	  backslash = *p == '\\';
7657 	}
7658     }
7659 
7660   if (changed)
7661     {
7662       *s = '\0';
7663       return symbol;
7664     }
7665   else
7666     {
7667       free (symbol);
7668       return pattern;
7669     }
7670 }
7671 
7672 /* This is called for each variable name or match expression.  NEW_NAME is
7673    the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7674    pattern to be matched against symbol names.  */
7675 
7676 struct bfd_elf_version_expr *
lang_new_vers_pattern(struct bfd_elf_version_expr * orig,const char * new_name,const char * lang,bfd_boolean literal_p)7677 lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7678 		       const char *new_name,
7679 		       const char *lang,
7680 		       bfd_boolean literal_p)
7681 {
7682   struct bfd_elf_version_expr *ret;
7683 
7684   ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7685   ret->next = orig;
7686   ret->symver = 0;
7687   ret->script = 0;
7688   ret->literal = TRUE;
7689   ret->pattern = literal_p ? new_name : realsymbol (new_name);
7690   if (ret->pattern == NULL)
7691     {
7692       ret->pattern = new_name;
7693       ret->literal = FALSE;
7694     }
7695 
7696   if (lang == NULL || strcasecmp (lang, "C") == 0)
7697     ret->mask = BFD_ELF_VERSION_C_TYPE;
7698   else if (strcasecmp (lang, "C++") == 0)
7699     ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7700   else if (strcasecmp (lang, "Java") == 0)
7701     ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7702   else
7703     {
7704       einfo (_("%X%P: unknown language `%s' in version information\n"),
7705 	     lang);
7706       ret->mask = BFD_ELF_VERSION_C_TYPE;
7707     }
7708 
7709   return ldemul_new_vers_pattern (ret);
7710 }
7711 
7712 /* This is called for each set of variable names and match
7713    expressions.  */
7714 
7715 struct bfd_elf_version_tree *
lang_new_vers_node(struct bfd_elf_version_expr * globals,struct bfd_elf_version_expr * locals)7716 lang_new_vers_node (struct bfd_elf_version_expr *globals,
7717 		    struct bfd_elf_version_expr *locals)
7718 {
7719   struct bfd_elf_version_tree *ret;
7720 
7721   ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7722   ret->globals.list = globals;
7723   ret->locals.list = locals;
7724   ret->match = lang_vers_match;
7725   ret->name_indx = (unsigned int) -1;
7726   return ret;
7727 }
7728 
7729 /* This static variable keeps track of version indices.  */
7730 
7731 static int version_index;
7732 
7733 static hashval_t
version_expr_head_hash(const void * p)7734 version_expr_head_hash (const void *p)
7735 {
7736   const struct bfd_elf_version_expr *e =
7737       (const struct bfd_elf_version_expr *) p;
7738 
7739   return htab_hash_string (e->pattern);
7740 }
7741 
7742 static int
version_expr_head_eq(const void * p1,const void * p2)7743 version_expr_head_eq (const void *p1, const void *p2)
7744 {
7745   const struct bfd_elf_version_expr *e1 =
7746       (const struct bfd_elf_version_expr *) p1;
7747   const struct bfd_elf_version_expr *e2 =
7748       (const struct bfd_elf_version_expr *) p2;
7749 
7750   return strcmp (e1->pattern, e2->pattern) == 0;
7751 }
7752 
7753 static void
lang_finalize_version_expr_head(struct bfd_elf_version_expr_head * head)7754 lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7755 {
7756   size_t count = 0;
7757   struct bfd_elf_version_expr *e, *next;
7758   struct bfd_elf_version_expr **list_loc, **remaining_loc;
7759 
7760   for (e = head->list; e; e = e->next)
7761     {
7762       if (e->literal)
7763 	count++;
7764       head->mask |= e->mask;
7765     }
7766 
7767   if (count)
7768     {
7769       head->htab = htab_create (count * 2, version_expr_head_hash,
7770 				version_expr_head_eq, NULL);
7771       list_loc = &head->list;
7772       remaining_loc = &head->remaining;
7773       for (e = head->list; e; e = next)
7774 	{
7775 	  next = e->next;
7776 	  if (!e->literal)
7777 	    {
7778 	      *remaining_loc = e;
7779 	      remaining_loc = &e->next;
7780 	    }
7781 	  else
7782 	    {
7783 	      void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7784 
7785 	      if (*loc)
7786 		{
7787 		  struct bfd_elf_version_expr *e1, *last;
7788 
7789 		  e1 = (struct bfd_elf_version_expr *) *loc;
7790 		  last = NULL;
7791 		  do
7792 		    {
7793 		      if (e1->mask == e->mask)
7794 			{
7795 			  last = NULL;
7796 			  break;
7797 			}
7798 		      last = e1;
7799 		      e1 = e1->next;
7800 		    }
7801 		  while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7802 
7803 		  if (last == NULL)
7804 		    {
7805 		      /* This is a duplicate.  */
7806 		      /* FIXME: Memory leak.  Sometimes pattern is not
7807 			 xmalloced alone, but in larger chunk of memory.  */
7808 		      /* free (e->pattern); */
7809 		      free (e);
7810 		    }
7811 		  else
7812 		    {
7813 		      e->next = last->next;
7814 		      last->next = e;
7815 		    }
7816 		}
7817 	      else
7818 		{
7819 		  *loc = e;
7820 		  *list_loc = e;
7821 		  list_loc = &e->next;
7822 		}
7823 	    }
7824 	}
7825       *remaining_loc = NULL;
7826       *list_loc = head->remaining;
7827     }
7828   else
7829     head->remaining = head->list;
7830 }
7831 
7832 /* This is called when we know the name and dependencies of the
7833    version.  */
7834 
7835 void
lang_register_vers_node(const char * name,struct bfd_elf_version_tree * version,struct bfd_elf_version_deps * deps)7836 lang_register_vers_node (const char *name,
7837 			 struct bfd_elf_version_tree *version,
7838 			 struct bfd_elf_version_deps *deps)
7839 {
7840   struct bfd_elf_version_tree *t, **pp;
7841   struct bfd_elf_version_expr *e1;
7842 
7843   if (name == NULL)
7844     name = "";
7845 
7846   if (link_info.version_info != NULL
7847       && (name[0] == '\0' || link_info.version_info->name[0] == '\0'))
7848     {
7849       einfo (_("%X%P: anonymous version tag cannot be combined"
7850 	       " with other version tags\n"));
7851       free (version);
7852       return;
7853     }
7854 
7855   /* Make sure this node has a unique name.  */
7856   for (t = link_info.version_info; t != NULL; t = t->next)
7857     if (strcmp (t->name, name) == 0)
7858       einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7859 
7860   lang_finalize_version_expr_head (&version->globals);
7861   lang_finalize_version_expr_head (&version->locals);
7862 
7863   /* Check the global and local match names, and make sure there
7864      aren't any duplicates.  */
7865 
7866   for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7867     {
7868       for (t = link_info.version_info; t != NULL; t = t->next)
7869 	{
7870 	  struct bfd_elf_version_expr *e2;
7871 
7872 	  if (t->locals.htab && e1->literal)
7873 	    {
7874 	      e2 = (struct bfd_elf_version_expr *)
7875 		  htab_find ((htab_t) t->locals.htab, e1);
7876 	      while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7877 		{
7878 		  if (e1->mask == e2->mask)
7879 		    einfo (_("%X%P: duplicate expression `%s'"
7880 			     " in version information\n"), e1->pattern);
7881 		  e2 = e2->next;
7882 		}
7883 	    }
7884 	  else if (!e1->literal)
7885 	    for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7886 	      if (strcmp (e1->pattern, e2->pattern) == 0
7887 		  && e1->mask == e2->mask)
7888 		einfo (_("%X%P: duplicate expression `%s'"
7889 			 " in version information\n"), e1->pattern);
7890 	}
7891     }
7892 
7893   for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7894     {
7895       for (t = link_info.version_info; t != NULL; t = t->next)
7896 	{
7897 	  struct bfd_elf_version_expr *e2;
7898 
7899 	  if (t->globals.htab && e1->literal)
7900 	    {
7901 	      e2 = (struct bfd_elf_version_expr *)
7902 		  htab_find ((htab_t) t->globals.htab, e1);
7903 	      while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7904 		{
7905 		  if (e1->mask == e2->mask)
7906 		    einfo (_("%X%P: duplicate expression `%s'"
7907 			     " in version information\n"),
7908 			   e1->pattern);
7909 		  e2 = e2->next;
7910 		}
7911 	    }
7912 	  else if (!e1->literal)
7913 	    for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7914 	      if (strcmp (e1->pattern, e2->pattern) == 0
7915 		  && e1->mask == e2->mask)
7916 		einfo (_("%X%P: duplicate expression `%s'"
7917 			 " in version information\n"), e1->pattern);
7918 	}
7919     }
7920 
7921   version->deps = deps;
7922   version->name = name;
7923   if (name[0] != '\0')
7924     {
7925       ++version_index;
7926       version->vernum = version_index;
7927     }
7928   else
7929     version->vernum = 0;
7930 
7931   for (pp = &link_info.version_info; *pp != NULL; pp = &(*pp)->next)
7932     ;
7933   *pp = version;
7934 }
7935 
7936 /* This is called when we see a version dependency.  */
7937 
7938 struct bfd_elf_version_deps *
lang_add_vers_depend(struct bfd_elf_version_deps * list,const char * name)7939 lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7940 {
7941   struct bfd_elf_version_deps *ret;
7942   struct bfd_elf_version_tree *t;
7943 
7944   ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7945   ret->next = list;
7946 
7947   for (t = link_info.version_info; t != NULL; t = t->next)
7948     {
7949       if (strcmp (t->name, name) == 0)
7950 	{
7951 	  ret->version_needed = t;
7952 	  return ret;
7953 	}
7954     }
7955 
7956   einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7957 
7958   ret->version_needed = NULL;
7959   return ret;
7960 }
7961 
7962 static void
lang_do_version_exports_section(void)7963 lang_do_version_exports_section (void)
7964 {
7965   struct bfd_elf_version_expr *greg = NULL, *lreg;
7966 
7967   LANG_FOR_EACH_INPUT_STATEMENT (is)
7968     {
7969       asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7970       char *contents, *p;
7971       bfd_size_type len;
7972 
7973       if (sec == NULL)
7974 	continue;
7975 
7976       len = sec->size;
7977       contents = (char *) xmalloc (len);
7978       if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7979 	einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7980 
7981       p = contents;
7982       while (p < contents + len)
7983 	{
7984 	  greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7985 	  p = strchr (p, '\0') + 1;
7986 	}
7987 
7988       /* Do not free the contents, as we used them creating the regex.  */
7989 
7990       /* Do not include this section in the link.  */
7991       sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7992     }
7993 
7994   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7995   lang_register_vers_node (command_line.version_exports_section,
7996 			   lang_new_vers_node (greg, lreg), NULL);
7997 }
7998 
7999 void
lang_add_unique(const char * name)8000 lang_add_unique (const char *name)
8001 {
8002   struct unique_sections *ent;
8003 
8004   for (ent = unique_section_list; ent; ent = ent->next)
8005     if (strcmp (ent->name, name) == 0)
8006       return;
8007 
8008   ent = (struct unique_sections *) xmalloc (sizeof *ent);
8009   ent->name = xstrdup (name);
8010   ent->next = unique_section_list;
8011   unique_section_list = ent;
8012 }
8013 
8014 /* Append the list of dynamic symbols to the existing one.  */
8015 
8016 void
lang_append_dynamic_list(struct bfd_elf_version_expr * dynamic)8017 lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
8018 {
8019   if (link_info.dynamic_list)
8020     {
8021       struct bfd_elf_version_expr *tail;
8022       for (tail = dynamic; tail->next != NULL; tail = tail->next)
8023 	;
8024       tail->next = link_info.dynamic_list->head.list;
8025       link_info.dynamic_list->head.list = dynamic;
8026     }
8027   else
8028     {
8029       struct bfd_elf_dynamic_list *d;
8030 
8031       d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
8032       d->head.list = dynamic;
8033       d->match = lang_vers_match;
8034       link_info.dynamic_list = d;
8035     }
8036 }
8037 
8038 /* Append the list of C++ typeinfo dynamic symbols to the existing
8039    one.  */
8040 
8041 void
lang_append_dynamic_list_cpp_typeinfo(void)8042 lang_append_dynamic_list_cpp_typeinfo (void)
8043 {
8044   const char * symbols [] =
8045     {
8046       "typeinfo name for*",
8047       "typeinfo for*"
8048     };
8049   struct bfd_elf_version_expr *dynamic = NULL;
8050   unsigned int i;
8051 
8052   for (i = 0; i < ARRAY_SIZE (symbols); i++)
8053     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8054 				     FALSE);
8055 
8056   lang_append_dynamic_list (dynamic);
8057 }
8058 
8059 /* Append the list of C++ operator new and delete dynamic symbols to the
8060    existing one.  */
8061 
8062 void
lang_append_dynamic_list_cpp_new(void)8063 lang_append_dynamic_list_cpp_new (void)
8064 {
8065   const char * symbols [] =
8066     {
8067       "operator new*",
8068       "operator delete*"
8069     };
8070   struct bfd_elf_version_expr *dynamic = NULL;
8071   unsigned int i;
8072 
8073   for (i = 0; i < ARRAY_SIZE (symbols); i++)
8074     dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8075 				     FALSE);
8076 
8077   lang_append_dynamic_list (dynamic);
8078 }
8079 
8080 /* Scan a space and/or comma separated string of features.  */
8081 
8082 void
lang_ld_feature(char * str)8083 lang_ld_feature (char *str)
8084 {
8085   char *p, *q;
8086 
8087   p = str;
8088   while (*p)
8089     {
8090       char sep;
8091       while (*p == ',' || ISSPACE (*p))
8092 	++p;
8093       if (!*p)
8094 	break;
8095       q = p + 1;
8096       while (*q && *q != ',' && !ISSPACE (*q))
8097 	++q;
8098       sep = *q;
8099       *q = 0;
8100       if (strcasecmp (p, "SANE_EXPR") == 0)
8101 	config.sane_expr = TRUE;
8102       else
8103 	einfo (_("%X%P: unknown feature `%s'\n"), p);
8104       *q = sep;
8105       p = q;
8106     }
8107 }
8108