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