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