]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/ldlang.c
daily update
[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,
34efb449 3 2001, 2002
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
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, 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"
2c382fb6 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"
42
7abb6dea
AM
43#ifndef offsetof
44#define offsetof(TYPE,MEMBER) ((size_t)&(((TYPE*)0)->MEMBER))
45#endif
46
252b5132 47/* FORWARDS */
d1778b88
AM
48static lang_statement_union_type *new_statement
49 PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
252b5132 50
252b5132
RH
51/* LOCALS */
52static struct obstack stat_obstack;
53
54#define obstack_chunk_alloc xmalloc
55#define obstack_chunk_free free
5f992e62 56static const char *startup_file;
252b5132
RH
57static lang_statement_list_type input_file_chain;
58static boolean placed_commons = false;
59static lang_output_section_statement_type *default_common_section;
60static boolean map_option_f;
61static bfd_vma print_dot;
62static lang_input_statement_type *first_file;
5f992e62
AM
63static const char *current_target;
64static const char *output_target;
252b5132
RH
65static lang_statement_list_type statement_list;
66static struct lang_phdr *lang_phdr_list;
67
68static void lang_for_each_statement_worker
5f992e62
AM
69 PARAMS ((void (*) (lang_statement_union_type *),
70 lang_statement_union_type *));
252b5132 71static lang_input_statement_type *new_afile
5f992e62
AM
72 PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
73static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
74static void lang_map_flags PARAMS ((flagword));
75static void init_os PARAMS ((lang_output_section_statement_type *));
252b5132
RH
76static void exp_init_os PARAMS ((etree_type *));
77static void section_already_linked PARAMS ((bfd *, asection *, PTR));
9503fd87 78static struct bfd_hash_entry *already_linked_newfunc
5f992e62 79 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
9503fd87
ILT
80static void already_linked_table_init PARAMS ((void));
81static void already_linked_table_free PARAMS ((void));
252b5132
RH
82static boolean wildcardp PARAMS ((const char *));
83static lang_statement_union_type *wild_sort
b6bf44ba
AM
84 PARAMS ((lang_wild_statement_type *, struct wildcard_list *,
85 lang_input_statement_type *, asection *));
5f992e62 86static void output_section_callback
b6bf44ba 87 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
5f992e62
AM
88 lang_input_statement_type *, PTR));
89static lang_input_statement_type *lookup_name PARAMS ((const char *));
6770ec8c 90static boolean load_symbols
5f992e62
AM
91 PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
92static void wild
b6bf44ba 93 PARAMS ((lang_wild_statement_type *,
5f992e62
AM
94 const char *, lang_output_section_statement_type *));
95static bfd *open_output PARAMS ((const char *));
96static void ldlang_open_output PARAMS ((lang_statement_union_type *));
97static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
252b5132 98static void lang_reasonable_defaults PARAMS ((void));
fcf0e35b 99static void insert_undefined PARAMS ((const char *));
252b5132
RH
100static void lang_place_undefineds PARAMS ((void));
101static void map_input_to_output_sections
5f992e62
AM
102 PARAMS ((lang_statement_union_type *, const char *,
103 lang_output_section_statement_type *));
4bd5a393 104static void strip_excluded_output_sections PARAMS ((void));
252b5132 105static void print_output_section_statement
5f992e62 106 PARAMS ((lang_output_section_statement_type *));
252b5132 107static void print_assignment
5f992e62
AM
108 PARAMS ((lang_assignment_statement_type *,
109 lang_output_section_statement_type *));
110static void print_input_statement PARAMS ((lang_input_statement_type *));
252b5132 111static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
5f992e62
AM
112static void print_input_section PARAMS ((lang_input_section_type *));
113static void print_fill_statement PARAMS ((lang_fill_statement_type *));
114static void print_data_statement PARAMS ((lang_data_statement_type *));
252b5132 115static void print_address_statement PARAMS ((lang_address_statement_type *));
5f992e62
AM
116static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
117static void print_padding_statement PARAMS ((lang_padding_statement_type *));
252b5132 118static void print_wild_statement
5f992e62 119 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
252b5132
RH
120static void print_group
121 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
5f992e62
AM
122static void print_statement
123 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
124static void print_statement_list
125 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
252b5132 126static void print_statements PARAMS ((void));
b3327aad 127static void insert_pad
2c382fb6 128 PARAMS ((lang_statement_union_type **, fill_type *,
2be3aa03 129 unsigned int, asection *, bfd_vma));
252b5132 130static bfd_vma size_input_section
2be3aa03 131 PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
2c382fb6 132 fill_type *, bfd_vma));
252b5132
RH
133static void lang_finish PARAMS ((void));
134static void ignore_bfd_errors PARAMS ((const char *, ...));
135static void lang_check PARAMS ((void));
136static void lang_common PARAMS ((void));
137static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
138static void lang_place_orphans PARAMS ((void));
139static int topower PARAMS ((int));
140static void lang_set_startof PARAMS ((void));
5f992e62 141static void gc_section_callback
b6bf44ba 142 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
5f992e62 143 lang_input_statement_type *, PTR));
ee3cc2e2
RS
144static void lang_get_regions PARAMS ((struct memory_region_struct **,
145 struct memory_region_struct **,
146 const char *, const char *, int));
252b5132 147static void lang_record_phdrs PARAMS ((void));
b6bf44ba 148static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
252b5132
RH
149static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
150static void lang_gc_sections PARAMS ((void));
5f992e62
AM
151static int lang_vers_match_lang_c
152 PARAMS ((struct bfd_elf_version_expr *, const char *));
153static int lang_vers_match_lang_cplusplus
154 PARAMS ((struct bfd_elf_version_expr *, const char *));
155static int lang_vers_match_lang_java
156 PARAMS ((struct bfd_elf_version_expr *, const char *));
252b5132
RH
157static void lang_do_version_exports_section PARAMS ((void));
158static void lang_check_section_addresses PARAMS ((void));
5f992e62
AM
159static void os_region_check
160 PARAMS ((lang_output_section_statement_type *,
161 struct memory_region_struct *, etree_type *, bfd_vma));
2d20f7bf
JJ
162static bfd_vma lang_size_sections_1
163 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *,
2c382fb6 164 lang_statement_union_type **, fill_type *, bfd_vma, boolean *));
252b5132 165
4dec4d4e 166typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
b6bf44ba
AM
167 struct wildcard_list *,
168 asection *,
169 lang_input_statement_type *,
5f992e62
AM
170 PTR));
171static void walk_wild
b6bf44ba 172 PARAMS ((lang_wild_statement_type *, callback_t, PTR));
4dec4d4e 173static void walk_wild_section
b6bf44ba
AM
174 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
175 callback_t, PTR));
4dec4d4e 176static void walk_wild_file
b6bf44ba
AM
177 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
178 callback_t, PTR));
e50d8076 179
5f992e62 180static int get_target PARAMS ((const bfd_target *, PTR));
e50d8076
NC
181static void stricpy PARAMS ((char *, char *));
182static void strcut PARAMS ((char *, char *));
183static int name_compare PARAMS ((char *, char *));
5f992e62 184static int closest_target_match PARAMS ((const bfd_target *, PTR));
e50d8076 185static char * get_first_input_target PARAMS ((void));
5f992e62 186
252b5132
RH
187/* EXPORTS */
188lang_output_section_statement_type *abs_output_section;
aea4bd9d 189lang_statement_list_type lang_output_section_statement;
252b5132 190lang_statement_list_type *stat_ptr = &statement_list;
87f2a346 191lang_statement_list_type file_chain = { NULL, NULL };
e3e942e9 192struct bfd_sym_chain entry_symbol = { NULL, NULL };
1e281515 193const char *entry_section = ".text";
252b5132
RH
194boolean entry_from_cmdline;
195boolean lang_has_input_file = false;
196boolean had_output_filename = false;
197boolean lang_float_flag = false;
198boolean delete_output_file_on_failure = false;
199struct lang_nocrossrefs *nocrossref_list;
577a0623 200struct unique_sections *unique_section_list;
252b5132
RH
201
202etree_type *base; /* Relocation base - or null */
203
d1778b88 204#if defined (__STDC__) || defined (ALMOST_STDC)
252b5132
RH
205#define cat(a,b) a##b
206#else
207#define cat(a,b) a/**/b
208#endif
209
d1778b88
AM
210/* Don't beautify the line below with "innocent" whitespace, it breaks
211 the K&R C preprocessor! */
212#define new_stat(x, y) \
213 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
252b5132 214
d1778b88
AM
215#define outside_section_address(q) \
216 ((q)->output_offset + (q)->output_section->vma)
252b5132 217
d1778b88
AM
218#define outside_symbol_address(q) \
219 ((q)->value + outside_section_address (q->section))
252b5132
RH
220
221#define SECTION_NAME_MAP_LENGTH (16)
222
223PTR
224stat_alloc (size)
225 size_t size;
226{
227 return obstack_alloc (&stat_obstack, size);
228}
229
577a0623
AM
230boolean
231unique_section_p (secnam)
232 const char *secnam;
233{
234 struct unique_sections *unam;
235
236 for (unam = unique_section_list; unam; unam = unam->next)
237 if (wildcardp (unam->name)
238 ? fnmatch (unam->name, secnam, 0) == 0
239 : strcmp (unam->name, secnam) == 0)
240 {
241 return true;
242 }
243
244 return false;
245}
246
08da4cac 247/* Generic traversal routines for finding matching sections. */
4dec4d4e
RH
248
249static void
b6bf44ba 250walk_wild_section (ptr, file, callback, data)
4dec4d4e 251 lang_wild_statement_type *ptr;
4dec4d4e
RH
252 lang_input_statement_type *file;
253 callback_t callback;
5f992e62 254 PTR data;
4dec4d4e 255{
b6bf44ba
AM
256 asection *s;
257
258 if (file->just_syms_flag)
259 return;
260
261 for (s = file->the_bfd->sections; s != NULL; s = s->next)
4dec4d4e 262 {
b6bf44ba
AM
263 struct wildcard_list *sec;
264
265 sec = ptr->section_list;
2181f54f
AM
266 if (sec == NULL)
267 (*callback) (ptr, sec, s, file, data);
268
269 while (sec != NULL)
08da4cac 270 {
b6bf44ba 271 boolean skip = false;
2181f54f
AM
272 struct name_list *list_tmp;
273
274 /* Don't process sections from files which were
275 excluded. */
276 for (list_tmp = sec->spec.exclude_name_list;
277 list_tmp;
278 list_tmp = list_tmp->next)
279 {
280 if (wildcardp (list_tmp->name))
281 skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
282 else
283 skip = strcmp (list_tmp->name, file->filename) == 0;
4dec4d4e 284
34efb449
AO
285 /* If this file is part of an archive, and the archive is
286 excluded, exclude this file. */
287 if (! skip && file->the_bfd != NULL
288 && file->the_bfd->my_archive != NULL
289 && file->the_bfd->my_archive->filename != NULL)
290 {
291 if (wildcardp (list_tmp->name))
292 skip = fnmatch (list_tmp->name,
293 file->the_bfd->my_archive->filename,
294 0) == 0;
295 else
296 skip = strcmp (list_tmp->name,
297 file->the_bfd->my_archive->filename) == 0;
298 }
299
2181f54f
AM
300 if (skip)
301 break;
302 }
303
304 if (!skip && sec->spec.name != NULL)
b6bf44ba 305 {
2181f54f
AM
306 const char *sname = bfd_get_section_name (file->the_bfd, s);
307
308 if (wildcardp (sec->spec.name))
309 skip = fnmatch (sec->spec.name, sname, 0) != 0;
310 else
311 skip = strcmp (sec->spec.name, sname) != 0;
b6bf44ba 312 }
4dec4d4e 313
b6bf44ba
AM
314 if (!skip)
315 (*callback) (ptr, sec, s, file, data);
4dec4d4e 316
2181f54f 317 sec = sec->next;
4dec4d4e
RH
318 }
319 }
320}
321
322/* Handle a wild statement for a single file F. */
323
324static void
b6bf44ba 325walk_wild_file (s, f, callback, data)
4dec4d4e 326 lang_wild_statement_type *s;
4dec4d4e
RH
327 lang_input_statement_type *f;
328 callback_t callback;
5f992e62 329 PTR data;
4dec4d4e
RH
330{
331 if (f->the_bfd == NULL
332 || ! bfd_check_format (f->the_bfd, bfd_archive))
b6bf44ba 333 walk_wild_section (s, f, callback, data);
4dec4d4e
RH
334 else
335 {
336 bfd *member;
337
338 /* This is an archive file. We must map each member of the
339 archive separately. */
340 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
341 while (member != NULL)
342 {
343 /* When lookup_name is called, it will call the add_symbols
344 entry point for the archive. For each element of the
345 archive which is included, BFD will call ldlang_add_file,
346 which will set the usrdata field of the member to the
347 lang_input_statement. */
348 if (member->usrdata != NULL)
349 {
b6bf44ba 350 walk_wild_section (s,
4dec4d4e
RH
351 (lang_input_statement_type *) member->usrdata,
352 callback, data);
353 }
354
355 member = bfd_openr_next_archived_file (f->the_bfd, member);
356 }
357 }
358}
359
360static void
b6bf44ba 361walk_wild (s, callback, data)
4dec4d4e 362 lang_wild_statement_type *s;
4dec4d4e 363 callback_t callback;
5f992e62 364 PTR data;
4dec4d4e 365{
b6bf44ba
AM
366 const char *file_spec = s->filename;
367
368 if (file_spec == NULL)
4dec4d4e
RH
369 {
370 /* Perform the iteration over all files in the list. */
e50d8076 371 LANG_FOR_EACH_INPUT_STATEMENT (f)
4dec4d4e 372 {
b6bf44ba 373 walk_wild_file (s, f, callback, data);
4dec4d4e
RH
374 }
375 }
b6bf44ba 376 else if (wildcardp (file_spec))
4dec4d4e 377 {
e50d8076 378 LANG_FOR_EACH_INPUT_STATEMENT (f)
4dec4d4e 379 {
b6bf44ba
AM
380 if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
381 walk_wild_file (s, f, callback, data);
4dec4d4e
RH
382 }
383 }
384 else
385 {
e50d8076
NC
386 lang_input_statement_type *f;
387
4dec4d4e 388 /* Perform the iteration over a single file. */
b6bf44ba 389 f = lookup_name (file_spec);
6770ec8c 390 if (f)
b6bf44ba 391 walk_wild_file (s, f, callback, data);
4dec4d4e 392 }
5f992e62
AM
393}
394
08da4cac
KH
395/* lang_for_each_statement walks the parse tree and calls the provided
396 function for each node. */
252b5132
RH
397
398static void
399lang_for_each_statement_worker (func, s)
400 void (*func) PARAMS ((lang_statement_union_type *));
401 lang_statement_union_type *s;
402{
bba1a0c0 403 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
252b5132
RH
404 {
405 func (s);
406
407 switch (s->header.type)
408 {
409 case lang_constructors_statement_enum:
410 lang_for_each_statement_worker (func, constructor_list.head);
411 break;
412 case lang_output_section_statement_enum:
413 lang_for_each_statement_worker
414 (func,
415 s->output_section_statement.children.head);
416 break;
417 case lang_wild_statement_enum:
418 lang_for_each_statement_worker
419 (func,
420 s->wild_statement.children.head);
421 break;
422 case lang_group_statement_enum:
423 lang_for_each_statement_worker (func,
424 s->group_statement.children.head);
425 break;
426 case lang_data_statement_enum:
427 case lang_reloc_statement_enum:
428 case lang_object_symbols_statement_enum:
429 case lang_output_statement_enum:
430 case lang_target_statement_enum:
431 case lang_input_section_enum:
432 case lang_input_statement_enum:
433 case lang_assignment_statement_enum:
434 case lang_padding_statement_enum:
435 case lang_address_statement_enum:
436 case lang_fill_statement_enum:
437 break;
438 default:
439 FAIL ();
440 break;
441 }
442 }
443}
444
445void
446lang_for_each_statement (func)
447 void (*func) PARAMS ((lang_statement_union_type *));
448{
08da4cac 449 lang_for_each_statement_worker (func, statement_list.head);
252b5132
RH
450}
451
452/*----------------------------------------------------------------------*/
08da4cac 453
252b5132
RH
454void
455lang_list_init (list)
456 lang_statement_list_type *list;
457{
458 list->head = (lang_statement_union_type *) NULL;
459 list->tail = &list->head;
460}
461
08da4cac 462/* Build a new statement node for the parse tree. */
252b5132 463
08da4cac 464static lang_statement_union_type *
252b5132
RH
465new_statement (type, size, list)
466 enum statement_enum type;
467 size_t size;
08da4cac 468 lang_statement_list_type *list;
252b5132
RH
469{
470 lang_statement_union_type *new = (lang_statement_union_type *)
471 stat_alloc (size);
472
473 new->header.type = type;
474 new->header.next = (lang_statement_union_type *) NULL;
475 lang_statement_append (list, new, &new->header.next);
476 return new;
477}
478
08da4cac
KH
479/* Build a new input file node for the language. There are several
480 ways in which we treat an input file, eg, we only look at symbols,
481 or prefix it with a -l etc.
252b5132 482
08da4cac
KH
483 We can be supplied with requests for input files more than once;
484 they may, for example be split over serveral lines like foo.o(.text)
d1778b88 485 foo.o(.data) etc, so when asked for a file we check that we haven't
08da4cac 486 got it already so we don't duplicate the bfd. */
252b5132 487
252b5132
RH
488static lang_input_statement_type *
489new_afile (name, file_type, target, add_to_list)
5f992e62 490 const char *name;
252b5132 491 lang_input_file_enum_type file_type;
5f992e62 492 const char *target;
252b5132
RH
493 boolean add_to_list;
494{
495 lang_input_statement_type *p;
496
497 if (add_to_list)
498 p = new_stat (lang_input_statement, stat_ptr);
499 else
500 {
501 p = ((lang_input_statement_type *)
502 stat_alloc (sizeof (lang_input_statement_type)));
503 p->header.next = NULL;
504 }
505
506 lang_has_input_file = true;
507 p->target = target;
508 switch (file_type)
509 {
510 case lang_input_file_is_symbols_only_enum:
511 p->filename = name;
512 p->is_archive = false;
513 p->real = true;
514 p->local_sym_name = name;
515 p->just_syms_flag = true;
516 p->search_dirs_flag = false;
517 break;
518 case lang_input_file_is_fake_enum:
519 p->filename = name;
520 p->is_archive = false;
521 p->real = false;
522 p->local_sym_name = name;
523 p->just_syms_flag = false;
524 p->search_dirs_flag = false;
525 break;
526 case lang_input_file_is_l_enum:
527 p->is_archive = true;
528 p->filename = name;
529 p->real = true;
530 p->local_sym_name = concat ("-l", name, (const char *) NULL);
531 p->just_syms_flag = false;
532 p->search_dirs_flag = true;
533 break;
534 case lang_input_file_is_marker_enum:
535 p->filename = name;
536 p->is_archive = false;
537 p->real = false;
538 p->local_sym_name = name;
539 p->just_syms_flag = false;
540 p->search_dirs_flag = true;
541 break;
542 case lang_input_file_is_search_file_enum:
543 p->filename = name;
544 p->is_archive = false;
545 p->real = true;
546 p->local_sym_name = name;
547 p->just_syms_flag = false;
548 p->search_dirs_flag = true;
549 break;
550 case lang_input_file_is_file_enum:
551 p->filename = name;
552 p->is_archive = false;
553 p->real = true;
554 p->local_sym_name = name;
555 p->just_syms_flag = false;
556 p->search_dirs_flag = false;
557 break;
558 default:
559 FAIL ();
560 }
561 p->the_bfd = (bfd *) NULL;
562 p->asymbols = (asymbol **) NULL;
563 p->next_real_file = (lang_statement_union_type *) NULL;
564 p->next = (lang_statement_union_type *) NULL;
565 p->symbol_count = 0;
566 p->dynamic = config.dynamic_link;
567 p->whole_archive = whole_archive;
568 p->loaded = false;
569 lang_statement_append (&input_file_chain,
570 (lang_statement_union_type *) p,
571 &p->next_real_file);
572 return p;
573}
574
575lang_input_statement_type *
576lang_add_input_file (name, file_type, target)
5f992e62 577 const char *name;
252b5132 578 lang_input_file_enum_type file_type;
5f992e62 579 const char *target;
252b5132
RH
580{
581 lang_has_input_file = true;
582 return new_afile (name, file_type, target, true);
583}
584
08da4cac
KH
585/* Build enough state so that the parser can build its tree. */
586
252b5132
RH
587void
588lang_init ()
589{
590 obstack_begin (&stat_obstack, 1000);
591
592 stat_ptr = &statement_list;
593
594 lang_list_init (stat_ptr);
595
596 lang_list_init (&input_file_chain);
597 lang_list_init (&lang_output_section_statement);
598 lang_list_init (&file_chain);
599 first_file = lang_add_input_file ((char *) NULL,
600 lang_input_file_is_marker_enum,
601 (char *) NULL);
08da4cac
KH
602 abs_output_section =
603 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
252b5132
RH
604
605 abs_output_section->bfd_section = bfd_abs_section_ptr;
606
607}
608
609/*----------------------------------------------------------------------
08da4cac
KH
610 A region is an area of memory declared with the
611 MEMORY { name:org=exp, len=exp ... }
612 syntax.
252b5132 613
08da4cac 614 We maintain a list of all the regions here.
252b5132 615
08da4cac
KH
616 If no regions are specified in the script, then the default is used
617 which is created when looked up to be the entire data space. */
252b5132
RH
618
619static lang_memory_region_type *lang_memory_region_list;
620static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
621
622lang_memory_region_type *
623lang_memory_region_lookup (name)
5f992e62 624 const char *const name;
252b5132
RH
625{
626 lang_memory_region_type *p;
627
9f88b410
RS
628 /* NAME is NULL for LMA memspecs if no region was specified. */
629 if (name == NULL)
630 return NULL;
631
252b5132
RH
632 for (p = lang_memory_region_list;
633 p != (lang_memory_region_type *) NULL;
634 p = p->next)
635 {
636 if (strcmp (p->name, name) == 0)
637 {
638 return p;
639 }
640 }
641
642#if 0
643 /* This code used to always use the first region in the list as the
644 default region. I changed it to instead use a region
645 encompassing all of memory as the default region. This permits
646 NOLOAD sections to work reasonably without requiring a region.
647 People should specify what region they mean, if they really want
648 a region. */
649 if (strcmp (name, "*default*") == 0)
650 {
651 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
652 {
653 return lang_memory_region_list;
654 }
655 }
656#endif
657
658 {
659 lang_memory_region_type *new =
660 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
661
d1b2b2dc 662 new->name = xstrdup (name);
252b5132
RH
663 new->next = (lang_memory_region_type *) NULL;
664
665 *lang_memory_region_list_tail = new;
666 lang_memory_region_list_tail = &new->next;
667 new->origin = 0;
668 new->flags = 0;
669 new->not_flags = 0;
08da4cac 670 new->length = ~(bfd_size_type) 0;
252b5132
RH
671 new->current = 0;
672 new->had_full_message = false;
673
674 return new;
675 }
676}
677
5f992e62 678static lang_memory_region_type *
252b5132
RH
679lang_memory_default (section)
680 asection *section;
681{
682 lang_memory_region_type *p;
683
684 flagword sec_flags = section->flags;
685
686 /* Override SEC_DATA to mean a writable section. */
687 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
688 sec_flags |= SEC_DATA;
689
690 for (p = lang_memory_region_list;
691 p != (lang_memory_region_type *) NULL;
692 p = p->next)
693 {
694 if ((p->flags & sec_flags) != 0
695 && (p->not_flags & sec_flags) == 0)
696 {
697 return p;
698 }
699 }
700 return lang_memory_region_lookup ("*default*");
701}
702
703lang_output_section_statement_type *
704lang_output_section_find (name)
5f992e62 705 const char *const name;
252b5132
RH
706{
707 lang_statement_union_type *u;
708 lang_output_section_statement_type *lookup;
709
710 for (u = lang_output_section_statement.head;
711 u != (lang_statement_union_type *) NULL;
712 u = lookup->next)
713 {
714 lookup = &u->output_section_statement;
715 if (strcmp (name, lookup->name) == 0)
716 {
717 return lookup;
718 }
719 }
720 return (lang_output_section_statement_type *) NULL;
721}
722
723lang_output_section_statement_type *
724lang_output_section_statement_lookup (name)
5f992e62 725 const char *const name;
252b5132
RH
726{
727 lang_output_section_statement_type *lookup;
728
729 lookup = lang_output_section_find (name);
730 if (lookup == (lang_output_section_statement_type *) NULL)
731 {
732
733 lookup = (lang_output_section_statement_type *)
734 new_stat (lang_output_section_statement, stat_ptr);
735 lookup->region = (lang_memory_region_type *) NULL;
562d3460 736 lookup->lma_region = (lang_memory_region_type *) NULL;
2c382fb6 737 lookup->fill = (fill_type *) 0;
252b5132
RH
738 lookup->block_value = 1;
739 lookup->name = name;
740
741 lookup->next = (lang_statement_union_type *) NULL;
742 lookup->bfd_section = (asection *) NULL;
743 lookup->processed = false;
744 lookup->sectype = normal_section;
745 lookup->addr_tree = (etree_type *) NULL;
746 lang_list_init (&lookup->children);
747
5f992e62 748 lookup->memspec = (const char *) NULL;
252b5132
RH
749 lookup->flags = 0;
750 lookup->subsection_alignment = -1;
751 lookup->section_alignment = -1;
752 lookup->load_base = (union etree_union *) NULL;
9f88b410 753 lookup->update_dot_tree = NULL;
252b5132
RH
754 lookup->phdrs = NULL;
755
756 lang_statement_append (&lang_output_section_statement,
757 (lang_statement_union_type *) lookup,
758 &lookup->next);
759 }
760 return lookup;
761}
762
763static void
764lang_map_flags (flag)
765 flagword flag;
766{
767 if (flag & SEC_ALLOC)
768 minfo ("a");
769
770 if (flag & SEC_CODE)
771 minfo ("x");
772
773 if (flag & SEC_READONLY)
774 minfo ("r");
775
776 if (flag & SEC_DATA)
777 minfo ("w");
778
779 if (flag & SEC_LOAD)
780 minfo ("l");
781}
782
783void
784lang_map ()
785{
786 lang_memory_region_type *m;
787
788 minfo (_("\nMemory Configuration\n\n"));
789 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
790 _("Name"), _("Origin"), _("Length"), _("Attributes"));
791
792 for (m = lang_memory_region_list;
793 m != (lang_memory_region_type *) NULL;
794 m = m->next)
795 {
796 char buf[100];
797 int len;
798
799 fprintf (config.map_file, "%-16s ", m->name);
800
801 sprintf_vma (buf, m->origin);
802 minfo ("0x%s ", buf);
803 len = strlen (buf);
804 while (len < 16)
805 {
806 print_space ();
807 ++len;
808 }
809
810 minfo ("0x%V", m->length);
811 if (m->flags || m->not_flags)
812 {
813#ifndef BFD64
814 minfo (" ");
815#endif
816 if (m->flags)
817 {
818 print_space ();
819 lang_map_flags (m->flags);
820 }
821
822 if (m->not_flags)
823 {
824 minfo (" !");
825 lang_map_flags (m->not_flags);
826 }
827 }
828
829 print_nl ();
830 }
831
832 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
833
834 print_statements ();
835}
836
837/* Initialize an output section. */
838
839static void
840init_os (s)
841 lang_output_section_statement_type *s;
842{
843 section_userdata_type *new;
844
845 if (s->bfd_section != NULL)
846 return;
847
848 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
6f9efd97 849 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
252b5132
RH
850
851 new = ((section_userdata_type *)
852 stat_alloc (sizeof (section_userdata_type)));
853
854 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
855 if (s->bfd_section == (asection *) NULL)
856 s->bfd_section = bfd_make_section (output_bfd, s->name);
857 if (s->bfd_section == (asection *) NULL)
858 {
859 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
860 output_bfd->xvec->name, s->name);
861 }
862 s->bfd_section->output_section = s->bfd_section;
863
08da4cac
KH
864 /* We initialize an output sections output offset to minus its own
865 vma to allow us to output a section through itself. */
252b5132
RH
866 s->bfd_section->output_offset = 0;
867 get_userdata (s->bfd_section) = (PTR) new;
868
869 /* If there is a base address, make sure that any sections it might
870 mention are initialized. */
871 if (s->addr_tree != NULL)
872 exp_init_os (s->addr_tree);
873}
874
875/* Make sure that all output sections mentioned in an expression are
876 initialized. */
877
878static void
879exp_init_os (exp)
880 etree_type *exp;
881{
882 switch (exp->type.node_class)
883 {
884 case etree_assign:
885 exp_init_os (exp->assign.src);
886 break;
887
888 case etree_binary:
889 exp_init_os (exp->binary.lhs);
890 exp_init_os (exp->binary.rhs);
891 break;
892
893 case etree_trinary:
894 exp_init_os (exp->trinary.cond);
895 exp_init_os (exp->trinary.lhs);
896 exp_init_os (exp->trinary.rhs);
897 break;
898
899 case etree_unary:
900 exp_init_os (exp->unary.child);
901 break;
902
903 case etree_name:
904 switch (exp->type.node_code)
905 {
906 case ADDR:
907 case LOADADDR:
908 case SIZEOF:
909 {
910 lang_output_section_statement_type *os;
911
912 os = lang_output_section_find (exp->name.name);
913 if (os != NULL && os->bfd_section == NULL)
914 init_os (os);
915 }
916 }
917 break;
918
919 default:
920 break;
921 }
922}
9503fd87 923\f
252b5132 924/* Sections marked with the SEC_LINK_ONCE flag should only be linked
9503fd87
ILT
925 once into the output. This routine checks each section, and
926 arrange to discard it if a section of the same name has already
bb8fe706
ILT
927 been linked. If the section has COMDAT information, then it uses
928 that to decide whether the section should be included. This code
929 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
9503fd87
ILT
930 that is, it does not depend solely upon the section name.
931 section_already_linked is called via bfd_map_over_sections. */
932
933/* This is the shape of the elements inside the already_linked hash
934 table. It maps a name onto a list of already_linked elements with
935 the same name. It's possible to get more than one element in a
936 list if the COMDAT sections have different names. */
937
5f992e62 938struct already_linked_hash_entry
9503fd87
ILT
939{
940 struct bfd_hash_entry root;
941 struct already_linked *entry;
942};
943
5f992e62 944struct already_linked
9503fd87
ILT
945{
946 struct already_linked *next;
947 asection *sec;
948};
949
950/* The hash table. */
951
952static struct bfd_hash_table already_linked_table;
252b5132 953
252b5132
RH
954static void
955section_already_linked (abfd, sec, data)
956 bfd *abfd;
957 asection *sec;
958 PTR data;
959{
960 lang_input_statement_type *entry = (lang_input_statement_type *) data;
252b5132
RH
961 flagword flags;
962 const char *name;
9503fd87
ILT
963 struct already_linked *l;
964 struct already_linked_hash_entry *already_linked_list;
252b5132
RH
965
966 /* If we are only reading symbols from this object, then we want to
967 discard all sections. */
968 if (entry->just_syms_flag)
969 {
c2c01aa7 970 bfd_link_just_syms (sec, &link_info);
252b5132
RH
971 return;
972 }
973
974 flags = bfd_get_section_flags (abfd, sec);
975
976 if ((flags & SEC_LINK_ONCE) == 0)
977 return;
978
577a0623 979 /* FIXME: When doing a relocatable link, we may have trouble
e361c369
ILT
980 copying relocations in other sections that refer to local symbols
981 in the section being discarded. Those relocations will have to
982 be converted somehow; as of this writing I'm not sure that any of
983 the backends handle that correctly.
984
985 It is tempting to instead not discard link once sections when
577a0623 986 doing a relocatable link (technically, they should be discarded
e361c369
ILT
987 whenever we are building constructors). However, that fails,
988 because the linker winds up combining all the link once sections
989 into a single large link once section, which defeats the purpose
990 of having link once sections in the first place.
991
577a0623 992 Also, not merging link once sections in a relocatable link
9ad85d9b 993 causes trouble for MIPS ELF, which relies on link once semantics
e361c369
ILT
994 to handle the .reginfo section correctly. */
995
252b5132
RH
996 name = bfd_get_section_name (abfd, sec);
997
5f992e62 998 already_linked_list =
9503fd87
ILT
999 ((struct already_linked_hash_entry *)
1000 bfd_hash_lookup (&already_linked_table, name, true, false));
1001
08da4cac 1002 for (l = already_linked_list->entry; l != NULL; l = l->next)
252b5132 1003 {
9503fd87
ILT
1004 if (sec->comdat == NULL
1005 || l->sec->comdat == NULL
1006 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
252b5132
RH
1007 {
1008 /* The section has already been linked. See if we should
1009 issue a warning. */
1010 switch (flags & SEC_LINK_DUPLICATES)
1011 {
1012 default:
1013 abort ();
1014
1015 case SEC_LINK_DUPLICATES_DISCARD:
1016 break;
1017
1018 case SEC_LINK_DUPLICATES_ONE_ONLY:
bb8fe706
ILT
1019 if (sec->comdat == NULL)
1020 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1021 abfd, name);
1022 else
1023 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1024 abfd, name, sec->comdat->name);
252b5132
RH
1025 break;
1026
1027 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
1028 /* FIXME: We should really dig out the contents of both
1029 sections and memcmp them. The COFF/PE spec says that
1030 the Microsoft linker does not implement this
1031 correctly, so I'm not going to bother doing it
1032 either. */
1033 /* Fall through. */
1034 case SEC_LINK_DUPLICATES_SAME_SIZE:
1035 if (bfd_section_size (abfd, sec)
1036 != bfd_section_size (l->sec->owner, l->sec))
1037 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1038 abfd, name);
1039 break;
1040 }
1041
39dcfe18
AM
1042 /* Set the output_section field so that lang_add_section
1043 does not create a lang_input_section structure for this
862517b6 1044 section. */
252b5132
RH
1045 sec->output_section = bfd_abs_section_ptr;
1046
9ad85d9b
AM
1047 if (flags & SEC_GROUP)
1048 bfd_discard_group (abfd, sec);
1049
252b5132
RH
1050 return;
1051 }
1052 }
1053
9503fd87
ILT
1054 /* This is the first section with this name. Record it. Allocate
1055 the memory from the same obstack as the hash table is kept in. */
1056
5f992e62 1057 l = ((struct already_linked *)
9503fd87 1058 bfd_hash_allocate (&already_linked_table, sizeof *l));
252b5132 1059
252b5132 1060 l->sec = sec;
9503fd87
ILT
1061 l->next = already_linked_list->entry;
1062 already_linked_list->entry = l;
1063}
1064
1065/* Support routines for the hash table used by section_already_linked,
1066 initialize the table, fill in an entry and remove the table. */
1067
1068static struct bfd_hash_entry *
1069already_linked_newfunc (entry, table, string)
1070 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1071 struct bfd_hash_table *table;
1072 const char *string ATTRIBUTE_UNUSED;
1073{
5f992e62 1074 struct already_linked_hash_entry *ret =
9503fd87
ILT
1075 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1076
1077 ret->entry = NULL;
1078
1079 return (struct bfd_hash_entry *) ret;
1080}
1081
1082static void
1083already_linked_table_init ()
1084{
1085 if (! bfd_hash_table_init_n (&already_linked_table,
1086 already_linked_newfunc,
1087 42))
1088 einfo (_("%P%F: Failed to create hash table\n"));
1089}
1090
1091static void
1092already_linked_table_free ()
1093{
1094 bfd_hash_table_free (&already_linked_table);
252b5132
RH
1095}
1096\f
1097/* The wild routines.
1098
1099 These expand statements like *(.text) and foo.o to a list of
1100 explicit actions, like foo.o(.text), bar.o(.text) and
1101 foo.o(.text, .data). */
1102
1103/* Return true if the PATTERN argument is a wildcard pattern.
1104 Although backslashes are treated specially if a pattern contains
1105 wildcards, we do not consider the mere presence of a backslash to
ca0c1d3e 1106 be enough to cause the pattern to be treated as a wildcard.
252b5132
RH
1107 That lets us handle DOS filenames more naturally. */
1108
1109static boolean
1110wildcardp (pattern)
1111 const char *pattern;
1112{
1113 const char *s;
1114
1115 for (s = pattern; *s != '\0'; ++s)
1116 if (*s == '?'
1117 || *s == '*'
1118 || *s == '[')
1119 return true;
1120 return false;
1121}
1122
1123/* Add SECTION to the output section OUTPUT. Do this by creating a
1124 lang_input_section statement which is placed at PTR. FILE is the
1125 input file which holds SECTION. */
1126
1127void
39dcfe18 1128lang_add_section (ptr, section, output, file)
252b5132
RH
1129 lang_statement_list_type *ptr;
1130 asection *section;
1131 lang_output_section_statement_type *output;
1132 lang_input_statement_type *file;
1133{
1134 flagword flags;
1135 boolean discard;
1136
1137 flags = bfd_get_section_flags (section->owner, section);
1138
1139 discard = false;
1140
1141 /* If we are doing a final link, discard sections marked with
1142 SEC_EXCLUDE. */
1143 if (! link_info.relocateable
1144 && (flags & SEC_EXCLUDE) != 0)
1145 discard = true;
1146
1147 /* Discard input sections which are assigned to a section named
1148 DISCARD_SECTION_NAME. */
1149 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1150 discard = true;
1151
1152 /* Discard debugging sections if we are stripping debugging
1153 information. */
1154 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1155 && (flags & SEC_DEBUGGING) != 0)
1156 discard = true;
1157
1158 if (discard)
1159 {
1160 if (section->output_section == NULL)
1161 {
1162 /* This prevents future calls from assigning this section. */
1163 section->output_section = bfd_abs_section_ptr;
1164 }
1165 return;
1166 }
1167
1168 if (section->output_section == NULL)
1169 {
1170 boolean first;
1171 lang_input_section_type *new;
1172 flagword flags;
1173
1174 if (output->bfd_section == NULL)
d1778b88
AM
1175 init_os (output);
1176
1177 first = ! output->bfd_section->linker_has_input;
1178 output->bfd_section->linker_has_input = 1;
252b5132 1179
08da4cac 1180 /* Add a section reference to the list. */
252b5132
RH
1181 new = new_stat (lang_input_section, ptr);
1182
1183 new->section = section;
1184 new->ifile = file;
1185 section->output_section = output->bfd_section;
1186
1187 flags = section->flags;
1188
1189 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1190 to an output section, because we want to be able to include a
1191 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1192 section (I don't know why we want to do this, but we do).
1193 build_link_order in ldwrite.c handles this case by turning
1194 the embedded SEC_NEVER_LOAD section into a fill. */
1195
1196 flags &= ~ SEC_NEVER_LOAD;
1197
1198 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1199 already been processed. One reason to do this is that on pe
1200 format targets, .text$foo sections go into .text and it's odd
1201 to see .text with SEC_LINK_ONCE set. */
1202
1203 if (! link_info.relocateable)
1204 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1205
1206 /* If this is not the first input section, and the SEC_READONLY
1207 flag is not currently set, then don't set it just because the
1208 input section has it set. */
1209
1210 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1211 flags &= ~ SEC_READONLY;
1212
f5fa8ca2
JJ
1213 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1214 if (! first
1215 && ((section->output_section->flags & (SEC_MERGE | SEC_STRINGS))
1216 != (flags & (SEC_MERGE | SEC_STRINGS))
1217 || ((flags & SEC_MERGE)
1218 && section->output_section->entsize != section->entsize)))
1219 {
1220 section->output_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1221 flags &= ~ (SEC_MERGE | SEC_STRINGS);
1222 }
1223
13ae64f3 1224 /* For now make .tbss normal section. */
704afa60 1225 if ((flags & SEC_THREAD_LOCAL) && ! link_info.relocateable)
13ae64f3
JJ
1226 flags |= SEC_LOAD;
1227
252b5132
RH
1228 section->output_section->flags |= flags;
1229
f5fa8ca2
JJ
1230 if (flags & SEC_MERGE)
1231 section->output_section->entsize = section->entsize;
1232
252b5132
RH
1233 /* If SEC_READONLY is not set in the input section, then clear
1234 it from the output section. */
1235 if ((section->flags & SEC_READONLY) == 0)
1236 section->output_section->flags &= ~SEC_READONLY;
1237
1238 switch (output->sectype)
1239 {
1240 case normal_section:
1241 break;
1242 case dsect_section:
1243 case copy_section:
1244 case info_section:
1245 case overlay_section:
1246 output->bfd_section->flags &= ~SEC_ALLOC;
1247 break;
1248 case noload_section:
1249 output->bfd_section->flags &= ~SEC_LOAD;
1250 output->bfd_section->flags |= SEC_NEVER_LOAD;
1251 break;
1252 }
1253
667f5177
ILT
1254 /* Copy over SEC_SMALL_DATA. */
1255 if (section->flags & SEC_SMALL_DATA)
1256 section->output_section->flags |= SEC_SMALL_DATA;
9e41f973 1257
252b5132
RH
1258 if (section->alignment_power > output->bfd_section->alignment_power)
1259 output->bfd_section->alignment_power = section->alignment_power;
1260
1261 /* If supplied an aligment, then force it. */
1262 if (output->section_alignment != -1)
1263 output->bfd_section->alignment_power = output->section_alignment;
74459f0e
TW
1264
1265 if (section->flags & SEC_BLOCK)
08da4cac
KH
1266 {
1267 section->output_section->flags |= SEC_BLOCK;
1268 /* FIXME: This value should really be obtained from the bfd... */
1269 output->block_value = 128;
1270 }
252b5132
RH
1271 }
1272}
1273
1274/* Handle wildcard sorting. This returns the lang_input_section which
1275 should follow the one we are going to create for SECTION and FILE,
1276 based on the sorting requirements of WILD. It returns NULL if the
1277 new section should just go at the end of the current list. */
1278
1279static lang_statement_union_type *
b6bf44ba 1280wild_sort (wild, sec, file, section)
252b5132 1281 lang_wild_statement_type *wild;
b6bf44ba 1282 struct wildcard_list *sec;
252b5132
RH
1283 lang_input_statement_type *file;
1284 asection *section;
1285{
1286 const char *section_name;
1287 lang_statement_union_type *l;
1288
b6bf44ba 1289 if (!wild->filenames_sorted && (sec == NULL || !sec->spec.sorted))
252b5132
RH
1290 return NULL;
1291
1292 section_name = bfd_get_section_name (file->the_bfd, section);
bba1a0c0 1293 for (l = wild->children.head; l != NULL; l = l->header.next)
252b5132
RH
1294 {
1295 lang_input_section_type *ls;
1296
1297 if (l->header.type != lang_input_section_enum)
1298 continue;
1299 ls = &l->input_section;
1300
1301 /* Sorting by filename takes precedence over sorting by section
1302 name. */
1303
1304 if (wild->filenames_sorted)
1305 {
1306 const char *fn, *ln;
1307 boolean fa, la;
1308 int i;
1309
1310 /* The PE support for the .idata section as generated by
1311 dlltool assumes that files will be sorted by the name of
1312 the archive and then the name of the file within the
1313 archive. */
1314
1315 if (file->the_bfd != NULL
1316 && bfd_my_archive (file->the_bfd) != NULL)
1317 {
1318 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1319 fa = true;
1320 }
1321 else
1322 {
1323 fn = file->filename;
1324 fa = false;
1325 }
1326
1327 if (ls->ifile->the_bfd != NULL
1328 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1329 {
1330 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1331 la = true;
1332 }
1333 else
1334 {
1335 ln = ls->ifile->filename;
1336 la = false;
1337 }
1338
1339 i = strcmp (fn, ln);
1340 if (i > 0)
1341 continue;
1342 else if (i < 0)
1343 break;
1344
1345 if (fa || la)
1346 {
1347 if (fa)
1348 fn = file->filename;
1349 if (la)
1350 ln = ls->ifile->filename;
1351
1352 i = strcmp (fn, ln);
1353 if (i > 0)
1354 continue;
1355 else if (i < 0)
1356 break;
1357 }
1358 }
1359
1360 /* Here either the files are not sorted by name, or we are
1361 looking at the sections for this file. */
1362
b6bf44ba 1363 if (sec != NULL && sec->spec.sorted)
252b5132
RH
1364 {
1365 if (strcmp (section_name,
1366 bfd_get_section_name (ls->ifile->the_bfd,
1367 ls->section))
1368 < 0)
1369 break;
1370 }
1371 }
1372
1373 return l;
1374}
1375
1376/* Expand a wild statement for a particular FILE. SECTION may be
1377 NULL, in which case it is a wild card. */
1378
1379static void
b6bf44ba 1380output_section_callback (ptr, sec, section, file, output)
252b5132 1381 lang_wild_statement_type *ptr;
b6bf44ba 1382 struct wildcard_list *sec;
4dec4d4e 1383 asection *section;
252b5132 1384 lang_input_statement_type *file;
5f992e62 1385 PTR output;
4dec4d4e
RH
1386{
1387 lang_statement_union_type *before;
5f992e62 1388
b6bf44ba
AM
1389 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1390 if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
1391 return;
1392
4dec4d4e
RH
1393 /* If the wild pattern was marked KEEP, the member sections
1394 should be as well. */
1395 if (ptr->keep_sections)
1396 section->flags |= SEC_KEEP;
5f992e62 1397
b6bf44ba 1398 before = wild_sort (ptr, sec, file, section);
5f992e62 1399
4dec4d4e
RH
1400 /* Here BEFORE points to the lang_input_section which
1401 should follow the one we are about to add. If BEFORE
1402 is NULL, then the section should just go at the end
1403 of the current list. */
5f992e62 1404
4dec4d4e 1405 if (before == NULL)
39dcfe18
AM
1406 lang_add_section (&ptr->children, section,
1407 (lang_output_section_statement_type *) output,
1408 file);
4dec4d4e 1409 else
252b5132 1410 {
4dec4d4e
RH
1411 lang_statement_list_type list;
1412 lang_statement_union_type **pp;
5f992e62 1413
4dec4d4e 1414 lang_list_init (&list);
39dcfe18
AM
1415 lang_add_section (&list, section,
1416 (lang_output_section_statement_type *) output,
1417 file);
5f992e62 1418
4dec4d4e
RH
1419 /* If we are discarding the section, LIST.HEAD will
1420 be NULL. */
1421 if (list.head != NULL)
252b5132 1422 {
bba1a0c0 1423 ASSERT (list.head->header.next == NULL);
5f992e62 1424
4dec4d4e
RH
1425 for (pp = &ptr->children.head;
1426 *pp != before;
bba1a0c0 1427 pp = &(*pp)->header.next)
4dec4d4e 1428 ASSERT (*pp != NULL);
5f992e62 1429
bba1a0c0 1430 list.head->header.next = *pp;
4dec4d4e 1431 *pp = list.head;
252b5132
RH
1432 }
1433 }
1434}
1435
1436/* This is passed a file name which must have been seen already and
1437 added to the statement tree. We will see if it has been opened
1438 already and had its symbols read. If not then we'll read it. */
1439
1440static lang_input_statement_type *
1441lookup_name (name)
1442 const char *name;
1443{
1444 lang_input_statement_type *search;
1445
1446 for (search = (lang_input_statement_type *) input_file_chain.head;
1447 search != (lang_input_statement_type *) NULL;
1448 search = (lang_input_statement_type *) search->next_real_file)
1449 {
1450 if (search->filename == (char *) NULL && name == (char *) NULL)
1451 return search;
1452 if (search->filename != (char *) NULL
1453 && name != (char *) NULL
1454 && strcmp (search->filename, name) == 0)
1455 break;
1456 }
1457
1458 if (search == (lang_input_statement_type *) NULL)
1459 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1460 false);
1461
1462 /* If we have already added this file, or this file is not real
1463 (FIXME: can that ever actually happen?) or the name is NULL
1464 (FIXME: can that ever actually happen?) don't add this file. */
1465 if (search->loaded
1466 || ! search->real
1467 || search->filename == (const char *) NULL)
1468 return search;
1469
6770ec8c
NC
1470 if (! load_symbols (search, (lang_statement_list_type *) NULL))
1471 return NULL;
252b5132
RH
1472
1473 return search;
1474}
1475
1476/* Get the symbols for an input file. */
1477
6770ec8c 1478static boolean
252b5132
RH
1479load_symbols (entry, place)
1480 lang_input_statement_type *entry;
1481 lang_statement_list_type *place;
1482{
1483 char **matching;
1484
1485 if (entry->loaded)
6770ec8c 1486 return true;
252b5132
RH
1487
1488 ldfile_open_file (entry);
1489
1490 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1491 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1492 {
1493 bfd_error_type err;
1494 lang_statement_list_type *hold;
6770ec8c 1495 boolean bad_load = true;
b7a26f91 1496
252b5132 1497 err = bfd_get_error ();
884fb58e
NC
1498
1499 /* See if the emulation has some special knowledge. */
1500 if (ldemul_unrecognized_file (entry))
6770ec8c 1501 return true;
884fb58e 1502
252b5132
RH
1503 if (err == bfd_error_file_ambiguously_recognized)
1504 {
1505 char **p;
1506
1507 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1508 einfo (_("%B: matching formats:"), entry->the_bfd);
1509 for (p = matching; *p != NULL; p++)
1510 einfo (" %s", *p);
1511 einfo ("%F\n");
1512 }
1513 else if (err != bfd_error_file_not_recognized
1514 || place == NULL)
6770ec8c
NC
1515 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1516 else
1517 bad_load = false;
b7a26f91 1518
252b5132
RH
1519 bfd_close (entry->the_bfd);
1520 entry->the_bfd = NULL;
1521
252b5132 1522 /* Try to interpret the file as a linker script. */
252b5132
RH
1523 ldfile_open_command_file (entry->filename);
1524
1525 hold = stat_ptr;
1526 stat_ptr = place;
1527
1528 ldfile_assumed_script = true;
1529 parser_input = input_script;
1530 yyparse ();
1531 ldfile_assumed_script = false;
1532
1533 stat_ptr = hold;
1534
6770ec8c 1535 return ! bad_load;
252b5132
RH
1536 }
1537
1538 if (ldemul_recognized_file (entry))
6770ec8c 1539 return true;
252b5132
RH
1540
1541 /* We don't call ldlang_add_file for an archive. Instead, the
1542 add_symbols entry point will call ldlang_add_file, via the
1543 add_archive_element callback, for each element of the archive
1544 which is used. */
1545 switch (bfd_get_format (entry->the_bfd))
1546 {
1547 default:
1548 break;
1549
1550 case bfd_object:
1551 ldlang_add_file (entry);
1552 if (trace_files || trace_file_tries)
1553 info_msg ("%I\n", entry);
1554 break;
1555
1556 case bfd_archive:
1557 if (entry->whole_archive)
1558 {
b7a26f91 1559 bfd *member = NULL;
6770ec8c
NC
1560 boolean loaded = true;
1561
1562 for (;;)
252b5132 1563 {
6770ec8c
NC
1564 member = bfd_openr_next_archived_file (entry->the_bfd, member);
1565
1566 if (member == NULL)
1567 break;
b7a26f91 1568
252b5132 1569 if (! bfd_check_format (member, bfd_object))
6770ec8c
NC
1570 {
1571 einfo (_("%F%B: member %B in archive is not an object\n"),
1572 entry->the_bfd, member);
1573 loaded = false;
1574 }
1575
252b5132
RH
1576 if (! ((*link_info.callbacks->add_archive_element)
1577 (&link_info, member, "--whole-archive")))
1578 abort ();
6770ec8c 1579
252b5132 1580 if (! bfd_link_add_symbols (member, &link_info))
6770ec8c
NC
1581 {
1582 einfo (_("%F%B: could not read symbols: %E\n"), member);
1583 loaded = false;
1584 }
252b5132
RH
1585 }
1586
6770ec8c
NC
1587 entry->loaded = loaded;
1588 return loaded;
252b5132 1589 }
6770ec8c 1590 break;
252b5132
RH
1591 }
1592
7c519c12
AM
1593 if (entry->just_syms_flag)
1594 entry->loaded = true;
1595 else if (bfd_link_add_symbols (entry->the_bfd, &link_info))
6770ec8c
NC
1596 entry->loaded = true;
1597 else
252b5132
RH
1598 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1599
6770ec8c 1600 return entry->loaded;
252b5132
RH
1601}
1602
b6bf44ba
AM
1603/* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1604 may be NULL, indicating that it is a wildcard. Separate
1605 lang_input_section statements are created for each part of the
1606 expansion; they are added after the wild statement S. OUTPUT is
1607 the output section. */
252b5132
RH
1608
1609static void
b6bf44ba 1610wild (s, target, output)
252b5132 1611 lang_wild_statement_type *s;
87f2a346 1612 const char *target ATTRIBUTE_UNUSED;
252b5132
RH
1613 lang_output_section_statement_type *output;
1614{
b6bf44ba 1615 struct wildcard_list *sec;
252b5132 1616
b6bf44ba
AM
1617 walk_wild (s, output_section_callback, (PTR) output);
1618
1619 for (sec = s->section_list; sec != NULL; sec = sec->next)
252b5132 1620 {
b6bf44ba
AM
1621 if (default_common_section != NULL)
1622 break;
1623 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
1624 {
1625 /* Remember the section that common is going to in case we
b7a26f91 1626 later get something which doesn't know where to put it. */
b6bf44ba
AM
1627 default_common_section = output;
1628 }
252b5132
RH
1629 }
1630}
1631
e50d8076 1632/* Return true iff target is the sought target. */
08da4cac 1633
e50d8076
NC
1634static int
1635get_target (target, data)
08da4cac 1636 const bfd_target *target;
5f992e62 1637 PTR data;
e50d8076 1638{
08da4cac 1639 const char *sought = (const char *) data;
5f992e62 1640
e50d8076
NC
1641 return strcmp (target->name, sought) == 0;
1642}
1643
1644/* Like strcpy() but convert to lower case as well. */
08da4cac 1645
e50d8076
NC
1646static void
1647stricpy (dest, src)
08da4cac
KH
1648 char *dest;
1649 char *src;
e50d8076
NC
1650{
1651 char c;
5f992e62 1652
08da4cac 1653 while ((c = *src++) != 0)
3882b010 1654 *dest++ = TOLOWER (c);
e50d8076 1655
08da4cac 1656 *dest = 0;
e50d8076
NC
1657}
1658
1659/* Remove the first occurance of needle (if any) in haystack
1660 from haystack. */
08da4cac 1661
e50d8076
NC
1662static void
1663strcut (haystack, needle)
08da4cac
KH
1664 char *haystack;
1665 char *needle;
e50d8076
NC
1666{
1667 haystack = strstr (haystack, needle);
5f992e62 1668
e50d8076
NC
1669 if (haystack)
1670 {
08da4cac 1671 char *src;
e50d8076 1672
08da4cac
KH
1673 for (src = haystack + strlen (needle); *src;)
1674 *haystack++ = *src++;
5f992e62 1675
08da4cac 1676 *haystack = 0;
e50d8076
NC
1677 }
1678}
1679
1680/* Compare two target format name strings.
1681 Return a value indicating how "similar" they are. */
08da4cac 1682
e50d8076
NC
1683static int
1684name_compare (first, second)
08da4cac
KH
1685 char *first;
1686 char *second;
e50d8076 1687{
08da4cac
KH
1688 char *copy1;
1689 char *copy2;
1690 int result;
5f992e62 1691
e50d8076
NC
1692 copy1 = xmalloc (strlen (first) + 1);
1693 copy2 = xmalloc (strlen (second) + 1);
1694
1695 /* Convert the names to lower case. */
1696 stricpy (copy1, first);
1697 stricpy (copy2, second);
1698
1699 /* Remove and endian strings from the name. */
1700 strcut (copy1, "big");
1701 strcut (copy1, "little");
1702 strcut (copy2, "big");
1703 strcut (copy2, "little");
1704
1705 /* Return a value based on how many characters match,
1706 starting from the beginning. If both strings are
1707 the same then return 10 * their length. */
08da4cac
KH
1708 for (result = 0; copy1[result] == copy2[result]; result++)
1709 if (copy1[result] == 0)
e50d8076
NC
1710 {
1711 result *= 10;
1712 break;
1713 }
5f992e62 1714
e50d8076
NC
1715 free (copy1);
1716 free (copy2);
1717
1718 return result;
1719}
1720
1721/* Set by closest_target_match() below. */
08da4cac 1722static const bfd_target *winner;
e50d8076
NC
1723
1724/* Scan all the valid bfd targets looking for one that has the endianness
1725 requirement that was specified on the command line, and is the nearest
1726 match to the original output target. */
08da4cac 1727
e50d8076
NC
1728static int
1729closest_target_match (target, data)
08da4cac 1730 const bfd_target *target;
5f992e62 1731 PTR data;
e50d8076 1732{
08da4cac 1733 const bfd_target *original = (const bfd_target *) data;
5f992e62 1734
08da4cac
KH
1735 if (command_line.endian == ENDIAN_BIG
1736 && target->byteorder != BFD_ENDIAN_BIG)
e50d8076 1737 return 0;
5f992e62 1738
08da4cac
KH
1739 if (command_line.endian == ENDIAN_LITTLE
1740 && target->byteorder != BFD_ENDIAN_LITTLE)
e50d8076
NC
1741 return 0;
1742
1743 /* Must be the same flavour. */
1744 if (target->flavour != original->flavour)
1745 return 0;
1746
1747 /* If we have not found a potential winner yet, then record this one. */
1748 if (winner == NULL)
1749 {
1750 winner = target;
1751 return 0;
1752 }
1753
1754 /* Oh dear, we now have two potential candidates for a successful match.
4de2d33d 1755 Compare their names and choose the better one. */
d1778b88
AM
1756 if (name_compare (target->name, original->name)
1757 > name_compare (winner->name, original->name))
e50d8076
NC
1758 winner = target;
1759
1760 /* Keep on searching until wqe have checked them all. */
1761 return 0;
1762}
1763
1764/* Return the BFD target format of the first input file. */
08da4cac 1765
e50d8076
NC
1766static char *
1767get_first_input_target ()
1768{
08da4cac 1769 char *target = NULL;
e50d8076
NC
1770
1771 LANG_FOR_EACH_INPUT_STATEMENT (s)
1772 {
1773 if (s->header.type == lang_input_statement_enum
1774 && s->real)
1775 {
1776 ldfile_open_file (s);
5f992e62 1777
e50d8076
NC
1778 if (s->the_bfd != NULL
1779 && bfd_check_format (s->the_bfd, bfd_object))
1780 {
1781 target = bfd_get_target (s->the_bfd);
5f992e62 1782
e50d8076
NC
1783 if (target != NULL)
1784 break;
1785 }
1786 }
1787 }
5f992e62 1788
e50d8076
NC
1789 return target;
1790}
1791
599917b8
JJ
1792const char *
1793lang_get_output_target ()
1794{
1795 const char *target;
1796
1797 /* Has the user told us which output format to use? */
1798 if (output_target != (char *) NULL)
1799 return output_target;
1800
1801 /* No - has the current target been set to something other than
1802 the default? */
1803 if (current_target != default_target)
1804 return current_target;
1805
1806 /* No - can we determine the format of the first input file? */
1807 target = get_first_input_target ();
1808 if (target != NULL)
1809 return target;
1810
1811 /* Failed - use the default output target. */
1812 return default_target;
1813}
1814
252b5132
RH
1815/* Open the output file. */
1816
1817static bfd *
1818open_output (name)
08da4cac 1819 const char *name;
252b5132 1820{
08da4cac 1821 bfd *output;
252b5132 1822
599917b8 1823 output_target = lang_get_output_target ();
5f992e62 1824
08da4cac
KH
1825 /* Has the user requested a particular endianness on the command
1826 line? */
e50d8076
NC
1827 if (command_line.endian != ENDIAN_UNSET)
1828 {
08da4cac 1829 const bfd_target *target;
1b69a0bf 1830 enum bfd_endian desired_endian;
e50d8076
NC
1831
1832 /* Get the chosen target. */
5f992e62 1833 target = bfd_search_for_target (get_target, (PTR) output_target);
e50d8076 1834
c13b1b77
NC
1835 /* If the target is not supported, we cannot do anything. */
1836 if (target != NULL)
e50d8076 1837 {
c13b1b77
NC
1838 if (command_line.endian == ENDIAN_BIG)
1839 desired_endian = BFD_ENDIAN_BIG;
e50d8076 1840 else
c13b1b77 1841 desired_endian = BFD_ENDIAN_LITTLE;
5f992e62
AM
1842
1843 /* See if the target has the wrong endianness. This should
1844 not happen if the linker script has provided big and
1845 little endian alternatives, but some scrips don't do
1846 this. */
c13b1b77 1847 if (target->byteorder != desired_endian)
e50d8076 1848 {
c13b1b77
NC
1849 /* If it does, then see if the target provides
1850 an alternative with the correct endianness. */
1851 if (target->alternative_target != NULL
1852 && (target->alternative_target->byteorder == desired_endian))
1853 output_target = target->alternative_target->name;
e50d8076 1854 else
c13b1b77 1855 {
5f992e62
AM
1856 /* Try to find a target as similar as possible to
1857 the default target, but which has the desired
1858 endian characteristic. */
d1778b88
AM
1859 (void) bfd_search_for_target (closest_target_match,
1860 (PTR) target);
5f992e62
AM
1861
1862 /* Oh dear - we could not find any targets that
1863 satisfy our requirements. */
c13b1b77
NC
1864 if (winner == NULL)
1865 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1866 else
1867 output_target = winner->name;
1868 }
e50d8076
NC
1869 }
1870 }
252b5132 1871 }
5f992e62 1872
252b5132
RH
1873 output = bfd_openw (name, output_target);
1874
1875 if (output == (bfd *) NULL)
1876 {
1877 if (bfd_get_error () == bfd_error_invalid_target)
e50d8076
NC
1878 einfo (_("%P%F: target %s not found\n"), output_target);
1879
252b5132
RH
1880 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1881 }
1882
1883 delete_output_file_on_failure = true;
1884
08da4cac
KH
1885#if 0
1886 output->flags |= D_PAGED;
1887#endif
252b5132
RH
1888
1889 if (! bfd_set_format (output, bfd_object))
1890 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1891 if (! bfd_set_arch_mach (output,
1892 ldfile_output_architecture,
1893 ldfile_output_machine))
1894 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1895
1896 link_info.hash = bfd_link_hash_table_create (output);
1897 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1898 einfo (_("%P%F: can not create link hash table: %E\n"));
1899
1900 bfd_set_gp_size (output, g_switch_value);
1901 return output;
1902}
1903
252b5132
RH
1904static void
1905ldlang_open_output (statement)
08da4cac 1906 lang_statement_union_type *statement;
252b5132
RH
1907{
1908 switch (statement->header.type)
1909 {
1910 case lang_output_statement_enum:
1911 ASSERT (output_bfd == (bfd *) NULL);
1912 output_bfd = open_output (statement->output_statement.name);
1913 ldemul_set_output_arch ();
1914 if (config.magic_demand_paged && !link_info.relocateable)
1915 output_bfd->flags |= D_PAGED;
1916 else
1917 output_bfd->flags &= ~D_PAGED;
1918 if (config.text_read_only)
1919 output_bfd->flags |= WP_TEXT;
1920 else
1921 output_bfd->flags &= ~WP_TEXT;
1922 if (link_info.traditional_format)
1923 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1924 else
1925 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1926 break;
1927
1928 case lang_target_statement_enum:
1929 current_target = statement->target_statement.target;
1930 break;
1931 default:
1932 break;
1933 }
1934}
1935
1936/* Open all the input files. */
1937
1938static void
1939open_input_bfds (s, force)
1940 lang_statement_union_type *s;
1941 boolean force;
1942{
bba1a0c0 1943 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
252b5132
RH
1944 {
1945 switch (s->header.type)
1946 {
1947 case lang_constructors_statement_enum:
1948 open_input_bfds (constructor_list.head, force);
1949 break;
1950 case lang_output_section_statement_enum:
1951 open_input_bfds (s->output_section_statement.children.head, force);
1952 break;
1953 case lang_wild_statement_enum:
08da4cac 1954 /* Maybe we should load the file's symbols. */
252b5132
RH
1955 if (s->wild_statement.filename
1956 && ! wildcardp (s->wild_statement.filename))
1957 (void) lookup_name (s->wild_statement.filename);
1958 open_input_bfds (s->wild_statement.children.head, force);
1959 break;
1960 case lang_group_statement_enum:
1961 {
1962 struct bfd_link_hash_entry *undefs;
1963
1964 /* We must continually search the entries in the group
08da4cac
KH
1965 until no new symbols are added to the list of undefined
1966 symbols. */
252b5132
RH
1967
1968 do
1969 {
1970 undefs = link_info.hash->undefs_tail;
1971 open_input_bfds (s->group_statement.children.head, true);
1972 }
1973 while (undefs != link_info.hash->undefs_tail);
1974 }
1975 break;
1976 case lang_target_statement_enum:
1977 current_target = s->target_statement.target;
1978 break;
1979 case lang_input_statement_enum:
e50d8076 1980 if (s->input_statement.real)
252b5132
RH
1981 {
1982 lang_statement_list_type add;
1983
1984 s->input_statement.target = current_target;
1985
1986 /* If we are being called from within a group, and this
1987 is an archive which has already been searched, then
cd4c806a
L
1988 force it to be researched unless the whole archive
1989 has been loaded already. */
252b5132 1990 if (force
cd4c806a 1991 && !s->input_statement.whole_archive
252b5132
RH
1992 && s->input_statement.loaded
1993 && bfd_check_format (s->input_statement.the_bfd,
1994 bfd_archive))
1995 s->input_statement.loaded = false;
1996
d1778b88 1997 lang_list_init (&add);
1276aefa 1998
6770ec8c
NC
1999 if (! load_symbols (&s->input_statement, &add))
2000 config.make_executable = false;
252b5132
RH
2001
2002 if (add.head != NULL)
2003 {
bba1a0c0
AM
2004 *add.tail = s->header.next;
2005 s->header.next = add.head;
252b5132
RH
2006 }
2007 }
2008 break;
2009 default:
2010 break;
2011 }
2012 }
2013}
2014
08da4cac
KH
2015/* If there are [COMMONS] statements, put a wild one into the bss
2016 section. */
252b5132
RH
2017
2018static void
2019lang_reasonable_defaults ()
2020{
2021#if 0
2022 lang_output_section_statement_lookup (".text");
2023 lang_output_section_statement_lookup (".data");
2024
08da4cac 2025 default_common_section = lang_output_section_statement_lookup (".bss");
252b5132 2026
7c519c12 2027 if (!placed_commons)
252b5132
RH
2028 {
2029 lang_wild_statement_type *new =
2030 new_stat (lang_wild_statement,
2031 &default_common_section->children);
2032
2033 new->section_name = "COMMON";
2034 new->filename = (char *) NULL;
2035 lang_list_init (&new->children);
2036 }
2037#endif
252b5132
RH
2038}
2039
08da4cac 2040/* Add the supplied name to the symbol table as an undefined reference.
fcf0e35b
AM
2041 This is a two step process as the symbol table doesn't even exist at
2042 the time the ld command line is processed. First we put the name
2043 on a list, then, once the output file has been opened, transfer the
2044 name to the symbol table. */
2045
e3e942e9 2046typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
252b5132 2047
e3e942e9 2048#define ldlang_undef_chain_list_head entry_symbol.next
252b5132
RH
2049
2050void
2051ldlang_add_undef (name)
5f992e62 2052 const char *const name;
252b5132
RH
2053{
2054 ldlang_undef_chain_list_type *new =
2055 ((ldlang_undef_chain_list_type *)
2056 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
2057
2058 new->next = ldlang_undef_chain_list_head;
2059 ldlang_undef_chain_list_head = new;
2060
d1b2b2dc 2061 new->name = xstrdup (name);
fcf0e35b
AM
2062
2063 if (output_bfd != NULL)
2064 insert_undefined (new->name);
2065}
2066
2067/* Insert NAME as undefined in the symbol table. */
2068
2069static void
2070insert_undefined (name)
2071 const char *name;
2072{
2073 struct bfd_link_hash_entry *h;
2074
2075 h = bfd_link_hash_lookup (link_info.hash, name, true, false, true);
2076 if (h == (struct bfd_link_hash_entry *) NULL)
2077 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2078 if (h->type == bfd_link_hash_new)
2079 {
2080 h->type = bfd_link_hash_undefined;
2081 h->u.undef.abfd = NULL;
2082 bfd_link_add_undef (link_info.hash, h);
2083 }
252b5132
RH
2084}
2085
2086/* Run through the list of undefineds created above and place them
2087 into the linker hash table as undefined symbols belonging to the
08da4cac
KH
2088 script file. */
2089
252b5132
RH
2090static void
2091lang_place_undefineds ()
2092{
2093 ldlang_undef_chain_list_type *ptr;
2094
2095 for (ptr = ldlang_undef_chain_list_head;
2096 ptr != (ldlang_undef_chain_list_type *) NULL;
2097 ptr = ptr->next)
2098 {
fcf0e35b 2099 insert_undefined (ptr->name);
252b5132
RH
2100 }
2101}
2102
08da4cac
KH
2103/* Open input files and attatch to output sections. */
2104
252b5132
RH
2105static void
2106map_input_to_output_sections (s, target, output_section_statement)
08da4cac 2107 lang_statement_union_type *s;
5f992e62 2108 const char *target;
08da4cac 2109 lang_output_section_statement_type *output_section_statement;
252b5132 2110{
bba1a0c0 2111 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
252b5132
RH
2112 {
2113 switch (s->header.type)
2114 {
252b5132 2115 case lang_wild_statement_enum:
b6bf44ba 2116 wild (&s->wild_statement, target, output_section_statement);
abc6ab0a 2117 break;
252b5132
RH
2118 case lang_constructors_statement_enum:
2119 map_input_to_output_sections (constructor_list.head,
2120 target,
2121 output_section_statement);
2122 break;
2123 case lang_output_section_statement_enum:
2124 map_input_to_output_sections (s->output_section_statement.children.head,
2125 target,
2126 &s->output_section_statement);
2127 break;
2128 case lang_output_statement_enum:
2129 break;
2130 case lang_target_statement_enum:
2131 target = s->target_statement.target;
2132 break;
2133 case lang_group_statement_enum:
2134 map_input_to_output_sections (s->group_statement.children.head,
2135 target,
2136 output_section_statement);
2137 break;
2138 case lang_fill_statement_enum:
2139 case lang_input_section_enum:
2140 case lang_object_symbols_statement_enum:
2141 case lang_data_statement_enum:
2142 case lang_reloc_statement_enum:
2143 case lang_padding_statement_enum:
2144 case lang_input_statement_enum:
2145 if (output_section_statement != NULL
2146 && output_section_statement->bfd_section == NULL)
2147 init_os (output_section_statement);
2148 break;
2149 case lang_assignment_statement_enum:
2150 if (output_section_statement != NULL
2151 && output_section_statement->bfd_section == NULL)
2152 init_os (output_section_statement);
2153
2154 /* Make sure that any sections mentioned in the assignment
08da4cac 2155 are initialized. */
252b5132
RH
2156 exp_init_os (s->assignment_statement.exp);
2157 break;
2158 case lang_afile_asection_pair_statement_enum:
2159 FAIL ();
2160 break;
2161 case lang_address_statement_enum:
08da4cac 2162 /* Mark the specified section with the supplied address. */
252b5132
RH
2163 {
2164 lang_output_section_statement_type *os =
2165 lang_output_section_statement_lookup
2166 (s->address_statement.section_name);
2167
2168 if (os->bfd_section == NULL)
2169 init_os (os);
2170 os->addr_tree = s->address_statement.address;
2171 }
2172 break;
2173 }
2174 }
2175}
2176
4bd5a393
AM
2177/* An output section might have been removed after its statement was
2178 added. For example, ldemul_before_allocation can remove dynamic
2179 sections if they turn out to be not needed. Clean them up here. */
2180
2181static void
2182strip_excluded_output_sections ()
2183{
2184 lang_statement_union_type *u;
2185
2186 for (u = lang_output_section_statement.head;
2187 u != NULL;
2188 u = u->output_section_statement.next)
2189 {
2190 lang_output_section_statement_type *os;
2191 asection *s;
2192
2193 os = &u->output_section_statement;
2194 s = os->bfd_section;
2195 if (s != NULL && (s->flags & SEC_EXCLUDE) != 0)
2196 {
2197 asection **p;
2198
2199 os->bfd_section = NULL;
2200
2201 for (p = &output_bfd->sections; *p; p = &(*p)->next)
2202 if (*p == s)
2203 {
2204 bfd_section_list_remove (output_bfd, p);
2205 output_bfd->section_count--;
2206 break;
2207 }
2208 }
2209 }
2210}
2211
252b5132
RH
2212static void
2213print_output_section_statement (output_section_statement)
08da4cac 2214 lang_output_section_statement_type *output_section_statement;
252b5132
RH
2215{
2216 asection *section = output_section_statement->bfd_section;
2217 int len;
2218
2219 if (output_section_statement != abs_output_section)
2220 {
2221 minfo ("\n%s", output_section_statement->name);
2222
2223 if (section != NULL)
2224 {
2225 print_dot = section->vma;
2226
2227 len = strlen (output_section_statement->name);
2228 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2229 {
2230 print_nl ();
2231 len = 0;
2232 }
2233 while (len < SECTION_NAME_MAP_LENGTH)
2234 {
2235 print_space ();
2236 ++len;
2237 }
2238
2239 minfo ("0x%V %W", section->vma, section->_raw_size);
2240
2241 if (output_section_statement->load_base != NULL)
2242 {
2243 bfd_vma addr;
2244
2245 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2246 "load base", lang_final_phase_enum);
2247 minfo (_(" load address 0x%V"), addr);
2248 }
2249 }
2250
2251 print_nl ();
2252 }
2253
2254 print_statement_list (output_section_statement->children.head,
2255 output_section_statement);
2256}
2257
2258static void
2259print_assignment (assignment, output_section)
08da4cac
KH
2260 lang_assignment_statement_type *assignment;
2261 lang_output_section_statement_type *output_section;
252b5132
RH
2262{
2263 int i;
2264 etree_value_type result;
2265
2266 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2267 print_space ();
2268
2269 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2270 lang_final_phase_enum, print_dot, &print_dot);
2271 if (result.valid_p)
7b17f854
RS
2272 {
2273 const char *dst;
2274 bfd_vma value;
2275
2276 value = result.value + result.section->bfd_section->vma;
2277 dst = assignment->exp->assign.dst;
2278
2279 minfo ("0x%V", value);
2280 if (dst[0] == '.' && dst[1] == 0)
2281 print_dot = value;
2282 }
252b5132
RH
2283 else
2284 {
2285 minfo ("*undef* ");
2286#ifdef BFD64
2287 minfo (" ");
2288#endif
2289 }
2290
2291 minfo (" ");
2292
2293 exp_print_tree (assignment->exp);
2294
2295 print_nl ();
2296}
2297
2298static void
2299print_input_statement (statm)
08da4cac 2300 lang_input_statement_type *statm;
252b5132
RH
2301{
2302 if (statm->filename != (char *) NULL)
2303 {
2304 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2305 }
2306}
2307
2308/* Print all symbols defined in a particular section. This is called
2309 via bfd_link_hash_traverse. */
2310
5f992e62 2311static boolean
252b5132
RH
2312print_one_symbol (hash_entry, ptr)
2313 struct bfd_link_hash_entry *hash_entry;
2314 PTR ptr;
2315{
2316 asection *sec = (asection *) ptr;
2317
2318 if ((hash_entry->type == bfd_link_hash_defined
2319 || hash_entry->type == bfd_link_hash_defweak)
2320 && sec == hash_entry->u.def.section)
2321 {
2322 int i;
2323
2324 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2325 print_space ();
2326 minfo ("0x%V ",
2327 (hash_entry->u.def.value
2328 + hash_entry->u.def.section->output_offset
2329 + hash_entry->u.def.section->output_section->vma));
2330
2331 minfo (" %T\n", hash_entry->root.string);
2332 }
2333
2334 return true;
2335}
2336
2337/* Print information about an input section to the map file. */
2338
2339static void
2340print_input_section (in)
08da4cac 2341 lang_input_section_type *in;
252b5132
RH
2342{
2343 asection *i = in->section;
2344 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
5f992e62 2345 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
f6af82bd 2346 ldfile_output_machine);
252b5132
RH
2347 if (size != 0)
2348 {
2349 print_space ();
2350
2351 minfo ("%s", i->name);
2352
2353 if (i->output_section != NULL)
2354 {
2355 int len;
2356
2357 len = 1 + strlen (i->name);
2358 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2359 {
2360 print_nl ();
2361 len = 0;
2362 }
2363 while (len < SECTION_NAME_MAP_LENGTH)
2364 {
2365 print_space ();
2366 ++len;
2367 }
2368
2369 minfo ("0x%V %W %B\n",
4cbfc3ac 2370 i->output_section->vma + i->output_offset, size / opb,
252b5132
RH
2371 i->owner);
2372
2373 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2374 {
2375 len = SECTION_NAME_MAP_LENGTH + 3;
2376#ifdef BFD64
2377 len += 16;
2378#else
2379 len += 8;
2380#endif
2381 while (len > 0)
2382 {
2383 print_space ();
2384 --len;
2385 }
2386
2387 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2388 }
2389
2390 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2391
4cbfc3ac 2392 print_dot = i->output_section->vma + i->output_offset + size / opb;
252b5132
RH
2393 }
2394 }
2395}
2396
2397static void
2398print_fill_statement (fill)
08da4cac 2399 lang_fill_statement_type *fill;
252b5132 2400{
2c382fb6
AM
2401 size_t size;
2402 unsigned char *p;
2403 fputs (" FILL mask 0x", config.map_file);
2404 for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
2405 fprintf (config.map_file, "%02x", *p);
2406 fputs ("\n", config.map_file);
252b5132
RH
2407}
2408
2409static void
2410print_data_statement (data)
08da4cac 2411 lang_data_statement_type *data;
252b5132
RH
2412{
2413 int i;
2414 bfd_vma addr;
2415 bfd_size_type size;
2416 const char *name;
5f992e62 2417 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
f6af82bd 2418 ldfile_output_machine);
252b5132
RH
2419
2420 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2421 print_space ();
2422
2423 addr = data->output_vma;
2424 if (data->output_section != NULL)
2425 addr += data->output_section->vma;
2426
2427 switch (data->type)
2428 {
2429 default:
2430 abort ();
2431 case BYTE:
2432 size = BYTE_SIZE;
2433 name = "BYTE";
2434 break;
2435 case SHORT:
2436 size = SHORT_SIZE;
2437 name = "SHORT";
2438 break;
2439 case LONG:
2440 size = LONG_SIZE;
2441 name = "LONG";
2442 break;
2443 case QUAD:
2444 size = QUAD_SIZE;
2445 name = "QUAD";
2446 break;
2447 case SQUAD:
2448 size = QUAD_SIZE;
2449 name = "SQUAD";
2450 break;
2451 }
2452
2453 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2454
2455 if (data->exp->type.node_class != etree_value)
2456 {
2457 print_space ();
2458 exp_print_tree (data->exp);
2459 }
2460
2461 print_nl ();
2462
4cbfc3ac
TW
2463 print_dot = addr + size / opb;
2464
252b5132
RH
2465}
2466
2467/* Print an address statement. These are generated by options like
2468 -Ttext. */
2469
2470static void
2471print_address_statement (address)
2472 lang_address_statement_type *address;
2473{
2474 minfo (_("Address of section %s set to "), address->section_name);
2475 exp_print_tree (address->address);
2476 print_nl ();
2477}
2478
2479/* Print a reloc statement. */
2480
2481static void
2482print_reloc_statement (reloc)
2483 lang_reloc_statement_type *reloc;
2484{
2485 int i;
2486 bfd_vma addr;
2487 bfd_size_type size;
5f992e62
AM
2488 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2489 ldfile_output_machine);
252b5132
RH
2490
2491 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2492 print_space ();
2493
2494 addr = reloc->output_vma;
2495 if (reloc->output_section != NULL)
2496 addr += reloc->output_section->vma;
2497
2498 size = bfd_get_reloc_size (reloc->howto);
2499
2500 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2501
2502 if (reloc->name != NULL)
2503 minfo ("%s+", reloc->name);
2504 else
2505 minfo ("%s+", reloc->section->name);
2506
2507 exp_print_tree (reloc->addend_exp);
2508
2509 print_nl ();
2510
4cbfc3ac 2511 print_dot = addr + size / opb;
5f992e62 2512}
252b5132
RH
2513
2514static void
2515print_padding_statement (s)
2516 lang_padding_statement_type *s;
2517{
2518 int len;
2519 bfd_vma addr;
5f992e62
AM
2520 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2521 ldfile_output_machine);
252b5132
RH
2522
2523 minfo (" *fill*");
2524
2525 len = sizeof " *fill*" - 1;
2526 while (len < SECTION_NAME_MAP_LENGTH)
2527 {
2528 print_space ();
2529 ++len;
2530 }
2531
2532 addr = s->output_offset;
2533 if (s->output_section != NULL)
2534 addr += s->output_section->vma;
2c382fb6 2535 minfo ("0x%V %W ", addr, s->size);
252b5132 2536
2c382fb6
AM
2537 if (s->fill->size != 0)
2538 {
2539 size_t size;
2540 unsigned char *p;
2541 for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
2542 fprintf (config.map_file, "%02x", *p);
2543 }
252b5132
RH
2544
2545 print_nl ();
2546
4cbfc3ac 2547 print_dot = addr + s->size / opb;
252b5132
RH
2548}
2549
2550static void
2551print_wild_statement (w, os)
08da4cac
KH
2552 lang_wild_statement_type *w;
2553 lang_output_section_statement_type *os;
252b5132 2554{
b6bf44ba
AM
2555 struct wildcard_list *sec;
2556
252b5132
RH
2557 print_space ();
2558
2559 if (w->filenames_sorted)
2560 minfo ("SORT(");
08da4cac 2561 if (w->filename != NULL)
252b5132
RH
2562 minfo ("%s", w->filename);
2563 else
2564 minfo ("*");
2565 if (w->filenames_sorted)
2566 minfo (")");
2567
2568 minfo ("(");
b6bf44ba
AM
2569 for (sec = w->section_list; sec; sec = sec->next)
2570 {
2571 if (sec->spec.sorted)
2572 minfo ("SORT(");
2573 if (sec->spec.exclude_name_list != NULL)
2574 {
2575 name_list *tmp;
34786259 2576 minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
b6bf44ba 2577 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
34786259
AM
2578 minfo (" %s", tmp->name);
2579 minfo (") ");
b6bf44ba
AM
2580 }
2581 if (sec->spec.name != NULL)
2582 minfo ("%s", sec->spec.name);
2583 else
2584 minfo ("*");
2585 if (sec->spec.sorted)
2586 minfo (")");
34786259
AM
2587 if (sec->next)
2588 minfo (" ");
b6bf44ba 2589 }
252b5132
RH
2590 minfo (")");
2591
2592 print_nl ();
2593
2594 print_statement_list (w->children.head, os);
2595}
2596
2597/* Print a group statement. */
2598
2599static void
2600print_group (s, os)
2601 lang_group_statement_type *s;
2602 lang_output_section_statement_type *os;
2603{
2604 fprintf (config.map_file, "START GROUP\n");
2605 print_statement_list (s->children.head, os);
2606 fprintf (config.map_file, "END GROUP\n");
2607}
2608
2609/* Print the list of statements in S.
2610 This can be called for any statement type. */
2611
2612static void
2613print_statement_list (s, os)
2614 lang_statement_union_type *s;
2615 lang_output_section_statement_type *os;
2616{
2617 while (s != NULL)
2618 {
2619 print_statement (s, os);
bba1a0c0 2620 s = s->header.next;
252b5132
RH
2621 }
2622}
2623
2624/* Print the first statement in statement list S.
2625 This can be called for any statement type. */
2626
2627static void
2628print_statement (s, os)
2629 lang_statement_union_type *s;
2630 lang_output_section_statement_type *os;
2631{
2632 switch (s->header.type)
2633 {
2634 default:
2635 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2636 FAIL ();
2637 break;
2638 case lang_constructors_statement_enum:
2639 if (constructor_list.head != NULL)
2640 {
2641 if (constructors_sorted)
2642 minfo (" SORT (CONSTRUCTORS)\n");
2643 else
2644 minfo (" CONSTRUCTORS\n");
2645 print_statement_list (constructor_list.head, os);
2646 }
2647 break;
2648 case lang_wild_statement_enum:
2649 print_wild_statement (&s->wild_statement, os);
2650 break;
2651 case lang_address_statement_enum:
2652 print_address_statement (&s->address_statement);
2653 break;
2654 case lang_object_symbols_statement_enum:
2655 minfo (" CREATE_OBJECT_SYMBOLS\n");
2656 break;
2657 case lang_fill_statement_enum:
2658 print_fill_statement (&s->fill_statement);
2659 break;
2660 case lang_data_statement_enum:
2661 print_data_statement (&s->data_statement);
2662 break;
2663 case lang_reloc_statement_enum:
2664 print_reloc_statement (&s->reloc_statement);
2665 break;
2666 case lang_input_section_enum:
2667 print_input_section (&s->input_section);
2668 break;
2669 case lang_padding_statement_enum:
2670 print_padding_statement (&s->padding_statement);
2671 break;
2672 case lang_output_section_statement_enum:
2673 print_output_section_statement (&s->output_section_statement);
2674 break;
2675 case lang_assignment_statement_enum:
2676 print_assignment (&s->assignment_statement, os);
2677 break;
2678 case lang_target_statement_enum:
2679 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2680 break;
2681 case lang_output_statement_enum:
2682 minfo ("OUTPUT(%s", s->output_statement.name);
2683 if (output_target != NULL)
2684 minfo (" %s", output_target);
2685 minfo (")\n");
2686 break;
2687 case lang_input_statement_enum:
2688 print_input_statement (&s->input_statement);
2689 break;
2690 case lang_group_statement_enum:
2691 print_group (&s->group_statement, os);
2692 break;
2693 case lang_afile_asection_pair_statement_enum:
2694 FAIL ();
2695 break;
2696 }
2697}
2698
2699static void
2700print_statements ()
2701{
2702 print_statement_list (statement_list.head, abs_output_section);
2703}
2704
2705/* Print the first N statements in statement list S to STDERR.
2706 If N == 0, nothing is printed.
2707 If N < 0, the entire list is printed.
2708 Intended to be called from GDB. */
2709
2710void
2711dprint_statement (s, n)
08da4cac 2712 lang_statement_union_type *s;
252b5132
RH
2713 int n;
2714{
2715 FILE *map_save = config.map_file;
2716
2717 config.map_file = stderr;
2718
2719 if (n < 0)
2720 print_statement_list (s, abs_output_section);
2721 else
2722 {
2723 while (s && --n >= 0)
2724 {
2725 print_statement (s, abs_output_section);
bba1a0c0 2726 s = s->header.next;
252b5132
RH
2727 }
2728 }
2729
2730 config.map_file = map_save;
2731}
2732
b3327aad
AM
2733static void
2734insert_pad (ptr, fill, alignment_needed, output_section, dot)
2735 lang_statement_union_type **ptr;
2c382fb6 2736 fill_type *fill;
b3327aad
AM
2737 unsigned int alignment_needed;
2738 asection *output_section;
252b5132
RH
2739 bfd_vma dot;
2740{
2c382fb6 2741 static fill_type zero_fill = { 1, { 0 } };
b3327aad 2742 lang_statement_union_type *pad;
b3327aad 2743
c0c330a7 2744 pad = ((lang_statement_union_type *)
2af02257 2745 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
b3327aad 2746 if (ptr != &statement_list.head
2af02257 2747 && pad->header.type == lang_padding_statement_enum
b3327aad 2748 && pad->padding_statement.output_section == output_section)
252b5132 2749 {
b3327aad
AM
2750 /* Use the existing pad statement. The above test on output
2751 section is probably redundant, but it doesn't hurt to check. */
252b5132 2752 }
b3327aad 2753 else
252b5132 2754 {
b3327aad
AM
2755 /* Make a new padding statement, linked into existing chain. */
2756 pad = ((lang_statement_union_type *)
2757 stat_alloc (sizeof (lang_padding_statement_type)));
2758 pad->header.next = *ptr;
2759 *ptr = pad;
2760 pad->header.type = lang_padding_statement_enum;
2761 pad->padding_statement.output_section = output_section;
2c382fb6
AM
2762 if (fill == (fill_type *) 0)
2763 fill = &zero_fill;
b3327aad 2764 pad->padding_statement.fill = fill;
252b5132 2765 }
b3327aad
AM
2766 pad->padding_statement.output_offset = dot - output_section->vma;
2767 pad->padding_statement.size = alignment_needed;
2768 output_section->_raw_size += alignment_needed;
252b5132
RH
2769}
2770
08da4cac
KH
2771/* Work out how much this section will move the dot point. */
2772
252b5132 2773static bfd_vma
b3327aad 2774size_input_section (this_ptr, output_section_statement, fill, dot)
08da4cac
KH
2775 lang_statement_union_type **this_ptr;
2776 lang_output_section_statement_type *output_section_statement;
2c382fb6 2777 fill_type *fill;
252b5132 2778 bfd_vma dot;
252b5132
RH
2779{
2780 lang_input_section_type *is = &((*this_ptr)->input_section);
2781 asection *i = is->section;
2782
7c519c12 2783 if (!is->ifile->just_syms_flag)
252b5132 2784 {
b3327aad
AM
2785 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2786 ldfile_output_machine);
2787 unsigned int alignment_needed;
2788 asection *o;
2789
2790 /* Align this section first to the input sections requirement,
2791 then to the output section's requirement. If this alignment
2792 is greater than any seen before, then record it too. Perform
2793 the alignment by inserting a magic 'padding' statement. */
2794
252b5132 2795 if (output_section_statement->subsection_alignment != -1)
b3327aad
AM
2796 i->alignment_power = output_section_statement->subsection_alignment;
2797
2798 o = output_section_statement->bfd_section;
2799 if (o->alignment_power < i->alignment_power)
2800 o->alignment_power = i->alignment_power;
252b5132 2801
b3327aad
AM
2802 alignment_needed = align_power (dot, i->alignment_power) - dot;
2803
2804 if (alignment_needed != 0)
2805 {
2806 insert_pad (this_ptr, fill, alignment_needed * opb, o, dot);
2807 dot += alignment_needed;
2808 }
252b5132 2809
08da4cac 2810 /* Remember where in the output section this input section goes. */
252b5132 2811
b3327aad 2812 i->output_offset = dot - o->vma;
252b5132 2813
08da4cac 2814 /* Mark how big the output section must be to contain this now. */
252b5132 2815 if (i->_cooked_size != 0)
4cbfc3ac 2816 dot += i->_cooked_size / opb;
252b5132 2817 else
4cbfc3ac 2818 dot += i->_raw_size / opb;
b3327aad 2819 o->_raw_size = (dot - o->vma) * opb;
252b5132
RH
2820 }
2821 else
2822 {
2823 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2824 }
2825
2826 return dot;
2827}
2828
33275c22 2829#define IGNORE_SECTION(bfd, s) \
d1778b88
AM
2830 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2831 != (SEC_ALLOC | SEC_LOAD)) \
33275c22 2832 || bfd_section_size (bfd, s) == 0)
d1778b88 2833
252b5132
RH
2834/* Check to see if any allocated sections overlap with other allocated
2835 sections. This can happen when the linker script specifically specifies
2836 the output section addresses of the two sections. */
08da4cac 2837
252b5132
RH
2838static void
2839lang_check_section_addresses ()
2840{
08da4cac 2841 asection *s;
f6af82bd 2842 unsigned opb = bfd_octets_per_byte (output_bfd);
252b5132
RH
2843
2844 /* Scan all sections in the output list. */
2845 for (s = output_bfd->sections; s != NULL; s = s->next)
33275c22 2846 {
08da4cac 2847 asection *os;
5f992e62 2848
33275c22
NC
2849 /* Ignore sections which are not loaded or which have no contents. */
2850 if (IGNORE_SECTION (output_bfd, s))
2851 continue;
5f992e62 2852
33275c22
NC
2853 /* Once we reach section 's' stop our seach. This prevents two
2854 warning messages from being produced, one for 'section A overlaps
2855 section B' and one for 'section B overlaps section A'. */
2856 for (os = output_bfd->sections; os != s; os = os->next)
2857 {
2858 bfd_vma s_start;
2859 bfd_vma s_end;
2860 bfd_vma os_start;
2861 bfd_vma os_end;
5f992e62 2862
33275c22
NC
2863 /* Only consider loadable sections with real contents. */
2864 if (IGNORE_SECTION (output_bfd, os))
2865 continue;
252b5132 2866
33275c22
NC
2867 /* We must check the sections' LMA addresses not their
2868 VMA addresses because overlay sections can have
2869 overlapping VMAs but they must have distinct LMAs. */
2870 s_start = bfd_section_lma (output_bfd, s);
2871 os_start = bfd_section_lma (output_bfd, os);
9e4ed18c
TW
2872 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2873 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
5f992e62 2874
33275c22
NC
2875 /* Look for an overlap. */
2876 if ((s_end < os_start) || (s_start > os_end))
2877 continue;
5f992e62 2878
33275c22 2879 einfo (
252b5132 2880_("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
33275c22 2881 s->name, s_start, s_end, os->name, os_start, os_end);
5f992e62 2882
33275c22
NC
2883 /* Once we have found one overlap for this section,
2884 stop looking for others. */
2885 break;
2886 }
2887 }
252b5132
RH
2888}
2889
562d3460
TW
2890/* Make sure the new address is within the region. We explicitly permit the
2891 current address to be at the exact end of the region when the address is
2892 non-zero, in case the region is at the end of addressable memory and the
5f992e62 2893 calculation wraps around. */
562d3460
TW
2894
2895static void
2896os_region_check (os, region, tree, base)
08da4cac
KH
2897 lang_output_section_statement_type *os;
2898 struct memory_region_struct *region;
2899 etree_type *tree;
2900 bfd_vma base;
562d3460
TW
2901{
2902 if ((region->current < region->origin
2903 || (region->current - region->origin > region->length))
2904 && ((region->current != region->origin + region->length)
b7a26f91 2905 || base == 0))
562d3460
TW
2906 {
2907 if (tree != (etree_type *) NULL)
b7a26f91
KH
2908 {
2909 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2910 region->current,
2911 os->bfd_section->owner,
2912 os->bfd_section->name,
2913 region->name);
2914 }
562d3460 2915 else
b7a26f91
KH
2916 {
2917 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2918 region->name,
2919 os->bfd_section->owner,
2920 os->bfd_section->name);
2921 }
562d3460
TW
2922 /* Reset the region pointer. */
2923 region->current = region->origin;
2924 }
2925}
2926
252b5132
RH
2927/* Set the sizes for all the output sections. */
2928
2d20f7bf
JJ
2929static bfd_vma
2930lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
08da4cac
KH
2931 lang_statement_union_type *s;
2932 lang_output_section_statement_type *output_section_statement;
2933 lang_statement_union_type **prev;
2c382fb6 2934 fill_type *fill;
252b5132 2935 bfd_vma dot;
b3327aad 2936 boolean *relax;
252b5132 2937{
5f992e62 2938 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
f6af82bd 2939 ldfile_output_machine);
4cbfc3ac 2940
252b5132 2941 /* Size up the sections from their constituent parts. */
bba1a0c0 2942 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
252b5132
RH
2943 {
2944 switch (s->header.type)
2945 {
2946 case lang_output_section_statement_enum:
2947 {
2948 bfd_vma after;
d1778b88 2949 lang_output_section_statement_type *os;
252b5132 2950
d1778b88 2951 os = &s->output_section_statement;
252b5132
RH
2952 if (os->bfd_section == NULL)
2953 /* This section was never actually created. */
2954 break;
2955
2956 /* If this is a COFF shared library section, use the size and
2957 address from the input section. FIXME: This is COFF
2958 specific; it would be cleaner if there were some other way
2959 to do this, but nothing simple comes to mind. */
2960 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2961 {
08da4cac 2962 asection *input;
252b5132
RH
2963
2964 if (os->children.head == NULL
bba1a0c0 2965 || os->children.head->header.next != NULL
252b5132
RH
2966 || os->children.head->header.type != lang_input_section_enum)
2967 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2968 os->name);
2969
2970 input = os->children.head->input_section.section;
2971 bfd_set_section_vma (os->bfd_section->owner,
2972 os->bfd_section,
2973 bfd_section_vma (input->owner, input));
2974 os->bfd_section->_raw_size = input->_raw_size;
2975 break;
2976 }
2977
2978 if (bfd_is_abs_section (os->bfd_section))
2979 {
2980 /* No matter what happens, an abs section starts at zero. */
2981 ASSERT (os->bfd_section->vma == 0);
2982 }
2983 else
2984 {
2985 if (os->addr_tree == (etree_type *) NULL)
2986 {
2987 /* No address specified for this section, get one
2988 from the region specification. */
2989 if (os->region == (lang_memory_region_type *) NULL
2990 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2991 & (SEC_ALLOC | SEC_LOAD)) != 0)
2992 && os->region->name[0] == '*'
2993 && strcmp (os->region->name, "*default*") == 0))
2994 {
2995 os->region = lang_memory_default (os->bfd_section);
2996 }
2997
2998 /* If a loadable section is using the default memory
2999 region, and some non default memory regions were
3000 defined, issue a warning. */
3001 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
3002 & (SEC_ALLOC | SEC_LOAD)) != 0
d08a14c3
AM
3003 && (bfd_get_section_flags (output_bfd, os->bfd_section)
3004 & SEC_NEVER_LOAD) == 0
252b5132
RH
3005 && ! link_info.relocateable
3006 && strcmp (os->region->name, "*default*") == 0
3007 && lang_memory_region_list != NULL
d1778b88
AM
3008 && (strcmp (lang_memory_region_list->name,
3009 "*default*") != 0
252b5132
RH
3010 || lang_memory_region_list->next != NULL))
3011 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
d1778b88
AM
3012 bfd_get_section_name (output_bfd,
3013 os->bfd_section));
252b5132
RH
3014
3015 dot = os->region->current;
5f992e62 3016
252b5132
RH
3017 if (os->section_alignment == -1)
3018 {
3019 bfd_vma olddot;
3020
3021 olddot = dot;
d1778b88
AM
3022 dot = align_power (dot,
3023 os->bfd_section->alignment_power);
252b5132
RH
3024
3025 if (dot != olddot && config.warn_section_align)
3026 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
3027 os->name, (unsigned int) (dot - olddot));
3028 }
3029 }
3030 else
3031 {
3032 etree_value_type r;
3033
3034 r = exp_fold_tree (os->addr_tree,
3035 abs_output_section,
3036 lang_allocating_phase_enum,
3037 dot, &dot);
7c519c12
AM
3038 if (!r.valid_p)
3039 einfo (_("%F%S: non constant address expression for section %s\n"),
3040 os->name);
3041
252b5132
RH
3042 dot = r.value + r.section->bfd_section->vma;
3043 }
5f992e62 3044
252b5132
RH
3045 /* The section starts here.
3046 First, align to what the section needs. */
3047
3048 if (os->section_alignment != -1)
3049 dot = align_power (dot, os->section_alignment);
3050
3051 bfd_set_section_vma (0, os->bfd_section, dot);
5f992e62 3052
252b5132
RH
3053 os->bfd_section->output_offset = 0;
3054 }
3055
2d20f7bf
JJ
3056 lang_size_sections_1 (os->children.head, os, &os->children.head,
3057 os->fill, dot, relax);
5f992e62 3058
08da4cac
KH
3059 /* Put the section within the requested block size, or
3060 align at the block boundary. */
c553bb91 3061 after = align_n (os->bfd_section->vma
32edc927 3062 + os->bfd_section->_raw_size / opb,
252b5132
RH
3063 (bfd_vma) os->block_value);
3064
3065 if (bfd_is_abs_section (os->bfd_section))
3066 ASSERT (after == os->bfd_section->vma);
13ae64f3 3067 else if ((os->bfd_section->flags & SEC_HAS_CONTENTS) == 0
704afa60
JJ
3068 && (os->bfd_section->flags & SEC_THREAD_LOCAL)
3069 && ! link_info.relocateable)
13ae64f3 3070 os->bfd_section->_raw_size = 0;
252b5132 3071 else
5f992e62 3072 os->bfd_section->_raw_size =
08da4cac 3073 (after - os->bfd_section->vma) * opb;
9f88b410 3074
4cbfc3ac 3075 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
252b5132
RH
3076 os->processed = true;
3077
9f88b410
RS
3078 if (os->update_dot_tree != 0)
3079 exp_fold_tree (os->update_dot_tree, abs_output_section,
3080 lang_allocating_phase_enum, dot, &dot);
3081
252b5132
RH
3082 /* Update dot in the region ?
3083 We only do this if the section is going to be allocated,
3084 since unallocated sections do not contribute to the region's
13392b77 3085 overall size in memory.
5f992e62 3086
cce4c4c5
NC
3087 If the SEC_NEVER_LOAD bit is not set, it will affect the
3088 addresses of sections after it. We have to update
3089 dot. */
252b5132 3090 if (os->region != (lang_memory_region_type *) NULL
cce4c4c5
NC
3091 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
3092 & SEC_NEVER_LOAD) == 0
3093 || (bfd_get_section_flags (output_bfd, os->bfd_section)
3094 & (SEC_ALLOC | SEC_LOAD))))
252b5132
RH
3095 {
3096 os->region->current = dot;
5f992e62 3097
562d3460 3098 /* Make sure the new address is within the region. */
08da4cac
KH
3099 os_region_check (os, os->region, os->addr_tree,
3100 os->bfd_section->vma);
3101
3102 /* If there's no load address specified, use the run
3103 region as the load region. */
3104 if (os->lma_region == NULL && os->load_base == NULL)
3105 os->lma_region = os->region;
3106
ee3cc2e2 3107 if (os->lma_region != NULL && os->lma_region != os->region)
08da4cac 3108 {
ee3cc2e2
RS
3109 /* Set load_base, which will be handled later. */
3110 os->load_base = exp_intop (os->lma_region->current);
3111 os->lma_region->current +=
3112 os->bfd_section->_raw_size / opb;
3113 os_region_check (os, os->lma_region, NULL,
3114 os->bfd_section->lma);
08da4cac 3115 }
252b5132
RH
3116 }
3117 }
3118 break;
3119
3120 case lang_constructors_statement_enum:
2d20f7bf
JJ
3121 dot = lang_size_sections_1 (constructor_list.head,
3122 output_section_statement,
3123 &s->wild_statement.children.head,
3124 fill, dot, relax);
252b5132
RH
3125 break;
3126
3127 case lang_data_statement_enum:
3128 {
3129 unsigned int size = 0;
3130
08da4cac
KH
3131 s->data_statement.output_vma =
3132 dot - output_section_statement->bfd_section->vma;
252b5132
RH
3133 s->data_statement.output_section =
3134 output_section_statement->bfd_section;
3135
3136 switch (s->data_statement.type)
3137 {
08da4cac
KH
3138 default:
3139 abort ();
252b5132
RH
3140 case QUAD:
3141 case SQUAD:
3142 size = QUAD_SIZE;
3143 break;
3144 case LONG:
3145 size = LONG_SIZE;
3146 break;
3147 case SHORT:
3148 size = SHORT_SIZE;
3149 break;
3150 case BYTE:
3151 size = BYTE_SIZE;
3152 break;
3153 }
08da4cac
KH
3154 if (size < opb)
3155 size = opb;
4cbfc3ac 3156 dot += size / opb;
252b5132
RH
3157 output_section_statement->bfd_section->_raw_size += size;
3158 /* The output section gets contents, and then we inspect for
3159 any flags set in the input script which override any ALLOC. */
3160 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
08da4cac
KH
3161 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
3162 {
3163 output_section_statement->bfd_section->flags |=
3164 SEC_ALLOC | SEC_LOAD;
3165 }
252b5132
RH
3166 }
3167 break;
3168
3169 case lang_reloc_statement_enum:
3170 {
3171 int size;
3172
3173 s->reloc_statement.output_vma =
3174 dot - output_section_statement->bfd_section->vma;
3175 s->reloc_statement.output_section =
3176 output_section_statement->bfd_section;
3177 size = bfd_get_reloc_size (s->reloc_statement.howto);
4cbfc3ac 3178 dot += size / opb;
252b5132
RH
3179 output_section_statement->bfd_section->_raw_size += size;
3180 }
3181 break;
5f992e62 3182
252b5132
RH
3183 case lang_wild_statement_enum:
3184
2d20f7bf
JJ
3185 dot = lang_size_sections_1 (s->wild_statement.children.head,
3186 output_section_statement,
3187 &s->wild_statement.children.head,
3188 fill, dot, relax);
252b5132
RH
3189
3190 break;
3191
3192 case lang_object_symbols_statement_enum:
3193 link_info.create_object_symbols_section =
3194 output_section_statement->bfd_section;
3195 break;
3196 case lang_output_statement_enum:
3197 case lang_target_statement_enum:
3198 break;
3199 case lang_input_section_enum:
3200 {
3201 asection *i;
3202
3203 i = (*prev)->input_section.section;
3204 if (! relax)
3205 {
3206 if (i->_cooked_size == 0)
3207 i->_cooked_size = i->_raw_size;
3208 }
3209 else
3210 {
3211 boolean again;
3212
3213 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3214 einfo (_("%P%F: can't relax section: %E\n"));
3215 if (again)
b3327aad 3216 *relax = true;
252b5132 3217 }
b3327aad
AM
3218 dot = size_input_section (prev, output_section_statement,
3219 output_section_statement->fill, dot);
252b5132
RH
3220 }
3221 break;
3222 case lang_input_statement_enum:
3223 break;
3224 case lang_fill_statement_enum:
08da4cac
KH
3225 s->fill_statement.output_section =
3226 output_section_statement->bfd_section;
252b5132
RH
3227
3228 fill = s->fill_statement.fill;
3229 break;
3230 case lang_assignment_statement_enum:
3231 {
3232 bfd_vma newdot = dot;
3233
3234 exp_fold_tree (s->assignment_statement.exp,
3235 output_section_statement,
3236 lang_allocating_phase_enum,
3237 dot,
3238 &newdot);
3239
3240 if (newdot != dot)
3241 {
252b5132
RH
3242 if (output_section_statement == abs_output_section)
3243 {
3244 /* If we don't have an output section, then just adjust
3245 the default memory address. */
3246 lang_memory_region_lookup ("*default*")->current = newdot;
3247 }
b3327aad 3248 else
252b5132 3249 {
b3327aad
AM
3250 /* Insert a pad after this statement. We can't
3251 put the pad before when relaxing, in case the
3252 assignment references dot. */
3253 insert_pad (&s->header.next, fill, (newdot - dot) * opb,
3254 output_section_statement->bfd_section, dot);
3255
3256 /* Don't neuter the pad below when relaxing. */
3257 s = s->header.next;
252b5132
RH
3258 }
3259
3260 dot = newdot;
3261 }
3262 }
3263 break;
3264
3265 case lang_padding_statement_enum:
c0c330a7
AM
3266 /* If this is the first time lang_size_sections is called,
3267 we won't have any padding statements. If this is the
3268 second or later passes when relaxing, we should allow
3269 padding to shrink. If padding is needed on this pass, it
3270 will be added back in. */
3271 s->padding_statement.size = 0;
6e814ff8
AM
3272
3273 /* Make sure output_offset is valid. If relaxation shrinks
3274 the section and this pad isn't needed, it's possible to
3275 have output_offset larger than the final size of the
3276 section. bfd_set_section_contents will complain even for
3277 a pad size of zero. */
3278 s->padding_statement.output_offset
3279 = dot - output_section_statement->bfd_section->vma;
252b5132
RH
3280 break;
3281
3282 case lang_group_statement_enum:
2d20f7bf
JJ
3283 dot = lang_size_sections_1 (s->group_statement.children.head,
3284 output_section_statement,
3285 &s->group_statement.children.head,
3286 fill, dot, relax);
252b5132
RH
3287 break;
3288
3289 default:
3290 FAIL ();
3291 break;
3292
c0c330a7 3293 /* We can only get here when relaxing is turned on. */
252b5132
RH
3294 case lang_address_statement_enum:
3295 break;
3296 }
3297 prev = &s->header.next;
3298 }
3299 return dot;
3300}
3301
2d20f7bf
JJ
3302bfd_vma
3303lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
3304 lang_statement_union_type *s;
3305 lang_output_section_statement_type *output_section_statement;
3306 lang_statement_union_type **prev;
2c382fb6 3307 fill_type *fill;
2d20f7bf
JJ
3308 bfd_vma dot;
3309 boolean *relax;
3310{
3311 bfd_vma result;
3312
3313 exp_data_seg.phase = exp_dataseg_none;
3314 result = lang_size_sections_1 (s, output_section_statement, prev, fill,
3315 dot, relax);
3316 if (exp_data_seg.phase == exp_dataseg_end_seen)
3317 {
3318 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3319 a page could be saved in the data segment. */
3320 bfd_vma first, last;
3321
3322 first = -exp_data_seg.base & (exp_data_seg.pagesize - 1);
3323 last = exp_data_seg.end & (exp_data_seg.pagesize - 1);
3324 if (first && last
3325 && ((exp_data_seg.base & ~(exp_data_seg.pagesize - 1))
3326 != (exp_data_seg.end & ~(exp_data_seg.pagesize - 1)))
3327 && first + last <= exp_data_seg.pagesize)
3328 {
3329 exp_data_seg.phase = exp_dataseg_adjust;
3330 result = lang_size_sections_1 (s, output_section_statement, prev,
3331 fill, dot, relax);
3332 }
3333 }
3334
3335 return result;
3336}
3337
252b5132
RH
3338bfd_vma
3339lang_do_assignments (s, output_section_statement, fill, dot)
08da4cac
KH
3340 lang_statement_union_type *s;
3341 lang_output_section_statement_type *output_section_statement;
2c382fb6 3342 fill_type *fill;
252b5132
RH
3343 bfd_vma dot;
3344{
5f992e62
AM
3345 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3346 ldfile_output_machine);
4cbfc3ac 3347
bba1a0c0 3348 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
252b5132
RH
3349 {
3350 switch (s->header.type)
3351 {
3352 case lang_constructors_statement_enum:
3353 dot = lang_do_assignments (constructor_list.head,
3354 output_section_statement,
3355 fill,
3356 dot);
3357 break;
3358
3359 case lang_output_section_statement_enum:
3360 {
d1778b88 3361 lang_output_section_statement_type *os;
252b5132 3362
d1778b88 3363 os = &(s->output_section_statement);
252b5132
RH
3364 if (os->bfd_section != NULL)
3365 {
3366 dot = os->bfd_section->vma;
3367 (void) lang_do_assignments (os->children.head, os,
3368 os->fill, dot);
4cbfc3ac
TW
3369 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3370
252b5132 3371 }
c13b1b77 3372 if (os->load_base)
252b5132
RH
3373 {
3374 /* If nothing has been placed into the output section then
4de2d33d 3375 it won't have a bfd_section. */
5f992e62 3376 if (os->bfd_section)
252b5132 3377 {
5f992e62 3378 os->bfd_section->lma
08da4cac
KH
3379 = exp_get_abs_int (os->load_base, 0, "load base",
3380 lang_final_phase_enum);
252b5132
RH
3381 }
3382 }
3383 }
3384 break;
3385 case lang_wild_statement_enum:
3386
3387 dot = lang_do_assignments (s->wild_statement.children.head,
3388 output_section_statement,
3389 fill, dot);
3390
3391 break;
3392
3393 case lang_object_symbols_statement_enum:
3394 case lang_output_statement_enum:
3395 case lang_target_statement_enum:
3396#if 0
3397 case lang_common_statement_enum:
3398#endif
3399 break;
3400 case lang_data_statement_enum:
3401 {
3402 etree_value_type value;
3403
3404 value = exp_fold_tree (s->data_statement.exp,
3405 abs_output_section,
3406 lang_final_phase_enum, dot, &dot);
3407 s->data_statement.value = value.value;
7c519c12 3408 if (!value.valid_p)
252b5132
RH
3409 einfo (_("%F%P: invalid data statement\n"));
3410 }
b7a26f91
KH
3411 {
3412 unsigned int size;
08da4cac
KH
3413 switch (s->data_statement.type)
3414 {
3415 default:
3416 abort ();
3417 case QUAD:
3418 case SQUAD:
3419 size = QUAD_SIZE;
3420 break;
3421 case LONG:
3422 size = LONG_SIZE;
3423 break;
3424 case SHORT:
3425 size = SHORT_SIZE;
3426 break;
3427 case BYTE:
3428 size = BYTE_SIZE;
3429 break;
3430 }
3431 if (size < opb)
3432 size = opb;
3433 dot += size / opb;
3434 }
252b5132
RH
3435 break;
3436
3437 case lang_reloc_statement_enum:
3438 {
3439 etree_value_type value;
3440
3441 value = exp_fold_tree (s->reloc_statement.addend_exp,
3442 abs_output_section,
3443 lang_final_phase_enum, dot, &dot);
3444 s->reloc_statement.addend_value = value.value;
7c519c12 3445 if (!value.valid_p)
252b5132
RH
3446 einfo (_("%F%P: invalid reloc statement\n"));
3447 }
4cbfc3ac 3448 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
252b5132
RH
3449 break;
3450
3451 case lang_input_section_enum:
3452 {
3453 asection *in = s->input_section.section;
3454
3455 if (in->_cooked_size != 0)
4cbfc3ac 3456 dot += in->_cooked_size / opb;
252b5132 3457 else
4cbfc3ac 3458 dot += in->_raw_size / opb;
252b5132
RH
3459 }
3460 break;
3461
3462 case lang_input_statement_enum:
3463 break;
3464 case lang_fill_statement_enum:
3465 fill = s->fill_statement.fill;
3466 break;
3467 case lang_assignment_statement_enum:
3468 {
3469 exp_fold_tree (s->assignment_statement.exp,
3470 output_section_statement,
3471 lang_final_phase_enum,
3472 dot,
3473 &dot);
3474 }
3475
3476 break;
3477 case lang_padding_statement_enum:
4cbfc3ac 3478 dot += s->padding_statement.size / opb;
252b5132
RH
3479 break;
3480
3481 case lang_group_statement_enum:
3482 dot = lang_do_assignments (s->group_statement.children.head,
3483 output_section_statement,
3484 fill, dot);
3485
3486 break;
3487
3488 default:
3489 FAIL ();
3490 break;
3491 case lang_address_statement_enum:
3492 break;
3493 }
3494
3495 }
3496 return dot;
3497}
3498
3499/* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3500 operator .startof. (section_name), it produces an undefined symbol
3501 .startof.section_name. Similarly, when it sees
3502 .sizeof. (section_name), it produces an undefined symbol
3503 .sizeof.section_name. For all the output sections, we look for
3504 such symbols, and set them to the correct value. */
3505
3506static void
3507lang_set_startof ()
3508{
3509 asection *s;
3510
3511 if (link_info.relocateable)
3512 return;
3513
3514 for (s = output_bfd->sections; s != NULL; s = s->next)
3515 {
3516 const char *secname;
3517 char *buf;
3518 struct bfd_link_hash_entry *h;
3519
3520 secname = bfd_get_section_name (output_bfd, s);
3521 buf = xmalloc (10 + strlen (secname));
3522
3523 sprintf (buf, ".startof.%s", secname);
3524 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3525 if (h != NULL && h->type == bfd_link_hash_undefined)
3526 {
3527 h->type = bfd_link_hash_defined;
3528 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3529 h->u.def.section = bfd_abs_section_ptr;
3530 }
3531
3532 sprintf (buf, ".sizeof.%s", secname);
3533 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3534 if (h != NULL && h->type == bfd_link_hash_undefined)
3535 {
b7a26f91 3536 unsigned opb;
d1778b88 3537
b7a26f91 3538 opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
d1778b88 3539 ldfile_output_machine);
252b5132
RH
3540 h->type = bfd_link_hash_defined;
3541 if (s->_cooked_size != 0)
4cbfc3ac 3542 h->u.def.value = s->_cooked_size / opb;
252b5132 3543 else
4cbfc3ac 3544 h->u.def.value = s->_raw_size / opb;
252b5132
RH
3545 h->u.def.section = bfd_abs_section_ptr;
3546 }
3547
3548 free (buf);
3549 }
3550}
3551
3552static void
3553lang_finish ()
3554{
3555 struct bfd_link_hash_entry *h;
3556 boolean warn;
3557
3558 if (link_info.relocateable || link_info.shared)
3559 warn = false;
3560 else
3561 warn = true;
3562
e3e942e9 3563 if (entry_symbol.name == (const char *) NULL)
252b5132
RH
3564 {
3565 /* No entry has been specified. Look for start, but don't warn
3566 if we don't find it. */
e3e942e9 3567 entry_symbol.name = "start";
252b5132
RH
3568 warn = false;
3569 }
3570
e3e942e9
AM
3571 h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
3572 false, false, true);
252b5132
RH
3573 if (h != (struct bfd_link_hash_entry *) NULL
3574 && (h->type == bfd_link_hash_defined
3575 || h->type == bfd_link_hash_defweak)
3576 && h->u.def.section->output_section != NULL)
3577 {
3578 bfd_vma val;
3579
3580 val = (h->u.def.value
3581 + bfd_get_section_vma (output_bfd,
3582 h->u.def.section->output_section)
3583 + h->u.def.section->output_offset);
3584 if (! bfd_set_start_address (output_bfd, val))
e3e942e9 3585 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
252b5132
RH
3586 }
3587 else
3588 {
3589 bfd_vma val;
5f992e62 3590 const char *send;
252b5132
RH
3591
3592 /* We couldn't find the entry symbol. Try parsing it as a
3593 number. */
e3e942e9 3594 val = bfd_scan_vma (entry_symbol.name, &send, 0);
252b5132
RH
3595 if (*send == '\0')
3596 {
3597 if (! bfd_set_start_address (output_bfd, val))
3598 einfo (_("%P%F: can't set start address\n"));
3599 }
3600 else
3601 {
3602 asection *ts;
3603
3604 /* Can't find the entry symbol, and it's not a number. Use
3605 the first address in the text section. */
1e281515 3606 ts = bfd_get_section_by_name (output_bfd, entry_section);
252b5132
RH
3607 if (ts != (asection *) NULL)
3608 {
3609 if (warn)
3610 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
e3e942e9
AM
3611 entry_symbol.name,
3612 bfd_get_section_vma (output_bfd, ts));
252b5132
RH
3613 if (! bfd_set_start_address (output_bfd,
3614 bfd_get_section_vma (output_bfd,
3615 ts)))
3616 einfo (_("%P%F: can't set start address\n"));
3617 }
3618 else
3619 {
3620 if (warn)
3621 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
e3e942e9 3622 entry_symbol.name);
252b5132
RH
3623 }
3624 }
3625 }
3626}
3627
3628/* This is a small function used when we want to ignore errors from
3629 BFD. */
3630
3631static void
3632#ifdef ANSI_PROTOTYPES
87f2a346 3633ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
252b5132
RH
3634#else
3635ignore_bfd_errors (s)
87f2a346 3636 const char *s ATTRIBUTE_UNUSED;
252b5132
RH
3637#endif
3638{
3639 /* Don't do anything. */
3640}
3641
3642/* Check that the architecture of all the input files is compatible
3643 with the output file. Also call the backend to let it do any
3644 other checking that is needed. */
3645
3646static void
3647lang_check ()
3648{
3649 lang_statement_union_type *file;
3650 bfd *input_bfd;
5f992e62 3651 const bfd_arch_info_type *compatible;
252b5132
RH
3652
3653 for (file = file_chain.head;
3654 file != (lang_statement_union_type *) NULL;
3655 file = file->input_statement.next)
3656 {
3657 input_bfd = file->input_statement.the_bfd;
30cba025
AM
3658 compatible = bfd_arch_get_compatible (input_bfd, output_bfd);
3659
3660 /* In general it is not possible to perform a relocatable
3661 link between differing object formats when the input
3662 file has relocations, because the relocations in the
3663 input format may not have equivalent representations in
3664 the output format (and besides BFD does not translate
3665 relocs for other link purposes than a final link). */
d35a52e2 3666 if ((link_info.relocateable || link_info.emitrelocations)
30cba025 3667 && (compatible == NULL
d35a52e2 3668 || bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd))
30cba025
AM
3669 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
3670 {
3671 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3672 bfd_get_target (input_bfd), input_bfd,
3673 bfd_get_target (output_bfd), output_bfd);
3674 /* einfo with %F exits. */
3675 }
3676
252b5132
RH
3677 if (compatible == NULL)
3678 {
3679 if (command_line.warn_mismatch)
3680 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3681 bfd_printable_name (input_bfd), input_bfd,
3682 bfd_printable_name (output_bfd));
3683 }
b9247304 3684 else if (bfd_count_sections (input_bfd))
252b5132 3685 {
b9247304 3686 /* If the input bfd has no contents, it shouldn't set the
b7a26f91 3687 private data of the output bfd. */
b9247304 3688
252b5132
RH
3689 bfd_error_handler_type pfn = NULL;
3690
3691 /* If we aren't supposed to warn about mismatched input
3692 files, temporarily set the BFD error handler to a
3693 function which will do nothing. We still want to call
3694 bfd_merge_private_bfd_data, since it may set up
3695 information which is needed in the output file. */
3696 if (! command_line.warn_mismatch)
3697 pfn = bfd_set_error_handler (ignore_bfd_errors);
3698 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3699 {
3700 if (command_line.warn_mismatch)
3701 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3702 input_bfd);
3703 }
3704 if (! command_line.warn_mismatch)
3705 bfd_set_error_handler (pfn);
3706 }
3707 }
3708}
3709
3710/* Look through all the global common symbols and attach them to the
3711 correct section. The -sort-common command line switch may be used
3712 to roughly sort the entries by size. */
3713
3714static void
3715lang_common ()
3716{
4818e05f
AM
3717 if (command_line.inhibit_common_definition)
3718 return;
252b5132
RH
3719 if (link_info.relocateable
3720 && ! command_line.force_common_definition)
3721 return;
3722
3723 if (! config.sort_common)
3724 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3725 else
3726 {
3727 int power;
3728
3729 for (power = 4; power >= 0; power--)
3730 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3731 (PTR) &power);
3732 }
3733}
3734
3735/* Place one common symbol in the correct section. */
3736
3737static boolean
3738lang_one_common (h, info)
3739 struct bfd_link_hash_entry *h;
3740 PTR info;
3741{
3742 unsigned int power_of_two;
3743 bfd_vma size;
3744 asection *section;
5f992e62
AM
3745 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3746 ldfile_output_machine);
252b5132
RH
3747
3748 if (h->type != bfd_link_hash_common)
3749 return true;
3750
3751 size = h->u.c.size;
3752 power_of_two = h->u.c.p->alignment_power;
3753
3754 if (config.sort_common
3755 && power_of_two < (unsigned int) *(int *) info)
3756 return true;
3757
3758 section = h->u.c.p->section;
3759
3760 /* Increase the size of the section. */
c553bb91
AM
3761 section->_cooked_size = align_n ((section->_cooked_size + opb - 1) / opb,
3762 (bfd_vma) 1 << power_of_two) * opb;
252b5132
RH
3763
3764 /* Adjust the alignment if necessary. */
3765 if (power_of_two > section->alignment_power)
3766 section->alignment_power = power_of_two;
3767
3768 /* Change the symbol from common to defined. */
3769 h->type = bfd_link_hash_defined;
3770 h->u.def.section = section;
3771 h->u.def.value = section->_cooked_size;
3772
3773 /* Increase the size of the section. */
3774 section->_cooked_size += size;
3775
3776 /* Make sure the section is allocated in memory, and make sure that
3777 it is no longer a common section. */
3778 section->flags |= SEC_ALLOC;
08da4cac 3779 section->flags &= ~SEC_IS_COMMON;
252b5132
RH
3780
3781 if (config.map_file != NULL)
3782 {
3783 static boolean header_printed;
3784 int len;
3785 char *name;
3786 char buf[50];
3787
3788 if (! header_printed)
3789 {
3790 minfo (_("\nAllocating common symbols\n"));
3791 minfo (_("Common symbol size file\n\n"));
3792 header_printed = true;
3793 }
3794
3795 name = demangle (h->root.string);
3796 minfo ("%s", name);
3797 len = strlen (name);
3798 free (name);
3799
3800 if (len >= 19)
3801 {
3802 print_nl ();
3803 len = 0;
3804 }
3805 while (len < 20)
3806 {
3807 print_space ();
3808 ++len;
3809 }
3810
3811 minfo ("0x");
3812 if (size <= 0xffffffff)
3813 sprintf (buf, "%lx", (unsigned long) size);
3814 else
3815 sprintf_vma (buf, size);
3816 minfo ("%s", buf);
3817 len = strlen (buf);
3818
3819 while (len < 16)
3820 {
3821 print_space ();
3822 ++len;
3823 }
3824
3825 minfo ("%B\n", section->owner);
3826 }
3827
3828 return true;
3829}
3830
08da4cac
KH
3831/* Run through the input files and ensure that every input section has
3832 somewhere to go. If one is found without a destination then create
3833 an input request and place it into the statement tree. */
252b5132
RH
3834
3835static void
3836lang_place_orphans ()
3837{
e50d8076 3838 LANG_FOR_EACH_INPUT_STATEMENT (file)
252b5132
RH
3839 {
3840 asection *s;
3841
3842 for (s = file->the_bfd->sections;
3843 s != (asection *) NULL;
3844 s = s->next)
3845 {
3846 if (s->output_section == (asection *) NULL)
3847 {
3848 /* This section of the file is not attatched, root
08da4cac 3849 around for a sensible place for it to go. */
252b5132
RH
3850
3851 if (file->just_syms_flag)
3852 {
c2c01aa7 3853 abort ();
252b5132
RH
3854 }
3855 else if (strcmp (s->name, "COMMON") == 0)
3856 {
3857 /* This is a lonely common section which must have
3858 come from an archive. We attach to the section
3859 with the wildcard. */
3860 if (! link_info.relocateable
3861 || command_line.force_common_definition)
3862 {
3863 if (default_common_section == NULL)
3864 {
3865#if 0
3866 /* This message happens when using the
3867 svr3.ifile linker script, so I have
3868 disabled it. */
3869 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3870#endif
3871 default_common_section =
3872 lang_output_section_statement_lookup (".bss");
3873
3874 }
39dcfe18
AM
3875 lang_add_section (&default_common_section->children, s,
3876 default_common_section, file);
252b5132
RH
3877 }
3878 }
3879 else if (ldemul_place_orphan (file, s))
3880 ;
3881 else
3882 {
39dcfe18 3883 lang_output_section_statement_type *os;
252b5132 3884
39dcfe18
AM
3885 os = lang_output_section_statement_lookup (s->name);
3886 lang_add_section (&os->children, s, os, file);
252b5132
RH
3887 }
3888 }
3889 }
3890 }
3891}
3892
252b5132 3893void
aa8804e4 3894lang_set_flags (ptr, flags, invert)
252b5132 3895 lang_memory_region_type *ptr;
5f992e62 3896 const char *flags;
aa8804e4 3897 int invert;
252b5132 3898{
aa8804e4 3899 flagword *ptr_flags;
252b5132 3900
aa8804e4 3901 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
252b5132
RH
3902 while (*flags)
3903 {
3904 switch (*flags)
3905 {
252b5132
RH
3906 case 'A': case 'a':
3907 *ptr_flags |= SEC_ALLOC;
3908 break;
3909
3910 case 'R': case 'r':
3911 *ptr_flags |= SEC_READONLY;
3912 break;
3913
3914 case 'W': case 'w':
3915 *ptr_flags |= SEC_DATA;
3916 break;
3917
3918 case 'X': case 'x':
3919 *ptr_flags |= SEC_CODE;
3920 break;
3921
3922 case 'L': case 'l':
3923 case 'I': case 'i':
3924 *ptr_flags |= SEC_LOAD;
3925 break;
3926
3927 default:
3928 einfo (_("%P%F: invalid syntax in flags\n"));
3929 break;
3930 }
3931 flags++;
3932 }
3933}
3934
3935/* Call a function on each input file. This function will be called
3936 on an archive, but not on the elements. */
3937
3938void
3939lang_for_each_input_file (func)
3940 void (*func) PARAMS ((lang_input_statement_type *));
3941{
3942 lang_input_statement_type *f;
3943
3944 for (f = (lang_input_statement_type *) input_file_chain.head;
3945 f != NULL;
3946 f = (lang_input_statement_type *) f->next_real_file)
3947 func (f);
3948}
3949
3950/* Call a function on each file. The function will be called on all
3951 the elements of an archive which are included in the link, but will
3952 not be called on the archive file itself. */
3953
3954void
3955lang_for_each_file (func)
3956 void (*func) PARAMS ((lang_input_statement_type *));
3957{
e50d8076 3958 LANG_FOR_EACH_INPUT_STATEMENT (f)
252b5132
RH
3959 {
3960 func (f);
3961 }
3962}
3963
3964#if 0
3965
3966/* Not used. */
3967
3968void
3969lang_for_each_input_section (func)
08da4cac 3970 void (*func) PARAMS ((bfd *ab, asection *as));
252b5132 3971{
e50d8076 3972 LANG_FOR_EACH_INPUT_STATEMENT (f)
252b5132 3973 {
08da4cac 3974 asection *s;
252b5132
RH
3975
3976 for (s = f->the_bfd->sections;
3977 s != (asection *) NULL;
3978 s = s->next)
3979 {
3980 func (f->the_bfd, s);
3981 }
3982 }
3983}
3984
3985#endif
3986
3987void
3988ldlang_add_file (entry)
08da4cac 3989 lang_input_statement_type *entry;
252b5132
RH
3990{
3991 bfd **pp;
3992
3993 lang_statement_append (&file_chain,
3994 (lang_statement_union_type *) entry,
3995 &entry->next);
3996
3997 /* The BFD linker needs to have a list of all input BFDs involved in
3998 a link. */
3999 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
4000 ASSERT (entry->the_bfd != output_bfd);
4001 for (pp = &link_info.input_bfds;
4002 *pp != (bfd *) NULL;
4003 pp = &(*pp)->link_next)
4004 ;
4005 *pp = entry->the_bfd;
4006 entry->the_bfd->usrdata = (PTR) entry;
4007 bfd_set_gp_size (entry->the_bfd, g_switch_value);
4008
4009 /* Look through the sections and check for any which should not be
4010 included in the link. We need to do this now, so that we can
4011 notice when the backend linker tries to report multiple
4012 definition errors for symbols which are in sections we aren't
4013 going to link. FIXME: It might be better to entirely ignore
4014 symbols which are defined in sections which are going to be
4015 discarded. This would require modifying the backend linker for
4016 each backend which might set the SEC_LINK_ONCE flag. If we do
4017 this, we should probably handle SEC_EXCLUDE in the same way. */
4018
4019 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
4020}
4021
4022void
4023lang_add_output (name, from_script)
5f992e62 4024 const char *name;
252b5132
RH
4025 int from_script;
4026{
4027 /* Make -o on command line override OUTPUT in script. */
7c519c12 4028 if (!had_output_filename || !from_script)
252b5132
RH
4029 {
4030 output_filename = name;
4031 had_output_filename = true;
4032 }
4033}
4034
252b5132
RH
4035static lang_output_section_statement_type *current_section;
4036
4037static int
4038topower (x)
4039 int x;
4040{
4041 unsigned int i = 1;
4042 int l;
4043
4044 if (x < 0)
4045 return -1;
4046
5f992e62 4047 for (l = 0; l < 32; l++)
252b5132
RH
4048 {
4049 if (i >= (unsigned int) x)
4050 return l;
4051 i <<= 1;
4052 }
4053
4054 return 0;
4055}
4056
aea4bd9d 4057lang_output_section_statement_type *
252b5132
RH
4058lang_enter_output_section_statement (output_section_statement_name,
4059 address_exp, sectype, block_value,
4060 align, subalign, ebase)
4061 const char *output_section_statement_name;
08da4cac 4062 etree_type *address_exp;
252b5132
RH
4063 enum section_type sectype;
4064 bfd_vma block_value;
4065 etree_type *align;
4066 etree_type *subalign;
4067 etree_type *ebase;
4068{
4069 lang_output_section_statement_type *os;
4070
4071 current_section =
4072 os =
4073 lang_output_section_statement_lookup (output_section_statement_name);
4074
08da4cac
KH
4075 /* Add this statement to tree. */
4076#if 0
4077 add_statement (lang_output_section_statement_enum,
4078 output_section_statement);
4079#endif
4080 /* Make next things chain into subchain of this. */
252b5132 4081
08da4cac
KH
4082 if (os->addr_tree == (etree_type *) NULL)
4083 {
4084 os->addr_tree = address_exp;
4085 }
252b5132
RH
4086 os->sectype = sectype;
4087 if (sectype != noload_section)
4088 os->flags = SEC_NO_FLAGS;
4089 else
4090 os->flags = SEC_NEVER_LOAD;
4091 os->block_value = block_value ? block_value : 1;
4092 stat_ptr = &os->children;
4093
08da4cac
KH
4094 os->subsection_alignment =
4095 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
4096 os->section_alignment =
4097 topower (exp_get_value_int (align, -1, "section alignment", 0));
252b5132
RH
4098
4099 os->load_base = ebase;
aea4bd9d 4100 return os;
252b5132
RH
4101}
4102
252b5132
RH
4103void
4104lang_final ()
4105{
4106 lang_output_statement_type *new =
4107 new_stat (lang_output_statement, stat_ptr);
4108
4109 new->name = output_filename;
4110}
4111
08da4cac
KH
4112/* Reset the current counters in the regions. */
4113
e3dc8847
HPN
4114void
4115lang_reset_memory_regions ()
252b5132
RH
4116{
4117 lang_memory_region_type *p = lang_memory_region_list;
b3327aad 4118 asection *o;
252b5132
RH
4119
4120 for (p = lang_memory_region_list;
4121 p != (lang_memory_region_type *) NULL;
4122 p = p->next)
4123 {
4124 p->old_length = (bfd_size_type) (p->current - p->origin);
4125 p->current = p->origin;
4126 }
b3327aad
AM
4127
4128 for (o = output_bfd->sections; o != NULL; o = o->next)
4129 o->_raw_size = 0;
252b5132
RH
4130}
4131
b6bf44ba
AM
4132/* If the wild pattern was marked KEEP, the member sections
4133 should be as well. */
252b5132
RH
4134
4135static void
b6bf44ba 4136gc_section_callback (ptr, sec, section, file, data)
252b5132 4137 lang_wild_statement_type *ptr;
b6bf44ba 4138 struct wildcard_list *sec ATTRIBUTE_UNUSED;
4dec4d4e 4139 asection *section;
87f2a346 4140 lang_input_statement_type *file ATTRIBUTE_UNUSED;
5f992e62 4141 PTR data ATTRIBUTE_UNUSED;
252b5132 4142{
4dec4d4e
RH
4143 if (ptr->keep_sections)
4144 section->flags |= SEC_KEEP;
252b5132
RH
4145}
4146
b6bf44ba 4147/* Handle a wild statement, marking it against GC. */
252b5132
RH
4148
4149static void
b6bf44ba 4150lang_gc_wild (s)
252b5132 4151 lang_wild_statement_type *s;
252b5132 4152{
b6bf44ba 4153 walk_wild (s, gc_section_callback, NULL);
252b5132
RH
4154}
4155
4156/* Iterate over sections marking them against GC. */
4157
4158static void
4159lang_gc_sections_1 (s)
08da4cac 4160 lang_statement_union_type *s;
252b5132 4161{
bba1a0c0 4162 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
252b5132
RH
4163 {
4164 switch (s->header.type)
4165 {
4166 case lang_wild_statement_enum:
b6bf44ba 4167 lang_gc_wild (&s->wild_statement);
abc6ab0a 4168 break;
252b5132
RH
4169 case lang_constructors_statement_enum:
4170 lang_gc_sections_1 (constructor_list.head);
4171 break;
4172 case lang_output_section_statement_enum:
4173 lang_gc_sections_1 (s->output_section_statement.children.head);
4174 break;
4175 case lang_group_statement_enum:
4176 lang_gc_sections_1 (s->group_statement.children.head);
4177 break;
4178 default:
4179 break;
4180 }
4181 }
4182}
4183
4184static void
4185lang_gc_sections ()
4186{
4187 struct bfd_link_hash_entry *h;
e3e942e9 4188 ldlang_undef_chain_list_type *ulist;
252b5132
RH
4189
4190 /* Keep all sections so marked in the link script. */
4191
4192 lang_gc_sections_1 (statement_list.head);
4193
e3e942e9
AM
4194 /* Keep all sections containing symbols undefined on the command-line,
4195 and the section containing the entry symbol. */
252b5132 4196
e3e942e9 4197 for (ulist = link_info.gc_sym_list; ulist; ulist = ulist->next)
252b5132 4198 {
5f992e62 4199 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
252b5132
RH
4200 false, false, false);
4201
4202 if (h != (struct bfd_link_hash_entry *) NULL
08da4cac
KH
4203 && (h->type == bfd_link_hash_defined
4204 || h->type == bfd_link_hash_defweak)
252b5132
RH
4205 && ! bfd_is_abs_section (h->u.def.section))
4206 {
4207 h->u.def.section->flags |= SEC_KEEP;
4208 }
4209 }
4210
4211 bfd_gc_sections (output_bfd, &link_info);
4212}
4213
4214void
4215lang_process ()
4216{
4217 lang_reasonable_defaults ();
4218 current_target = default_target;
4219
08da4cac
KH
4220 /* Open the output file. */
4221 lang_for_each_statement (ldlang_open_output);
252b5132
RH
4222
4223 ldemul_create_output_section_statements ();
4224
08da4cac 4225 /* Add to the hash table all undefineds on the command line. */
252b5132
RH
4226 lang_place_undefineds ();
4227
9503fd87
ILT
4228 already_linked_table_init ();
4229
08da4cac 4230 /* Create a bfd for each input file. */
252b5132
RH
4231 current_target = default_target;
4232 open_input_bfds (statement_list.head, false);
4233
e3e942e9
AM
4234 link_info.gc_sym_list = &entry_symbol;
4235 if (entry_symbol.name == NULL)
4236 link_info.gc_sym_list = ldlang_undef_chain_list_head;
4237
252b5132
RH
4238 ldemul_after_open ();
4239
9503fd87
ILT
4240 already_linked_table_free ();
4241
252b5132
RH
4242 /* Make sure that we're not mixing architectures. We call this
4243 after all the input files have been opened, but before we do any
4244 other processing, so that any operations merge_private_bfd_data
4245 does on the output file will be known during the rest of the
4246 link. */
4247 lang_check ();
4248
4249 /* Handle .exports instead of a version script if we're told to do so. */
4250 if (command_line.version_exports_section)
4251 lang_do_version_exports_section ();
4252
4253 /* Build all sets based on the information gathered from the input
4254 files. */
4255 ldctor_build_sets ();
4256
4257 /* Remove unreferenced sections if asked to. */
4258 if (command_line.gc_sections)
4259 lang_gc_sections ();
4260
8550eb6e
JJ
4261 /* If there were any SEC_MERGE sections, finish their merging, so that
4262 section sizes can be computed. This has to be done after GC of sections,
4263 so that GCed sections are not merged, but before assigning output
4264 sections, since removing whole input sections is hard then. */
4265 bfd_merge_sections (output_bfd, &link_info);
4266
08da4cac 4267 /* Size up the common data. */
252b5132
RH
4268 lang_common ();
4269
4270 /* Run through the contours of the script and attach input sections
08da4cac 4271 to the correct output sections. */
252b5132
RH
4272 map_input_to_output_sections (statement_list.head, (char *) NULL,
4273 (lang_output_section_statement_type *) NULL);
4274
08da4cac 4275 /* Find any sections not attached explicitly and handle them. */
252b5132
RH
4276 lang_place_orphans ();
4277
862120bd
AM
4278 if (! link_info.relocateable)
4279 {
4280 /* Look for a text section and set the readonly attribute in it. */
4281 asection *found = bfd_get_section_by_name (output_bfd, ".text");
4282
4283 if (found != (asection *) NULL)
4284 {
4285 if (config.text_read_only)
4286 found->flags |= SEC_READONLY;
4287 else
4288 found->flags &= ~SEC_READONLY;
4289 }
4290 }
4291
4292 /* Do anything special before sizing sections. This is where ELF
4293 and other back-ends size dynamic sections. */
252b5132
RH
4294 ldemul_before_allocation ();
4295
4bd5a393
AM
4296 if (!link_info.relocateable)
4297 strip_excluded_output_sections ();
4298
252b5132
RH
4299 /* We must record the program headers before we try to fix the
4300 section positions, since they will affect SIZEOF_HEADERS. */
4301 lang_record_phdrs ();
4302
b3327aad
AM
4303 /* Size up the sections. */
4304 lang_size_sections (statement_list.head,
4305 abs_output_section,
4306 &statement_list.head, 0, (bfd_vma) 0, NULL);
4307
08da4cac 4308 /* Now run around and relax if we can. */
252b5132
RH
4309 if (command_line.relax)
4310 {
252b5132 4311 /* Keep relaxing until bfd_relax_section gives up. */
b3327aad
AM
4312 boolean relax_again;
4313
252b5132
RH
4314 do
4315 {
e3dc8847 4316 lang_reset_memory_regions ();
252b5132
RH
4317
4318 relax_again = false;
4319
4320 /* Note: pe-dll.c does something like this also. If you find
4321 you need to change this code, you probably need to change
08da4cac 4322 pe-dll.c also. DJ */
252b5132
RH
4323
4324 /* Do all the assignments with our current guesses as to
4325 section sizes. */
4326 lang_do_assignments (statement_list.head,
4327 abs_output_section,
2c382fb6 4328 (fill_type *) 0, (bfd_vma) 0);
252b5132
RH
4329
4330 /* Perform another relax pass - this time we know where the
0d6d936f 4331 globals are, so can make a better guess. */
252b5132
RH
4332 lang_size_sections (statement_list.head,
4333 abs_output_section,
0d6d936f 4334 &statement_list.head, 0, (bfd_vma) 0,
b3327aad 4335 &relax_again);
252b5132
RH
4336 }
4337 while (relax_again);
4338 }
252b5132
RH
4339
4340 /* See if anything special should be done now we know how big
4341 everything is. */
4342 ldemul_after_allocation ();
4343
4344 /* Fix any .startof. or .sizeof. symbols. */
4345 lang_set_startof ();
4346
08da4cac
KH
4347 /* Do all the assignments, now that we know the final resting places
4348 of all the symbols. */
252b5132
RH
4349
4350 lang_do_assignments (statement_list.head,
4351 abs_output_section,
2c382fb6 4352 (fill_type *) 0, (bfd_vma) 0);
252b5132
RH
4353
4354 /* Make sure that the section addresses make sense. */
4355 if (! link_info.relocateable
4356 && command_line.check_section_addresses)
4357 lang_check_section_addresses ();
5f992e62 4358
08da4cac 4359 /* Final stuffs. */
252b5132
RH
4360
4361 ldemul_finish ();
4362 lang_finish ();
4363}
4364
4365/* EXPORTED TO YACC */
4366
4367void
b6bf44ba
AM
4368lang_add_wild (filespec, section_list, keep_sections)
4369 struct wildcard_spec *filespec;
4370 struct wildcard_list *section_list;
252b5132 4371 boolean keep_sections;
252b5132 4372{
b6bf44ba
AM
4373 struct wildcard_list *curr, *next;
4374 lang_wild_statement_type *new;
4375
4376 /* Reverse the list as the parser puts it back to front. */
4377 for (curr = section_list, section_list = NULL;
4378 curr != NULL;
4379 section_list = curr, curr = next)
4380 {
4381 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
4382 placed_commons = true;
252b5132 4383
b6bf44ba
AM
4384 next = curr->next;
4385 curr->next = section_list;
4386 }
4387
4388 if (filespec != NULL && filespec->name != NULL)
252b5132 4389 {
b6bf44ba
AM
4390 if (strcmp (filespec->name, "*") == 0)
4391 filespec->name = NULL;
4392 else if (! wildcardp (filespec->name))
4393 lang_has_input_file = true;
252b5132 4394 }
b6bf44ba
AM
4395
4396 new = new_stat (lang_wild_statement, stat_ptr);
4397 new->filename = NULL;
4398 new->filenames_sorted = false;
4399 if (filespec != NULL)
252b5132 4400 {
b6bf44ba
AM
4401 new->filename = filespec->name;
4402 new->filenames_sorted = filespec->sorted;
252b5132 4403 }
b6bf44ba 4404 new->section_list = section_list;
252b5132 4405 new->keep_sections = keep_sections;
252b5132
RH
4406 lang_list_init (&new->children);
4407}
4408
4409void
4410lang_section_start (name, address)
5f992e62 4411 const char *name;
08da4cac 4412 etree_type *address;
252b5132 4413{
d1778b88 4414 lang_address_statement_type *ad;
252b5132 4415
d1778b88 4416 ad = new_stat (lang_address_statement, stat_ptr);
252b5132
RH
4417 ad->section_name = name;
4418 ad->address = address;
4419}
4420
4421/* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4422 because of a -e argument on the command line, or zero if this is
4423 called by ENTRY in a linker script. Command line arguments take
4424 precedence. */
4425
4426void
4427lang_add_entry (name, cmdline)
5f992e62 4428 const char *name;
252b5132
RH
4429 boolean cmdline;
4430{
e3e942e9 4431 if (entry_symbol.name == NULL
252b5132
RH
4432 || cmdline
4433 || ! entry_from_cmdline)
4434 {
e3e942e9 4435 entry_symbol.name = name;
252b5132
RH
4436 entry_from_cmdline = cmdline;
4437 }
4438}
4439
4440void
4441lang_add_target (name)
5f992e62 4442 const char *name;
252b5132
RH
4443{
4444 lang_target_statement_type *new = new_stat (lang_target_statement,
4445 stat_ptr);
4446
4447 new->target = name;
4448
4449}
4450
4451void
4452lang_add_map (name)
5f992e62 4453 const char *name;
252b5132
RH
4454{
4455 while (*name)
4456 {
4457 switch (*name)
4458 {
08da4cac 4459 case 'F':
252b5132
RH
4460 map_option_f = true;
4461 break;
4462 }
4463 name++;
4464 }
4465}
4466
4467void
2c382fb6
AM
4468lang_add_fill (fill)
4469 fill_type *fill;
252b5132
RH
4470{
4471 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4472 stat_ptr);
4473
2c382fb6 4474 new->fill = fill;
252b5132
RH
4475}
4476
4477void
4478lang_add_data (type, exp)
4479 int type;
4480 union etree_union *exp;
4481{
4482
4483 lang_data_statement_type *new = new_stat (lang_data_statement,
4484 stat_ptr);
4485
4486 new->exp = exp;
4487 new->type = type;
4488
4489}
4490
4491/* Create a new reloc statement. RELOC is the BFD relocation type to
4492 generate. HOWTO is the corresponding howto structure (we could
4493 look this up, but the caller has already done so). SECTION is the
4494 section to generate a reloc against, or NAME is the name of the
4495 symbol to generate a reloc against. Exactly one of SECTION and
4496 NAME must be NULL. ADDEND is an expression for the addend. */
4497
4498void
4499lang_add_reloc (reloc, howto, section, name, addend)
4500 bfd_reloc_code_real_type reloc;
4501 reloc_howto_type *howto;
4502 asection *section;
4503 const char *name;
4504 union etree_union *addend;
4505{
4506 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
5f992e62 4507
252b5132
RH
4508 p->reloc = reloc;
4509 p->howto = howto;
4510 p->section = section;
4511 p->name = name;
4512 p->addend_exp = addend;
4513
4514 p->addend_value = 0;
4515 p->output_section = NULL;
4516 p->output_vma = 0;
4517}
4518
4519lang_assignment_statement_type *
4520lang_add_assignment (exp)
08da4cac 4521 etree_type *exp;
252b5132
RH
4522{
4523 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4524 stat_ptr);
4525
4526 new->exp = exp;
4527 return new;
4528}
4529
4530void
4531lang_add_attribute (attribute)
4532 enum statement_enum attribute;
4533{
4534 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4535}
4536
4537void
4538lang_startup (name)
5f992e62 4539 const char *name;
252b5132
RH
4540{
4541 if (startup_file != (char *) NULL)
4542 {
4543 einfo (_("%P%Fmultiple STARTUP files\n"));
4544 }
4545 first_file->filename = name;
4546 first_file->local_sym_name = name;
4547 first_file->real = true;
4548
4549 startup_file = name;
4550}
4551
4552void
4553lang_float (maybe)
4554 boolean maybe;
4555{
4556 lang_float_flag = maybe;
4557}
4558
ee3cc2e2
RS
4559
4560/* Work out the load- and run-time regions from a script statement, and
4561 store them in *LMA_REGION and *REGION respectively.
4562
4563 MEMSPEC is the name of the run-time region, or "*default*" if the
4564 statement didn't specify one. LMA_MEMSPEC is the name of the
4565 load-time region, or null if the statement didn't specify one.
4566 HAVE_LMA_P is true if the statement had an explicit load address.
4567
4568 It is an error to specify both a load region and a load address. */
4569
4570static void
4571lang_get_regions (region, lma_region, memspec, lma_memspec, have_lma_p)
4572 struct memory_region_struct **region, **lma_region;
4573 const char *memspec, *lma_memspec;
4574 int have_lma_p;
4575{
4576 *lma_region = lang_memory_region_lookup (lma_memspec);
4577
4578 /* If no runtime region has been given, but the load region has
4579 been, use the load region. */
4580 if (lma_memspec != 0 && strcmp (memspec, "*default*") == 0)
4581 *region = *lma_region;
4582 else
4583 *region = lang_memory_region_lookup (memspec);
4584
4585 if (have_lma_p && lma_memspec != 0)
4586 einfo (_("%X%P:%S: section has both a load address and a load region\n"));
4587}
4588
252b5132 4589void
562d3460 4590lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
2c382fb6 4591 fill_type *fill;
252b5132
RH
4592 const char *memspec;
4593 struct lang_output_section_phdr_list *phdrs;
562d3460 4594 const char *lma_memspec;
252b5132 4595{
ee3cc2e2
RS
4596 lang_get_regions (&current_section->region,
4597 &current_section->lma_region,
4598 memspec, lma_memspec,
4599 current_section->load_base != 0);
252b5132 4600 current_section->fill = fill;
252b5132
RH
4601 current_section->phdrs = phdrs;
4602 stat_ptr = &statement_list;
4603}
4604
08da4cac
KH
4605/* Create an absolute symbol with the given name with the value of the
4606 address of first byte of the section named.
4607
4608 If the symbol already exists, then do nothing. */
252b5132 4609
252b5132
RH
4610void
4611lang_abs_symbol_at_beginning_of (secname, name)
4612 const char *secname;
4613 const char *name;
4614{
4615 struct bfd_link_hash_entry *h;
4616
4617 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4618 if (h == (struct bfd_link_hash_entry *) NULL)
4619 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4620
4621 if (h->type == bfd_link_hash_new
4622 || h->type == bfd_link_hash_undefined)
4623 {
4624 asection *sec;
4625
4626 h->type = bfd_link_hash_defined;
4627
4628 sec = bfd_get_section_by_name (output_bfd, secname);
4629 if (sec == (asection *) NULL)
4630 h->u.def.value = 0;
4631 else
4632 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4633
4634 h->u.def.section = bfd_abs_section_ptr;
4635 }
4636}
4637
08da4cac
KH
4638/* Create an absolute symbol with the given name with the value of the
4639 address of the first byte after the end of the section named.
4640
4641 If the symbol already exists, then do nothing. */
252b5132 4642
252b5132
RH
4643void
4644lang_abs_symbol_at_end_of (secname, name)
4645 const char *secname;
4646 const char *name;
4647{
4648 struct bfd_link_hash_entry *h;
4649
4650 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4651 if (h == (struct bfd_link_hash_entry *) NULL)
4652 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4653
4654 if (h->type == bfd_link_hash_new
4655 || h->type == bfd_link_hash_undefined)
4656 {
4657 asection *sec;
4658
4659 h->type = bfd_link_hash_defined;
4660
4661 sec = bfd_get_section_by_name (output_bfd, secname);
4662 if (sec == (asection *) NULL)
4663 h->u.def.value = 0;
4664 else
4665 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4cbfc3ac
TW
4666 + bfd_section_size (output_bfd, sec) /
4667 bfd_octets_per_byte (output_bfd));
252b5132
RH
4668
4669 h->u.def.section = bfd_abs_section_ptr;
4670 }
4671}
4672
4673void
4674lang_statement_append (list, element, field)
08da4cac
KH
4675 lang_statement_list_type *list;
4676 lang_statement_union_type *element;
4677 lang_statement_union_type **field;
252b5132
RH
4678{
4679 *(list->tail) = element;
4680 list->tail = field;
4681}
4682
4683/* Set the output format type. -oformat overrides scripts. */
4684
4685void
4686lang_add_output_format (format, big, little, from_script)
4687 const char *format;
4688 const char *big;
4689 const char *little;
4690 int from_script;
4691{
4692 if (output_target == NULL || !from_script)
4693 {
4694 if (command_line.endian == ENDIAN_BIG
4695 && big != NULL)
4696 format = big;
4697 else if (command_line.endian == ENDIAN_LITTLE
4698 && little != NULL)
4699 format = little;
4700
4701 output_target = format;
4702 }
4703}
4704
4705/* Enter a group. This creates a new lang_group_statement, and sets
4706 stat_ptr to build new statements within the group. */
4707
4708void
4709lang_enter_group ()
4710{
4711 lang_group_statement_type *g;
4712
4713 g = new_stat (lang_group_statement, stat_ptr);
4714 lang_list_init (&g->children);
4715 stat_ptr = &g->children;
4716}
4717
4718/* Leave a group. This just resets stat_ptr to start writing to the
4719 regular list of statements again. Note that this will not work if
4720 groups can occur inside anything else which can adjust stat_ptr,
4721 but currently they can't. */
4722
4723void
4724lang_leave_group ()
4725{
4726 stat_ptr = &statement_list;
4727}
4728
4729/* Add a new program header. This is called for each entry in a PHDRS
4730 command in a linker script. */
4731
4732void
4733lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4734 const char *name;
4735 etree_type *type;
4736 boolean filehdr;
4737 boolean phdrs;
4738 etree_type *at;
4739 etree_type *flags;
4740{
4741 struct lang_phdr *n, **pp;
4742
4743 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4744 n->next = NULL;
4745 n->name = name;
4746 n->type = exp_get_value_int (type, 0, "program header type",
4747 lang_final_phase_enum);
4748 n->filehdr = filehdr;
4749 n->phdrs = phdrs;
4750 n->at = at;
4751 n->flags = flags;
4752
4753 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4754 ;
4755 *pp = n;
4756}
4757
4758/* Record the program header information in the output BFD. FIXME: We
4759 should not be calling an ELF specific function here. */
4760
4761static void
4762lang_record_phdrs ()
4763{
4764 unsigned int alc;
4765 asection **secs;
4766 struct lang_output_section_phdr_list *last;
4767 struct lang_phdr *l;
4768 lang_statement_union_type *u;
4769
4770 alc = 10;
4771 secs = (asection **) xmalloc (alc * sizeof (asection *));
4772 last = NULL;
4773 for (l = lang_phdr_list; l != NULL; l = l->next)
4774 {
4775 unsigned int c;
4776 flagword flags;
4777 bfd_vma at;
4778
4779 c = 0;
4780 for (u = lang_output_section_statement.head;
4781 u != NULL;
4782 u = u->output_section_statement.next)
4783 {
4784 lang_output_section_statement_type *os;
4785 struct lang_output_section_phdr_list *pl;
4786
4787 os = &u->output_section_statement;
4788
4789 pl = os->phdrs;
4790 if (pl != NULL)
4791 last = pl;
4792 else
4793 {
4794 if (os->sectype == noload_section
4795 || os->bfd_section == NULL
4796 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4797 continue;
4798 pl = last;
4799 }
4800
4801 if (os->bfd_section == NULL)
4802 continue;
4803
4804 for (; pl != NULL; pl = pl->next)
4805 {
4806 if (strcmp (pl->name, l->name) == 0)
4807 {
4808 if (c >= alc)
4809 {
4810 alc *= 2;
4811 secs = ((asection **)
4812 xrealloc (secs, alc * sizeof (asection *)));
4813 }
4814 secs[c] = os->bfd_section;
4815 ++c;
4816 pl->used = true;
4817 }
4818 }
4819 }
4820
4821 if (l->flags == NULL)
4822 flags = 0;
4823 else
4824 flags = exp_get_vma (l->flags, 0, "phdr flags",
4825 lang_final_phase_enum);
4826
4827 if (l->at == NULL)
4828 at = 0;
4829 else
4830 at = exp_get_vma (l->at, 0, "phdr load address",
4831 lang_final_phase_enum);
4832
4833 if (! bfd_record_phdr (output_bfd, l->type,
d1778b88 4834 l->flags != NULL, flags, l->at != NULL,
252b5132
RH
4835 at, l->filehdr, l->phdrs, c, secs))
4836 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4837 }
4838
4839 free (secs);
4840
4841 /* Make sure all the phdr assignments succeeded. */
4842 for (u = lang_output_section_statement.head;
4843 u != NULL;
4844 u = u->output_section_statement.next)
4845 {
4846 struct lang_output_section_phdr_list *pl;
4847
4848 if (u->output_section_statement.bfd_section == NULL)
4849 continue;
4850
4851 for (pl = u->output_section_statement.phdrs;
4852 pl != NULL;
4853 pl = pl->next)
4854 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4855 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4856 u->output_section_statement.name, pl->name);
4857 }
4858}
4859
4860/* Record a list of sections which may not be cross referenced. */
4861
4862void
4863lang_add_nocrossref (l)
4864 struct lang_nocrossref *l;
4865{
4866 struct lang_nocrossrefs *n;
4867
4868 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4869 n->next = nocrossref_list;
4870 n->list = l;
4871 nocrossref_list = n;
4872
4873 /* Set notice_all so that we get informed about all symbols. */
4874 link_info.notice_all = true;
4875}
4876\f
4877/* Overlay handling. We handle overlays with some static variables. */
4878
4879/* The overlay virtual address. */
4880static etree_type *overlay_vma;
4881
252b5132
RH
4882/* An expression for the maximum section size seen so far. */
4883static etree_type *overlay_max;
4884
4885/* A list of all the sections in this overlay. */
4886
89cdebba 4887struct overlay_list {
252b5132
RH
4888 struct overlay_list *next;
4889 lang_output_section_statement_type *os;
4890};
4891
4892static struct overlay_list *overlay_list;
4893
4894/* Start handling an overlay. */
4895
4896void
9f88b410 4897lang_enter_overlay (vma_expr)
252b5132 4898 etree_type *vma_expr;
252b5132
RH
4899{
4900 /* The grammar should prevent nested overlays from occurring. */
9f88b410 4901 ASSERT (overlay_vma == NULL && overlay_max == NULL);
252b5132
RH
4902
4903 overlay_vma = vma_expr;
252b5132
RH
4904}
4905
4906/* Start a section in an overlay. We handle this by calling
9f88b410
RS
4907 lang_enter_output_section_statement with the correct VMA.
4908 lang_leave_overlay sets up the LMA and memory regions. */
252b5132
RH
4909
4910void
4911lang_enter_overlay_section (name)
4912 const char *name;
4913{
4914 struct overlay_list *n;
4915 etree_type *size;
4916
4917 lang_enter_output_section_statement (name, overlay_vma, normal_section,
9f88b410 4918 0, 0, 0, 0);
252b5132 4919
9f88b410 4920 /* If this is the first section, then base the VMA of future
252b5132
RH
4921 sections on this one. This will work correctly even if `.' is
4922 used in the addresses. */
4923 if (overlay_list == NULL)
9f88b410 4924 overlay_vma = exp_nameop (ADDR, name);
252b5132
RH
4925
4926 /* Remember the section. */
4927 n = (struct overlay_list *) xmalloc (sizeof *n);
4928 n->os = current_section;
4929 n->next = overlay_list;
4930 overlay_list = n;
4931
4932 size = exp_nameop (SIZEOF, name);
4933
252b5132
RH
4934 /* Arrange to work out the maximum section end address. */
4935 if (overlay_max == NULL)
4936 overlay_max = size;
4937 else
4938 overlay_max = exp_binop (MAX_K, overlay_max, size);
4939}
4940
4941/* Finish a section in an overlay. There isn't any special to do
4942 here. */
4943
4944void
4945lang_leave_overlay_section (fill, phdrs)
2c382fb6 4946 fill_type *fill;
252b5132
RH
4947 struct lang_output_section_phdr_list *phdrs;
4948{
4949 const char *name;
4950 char *clean, *s2;
4951 const char *s1;
4952 char *buf;
4953
4954 name = current_section->name;
4955
9f88b410
RS
4956 /* For now, assume that "*default*" is the run-time memory region and
4957 that no load-time region has been specified. It doesn't really
4958 matter what we say here, since lang_leave_overlay will override it. */
4959 lang_leave_output_section_statement (fill, "*default*", phdrs, 0);
252b5132
RH
4960
4961 /* Define the magic symbols. */
4962
4963 clean = xmalloc (strlen (name) + 1);
4964 s2 = clean;
4965 for (s1 = name; *s1 != '\0'; s1++)
3882b010 4966 if (ISALNUM (*s1) || *s1 == '_')
252b5132
RH
4967 *s2++ = *s1;
4968 *s2 = '\0';
4969
4970 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4971 sprintf (buf, "__load_start_%s", clean);
4972 lang_add_assignment (exp_assop ('=', buf,
4973 exp_nameop (LOADADDR, name)));
4974
4975 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4976 sprintf (buf, "__load_stop_%s", clean);
4977 lang_add_assignment (exp_assop ('=', buf,
4978 exp_binop ('+',
4979 exp_nameop (LOADADDR, name),
4980 exp_nameop (SIZEOF, name))));
4981
4982 free (clean);
4983}
4984
4985/* Finish an overlay. If there are any overlay wide settings, this
4986 looks through all the sections in the overlay and sets them. */
4987
4988void
9f88b410
RS
4989lang_leave_overlay (lma_expr, nocrossrefs, fill, memspec, phdrs, lma_memspec)
4990 etree_type *lma_expr;
4991 int nocrossrefs;
2c382fb6 4992 fill_type *fill;
252b5132
RH
4993 const char *memspec;
4994 struct lang_output_section_phdr_list *phdrs;
562d3460 4995 const char *lma_memspec;
252b5132
RH
4996{
4997 lang_memory_region_type *region;
562d3460 4998 lang_memory_region_type *lma_region;
252b5132
RH
4999 struct overlay_list *l;
5000 struct lang_nocrossref *nocrossref;
5001
ee3cc2e2
RS
5002 lang_get_regions (&region, &lma_region,
5003 memspec, lma_memspec,
5004 lma_expr != 0);
562d3460 5005
252b5132
RH
5006 nocrossref = NULL;
5007
9f88b410
RS
5008 /* After setting the size of the last section, set '.' to end of the
5009 overlay region. */
5010 if (overlay_list != NULL)
5011 overlay_list->os->update_dot_tree
5012 = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
5013
252b5132
RH
5014 l = overlay_list;
5015 while (l != NULL)
5016 {
5017 struct overlay_list *next;
5018
2c382fb6 5019 if (fill != (fill_type *) 0 && l->os->fill == (fill_type *) 0)
252b5132 5020 l->os->fill = fill;
1545243b 5021
9f88b410
RS
5022 l->os->region = region;
5023 l->os->lma_region = lma_region;
5024
5025 /* The first section has the load address specified in the
5026 OVERLAY statement. The rest are worked out from that.
5027 The base address is not needed (and should be null) if
5028 an LMA region was specified. */
5029 if (l->next == 0)
5030 l->os->load_base = lma_expr;
5031 else if (lma_region == 0)
5032 l->os->load_base = exp_binop ('+',
5033 exp_nameop (LOADADDR, l->next->os->name),
5034 exp_nameop (SIZEOF, l->next->os->name));
1545243b 5035
252b5132
RH
5036 if (phdrs != NULL && l->os->phdrs == NULL)
5037 l->os->phdrs = phdrs;
5038
9f88b410 5039 if (nocrossrefs)
252b5132
RH
5040 {
5041 struct lang_nocrossref *nc;
5042
5043 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
5044 nc->name = l->os->name;
5045 nc->next = nocrossref;
5046 nocrossref = nc;
5047 }
5048
5049 next = l->next;
5050 free (l);
5051 l = next;
5052 }
5053
5054 if (nocrossref != NULL)
5055 lang_add_nocrossref (nocrossref);
5056
252b5132 5057 overlay_vma = NULL;
252b5132
RH
5058 overlay_list = NULL;
5059 overlay_max = NULL;
5060}
5061\f
5062/* Version handling. This is only useful for ELF. */
5063
5064/* This global variable holds the version tree that we build. */
5065
5066struct bfd_elf_version_tree *lang_elf_version_info;
5067
5068static int
5069lang_vers_match_lang_c (expr, sym)
5070 struct bfd_elf_version_expr *expr;
5071 const char *sym;
5072{
5073 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5074 return 1;
5075 return fnmatch (expr->pattern, sym, 0) == 0;
5076}
5077
5078static int
5079lang_vers_match_lang_cplusplus (expr, sym)
5080 struct bfd_elf_version_expr *expr;
5081 const char *sym;
5082{
5083 char *alt_sym;
5084 int result;
5085
5086 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5087 return 1;
5088
08da4cac 5089 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
252b5132
RH
5090 if (!alt_sym)
5091 {
5092 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
5093 Should we early out false in this case? */
5094 result = fnmatch (expr->pattern, sym, 0) == 0;
5095 }
5096 else
5097 {
5098 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5099 free (alt_sym);
5100 }
5101
5102 return result;
5103}
5104
5105static int
5106lang_vers_match_lang_java (expr, sym)
5107 struct bfd_elf_version_expr *expr;
5108 const char *sym;
5109{
5110 char *alt_sym;
5111 int result;
5112
5113 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5114 return 1;
5115
08da4cac 5116 alt_sym = cplus_demangle (sym, DMGL_JAVA);
252b5132
RH
5117 if (!alt_sym)
5118 {
5119 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
5120 Should we early out false in this case? */
5121 result = fnmatch (expr->pattern, sym, 0) == 0;
5122 }
5123 else
5124 {
5125 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5126 free (alt_sym);
5127 }
5128
5129 return result;
5130}
5131
5132/* This is called for each variable name or match expression. */
5133
5134struct bfd_elf_version_expr *
313e35ee 5135lang_new_vers_pattern (orig, new, lang)
252b5132
RH
5136 struct bfd_elf_version_expr *orig;
5137 const char *new;
5138 const char *lang;
5139{
5140 struct bfd_elf_version_expr *ret;
5141
5142 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
5143 ret->next = orig;
5144 ret->pattern = new;
31941635
L
5145 ret->symver = 0;
5146 ret->script = 0;
252b5132
RH
5147
5148 if (lang == NULL || strcasecmp (lang, "C") == 0)
5149 ret->match = lang_vers_match_lang_c;
5150 else if (strcasecmp (lang, "C++") == 0)
5151 ret->match = lang_vers_match_lang_cplusplus;
5152 else if (strcasecmp (lang, "Java") == 0)
5153 ret->match = lang_vers_match_lang_java;
5154 else
5155 {
5156 einfo (_("%X%P: unknown language `%s' in version information\n"),
5157 lang);
5158 ret->match = lang_vers_match_lang_c;
5159 }
5160
fac1652d 5161 return ldemul_new_vers_pattern (ret);
252b5132
RH
5162}
5163
5164/* This is called for each set of variable names and match
5165 expressions. */
5166
5167struct bfd_elf_version_tree *
5168lang_new_vers_node (globals, locals)
5169 struct bfd_elf_version_expr *globals;
5170 struct bfd_elf_version_expr *locals;
5171{
5172 struct bfd_elf_version_tree *ret;
5173
5174 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
5175 ret->next = NULL;
5176 ret->name = NULL;
5177 ret->vernum = 0;
5178 ret->globals = globals;
5179 ret->locals = locals;
5180 ret->deps = NULL;
5181 ret->name_indx = (unsigned int) -1;
5182 ret->used = 0;
5183 return ret;
5184}
5185
5186/* This static variable keeps track of version indices. */
5187
5188static int version_index;
5189
5190/* This is called when we know the name and dependencies of the
5191 version. */
5192
5193void
5194lang_register_vers_node (name, version, deps)
5195 const char *name;
5196 struct bfd_elf_version_tree *version;
5197 struct bfd_elf_version_deps *deps;
5198{
5199 struct bfd_elf_version_tree *t, **pp;
5200 struct bfd_elf_version_expr *e1;
5201
6b9b879a
JJ
5202 if (name == NULL)
5203 name = "";
5204
5205 if ((name[0] == '\0' && lang_elf_version_info != NULL)
5206 || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
5207 {
5208 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5209 return;
5210 }
5211
252b5132
RH
5212 /* Make sure this node has a unique name. */
5213 for (t = lang_elf_version_info; t != NULL; t = t->next)
5214 if (strcmp (t->name, name) == 0)
5215 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
5216
5217 /* Check the global and local match names, and make sure there
5218 aren't any duplicates. */
5219
5220 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
5221 {
5222 for (t = lang_elf_version_info; t != NULL; t = t->next)
5223 {
5224 struct bfd_elf_version_expr *e2;
5225
5226 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
5227 if (strcmp (e1->pattern, e2->pattern) == 0)
5228 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5229 e1->pattern);
5230 }
5231 }
5232
5233 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
5234 {
5235 for (t = lang_elf_version_info; t != NULL; t = t->next)
5236 {
5237 struct bfd_elf_version_expr *e2;
5238
5239 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
5240 if (strcmp (e1->pattern, e2->pattern) == 0)
5241 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5242 e1->pattern);
5243 }
5244 }
5245
5246 version->deps = deps;
5247 version->name = name;
6b9b879a
JJ
5248 if (name[0] != '\0')
5249 {
5250 ++version_index;
5251 version->vernum = version_index;
5252 }
5253 else
5254 version->vernum = 0;
252b5132
RH
5255
5256 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
5257 ;
5258 *pp = version;
5259}
5260
5261/* This is called when we see a version dependency. */
5262
5263struct bfd_elf_version_deps *
5264lang_add_vers_depend (list, name)
5265 struct bfd_elf_version_deps *list;
5266 const char *name;
5267{
5268 struct bfd_elf_version_deps *ret;
5269 struct bfd_elf_version_tree *t;
5270
5271 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
5272 ret->next = list;
5273
5274 for (t = lang_elf_version_info; t != NULL; t = t->next)
5275 {
5276 if (strcmp (t->name, name) == 0)
5277 {
5278 ret->version_needed = t;
5279 return ret;
5280 }
5281 }
5282
5283 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5284
5285 return ret;
5286}
5287
5288static void
5289lang_do_version_exports_section ()
5290{
5291 struct bfd_elf_version_expr *greg = NULL, *lreg;
5292
5293 LANG_FOR_EACH_INPUT_STATEMENT (is)
5294 {
5295 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5296 char *contents, *p;
5297 bfd_size_type len;
5298
5299 if (sec == NULL)
b7a26f91 5300 continue;
252b5132
RH
5301
5302 len = bfd_section_size (is->the_bfd, sec);
5303 contents = xmalloc (len);
5304 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
6f9efd97 5305 einfo (_("%X%P: unable to read .exports section contents\n"), sec);
252b5132
RH
5306
5307 p = contents;
89cdebba 5308 while (p < contents + len)
252b5132 5309 {
313e35ee 5310 greg = lang_new_vers_pattern (greg, p, NULL);
252b5132
RH
5311 p = strchr (p, '\0') + 1;
5312 }
5313
5314 /* Do not free the contents, as we used them creating the regex. */
5315
5316 /* Do not include this section in the link. */
5317 bfd_set_section_flags (is->the_bfd, sec,
5318 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5319 }
5320
313e35ee 5321 lreg = lang_new_vers_pattern (NULL, "*", NULL);
252b5132
RH
5322 lang_register_vers_node (command_line.version_exports_section,
5323 lang_new_vers_node (greg, lreg), NULL);
5324}
577a0623
AM
5325
5326void
5327lang_add_unique (name)
5328 const char *name;
5329{
5330 struct unique_sections *ent;
5331
5332 for (ent = unique_section_list; ent; ent = ent->next)
5333 if (strcmp (ent->name, name) == 0)
5334 return;
5335
5336 ent = (struct unique_sections *) xmalloc (sizeof *ent);
5337 ent->name = xstrdup (name);
5338 ent->next = unique_section_list;
5339 unique_section_list = ent;
5340}