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