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