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