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