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