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