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