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