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