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