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