1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
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)
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.
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
25 #include "libiberty.h"
26 #include "safe-ctype.h"
44 static lang_statement_union_type
*new_statement
45 PARAMS ((enum statement_enum
, size_t, lang_statement_list_type
*));
48 static struct obstack stat_obstack
;
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52 static const char *startup_file
;
53 static lang_statement_list_type input_file_chain
;
54 static boolean placed_commons
= false;
55 static lang_output_section_statement_type
*default_common_section
;
56 static boolean map_option_f
;
57 static bfd_vma print_dot
;
58 static lang_input_statement_type
*first_file
;
59 static const char *current_target
;
60 static const char *output_target
;
61 static lang_statement_list_type statement_list
;
62 static struct lang_phdr
*lang_phdr_list
;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*) (lang_statement_union_type
*),
66 lang_statement_union_type
*));
67 static lang_input_statement_type
*new_afile
68 PARAMS ((const char *, lang_input_file_enum_type
, const char *, boolean
));
69 static lang_memory_region_type
*lang_memory_default
PARAMS ((asection
*));
70 static void lang_map_flags
PARAMS ((flagword
));
71 static void init_os
PARAMS ((lang_output_section_statement_type
*));
72 static void exp_init_os
PARAMS ((etree_type
*));
73 static void section_already_linked
PARAMS ((bfd
*, asection
*, PTR
));
74 static struct bfd_hash_entry
*already_linked_newfunc
75 PARAMS ((struct bfd_hash_entry
*, struct bfd_hash_table
*, const char *));
76 static void already_linked_table_init
PARAMS ((void));
77 static void already_linked_table_free
PARAMS ((void));
78 static boolean wildcardp
PARAMS ((const char *));
79 static lang_statement_union_type
*wild_sort
80 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*,
81 lang_input_statement_type
*, asection
*));
82 static void output_section_callback
83 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*, asection
*,
84 lang_input_statement_type
*, PTR
));
85 static lang_input_statement_type
*lookup_name
PARAMS ((const char *));
86 static boolean load_symbols
87 PARAMS ((lang_input_statement_type
*, lang_statement_list_type
*));
89 PARAMS ((lang_wild_statement_type
*,
90 const char *, lang_output_section_statement_type
*));
91 static bfd
*open_output
PARAMS ((const char *));
92 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*));
93 static void open_input_bfds
PARAMS ((lang_statement_union_type
*, boolean
));
94 static void lang_reasonable_defaults
PARAMS ((void));
95 static void insert_undefined
PARAMS ((const char *));
96 static void lang_place_undefineds
PARAMS ((void));
97 static void map_input_to_output_sections
98 PARAMS ((lang_statement_union_type
*, const char *,
99 lang_output_section_statement_type
*));
100 static void print_output_section_statement
101 PARAMS ((lang_output_section_statement_type
*));
102 static void print_assignment
103 PARAMS ((lang_assignment_statement_type
*,
104 lang_output_section_statement_type
*));
105 static void print_input_statement
PARAMS ((lang_input_statement_type
*));
106 static boolean print_one_symbol
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
107 static void print_input_section
PARAMS ((lang_input_section_type
*));
108 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*));
109 static void print_data_statement
PARAMS ((lang_data_statement_type
*));
110 static void print_address_statement
PARAMS ((lang_address_statement_type
*));
111 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*));
112 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*));
113 static void print_wild_statement
114 PARAMS ((lang_wild_statement_type
*, lang_output_section_statement_type
*));
115 static void print_group
116 PARAMS ((lang_group_statement_type
*, lang_output_section_statement_type
*));
117 static void print_statement
118 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
119 static void print_statement_list
120 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
121 static void print_statements
PARAMS ((void));
122 static void insert_pad
123 PARAMS ((lang_statement_union_type
**, fill_type
*,
124 unsigned int, asection
*, bfd_vma
));
125 static bfd_vma size_input_section
126 PARAMS ((lang_statement_union_type
**, lang_output_section_statement_type
*,
127 fill_type
*, bfd_vma
));
128 static void lang_finish
PARAMS ((void));
129 static void ignore_bfd_errors
PARAMS ((const char *, ...));
130 static void lang_check
PARAMS ((void));
131 static void lang_common
PARAMS ((void));
132 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
133 static void lang_place_orphans
PARAMS ((void));
134 static int topower
PARAMS ((int));
135 static void lang_set_startof
PARAMS ((void));
136 static void gc_section_callback
137 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*, asection
*,
138 lang_input_statement_type
*, PTR
));
139 static void lang_record_phdrs
PARAMS ((void));
140 static void lang_gc_wild
PARAMS ((lang_wild_statement_type
*));
141 static void lang_gc_sections_1
PARAMS ((lang_statement_union_type
*));
142 static void lang_gc_sections
PARAMS ((void));
143 static int lang_vers_match_lang_c
144 PARAMS ((struct bfd_elf_version_expr
*, const char *));
145 static int lang_vers_match_lang_cplusplus
146 PARAMS ((struct bfd_elf_version_expr
*, const char *));
147 static int lang_vers_match_lang_java
148 PARAMS ((struct bfd_elf_version_expr
*, const char *));
149 static void lang_do_version_exports_section
PARAMS ((void));
150 static void lang_check_section_addresses
PARAMS ((void));
151 static void os_region_check
152 PARAMS ((lang_output_section_statement_type
*,
153 struct memory_region_struct
*, etree_type
*, bfd_vma
));
154 static bfd_vma lang_size_sections_1
155 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*,
156 lang_statement_union_type
**, fill_type
*, bfd_vma
, boolean
*));
158 typedef void (*callback_t
) PARAMS ((lang_wild_statement_type
*,
159 struct wildcard_list
*,
161 lang_input_statement_type
*,
163 static void walk_wild
164 PARAMS ((lang_wild_statement_type
*, callback_t
, PTR
));
165 static void walk_wild_section
166 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
168 static void walk_wild_file
169 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
172 static int get_target
PARAMS ((const bfd_target
*, PTR
));
173 static void stricpy
PARAMS ((char *, char *));
174 static void strcut
PARAMS ((char *, char *));
175 static int name_compare
PARAMS ((char *, char *));
176 static int closest_target_match
PARAMS ((const bfd_target
*, PTR
));
177 static char * get_first_input_target
PARAMS ((void));
180 lang_output_section_statement_type
*abs_output_section
;
181 lang_statement_list_type lang_output_section_statement
;
182 lang_statement_list_type
*stat_ptr
= &statement_list
;
183 lang_statement_list_type file_chain
= { NULL
, NULL
};
184 const char *entry_symbol
= NULL
;
185 const char *entry_section
= ".text";
186 boolean entry_from_cmdline
;
187 boolean lang_has_input_file
= false;
188 boolean had_output_filename
= false;
189 boolean lang_float_flag
= false;
190 boolean delete_output_file_on_failure
= false;
191 struct lang_nocrossrefs
*nocrossref_list
;
192 struct unique_sections
*unique_section_list
;
194 etree_type
*base
; /* Relocation base - or null */
196 #if defined (__STDC__) || defined (ALMOST_STDC)
197 #define cat(a,b) a##b
199 #define cat(a,b) a/**/b
202 /* Don't beautify the line below with "innocent" whitespace, it breaks
203 the K&R C preprocessor! */
204 #define new_stat(x, y) \
205 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
207 #define outside_section_address(q) \
208 ((q)->output_offset + (q)->output_section->vma)
210 #define outside_symbol_address(q) \
211 ((q)->value + outside_section_address (q->section))
213 #define SECTION_NAME_MAP_LENGTH (16)
219 return obstack_alloc (&stat_obstack
, size
);
223 unique_section_p (secnam
)
226 struct unique_sections
*unam
;
228 for (unam
= unique_section_list
; unam
; unam
= unam
->next
)
229 if (wildcardp (unam
->name
)
230 ? fnmatch (unam
->name
, secnam
, 0) == 0
231 : strcmp (unam
->name
, secnam
) == 0)
239 /* Generic traversal routines for finding matching sections. */
242 walk_wild_section (ptr
, file
, callback
, data
)
243 lang_wild_statement_type
*ptr
;
244 lang_input_statement_type
*file
;
250 if (file
->just_syms_flag
)
253 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
255 struct wildcard_list
*sec
;
257 sec
= ptr
->section_list
;
259 (*callback
) (ptr
, sec
, s
, file
, data
);
263 boolean skip
= false;
264 struct name_list
*list_tmp
;
266 /* Don't process sections from files which were
268 for (list_tmp
= sec
->spec
.exclude_name_list
;
270 list_tmp
= list_tmp
->next
)
272 if (wildcardp (list_tmp
->name
))
273 skip
= fnmatch (list_tmp
->name
, file
->filename
, 0) == 0;
275 skip
= strcmp (list_tmp
->name
, file
->filename
) == 0;
277 /* If this file is part of an archive, and the archive is
278 excluded, exclude this file. */
279 if (! skip
&& file
->the_bfd
!= NULL
280 && file
->the_bfd
->my_archive
!= NULL
281 && file
->the_bfd
->my_archive
->filename
!= NULL
)
283 if (wildcardp (list_tmp
->name
))
284 skip
= fnmatch (list_tmp
->name
,
285 file
->the_bfd
->my_archive
->filename
,
288 skip
= strcmp (list_tmp
->name
,
289 file
->the_bfd
->my_archive
->filename
) == 0;
296 if (!skip
&& sec
->spec
.name
!= NULL
)
298 const char *sname
= bfd_get_section_name (file
->the_bfd
, s
);
300 if (wildcardp (sec
->spec
.name
))
301 skip
= fnmatch (sec
->spec
.name
, sname
, 0) != 0;
303 skip
= strcmp (sec
->spec
.name
, sname
) != 0;
307 (*callback
) (ptr
, sec
, s
, file
, data
);
314 /* Handle a wild statement for a single file F. */
317 walk_wild_file (s
, f
, callback
, data
)
318 lang_wild_statement_type
*s
;
319 lang_input_statement_type
*f
;
323 if (f
->the_bfd
== NULL
324 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
325 walk_wild_section (s
, f
, callback
, data
);
330 /* This is an archive file. We must map each member of the
331 archive separately. */
332 member
= bfd_openr_next_archived_file (f
->the_bfd
, (bfd
*) NULL
);
333 while (member
!= NULL
)
335 /* When lookup_name is called, it will call the add_symbols
336 entry point for the archive. For each element of the
337 archive which is included, BFD will call ldlang_add_file,
338 which will set the usrdata field of the member to the
339 lang_input_statement. */
340 if (member
->usrdata
!= NULL
)
342 walk_wild_section (s
,
343 (lang_input_statement_type
*) member
->usrdata
,
347 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
353 walk_wild (s
, callback
, data
)
354 lang_wild_statement_type
*s
;
358 const char *file_spec
= s
->filename
;
360 if (file_spec
== NULL
)
362 /* Perform the iteration over all files in the list. */
363 LANG_FOR_EACH_INPUT_STATEMENT (f
)
365 walk_wild_file (s
, f
, callback
, data
);
368 else if (wildcardp (file_spec
))
370 LANG_FOR_EACH_INPUT_STATEMENT (f
)
372 if (fnmatch (file_spec
, f
->filename
, FNM_FILE_NAME
) == 0)
373 walk_wild_file (s
, f
, callback
, data
);
378 lang_input_statement_type
*f
;
380 /* Perform the iteration over a single file. */
381 f
= lookup_name (file_spec
);
383 walk_wild_file (s
, f
, callback
, data
);
387 /* lang_for_each_statement walks the parse tree and calls the provided
388 function for each node. */
391 lang_for_each_statement_worker (func
, s
)
392 void (*func
) PARAMS ((lang_statement_union_type
*));
393 lang_statement_union_type
*s
;
395 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
399 switch (s
->header
.type
)
401 case lang_constructors_statement_enum
:
402 lang_for_each_statement_worker (func
, constructor_list
.head
);
404 case lang_output_section_statement_enum
:
405 lang_for_each_statement_worker
407 s
->output_section_statement
.children
.head
);
409 case lang_wild_statement_enum
:
410 lang_for_each_statement_worker
412 s
->wild_statement
.children
.head
);
414 case lang_group_statement_enum
:
415 lang_for_each_statement_worker (func
,
416 s
->group_statement
.children
.head
);
418 case lang_data_statement_enum
:
419 case lang_reloc_statement_enum
:
420 case lang_object_symbols_statement_enum
:
421 case lang_output_statement_enum
:
422 case lang_target_statement_enum
:
423 case lang_input_section_enum
:
424 case lang_input_statement_enum
:
425 case lang_assignment_statement_enum
:
426 case lang_padding_statement_enum
:
427 case lang_address_statement_enum
:
428 case lang_fill_statement_enum
:
438 lang_for_each_statement (func
)
439 void (*func
) PARAMS ((lang_statement_union_type
*));
441 lang_for_each_statement_worker (func
, statement_list
.head
);
444 /*----------------------------------------------------------------------*/
447 lang_list_init (list
)
448 lang_statement_list_type
*list
;
450 list
->head
= (lang_statement_union_type
*) NULL
;
451 list
->tail
= &list
->head
;
454 /* Build a new statement node for the parse tree. */
456 static lang_statement_union_type
*
457 new_statement (type
, size
, list
)
458 enum statement_enum type
;
460 lang_statement_list_type
*list
;
462 lang_statement_union_type
*new = (lang_statement_union_type
*)
465 new->header
.type
= type
;
466 new->header
.next
= (lang_statement_union_type
*) NULL
;
467 lang_statement_append (list
, new, &new->header
.next
);
471 /* Build a new input file node for the language. There are several
472 ways in which we treat an input file, eg, we only look at symbols,
473 or prefix it with a -l etc.
475 We can be supplied with requests for input files more than once;
476 they may, for example be split over serveral lines like foo.o(.text)
477 foo.o(.data) etc, so when asked for a file we check that we haven't
478 got it already so we don't duplicate the bfd. */
480 static lang_input_statement_type
*
481 new_afile (name
, file_type
, target
, add_to_list
)
483 lang_input_file_enum_type file_type
;
487 lang_input_statement_type
*p
;
490 p
= new_stat (lang_input_statement
, stat_ptr
);
493 p
= ((lang_input_statement_type
*)
494 stat_alloc (sizeof (lang_input_statement_type
)));
495 p
->header
.next
= NULL
;
498 lang_has_input_file
= true;
502 case lang_input_file_is_symbols_only_enum
:
504 p
->is_archive
= false;
506 p
->local_sym_name
= name
;
507 p
->just_syms_flag
= true;
508 p
->search_dirs_flag
= false;
510 case lang_input_file_is_fake_enum
:
512 p
->is_archive
= false;
514 p
->local_sym_name
= name
;
515 p
->just_syms_flag
= false;
516 p
->search_dirs_flag
= false;
518 case lang_input_file_is_l_enum
:
519 p
->is_archive
= true;
522 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
523 p
->just_syms_flag
= false;
524 p
->search_dirs_flag
= true;
526 case lang_input_file_is_marker_enum
:
528 p
->is_archive
= false;
530 p
->local_sym_name
= name
;
531 p
->just_syms_flag
= false;
532 p
->search_dirs_flag
= true;
534 case lang_input_file_is_search_file_enum
:
536 p
->is_archive
= false;
538 p
->local_sym_name
= name
;
539 p
->just_syms_flag
= false;
540 p
->search_dirs_flag
= true;
542 case lang_input_file_is_file_enum
:
544 p
->is_archive
= false;
546 p
->local_sym_name
= name
;
547 p
->just_syms_flag
= false;
548 p
->search_dirs_flag
= false;
553 p
->the_bfd
= (bfd
*) NULL
;
554 p
->asymbols
= (asymbol
**) NULL
;
555 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
556 p
->next
= (lang_statement_union_type
*) NULL
;
558 p
->dynamic
= config
.dynamic_link
;
559 p
->whole_archive
= whole_archive
;
561 lang_statement_append (&input_file_chain
,
562 (lang_statement_union_type
*) p
,
567 lang_input_statement_type
*
568 lang_add_input_file (name
, file_type
, target
)
570 lang_input_file_enum_type file_type
;
573 lang_has_input_file
= true;
574 return new_afile (name
, file_type
, target
, true);
577 /* Build enough state so that the parser can build its tree. */
582 obstack_begin (&stat_obstack
, 1000);
584 stat_ptr
= &statement_list
;
586 lang_list_init (stat_ptr
);
588 lang_list_init (&input_file_chain
);
589 lang_list_init (&lang_output_section_statement
);
590 lang_list_init (&file_chain
);
591 first_file
= lang_add_input_file ((char *) NULL
,
592 lang_input_file_is_marker_enum
,
595 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
597 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
601 /*----------------------------------------------------------------------
602 A region is an area of memory declared with the
603 MEMORY { name:org=exp, len=exp ... }
606 We maintain a list of all the regions here.
608 If no regions are specified in the script, then the default is used
609 which is created when looked up to be the entire data space. */
611 static lang_memory_region_type
*lang_memory_region_list
;
612 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
614 lang_memory_region_type
*
615 lang_memory_region_lookup (name
)
616 const char *const name
;
618 lang_memory_region_type
*p
;
620 for (p
= lang_memory_region_list
;
621 p
!= (lang_memory_region_type
*) NULL
;
624 if (strcmp (p
->name
, name
) == 0)
631 /* This code used to always use the first region in the list as the
632 default region. I changed it to instead use a region
633 encompassing all of memory as the default region. This permits
634 NOLOAD sections to work reasonably without requiring a region.
635 People should specify what region they mean, if they really want
637 if (strcmp (name
, "*default*") == 0)
639 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
641 return lang_memory_region_list
;
647 lang_memory_region_type
*new =
648 (lang_memory_region_type
*) stat_alloc (sizeof (lang_memory_region_type
));
650 new->name
= xstrdup (name
);
651 new->next
= (lang_memory_region_type
*) NULL
;
653 *lang_memory_region_list_tail
= new;
654 lang_memory_region_list_tail
= &new->next
;
658 new->length
= ~(bfd_size_type
) 0;
660 new->had_full_message
= false;
666 static lang_memory_region_type
*
667 lang_memory_default (section
)
670 lang_memory_region_type
*p
;
672 flagword sec_flags
= section
->flags
;
674 /* Override SEC_DATA to mean a writable section. */
675 if ((sec_flags
& (SEC_ALLOC
| SEC_READONLY
| SEC_CODE
)) == SEC_ALLOC
)
676 sec_flags
|= SEC_DATA
;
678 for (p
= lang_memory_region_list
;
679 p
!= (lang_memory_region_type
*) NULL
;
682 if ((p
->flags
& sec_flags
) != 0
683 && (p
->not_flags
& sec_flags
) == 0)
688 return lang_memory_region_lookup ("*default*");
691 lang_output_section_statement_type
*
692 lang_output_section_find (name
)
693 const char *const name
;
695 lang_statement_union_type
*u
;
696 lang_output_section_statement_type
*lookup
;
698 for (u
= lang_output_section_statement
.head
;
699 u
!= (lang_statement_union_type
*) NULL
;
702 lookup
= &u
->output_section_statement
;
703 if (strcmp (name
, lookup
->name
) == 0)
708 return (lang_output_section_statement_type
*) NULL
;
711 lang_output_section_statement_type
*
712 lang_output_section_statement_lookup (name
)
713 const char *const name
;
715 lang_output_section_statement_type
*lookup
;
717 lookup
= lang_output_section_find (name
);
718 if (lookup
== (lang_output_section_statement_type
*) NULL
)
721 lookup
= (lang_output_section_statement_type
*)
722 new_stat (lang_output_section_statement
, stat_ptr
);
723 lookup
->region
= (lang_memory_region_type
*) NULL
;
724 lookup
->lma_region
= (lang_memory_region_type
*) NULL
;
725 lookup
->fill
= (fill_type
*) 0;
726 lookup
->block_value
= 1;
729 lookup
->next
= (lang_statement_union_type
*) NULL
;
730 lookup
->bfd_section
= (asection
*) NULL
;
731 lookup
->processed
= false;
732 lookup
->sectype
= normal_section
;
733 lookup
->addr_tree
= (etree_type
*) NULL
;
734 lang_list_init (&lookup
->children
);
736 lookup
->memspec
= (const char *) NULL
;
738 lookup
->subsection_alignment
= -1;
739 lookup
->section_alignment
= -1;
740 lookup
->load_base
= (union etree_union
*) NULL
;
741 lookup
->phdrs
= NULL
;
743 lang_statement_append (&lang_output_section_statement
,
744 (lang_statement_union_type
*) lookup
,
751 lang_map_flags (flag
)
754 if (flag
& SEC_ALLOC
)
760 if (flag
& SEC_READONLY
)
773 lang_memory_region_type
*m
;
775 minfo (_("\nMemory Configuration\n\n"));
776 fprintf (config
.map_file
, "%-16s %-18s %-18s %s\n",
777 _("Name"), _("Origin"), _("Length"), _("Attributes"));
779 for (m
= lang_memory_region_list
;
780 m
!= (lang_memory_region_type
*) NULL
;
786 fprintf (config
.map_file
, "%-16s ", m
->name
);
788 sprintf_vma (buf
, m
->origin
);
789 minfo ("0x%s ", buf
);
797 minfo ("0x%V", m
->length
);
798 if (m
->flags
|| m
->not_flags
)
806 lang_map_flags (m
->flags
);
812 lang_map_flags (m
->not_flags
);
819 fprintf (config
.map_file
, _("\nLinker script and memory map\n\n"));
824 /* Initialize an output section. */
828 lang_output_section_statement_type
*s
;
830 section_userdata_type
*new;
832 if (s
->bfd_section
!= NULL
)
835 if (strcmp (s
->name
, DISCARD_SECTION_NAME
) == 0)
836 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME
);
838 new = ((section_userdata_type
*)
839 stat_alloc (sizeof (section_userdata_type
)));
841 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
842 if (s
->bfd_section
== (asection
*) NULL
)
843 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
844 if (s
->bfd_section
== (asection
*) NULL
)
846 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
847 output_bfd
->xvec
->name
, s
->name
);
849 s
->bfd_section
->output_section
= s
->bfd_section
;
851 /* We initialize an output sections output offset to minus its own
852 vma to allow us to output a section through itself. */
853 s
->bfd_section
->output_offset
= 0;
854 get_userdata (s
->bfd_section
) = (PTR
) new;
856 /* If there is a base address, make sure that any sections it might
857 mention are initialized. */
858 if (s
->addr_tree
!= NULL
)
859 exp_init_os (s
->addr_tree
);
862 /* Make sure that all output sections mentioned in an expression are
869 switch (exp
->type
.node_class
)
872 exp_init_os (exp
->assign
.src
);
876 exp_init_os (exp
->binary
.lhs
);
877 exp_init_os (exp
->binary
.rhs
);
881 exp_init_os (exp
->trinary
.cond
);
882 exp_init_os (exp
->trinary
.lhs
);
883 exp_init_os (exp
->trinary
.rhs
);
887 exp_init_os (exp
->unary
.child
);
891 switch (exp
->type
.node_code
)
897 lang_output_section_statement_type
*os
;
899 os
= lang_output_section_find (exp
->name
.name
);
900 if (os
!= NULL
&& os
->bfd_section
== NULL
)
911 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
912 once into the output. This routine checks each section, and
913 arrange to discard it if a section of the same name has already
914 been linked. If the section has COMDAT information, then it uses
915 that to decide whether the section should be included. This code
916 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
917 that is, it does not depend solely upon the section name.
918 section_already_linked is called via bfd_map_over_sections. */
920 /* This is the shape of the elements inside the already_linked hash
921 table. It maps a name onto a list of already_linked elements with
922 the same name. It's possible to get more than one element in a
923 list if the COMDAT sections have different names. */
925 struct already_linked_hash_entry
927 struct bfd_hash_entry root
;
928 struct already_linked
*entry
;
931 struct already_linked
933 struct already_linked
*next
;
937 /* The hash table. */
939 static struct bfd_hash_table already_linked_table
;
942 section_already_linked (abfd
, sec
, data
)
947 lang_input_statement_type
*entry
= (lang_input_statement_type
*) data
;
950 struct already_linked
*l
;
951 struct already_linked_hash_entry
*already_linked_list
;
953 /* If we are only reading symbols from this object, then we want to
954 discard all sections. */
955 if (entry
->just_syms_flag
)
957 sec
->output_section
= bfd_abs_section_ptr
;
958 sec
->output_offset
= sec
->vma
;
962 flags
= bfd_get_section_flags (abfd
, sec
);
964 if ((flags
& SEC_LINK_ONCE
) == 0)
967 /* FIXME: When doing a relocatable link, we may have trouble
968 copying relocations in other sections that refer to local symbols
969 in the section being discarded. Those relocations will have to
970 be converted somehow; as of this writing I'm not sure that any of
971 the backends handle that correctly.
973 It is tempting to instead not discard link once sections when
974 doing a relocatable link (technically, they should be discarded
975 whenever we are building constructors). However, that fails,
976 because the linker winds up combining all the link once sections
977 into a single large link once section, which defeats the purpose
978 of having link once sections in the first place.
980 Also, not merging link once sections in a relocatable link
981 causes trouble for MIPS ELF, which relies in link once semantics
982 to handle the .reginfo section correctly. */
984 name
= bfd_get_section_name (abfd
, sec
);
986 already_linked_list
=
987 ((struct already_linked_hash_entry
*)
988 bfd_hash_lookup (&already_linked_table
, name
, true, false));
990 for (l
= already_linked_list
->entry
; l
!= NULL
; l
= l
->next
)
992 if (sec
->comdat
== NULL
993 || l
->sec
->comdat
== NULL
994 || strcmp (sec
->comdat
->name
, l
->sec
->comdat
->name
) == 0)
996 /* The section has already been linked. See if we should
998 switch (flags
& SEC_LINK_DUPLICATES
)
1003 case SEC_LINK_DUPLICATES_DISCARD
:
1006 case SEC_LINK_DUPLICATES_ONE_ONLY
:
1007 if (sec
->comdat
== NULL
)
1008 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1011 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1012 abfd
, name
, sec
->comdat
->name
);
1015 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
1016 /* FIXME: We should really dig out the contents of both
1017 sections and memcmp them. The COFF/PE spec says that
1018 the Microsoft linker does not implement this
1019 correctly, so I'm not going to bother doing it
1022 case SEC_LINK_DUPLICATES_SAME_SIZE
:
1023 if (bfd_section_size (abfd
, sec
)
1024 != bfd_section_size (l
->sec
->owner
, l
->sec
))
1025 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1030 /* Set the output_section field so that lang_add_section
1031 does not create a lang_input_section structure for this
1033 sec
->output_section
= bfd_abs_section_ptr
;
1039 /* This is the first section with this name. Record it. Allocate
1040 the memory from the same obstack as the hash table is kept in. */
1042 l
= ((struct already_linked
*)
1043 bfd_hash_allocate (&already_linked_table
, sizeof *l
));
1046 l
->next
= already_linked_list
->entry
;
1047 already_linked_list
->entry
= l
;
1050 /* Support routines for the hash table used by section_already_linked,
1051 initialize the table, fill in an entry and remove the table. */
1053 static struct bfd_hash_entry
*
1054 already_linked_newfunc (entry
, table
, string
)
1055 struct bfd_hash_entry
*entry ATTRIBUTE_UNUSED
;
1056 struct bfd_hash_table
*table
;
1057 const char *string ATTRIBUTE_UNUSED
;
1059 struct already_linked_hash_entry
*ret
=
1060 bfd_hash_allocate (table
, sizeof (struct already_linked_hash_entry
));
1064 return (struct bfd_hash_entry
*) ret
;
1068 already_linked_table_init ()
1070 if (! bfd_hash_table_init_n (&already_linked_table
,
1071 already_linked_newfunc
,
1073 einfo (_("%P%F: Failed to create hash table\n"));
1077 already_linked_table_free ()
1079 bfd_hash_table_free (&already_linked_table
);
1082 /* The wild routines.
1084 These expand statements like *(.text) and foo.o to a list of
1085 explicit actions, like foo.o(.text), bar.o(.text) and
1086 foo.o(.text, .data). */
1088 /* Return true if the PATTERN argument is a wildcard pattern.
1089 Although backslashes are treated specially if a pattern contains
1090 wildcards, we do not consider the mere presence of a backslash to
1091 be enough to cause the pattern to be treated as a wildcard.
1092 That lets us handle DOS filenames more naturally. */
1096 const char *pattern
;
1100 for (s
= pattern
; *s
!= '\0'; ++s
)
1108 /* Add SECTION to the output section OUTPUT. Do this by creating a
1109 lang_input_section statement which is placed at PTR. FILE is the
1110 input file which holds SECTION. */
1113 lang_add_section (ptr
, section
, output
, file
)
1114 lang_statement_list_type
*ptr
;
1116 lang_output_section_statement_type
*output
;
1117 lang_input_statement_type
*file
;
1122 flags
= bfd_get_section_flags (section
->owner
, section
);
1126 /* If we are doing a final link, discard sections marked with
1128 if (! link_info
.relocateable
1129 && (flags
& SEC_EXCLUDE
) != 0)
1132 /* Discard input sections which are assigned to a section named
1133 DISCARD_SECTION_NAME. */
1134 if (strcmp (output
->name
, DISCARD_SECTION_NAME
) == 0)
1137 /* Discard debugging sections if we are stripping debugging
1139 if ((link_info
.strip
== strip_debugger
|| link_info
.strip
== strip_all
)
1140 && (flags
& SEC_DEBUGGING
) != 0)
1145 if (section
->output_section
== NULL
)
1147 /* This prevents future calls from assigning this section. */
1148 section
->output_section
= bfd_abs_section_ptr
;
1153 if (section
->output_section
== NULL
)
1156 lang_input_section_type
*new;
1159 if (output
->bfd_section
== NULL
)
1162 first
= ! output
->bfd_section
->linker_has_input
;
1163 output
->bfd_section
->linker_has_input
= 1;
1165 /* Add a section reference to the list. */
1166 new = new_stat (lang_input_section
, ptr
);
1168 new->section
= section
;
1170 section
->output_section
= output
->bfd_section
;
1172 flags
= section
->flags
;
1174 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1175 to an output section, because we want to be able to include a
1176 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1177 section (I don't know why we want to do this, but we do).
1178 build_link_order in ldwrite.c handles this case by turning
1179 the embedded SEC_NEVER_LOAD section into a fill. */
1181 flags
&= ~ SEC_NEVER_LOAD
;
1183 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1184 already been processed. One reason to do this is that on pe
1185 format targets, .text$foo sections go into .text and it's odd
1186 to see .text with SEC_LINK_ONCE set. */
1188 if (! link_info
.relocateable
)
1189 flags
&= ~ (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES
);
1191 /* If this is not the first input section, and the SEC_READONLY
1192 flag is not currently set, then don't set it just because the
1193 input section has it set. */
1195 if (! first
&& (section
->output_section
->flags
& SEC_READONLY
) == 0)
1196 flags
&= ~ SEC_READONLY
;
1198 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1200 && ((section
->output_section
->flags
& (SEC_MERGE
| SEC_STRINGS
))
1201 != (flags
& (SEC_MERGE
| SEC_STRINGS
))
1202 || ((flags
& SEC_MERGE
)
1203 && section
->output_section
->entsize
!= section
->entsize
)))
1205 section
->output_section
->flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1206 flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1209 section
->output_section
->flags
|= flags
;
1211 if (flags
& SEC_MERGE
)
1212 section
->output_section
->entsize
= section
->entsize
;
1214 /* If SEC_READONLY is not set in the input section, then clear
1215 it from the output section. */
1216 if ((section
->flags
& SEC_READONLY
) == 0)
1217 section
->output_section
->flags
&= ~SEC_READONLY
;
1219 switch (output
->sectype
)
1221 case normal_section
:
1226 case overlay_section
:
1227 output
->bfd_section
->flags
&= ~SEC_ALLOC
;
1229 case noload_section
:
1230 output
->bfd_section
->flags
&= ~SEC_LOAD
;
1231 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
1235 /* Copy over SEC_SMALL_DATA. */
1236 if (section
->flags
& SEC_SMALL_DATA
)
1237 section
->output_section
->flags
|= SEC_SMALL_DATA
;
1239 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
1240 output
->bfd_section
->alignment_power
= section
->alignment_power
;
1242 /* If supplied an aligment, then force it. */
1243 if (output
->section_alignment
!= -1)
1244 output
->bfd_section
->alignment_power
= output
->section_alignment
;
1246 if (section
->flags
& SEC_BLOCK
)
1248 section
->output_section
->flags
|= SEC_BLOCK
;
1249 /* FIXME: This value should really be obtained from the bfd... */
1250 output
->block_value
= 128;
1255 /* Handle wildcard sorting. This returns the lang_input_section which
1256 should follow the one we are going to create for SECTION and FILE,
1257 based on the sorting requirements of WILD. It returns NULL if the
1258 new section should just go at the end of the current list. */
1260 static lang_statement_union_type
*
1261 wild_sort (wild
, sec
, file
, section
)
1262 lang_wild_statement_type
*wild
;
1263 struct wildcard_list
*sec
;
1264 lang_input_statement_type
*file
;
1267 const char *section_name
;
1268 lang_statement_union_type
*l
;
1270 if (!wild
->filenames_sorted
&& (sec
== NULL
|| !sec
->spec
.sorted
))
1273 section_name
= bfd_get_section_name (file
->the_bfd
, section
);
1274 for (l
= wild
->children
.head
; l
!= NULL
; l
= l
->header
.next
)
1276 lang_input_section_type
*ls
;
1278 if (l
->header
.type
!= lang_input_section_enum
)
1280 ls
= &l
->input_section
;
1282 /* Sorting by filename takes precedence over sorting by section
1285 if (wild
->filenames_sorted
)
1287 const char *fn
, *ln
;
1291 /* The PE support for the .idata section as generated by
1292 dlltool assumes that files will be sorted by the name of
1293 the archive and then the name of the file within the
1296 if (file
->the_bfd
!= NULL
1297 && bfd_my_archive (file
->the_bfd
) != NULL
)
1299 fn
= bfd_get_filename (bfd_my_archive (file
->the_bfd
));
1304 fn
= file
->filename
;
1308 if (ls
->ifile
->the_bfd
!= NULL
1309 && bfd_my_archive (ls
->ifile
->the_bfd
) != NULL
)
1311 ln
= bfd_get_filename (bfd_my_archive (ls
->ifile
->the_bfd
));
1316 ln
= ls
->ifile
->filename
;
1320 i
= strcmp (fn
, ln
);
1329 fn
= file
->filename
;
1331 ln
= ls
->ifile
->filename
;
1333 i
= strcmp (fn
, ln
);
1341 /* Here either the files are not sorted by name, or we are
1342 looking at the sections for this file. */
1344 if (sec
!= NULL
&& sec
->spec
.sorted
)
1346 if (strcmp (section_name
,
1347 bfd_get_section_name (ls
->ifile
->the_bfd
,
1357 /* Expand a wild statement for a particular FILE. SECTION may be
1358 NULL, in which case it is a wild card. */
1361 output_section_callback (ptr
, sec
, section
, file
, output
)
1362 lang_wild_statement_type
*ptr
;
1363 struct wildcard_list
*sec
;
1365 lang_input_statement_type
*file
;
1368 lang_statement_union_type
*before
;
1370 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1371 if (unique_section_p (bfd_get_section_name (file
->the_bfd
, section
)))
1374 /* If the wild pattern was marked KEEP, the member sections
1375 should be as well. */
1376 if (ptr
->keep_sections
)
1377 section
->flags
|= SEC_KEEP
;
1379 before
= wild_sort (ptr
, sec
, file
, section
);
1381 /* Here BEFORE points to the lang_input_section which
1382 should follow the one we are about to add. If BEFORE
1383 is NULL, then the section should just go at the end
1384 of the current list. */
1387 lang_add_section (&ptr
->children
, section
,
1388 (lang_output_section_statement_type
*) output
,
1392 lang_statement_list_type list
;
1393 lang_statement_union_type
**pp
;
1395 lang_list_init (&list
);
1396 lang_add_section (&list
, section
,
1397 (lang_output_section_statement_type
*) output
,
1400 /* If we are discarding the section, LIST.HEAD will
1402 if (list
.head
!= NULL
)
1404 ASSERT (list
.head
->header
.next
== NULL
);
1406 for (pp
= &ptr
->children
.head
;
1408 pp
= &(*pp
)->header
.next
)
1409 ASSERT (*pp
!= NULL
);
1411 list
.head
->header
.next
= *pp
;
1417 /* This is passed a file name which must have been seen already and
1418 added to the statement tree. We will see if it has been opened
1419 already and had its symbols read. If not then we'll read it. */
1421 static lang_input_statement_type
*
1425 lang_input_statement_type
*search
;
1427 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
1428 search
!= (lang_input_statement_type
*) NULL
;
1429 search
= (lang_input_statement_type
*) search
->next_real_file
)
1431 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
1433 if (search
->filename
!= (char *) NULL
1434 && name
!= (char *) NULL
1435 && strcmp (search
->filename
, name
) == 0)
1439 if (search
== (lang_input_statement_type
*) NULL
)
1440 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
1443 /* If we have already added this file, or this file is not real
1444 (FIXME: can that ever actually happen?) or the name is NULL
1445 (FIXME: can that ever actually happen?) don't add this file. */
1448 || search
->filename
== (const char *) NULL
)
1451 if (! load_symbols (search
, (lang_statement_list_type
*) NULL
))
1457 /* Get the symbols for an input file. */
1460 load_symbols (entry
, place
)
1461 lang_input_statement_type
*entry
;
1462 lang_statement_list_type
*place
;
1469 ldfile_open_file (entry
);
1471 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
1472 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
1475 lang_statement_list_type
*hold
;
1476 boolean bad_load
= true;
1478 err
= bfd_get_error ();
1480 /* See if the emulation has some special knowledge. */
1481 if (ldemul_unrecognized_file (entry
))
1484 if (err
== bfd_error_file_ambiguously_recognized
)
1488 einfo (_("%B: file not recognized: %E\n"), entry
->the_bfd
);
1489 einfo (_("%B: matching formats:"), entry
->the_bfd
);
1490 for (p
= matching
; *p
!= NULL
; p
++)
1494 else if (err
!= bfd_error_file_not_recognized
1496 einfo (_("%F%B: file not recognized: %E\n"), entry
->the_bfd
);
1500 bfd_close (entry
->the_bfd
);
1501 entry
->the_bfd
= NULL
;
1503 /* Try to interpret the file as a linker script. */
1504 ldfile_open_command_file (entry
->filename
);
1509 ldfile_assumed_script
= true;
1510 parser_input
= input_script
;
1512 ldfile_assumed_script
= false;
1519 if (ldemul_recognized_file (entry
))
1522 /* We don't call ldlang_add_file for an archive. Instead, the
1523 add_symbols entry point will call ldlang_add_file, via the
1524 add_archive_element callback, for each element of the archive
1526 switch (bfd_get_format (entry
->the_bfd
))
1532 ldlang_add_file (entry
);
1533 if (trace_files
|| trace_file_tries
)
1534 info_msg ("%I\n", entry
);
1538 if (entry
->whole_archive
)
1540 bfd
* member
= NULL
;
1541 boolean loaded
= true;
1545 member
= bfd_openr_next_archived_file (entry
->the_bfd
, member
);
1550 if (! bfd_check_format (member
, bfd_object
))
1552 einfo (_("%F%B: member %B in archive is not an object\n"),
1553 entry
->the_bfd
, member
);
1557 if (! ((*link_info
.callbacks
->add_archive_element
)
1558 (&link_info
, member
, "--whole-archive")))
1561 if (! bfd_link_add_symbols (member
, &link_info
))
1563 einfo (_("%F%B: could not read symbols: %E\n"), member
);
1568 entry
->loaded
= loaded
;
1574 if (bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
1575 entry
->loaded
= true;
1577 einfo (_("%F%B: could not read symbols: %E\n"), entry
->the_bfd
);
1579 return entry
->loaded
;
1582 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1583 may be NULL, indicating that it is a wildcard. Separate
1584 lang_input_section statements are created for each part of the
1585 expansion; they are added after the wild statement S. OUTPUT is
1586 the output section. */
1589 wild (s
, target
, output
)
1590 lang_wild_statement_type
*s
;
1591 const char *target ATTRIBUTE_UNUSED
;
1592 lang_output_section_statement_type
*output
;
1594 struct wildcard_list
*sec
;
1596 walk_wild (s
, output_section_callback
, (PTR
) output
);
1598 for (sec
= s
->section_list
; sec
!= NULL
; sec
= sec
->next
)
1600 if (default_common_section
!= NULL
)
1602 if (sec
->spec
.name
!= NULL
&& strcmp (sec
->spec
.name
, "COMMON") == 0)
1604 /* Remember the section that common is going to in case we
1605 later get something which doesn't know where to put it. */
1606 default_common_section
= output
;
1611 /* Return true iff target is the sought target. */
1614 get_target (target
, data
)
1615 const bfd_target
*target
;
1618 const char *sought
= (const char *) data
;
1620 return strcmp (target
->name
, sought
) == 0;
1623 /* Like strcpy() but convert to lower case as well. */
1632 while ((c
= *src
++) != 0)
1633 *dest
++ = TOLOWER (c
);
1638 /* Remove the first occurance of needle (if any) in haystack
1642 strcut (haystack
, needle
)
1646 haystack
= strstr (haystack
, needle
);
1652 for (src
= haystack
+ strlen (needle
); *src
;)
1653 *haystack
++ = *src
++;
1659 /* Compare two target format name strings.
1660 Return a value indicating how "similar" they are. */
1663 name_compare (first
, second
)
1671 copy1
= xmalloc (strlen (first
) + 1);
1672 copy2
= xmalloc (strlen (second
) + 1);
1674 /* Convert the names to lower case. */
1675 stricpy (copy1
, first
);
1676 stricpy (copy2
, second
);
1678 /* Remove and endian strings from the name. */
1679 strcut (copy1
, "big");
1680 strcut (copy1
, "little");
1681 strcut (copy2
, "big");
1682 strcut (copy2
, "little");
1684 /* Return a value based on how many characters match,
1685 starting from the beginning. If both strings are
1686 the same then return 10 * their length. */
1687 for (result
= 0; copy1
[result
] == copy2
[result
]; result
++)
1688 if (copy1
[result
] == 0)
1700 /* Set by closest_target_match() below. */
1701 static const bfd_target
*winner
;
1703 /* Scan all the valid bfd targets looking for one that has the endianness
1704 requirement that was specified on the command line, and is the nearest
1705 match to the original output target. */
1708 closest_target_match (target
, data
)
1709 const bfd_target
*target
;
1712 const bfd_target
*original
= (const bfd_target
*) data
;
1714 if (command_line
.endian
== ENDIAN_BIG
1715 && target
->byteorder
!= BFD_ENDIAN_BIG
)
1718 if (command_line
.endian
== ENDIAN_LITTLE
1719 && target
->byteorder
!= BFD_ENDIAN_LITTLE
)
1722 /* Must be the same flavour. */
1723 if (target
->flavour
!= original
->flavour
)
1726 /* If we have not found a potential winner yet, then record this one. */
1733 /* Oh dear, we now have two potential candidates for a successful match.
1734 Compare their names and choose the better one. */
1735 if (name_compare (target
->name
, original
->name
)
1736 > name_compare (winner
->name
, original
->name
))
1739 /* Keep on searching until wqe have checked them all. */
1743 /* Return the BFD target format of the first input file. */
1746 get_first_input_target ()
1748 char *target
= NULL
;
1750 LANG_FOR_EACH_INPUT_STATEMENT (s
)
1752 if (s
->header
.type
== lang_input_statement_enum
1755 ldfile_open_file (s
);
1757 if (s
->the_bfd
!= NULL
1758 && bfd_check_format (s
->the_bfd
, bfd_object
))
1760 target
= bfd_get_target (s
->the_bfd
);
1771 /* Open the output file. */
1779 /* Has the user told us which output format to use? */
1780 if (output_target
== (char *) NULL
)
1782 /* No - has the current target been set to something other than
1784 if (current_target
!= default_target
)
1785 output_target
= current_target
;
1787 /* No - can we determine the format of the first input file? */
1790 output_target
= get_first_input_target ();
1792 /* Failed - use the default output target. */
1793 if (output_target
== NULL
)
1794 output_target
= default_target
;
1798 /* Has the user requested a particular endianness on the command
1800 if (command_line
.endian
!= ENDIAN_UNSET
)
1802 const bfd_target
*target
;
1803 enum bfd_endian desired_endian
;
1805 /* Get the chosen target. */
1806 target
= bfd_search_for_target (get_target
, (PTR
) output_target
);
1808 /* If the target is not supported, we cannot do anything. */
1811 if (command_line
.endian
== ENDIAN_BIG
)
1812 desired_endian
= BFD_ENDIAN_BIG
;
1814 desired_endian
= BFD_ENDIAN_LITTLE
;
1816 /* See if the target has the wrong endianness. This should
1817 not happen if the linker script has provided big and
1818 little endian alternatives, but some scrips don't do
1820 if (target
->byteorder
!= desired_endian
)
1822 /* If it does, then see if the target provides
1823 an alternative with the correct endianness. */
1824 if (target
->alternative_target
!= NULL
1825 && (target
->alternative_target
->byteorder
== desired_endian
))
1826 output_target
= target
->alternative_target
->name
;
1829 /* Try to find a target as similar as possible to
1830 the default target, but which has the desired
1831 endian characteristic. */
1832 (void) bfd_search_for_target (closest_target_match
,
1835 /* Oh dear - we could not find any targets that
1836 satisfy our requirements. */
1838 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1840 output_target
= winner
->name
;
1846 output
= bfd_openw (name
, output_target
);
1848 if (output
== (bfd
*) NULL
)
1850 if (bfd_get_error () == bfd_error_invalid_target
)
1851 einfo (_("%P%F: target %s not found\n"), output_target
);
1853 einfo (_("%P%F: cannot open output file %s: %E\n"), name
);
1856 delete_output_file_on_failure
= true;
1859 output
->flags
|= D_PAGED
;
1862 if (! bfd_set_format (output
, bfd_object
))
1863 einfo (_("%P%F:%s: can not make object file: %E\n"), name
);
1864 if (! bfd_set_arch_mach (output
,
1865 ldfile_output_architecture
,
1866 ldfile_output_machine
))
1867 einfo (_("%P%F:%s: can not set architecture: %E\n"), name
);
1869 link_info
.hash
= bfd_link_hash_table_create (output
);
1870 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
1871 einfo (_("%P%F: can not create link hash table: %E\n"));
1873 bfd_set_gp_size (output
, g_switch_value
);
1878 ldlang_open_output (statement
)
1879 lang_statement_union_type
*statement
;
1881 switch (statement
->header
.type
)
1883 case lang_output_statement_enum
:
1884 ASSERT (output_bfd
== (bfd
*) NULL
);
1885 output_bfd
= open_output (statement
->output_statement
.name
);
1886 ldemul_set_output_arch ();
1887 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
1888 output_bfd
->flags
|= D_PAGED
;
1890 output_bfd
->flags
&= ~D_PAGED
;
1891 if (config
.text_read_only
)
1892 output_bfd
->flags
|= WP_TEXT
;
1894 output_bfd
->flags
&= ~WP_TEXT
;
1895 if (link_info
.traditional_format
)
1896 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
1898 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
1901 case lang_target_statement_enum
:
1902 current_target
= statement
->target_statement
.target
;
1909 /* Open all the input files. */
1912 open_input_bfds (s
, force
)
1913 lang_statement_union_type
*s
;
1916 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
1918 switch (s
->header
.type
)
1920 case lang_constructors_statement_enum
:
1921 open_input_bfds (constructor_list
.head
, force
);
1923 case lang_output_section_statement_enum
:
1924 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
1926 case lang_wild_statement_enum
:
1927 /* Maybe we should load the file's symbols. */
1928 if (s
->wild_statement
.filename
1929 && ! wildcardp (s
->wild_statement
.filename
))
1930 (void) lookup_name (s
->wild_statement
.filename
);
1931 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1933 case lang_group_statement_enum
:
1935 struct bfd_link_hash_entry
*undefs
;
1937 /* We must continually search the entries in the group
1938 until no new symbols are added to the list of undefined
1943 undefs
= link_info
.hash
->undefs_tail
;
1944 open_input_bfds (s
->group_statement
.children
.head
, true);
1946 while (undefs
!= link_info
.hash
->undefs_tail
);
1949 case lang_target_statement_enum
:
1950 current_target
= s
->target_statement
.target
;
1952 case lang_input_statement_enum
:
1953 if (s
->input_statement
.real
)
1955 lang_statement_list_type add
;
1957 s
->input_statement
.target
= current_target
;
1959 /* If we are being called from within a group, and this
1960 is an archive which has already been searched, then
1961 force it to be researched unless the whole archive
1962 has been loaded already. */
1964 && !s
->input_statement
.whole_archive
1965 && s
->input_statement
.loaded
1966 && bfd_check_format (s
->input_statement
.the_bfd
,
1968 s
->input_statement
.loaded
= false;
1970 lang_list_init (&add
);
1972 if (! load_symbols (&s
->input_statement
, &add
))
1973 config
.make_executable
= false;
1975 if (add
.head
!= NULL
)
1977 *add
.tail
= s
->header
.next
;
1978 s
->header
.next
= add
.head
;
1988 /* If there are [COMMONS] statements, put a wild one into the bss
1992 lang_reasonable_defaults ()
1995 lang_output_section_statement_lookup (".text");
1996 lang_output_section_statement_lookup (".data");
1998 default_common_section
= lang_output_section_statement_lookup (".bss");
2000 if (placed_commons
== false)
2002 lang_wild_statement_type
*new =
2003 new_stat (lang_wild_statement
,
2004 &default_common_section
->children
);
2006 new->section_name
= "COMMON";
2007 new->filename
= (char *) NULL
;
2008 lang_list_init (&new->children
);
2013 /* Add the supplied name to the symbol table as an undefined reference.
2014 This is a two step process as the symbol table doesn't even exist at
2015 the time the ld command line is processed. First we put the name
2016 on a list, then, once the output file has been opened, transfer the
2017 name to the symbol table. */
2019 typedef struct ldlang_undef_chain_list
2021 struct ldlang_undef_chain_list
*next
;
2023 } ldlang_undef_chain_list_type
;
2025 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
2028 ldlang_add_undef (name
)
2029 const char *const name
;
2031 ldlang_undef_chain_list_type
*new =
2032 ((ldlang_undef_chain_list_type
*)
2033 stat_alloc (sizeof (ldlang_undef_chain_list_type
)));
2035 new->next
= ldlang_undef_chain_list_head
;
2036 ldlang_undef_chain_list_head
= new;
2038 new->name
= xstrdup (name
);
2040 if (output_bfd
!= NULL
)
2041 insert_undefined (new->name
);
2044 /* Insert NAME as undefined in the symbol table. */
2047 insert_undefined (name
)
2050 struct bfd_link_hash_entry
*h
;
2052 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, false, true);
2053 if (h
== (struct bfd_link_hash_entry
*) NULL
)
2054 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2055 if (h
->type
== bfd_link_hash_new
)
2057 h
->type
= bfd_link_hash_undefined
;
2058 h
->u
.undef
.abfd
= NULL
;
2059 bfd_link_add_undef (link_info
.hash
, h
);
2063 /* Run through the list of undefineds created above and place them
2064 into the linker hash table as undefined symbols belonging to the
2068 lang_place_undefineds ()
2070 ldlang_undef_chain_list_type
*ptr
;
2072 for (ptr
= ldlang_undef_chain_list_head
;
2073 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
2076 insert_undefined (ptr
->name
);
2080 /* Open input files and attatch to output sections. */
2083 map_input_to_output_sections (s
, target
, output_section_statement
)
2084 lang_statement_union_type
*s
;
2086 lang_output_section_statement_type
*output_section_statement
;
2088 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
2090 switch (s
->header
.type
)
2092 case lang_wild_statement_enum
:
2093 wild (&s
->wild_statement
, target
, output_section_statement
);
2095 case lang_constructors_statement_enum
:
2096 map_input_to_output_sections (constructor_list
.head
,
2098 output_section_statement
);
2100 case lang_output_section_statement_enum
:
2101 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
2103 &s
->output_section_statement
);
2105 case lang_output_statement_enum
:
2107 case lang_target_statement_enum
:
2108 target
= s
->target_statement
.target
;
2110 case lang_group_statement_enum
:
2111 map_input_to_output_sections (s
->group_statement
.children
.head
,
2113 output_section_statement
);
2115 case lang_fill_statement_enum
:
2116 case lang_input_section_enum
:
2117 case lang_object_symbols_statement_enum
:
2118 case lang_data_statement_enum
:
2119 case lang_reloc_statement_enum
:
2120 case lang_padding_statement_enum
:
2121 case lang_input_statement_enum
:
2122 if (output_section_statement
!= NULL
2123 && output_section_statement
->bfd_section
== NULL
)
2124 init_os (output_section_statement
);
2126 case lang_assignment_statement_enum
:
2127 if (output_section_statement
!= NULL
2128 && output_section_statement
->bfd_section
== NULL
)
2129 init_os (output_section_statement
);
2131 /* Make sure that any sections mentioned in the assignment
2133 exp_init_os (s
->assignment_statement
.exp
);
2135 case lang_afile_asection_pair_statement_enum
:
2138 case lang_address_statement_enum
:
2139 /* Mark the specified section with the supplied address. */
2141 lang_output_section_statement_type
*os
=
2142 lang_output_section_statement_lookup
2143 (s
->address_statement
.section_name
);
2145 if (os
->bfd_section
== NULL
)
2147 os
->addr_tree
= s
->address_statement
.address
;
2155 print_output_section_statement (output_section_statement
)
2156 lang_output_section_statement_type
*output_section_statement
;
2158 asection
*section
= output_section_statement
->bfd_section
;
2161 if (output_section_statement
!= abs_output_section
)
2163 minfo ("\n%s", output_section_statement
->name
);
2165 if (section
!= NULL
)
2167 print_dot
= section
->vma
;
2169 len
= strlen (output_section_statement
->name
);
2170 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2175 while (len
< SECTION_NAME_MAP_LENGTH
)
2181 minfo ("0x%V %W", section
->vma
, section
->_raw_size
);
2183 if (output_section_statement
->load_base
!= NULL
)
2187 addr
= exp_get_abs_int (output_section_statement
->load_base
, 0,
2188 "load base", lang_final_phase_enum
);
2189 minfo (_(" load address 0x%V"), addr
);
2196 print_statement_list (output_section_statement
->children
.head
,
2197 output_section_statement
);
2201 print_assignment (assignment
, output_section
)
2202 lang_assignment_statement_type
*assignment
;
2203 lang_output_section_statement_type
*output_section
;
2206 etree_value_type result
;
2208 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2211 result
= exp_fold_tree (assignment
->exp
->assign
.src
, output_section
,
2212 lang_final_phase_enum
, print_dot
, &print_dot
);
2214 minfo ("0x%V", result
.value
+ result
.section
->bfd_section
->vma
);
2225 exp_print_tree (assignment
->exp
);
2231 print_input_statement (statm
)
2232 lang_input_statement_type
*statm
;
2234 if (statm
->filename
!= (char *) NULL
)
2236 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
2240 /* Print all symbols defined in a particular section. This is called
2241 via bfd_link_hash_traverse. */
2244 print_one_symbol (hash_entry
, ptr
)
2245 struct bfd_link_hash_entry
*hash_entry
;
2248 asection
*sec
= (asection
*) ptr
;
2250 if ((hash_entry
->type
== bfd_link_hash_defined
2251 || hash_entry
->type
== bfd_link_hash_defweak
)
2252 && sec
== hash_entry
->u
.def
.section
)
2256 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2259 (hash_entry
->u
.def
.value
2260 + hash_entry
->u
.def
.section
->output_offset
2261 + hash_entry
->u
.def
.section
->output_section
->vma
));
2263 minfo (" %T\n", hash_entry
->root
.string
);
2269 /* Print information about an input section to the map file. */
2272 print_input_section (in
)
2273 lang_input_section_type
*in
;
2275 asection
*i
= in
->section
;
2276 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
2277 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2278 ldfile_output_machine
);
2283 minfo ("%s", i
->name
);
2285 if (i
->output_section
!= NULL
)
2289 len
= 1 + strlen (i
->name
);
2290 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2295 while (len
< SECTION_NAME_MAP_LENGTH
)
2301 minfo ("0x%V %W %B\n",
2302 i
->output_section
->vma
+ i
->output_offset
, size
/ opb
,
2305 if (i
->_cooked_size
!= 0 && i
->_cooked_size
!= i
->_raw_size
)
2307 len
= SECTION_NAME_MAP_LENGTH
+ 3;
2319 minfo (_("%W (size before relaxing)\n"), i
->_raw_size
);
2322 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
2324 print_dot
= i
->output_section
->vma
+ i
->output_offset
+ size
/ opb
;
2330 print_fill_statement (fill
)
2331 lang_fill_statement_type
*fill
;
2335 fputs (" FILL mask 0x", config
.map_file
);
2336 for (p
= fill
->fill
->data
, size
= fill
->fill
->size
; size
!= 0; p
++, size
--)
2337 fprintf (config
.map_file
, "%02x", *p
);
2338 fputs ("\n", config
.map_file
);
2342 print_data_statement (data
)
2343 lang_data_statement_type
*data
;
2349 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2350 ldfile_output_machine
);
2352 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2355 addr
= data
->output_vma
;
2356 if (data
->output_section
!= NULL
)
2357 addr
+= data
->output_section
->vma
;
2385 minfo ("0x%V %W %s 0x%v", addr
, size
, name
, data
->value
);
2387 if (data
->exp
->type
.node_class
!= etree_value
)
2390 exp_print_tree (data
->exp
);
2395 print_dot
= addr
+ size
/ opb
;
2399 /* Print an address statement. These are generated by options like
2403 print_address_statement (address
)
2404 lang_address_statement_type
*address
;
2406 minfo (_("Address of section %s set to "), address
->section_name
);
2407 exp_print_tree (address
->address
);
2411 /* Print a reloc statement. */
2414 print_reloc_statement (reloc
)
2415 lang_reloc_statement_type
*reloc
;
2420 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2421 ldfile_output_machine
);
2423 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2426 addr
= reloc
->output_vma
;
2427 if (reloc
->output_section
!= NULL
)
2428 addr
+= reloc
->output_section
->vma
;
2430 size
= bfd_get_reloc_size (reloc
->howto
);
2432 minfo ("0x%V %W RELOC %s ", addr
, size
, reloc
->howto
->name
);
2434 if (reloc
->name
!= NULL
)
2435 minfo ("%s+", reloc
->name
);
2437 minfo ("%s+", reloc
->section
->name
);
2439 exp_print_tree (reloc
->addend_exp
);
2443 print_dot
= addr
+ size
/ opb
;
2447 print_padding_statement (s
)
2448 lang_padding_statement_type
*s
;
2452 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2453 ldfile_output_machine
);
2457 len
= sizeof " *fill*" - 1;
2458 while (len
< SECTION_NAME_MAP_LENGTH
)
2464 addr
= s
->output_offset
;
2465 if (s
->output_section
!= NULL
)
2466 addr
+= s
->output_section
->vma
;
2467 minfo ("0x%V %W ", addr
, s
->size
);
2469 if (s
->fill
->size
!= 0)
2473 for (p
= s
->fill
->data
, size
= s
->fill
->size
; size
!= 0; p
++, size
--)
2474 fprintf (config
.map_file
, "%02x", *p
);
2479 print_dot
= addr
+ s
->size
/ opb
;
2483 print_wild_statement (w
, os
)
2484 lang_wild_statement_type
*w
;
2485 lang_output_section_statement_type
*os
;
2487 struct wildcard_list
*sec
;
2491 if (w
->filenames_sorted
)
2493 if (w
->filename
!= NULL
)
2494 minfo ("%s", w
->filename
);
2497 if (w
->filenames_sorted
)
2501 for (sec
= w
->section_list
; sec
; sec
= sec
->next
)
2503 if (sec
->spec
.sorted
)
2505 if (sec
->spec
.exclude_name_list
!= NULL
)
2508 minfo ("EXCLUDE_FILE ( %s", sec
->spec
.exclude_name_list
->name
);
2509 for (tmp
= sec
->spec
.exclude_name_list
->next
; tmp
; tmp
= tmp
->next
)
2510 minfo (", %s", tmp
->name
);
2513 if (sec
->spec
.name
!= NULL
)
2514 minfo ("%s", sec
->spec
.name
);
2517 if (sec
->spec
.sorted
)
2524 print_statement_list (w
->children
.head
, os
);
2527 /* Print a group statement. */
2531 lang_group_statement_type
*s
;
2532 lang_output_section_statement_type
*os
;
2534 fprintf (config
.map_file
, "START GROUP\n");
2535 print_statement_list (s
->children
.head
, os
);
2536 fprintf (config
.map_file
, "END GROUP\n");
2539 /* Print the list of statements in S.
2540 This can be called for any statement type. */
2543 print_statement_list (s
, os
)
2544 lang_statement_union_type
*s
;
2545 lang_output_section_statement_type
*os
;
2549 print_statement (s
, os
);
2554 /* Print the first statement in statement list S.
2555 This can be called for any statement type. */
2558 print_statement (s
, os
)
2559 lang_statement_union_type
*s
;
2560 lang_output_section_statement_type
*os
;
2562 switch (s
->header
.type
)
2565 fprintf (config
.map_file
, _("Fail with %d\n"), s
->header
.type
);
2568 case lang_constructors_statement_enum
:
2569 if (constructor_list
.head
!= NULL
)
2571 if (constructors_sorted
)
2572 minfo (" SORT (CONSTRUCTORS)\n");
2574 minfo (" CONSTRUCTORS\n");
2575 print_statement_list (constructor_list
.head
, os
);
2578 case lang_wild_statement_enum
:
2579 print_wild_statement (&s
->wild_statement
, os
);
2581 case lang_address_statement_enum
:
2582 print_address_statement (&s
->address_statement
);
2584 case lang_object_symbols_statement_enum
:
2585 minfo (" CREATE_OBJECT_SYMBOLS\n");
2587 case lang_fill_statement_enum
:
2588 print_fill_statement (&s
->fill_statement
);
2590 case lang_data_statement_enum
:
2591 print_data_statement (&s
->data_statement
);
2593 case lang_reloc_statement_enum
:
2594 print_reloc_statement (&s
->reloc_statement
);
2596 case lang_input_section_enum
:
2597 print_input_section (&s
->input_section
);
2599 case lang_padding_statement_enum
:
2600 print_padding_statement (&s
->padding_statement
);
2602 case lang_output_section_statement_enum
:
2603 print_output_section_statement (&s
->output_section_statement
);
2605 case lang_assignment_statement_enum
:
2606 print_assignment (&s
->assignment_statement
, os
);
2608 case lang_target_statement_enum
:
2609 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
2611 case lang_output_statement_enum
:
2612 minfo ("OUTPUT(%s", s
->output_statement
.name
);
2613 if (output_target
!= NULL
)
2614 minfo (" %s", output_target
);
2617 case lang_input_statement_enum
:
2618 print_input_statement (&s
->input_statement
);
2620 case lang_group_statement_enum
:
2621 print_group (&s
->group_statement
, os
);
2623 case lang_afile_asection_pair_statement_enum
:
2632 print_statement_list (statement_list
.head
, abs_output_section
);
2635 /* Print the first N statements in statement list S to STDERR.
2636 If N == 0, nothing is printed.
2637 If N < 0, the entire list is printed.
2638 Intended to be called from GDB. */
2641 dprint_statement (s
, n
)
2642 lang_statement_union_type
*s
;
2645 FILE *map_save
= config
.map_file
;
2647 config
.map_file
= stderr
;
2650 print_statement_list (s
, abs_output_section
);
2653 while (s
&& --n
>= 0)
2655 print_statement (s
, abs_output_section
);
2660 config
.map_file
= map_save
;
2664 insert_pad (ptr
, fill
, alignment_needed
, output_section
, dot
)
2665 lang_statement_union_type
**ptr
;
2667 unsigned int alignment_needed
;
2668 asection
*output_section
;
2671 static fill_type zero_fill
= { 1, { 0 } };
2672 lang_statement_union_type
*pad
;
2674 pad
= ((lang_statement_union_type
*)
2675 ((char *) ptr
- offsetof (lang_statement_union_type
, header
.next
)));
2676 if (ptr
!= &statement_list
.head
2677 && pad
->header
.type
== lang_padding_statement_enum
2678 && pad
->padding_statement
.output_section
== output_section
)
2680 /* Use the existing pad statement. The above test on output
2681 section is probably redundant, but it doesn't hurt to check. */
2685 /* Make a new padding statement, linked into existing chain. */
2686 pad
= ((lang_statement_union_type
*)
2687 stat_alloc (sizeof (lang_padding_statement_type
)));
2688 pad
->header
.next
= *ptr
;
2690 pad
->header
.type
= lang_padding_statement_enum
;
2691 pad
->padding_statement
.output_section
= output_section
;
2692 if (fill
== (fill_type
*) 0)
2694 pad
->padding_statement
.fill
= fill
;
2696 pad
->padding_statement
.output_offset
= dot
- output_section
->vma
;
2697 pad
->padding_statement
.size
= alignment_needed
;
2698 output_section
->_raw_size
+= alignment_needed
;
2701 /* Work out how much this section will move the dot point. */
2704 size_input_section (this_ptr
, output_section_statement
, fill
, dot
)
2705 lang_statement_union_type
**this_ptr
;
2706 lang_output_section_statement_type
*output_section_statement
;
2710 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
2711 asection
*i
= is
->section
;
2713 if (is
->ifile
->just_syms_flag
== false)
2715 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2716 ldfile_output_machine
);
2717 unsigned int alignment_needed
;
2720 /* Align this section first to the input sections requirement,
2721 then to the output section's requirement. If this alignment
2722 is greater than any seen before, then record it too. Perform
2723 the alignment by inserting a magic 'padding' statement. */
2725 if (output_section_statement
->subsection_alignment
!= -1)
2726 i
->alignment_power
= output_section_statement
->subsection_alignment
;
2728 o
= output_section_statement
->bfd_section
;
2729 if (o
->alignment_power
< i
->alignment_power
)
2730 o
->alignment_power
= i
->alignment_power
;
2732 alignment_needed
= align_power (dot
, i
->alignment_power
) - dot
;
2734 if (alignment_needed
!= 0)
2736 insert_pad (this_ptr
, fill
, alignment_needed
* opb
, o
, dot
);
2737 dot
+= alignment_needed
;
2740 /* Remember where in the output section this input section goes. */
2742 i
->output_offset
= dot
- o
->vma
;
2744 /* Mark how big the output section must be to contain this now. */
2745 if (i
->_cooked_size
!= 0)
2746 dot
+= i
->_cooked_size
/ opb
;
2748 dot
+= i
->_raw_size
/ opb
;
2749 o
->_raw_size
= (dot
- o
->vma
) * opb
;
2753 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
2759 #define IGNORE_SECTION(bfd, s) \
2760 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2761 != (SEC_ALLOC | SEC_LOAD)) \
2762 || bfd_section_size (bfd, s) == 0)
2764 /* Check to see if any allocated sections overlap with other allocated
2765 sections. This can happen when the linker script specifically specifies
2766 the output section addresses of the two sections. */
2769 lang_check_section_addresses ()
2772 unsigned opb
= bfd_octets_per_byte (output_bfd
);
2774 /* Scan all sections in the output list. */
2775 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2779 /* Ignore sections which are not loaded or which have no contents. */
2780 if (IGNORE_SECTION (output_bfd
, s
))
2783 /* Once we reach section 's' stop our seach. This prevents two
2784 warning messages from being produced, one for 'section A overlaps
2785 section B' and one for 'section B overlaps section A'. */
2786 for (os
= output_bfd
->sections
; os
!= s
; os
= os
->next
)
2793 /* Only consider loadable sections with real contents. */
2794 if (IGNORE_SECTION (output_bfd
, os
))
2797 /* We must check the sections' LMA addresses not their
2798 VMA addresses because overlay sections can have
2799 overlapping VMAs but they must have distinct LMAs. */
2800 s_start
= bfd_section_lma (output_bfd
, s
);
2801 os_start
= bfd_section_lma (output_bfd
, os
);
2802 s_end
= s_start
+ bfd_section_size (output_bfd
, s
) / opb
- 1;
2803 os_end
= os_start
+ bfd_section_size (output_bfd
, os
) / opb
- 1;
2805 /* Look for an overlap. */
2806 if ((s_end
< os_start
) || (s_start
> os_end
))
2810 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2811 s
->name
, s_start
, s_end
, os
->name
, os_start
, os_end
);
2813 /* Once we have found one overlap for this section,
2814 stop looking for others. */
2820 /* Make sure the new address is within the region. We explicitly permit the
2821 current address to be at the exact end of the region when the address is
2822 non-zero, in case the region is at the end of addressable memory and the
2823 calculation wraps around. */
2826 os_region_check (os
, region
, tree
, base
)
2827 lang_output_section_statement_type
*os
;
2828 struct memory_region_struct
*region
;
2832 if ((region
->current
< region
->origin
2833 || (region
->current
- region
->origin
> region
->length
))
2834 && ((region
->current
!= region
->origin
+ region
->length
)
2837 if (tree
!= (etree_type
*) NULL
)
2839 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2841 os
->bfd_section
->owner
,
2842 os
->bfd_section
->name
,
2847 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2849 os
->bfd_section
->owner
,
2850 os
->bfd_section
->name
);
2852 /* Reset the region pointer. */
2853 region
->current
= region
->origin
;
2857 /* Set the sizes for all the output sections. */
2860 lang_size_sections_1 (s
, output_section_statement
, prev
, fill
, dot
, relax
)
2861 lang_statement_union_type
*s
;
2862 lang_output_section_statement_type
*output_section_statement
;
2863 lang_statement_union_type
**prev
;
2868 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2869 ldfile_output_machine
);
2871 /* Size up the sections from their constituent parts. */
2872 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
2874 switch (s
->header
.type
)
2876 case lang_output_section_statement_enum
:
2879 lang_output_section_statement_type
*os
;
2881 os
= &s
->output_section_statement
;
2882 if (os
->bfd_section
== NULL
)
2883 /* This section was never actually created. */
2886 /* If this is a COFF shared library section, use the size and
2887 address from the input section. FIXME: This is COFF
2888 specific; it would be cleaner if there were some other way
2889 to do this, but nothing simple comes to mind. */
2890 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
2894 if (os
->children
.head
== NULL
2895 || os
->children
.head
->header
.next
!= NULL
2896 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
2897 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2900 input
= os
->children
.head
->input_section
.section
;
2901 bfd_set_section_vma (os
->bfd_section
->owner
,
2903 bfd_section_vma (input
->owner
, input
));
2904 os
->bfd_section
->_raw_size
= input
->_raw_size
;
2908 if (bfd_is_abs_section (os
->bfd_section
))
2910 /* No matter what happens, an abs section starts at zero. */
2911 ASSERT (os
->bfd_section
->vma
== 0);
2915 if (os
->addr_tree
== (etree_type
*) NULL
)
2917 /* No address specified for this section, get one
2918 from the region specification. */
2919 if (os
->region
== (lang_memory_region_type
*) NULL
2920 || (((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2921 & (SEC_ALLOC
| SEC_LOAD
)) != 0)
2922 && os
->region
->name
[0] == '*'
2923 && strcmp (os
->region
->name
, "*default*") == 0))
2925 os
->region
= lang_memory_default (os
->bfd_section
);
2928 /* If a loadable section is using the default memory
2929 region, and some non default memory regions were
2930 defined, issue a warning. */
2931 if ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2932 & (SEC_ALLOC
| SEC_LOAD
)) != 0
2933 && ! link_info
.relocateable
2934 && strcmp (os
->region
->name
, "*default*") == 0
2935 && lang_memory_region_list
!= NULL
2936 && (strcmp (lang_memory_region_list
->name
,
2938 || lang_memory_region_list
->next
!= NULL
))
2939 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2940 bfd_get_section_name (output_bfd
,
2943 dot
= os
->region
->current
;
2945 if (os
->section_alignment
== -1)
2950 dot
= align_power (dot
,
2951 os
->bfd_section
->alignment_power
);
2953 if (dot
!= olddot
&& config
.warn_section_align
)
2954 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2955 os
->name
, (unsigned int) (dot
- olddot
));
2962 r
= exp_fold_tree (os
->addr_tree
,
2964 lang_allocating_phase_enum
,
2966 if (r
.valid_p
== false)
2968 einfo (_("%F%S: non constant address expression for section %s\n"),
2971 dot
= r
.value
+ r
.section
->bfd_section
->vma
;
2974 /* The section starts here.
2975 First, align to what the section needs. */
2977 if (os
->section_alignment
!= -1)
2978 dot
= align_power (dot
, os
->section_alignment
);
2980 bfd_set_section_vma (0, os
->bfd_section
, dot
);
2982 os
->bfd_section
->output_offset
= 0;
2985 lang_size_sections_1 (os
->children
.head
, os
, &os
->children
.head
,
2986 os
->fill
, dot
, relax
);
2988 /* Put the section within the requested block size, or
2989 align at the block boundary. */
2990 after
= ALIGN_N (os
->bfd_section
->vma
2991 + os
->bfd_section
->_raw_size
/ opb
,
2992 /* The coercion here is important, see ld.h. */
2993 (bfd_vma
) os
->block_value
);
2995 if (bfd_is_abs_section (os
->bfd_section
))
2996 ASSERT (after
== os
->bfd_section
->vma
);
2998 os
->bfd_section
->_raw_size
=
2999 (after
- os
->bfd_section
->vma
) * opb
;
3000 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3001 os
->processed
= true;
3003 /* Update dot in the region ?
3004 We only do this if the section is going to be allocated,
3005 since unallocated sections do not contribute to the region's
3006 overall size in memory.
3008 If the SEC_NEVER_LOAD bit is not set, it will affect the
3009 addresses of sections after it. We have to update
3011 if (os
->region
!= (lang_memory_region_type
*) NULL
3012 && ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
3013 & SEC_NEVER_LOAD
) == 0
3014 || (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
3015 & (SEC_ALLOC
| SEC_LOAD
))))
3017 os
->region
->current
= dot
;
3019 /* Make sure the new address is within the region. */
3020 os_region_check (os
, os
->region
, os
->addr_tree
,
3021 os
->bfd_section
->vma
);
3023 /* If there's no load address specified, use the run
3024 region as the load region. */
3025 if (os
->lma_region
== NULL
&& os
->load_base
== NULL
)
3026 os
->lma_region
= os
->region
;
3028 if (os
->lma_region
!= NULL
)
3030 if (os
->load_base
!= NULL
)
3032 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
3036 /* Don't allocate twice. */
3037 if (os
->lma_region
!= os
->region
)
3039 /* Set load_base, which will be handled later. */
3041 exp_intop (os
->lma_region
->current
);
3042 os
->lma_region
->current
+=
3043 os
->bfd_section
->_raw_size
/ opb
;
3044 os_region_check (os
, os
->lma_region
, NULL
,
3045 os
->bfd_section
->lma
);
3053 case lang_constructors_statement_enum
:
3054 dot
= lang_size_sections_1 (constructor_list
.head
,
3055 output_section_statement
,
3056 &s
->wild_statement
.children
.head
,
3060 case lang_data_statement_enum
:
3062 unsigned int size
= 0;
3064 s
->data_statement
.output_vma
=
3065 dot
- output_section_statement
->bfd_section
->vma
;
3066 s
->data_statement
.output_section
=
3067 output_section_statement
->bfd_section
;
3069 switch (s
->data_statement
.type
)
3090 output_section_statement
->bfd_section
->_raw_size
+= size
;
3091 /* The output section gets contents, and then we inspect for
3092 any flags set in the input script which override any ALLOC. */
3093 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
3094 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
))
3096 output_section_statement
->bfd_section
->flags
|=
3097 SEC_ALLOC
| SEC_LOAD
;
3102 case lang_reloc_statement_enum
:
3106 s
->reloc_statement
.output_vma
=
3107 dot
- output_section_statement
->bfd_section
->vma
;
3108 s
->reloc_statement
.output_section
=
3109 output_section_statement
->bfd_section
;
3110 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
3112 output_section_statement
->bfd_section
->_raw_size
+= size
;
3116 case lang_wild_statement_enum
:
3118 dot
= lang_size_sections_1 (s
->wild_statement
.children
.head
,
3119 output_section_statement
,
3120 &s
->wild_statement
.children
.head
,
3125 case lang_object_symbols_statement_enum
:
3126 link_info
.create_object_symbols_section
=
3127 output_section_statement
->bfd_section
;
3129 case lang_output_statement_enum
:
3130 case lang_target_statement_enum
:
3132 case lang_input_section_enum
:
3136 i
= (*prev
)->input_section
.section
;
3139 if (i
->_cooked_size
== 0)
3140 i
->_cooked_size
= i
->_raw_size
;
3146 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
3147 einfo (_("%P%F: can't relax section: %E\n"));
3151 dot
= size_input_section (prev
, output_section_statement
,
3152 output_section_statement
->fill
, dot
);
3155 case lang_input_statement_enum
:
3157 case lang_fill_statement_enum
:
3158 s
->fill_statement
.output_section
=
3159 output_section_statement
->bfd_section
;
3161 fill
= s
->fill_statement
.fill
;
3163 case lang_assignment_statement_enum
:
3165 bfd_vma newdot
= dot
;
3167 exp_fold_tree (s
->assignment_statement
.exp
,
3168 output_section_statement
,
3169 lang_allocating_phase_enum
,
3175 if (output_section_statement
== abs_output_section
)
3177 /* If we don't have an output section, then just adjust
3178 the default memory address. */
3179 lang_memory_region_lookup ("*default*")->current
= newdot
;
3183 /* Insert a pad after this statement. We can't
3184 put the pad before when relaxing, in case the
3185 assignment references dot. */
3186 insert_pad (&s
->header
.next
, fill
, (newdot
- dot
) * opb
,
3187 output_section_statement
->bfd_section
, dot
);
3189 /* Don't neuter the pad below when relaxing. */
3198 case lang_padding_statement_enum
:
3199 /* If this is the first time lang_size_sections is called,
3200 we won't have any padding statements. If this is the
3201 second or later passes when relaxing, we should allow
3202 padding to shrink. If padding is needed on this pass, it
3203 will be added back in. */
3204 s
->padding_statement
.size
= 0;
3206 /* Make sure output_offset is valid. If relaxation shrinks
3207 the section and this pad isn't needed, it's possible to
3208 have output_offset larger than the final size of the
3209 section. bfd_set_section_contents will complain even for
3210 a pad size of zero. */
3211 s
->padding_statement
.output_offset
3212 = dot
- output_section_statement
->bfd_section
->vma
;
3215 case lang_group_statement_enum
:
3216 dot
= lang_size_sections_1 (s
->group_statement
.children
.head
,
3217 output_section_statement
,
3218 &s
->group_statement
.children
.head
,
3226 /* We can only get here when relaxing is turned on. */
3227 case lang_address_statement_enum
:
3230 prev
= &s
->header
.next
;
3236 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
3237 lang_statement_union_type
*s
;
3238 lang_output_section_statement_type
*output_section_statement
;
3239 lang_statement_union_type
**prev
;
3246 exp_data_seg
.phase
= exp_dataseg_none
;
3247 result
= lang_size_sections_1 (s
, output_section_statement
, prev
, fill
,
3249 if (exp_data_seg
.phase
== exp_dataseg_end_seen
)
3251 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3252 a page could be saved in the data segment. */
3253 bfd_vma first
, last
;
3255 first
= -exp_data_seg
.base
& (exp_data_seg
.pagesize
- 1);
3256 last
= exp_data_seg
.end
& (exp_data_seg
.pagesize
- 1);
3258 && ((exp_data_seg
.base
& ~(exp_data_seg
.pagesize
- 1))
3259 != (exp_data_seg
.end
& ~(exp_data_seg
.pagesize
- 1)))
3260 && first
+ last
<= exp_data_seg
.pagesize
)
3262 exp_data_seg
.phase
= exp_dataseg_adjust
;
3263 result
= lang_size_sections_1 (s
, output_section_statement
, prev
,
3272 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
3273 lang_statement_union_type
*s
;
3274 lang_output_section_statement_type
*output_section_statement
;
3278 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3279 ldfile_output_machine
);
3281 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
3283 switch (s
->header
.type
)
3285 case lang_constructors_statement_enum
:
3286 dot
= lang_do_assignments (constructor_list
.head
,
3287 output_section_statement
,
3292 case lang_output_section_statement_enum
:
3294 lang_output_section_statement_type
*os
;
3296 os
= &(s
->output_section_statement
);
3297 if (os
->bfd_section
!= NULL
)
3299 dot
= os
->bfd_section
->vma
;
3300 (void) lang_do_assignments (os
->children
.head
, os
,
3302 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3307 /* If nothing has been placed into the output section then
3308 it won't have a bfd_section. */
3309 if (os
->bfd_section
)
3311 os
->bfd_section
->lma
3312 = exp_get_abs_int (os
->load_base
, 0, "load base",
3313 lang_final_phase_enum
);
3318 case lang_wild_statement_enum
:
3320 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
3321 output_section_statement
,
3326 case lang_object_symbols_statement_enum
:
3327 case lang_output_statement_enum
:
3328 case lang_target_statement_enum
:
3330 case lang_common_statement_enum
:
3333 case lang_data_statement_enum
:
3335 etree_value_type value
;
3337 value
= exp_fold_tree (s
->data_statement
.exp
,
3339 lang_final_phase_enum
, dot
, &dot
);
3340 s
->data_statement
.value
= value
.value
;
3341 if (value
.valid_p
== false)
3342 einfo (_("%F%P: invalid data statement\n"));
3346 switch (s
->data_statement
.type
)
3370 case lang_reloc_statement_enum
:
3372 etree_value_type value
;
3374 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
3376 lang_final_phase_enum
, dot
, &dot
);
3377 s
->reloc_statement
.addend_value
= value
.value
;
3378 if (value
.valid_p
== false)
3379 einfo (_("%F%P: invalid reloc statement\n"));
3381 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
) / opb
;
3384 case lang_input_section_enum
:
3386 asection
*in
= s
->input_section
.section
;
3388 if (in
->_cooked_size
!= 0)
3389 dot
+= in
->_cooked_size
/ opb
;
3391 dot
+= in
->_raw_size
/ opb
;
3395 case lang_input_statement_enum
:
3397 case lang_fill_statement_enum
:
3398 fill
= s
->fill_statement
.fill
;
3400 case lang_assignment_statement_enum
:
3402 exp_fold_tree (s
->assignment_statement
.exp
,
3403 output_section_statement
,
3404 lang_final_phase_enum
,
3410 case lang_padding_statement_enum
:
3411 dot
+= s
->padding_statement
.size
/ opb
;
3414 case lang_group_statement_enum
:
3415 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
3416 output_section_statement
,
3424 case lang_address_statement_enum
:
3432 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3433 operator .startof. (section_name), it produces an undefined symbol
3434 .startof.section_name. Similarly, when it sees
3435 .sizeof. (section_name), it produces an undefined symbol
3436 .sizeof.section_name. For all the output sections, we look for
3437 such symbols, and set them to the correct value. */
3444 if (link_info
.relocateable
)
3447 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3449 const char *secname
;
3451 struct bfd_link_hash_entry
*h
;
3453 secname
= bfd_get_section_name (output_bfd
, s
);
3454 buf
= xmalloc (10 + strlen (secname
));
3456 sprintf (buf
, ".startof.%s", secname
);
3457 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3458 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3460 h
->type
= bfd_link_hash_defined
;
3461 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
3462 h
->u
.def
.section
= bfd_abs_section_ptr
;
3465 sprintf (buf
, ".sizeof.%s", secname
);
3466 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3467 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3471 opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3472 ldfile_output_machine
);
3473 h
->type
= bfd_link_hash_defined
;
3474 if (s
->_cooked_size
!= 0)
3475 h
->u
.def
.value
= s
->_cooked_size
/ opb
;
3477 h
->u
.def
.value
= s
->_raw_size
/ opb
;
3478 h
->u
.def
.section
= bfd_abs_section_ptr
;
3488 struct bfd_link_hash_entry
*h
;
3491 if (link_info
.relocateable
|| link_info
.shared
)
3496 if (entry_symbol
== (char *) NULL
)
3498 /* No entry has been specified. Look for start, but don't warn
3499 if we don't find it. */
3500 entry_symbol
= "start";
3504 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
3505 if (h
!= (struct bfd_link_hash_entry
*) NULL
3506 && (h
->type
== bfd_link_hash_defined
3507 || h
->type
== bfd_link_hash_defweak
)
3508 && h
->u
.def
.section
->output_section
!= NULL
)
3512 val
= (h
->u
.def
.value
3513 + bfd_get_section_vma (output_bfd
,
3514 h
->u
.def
.section
->output_section
)
3515 + h
->u
.def
.section
->output_offset
);
3516 if (! bfd_set_start_address (output_bfd
, val
))
3517 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol
);
3524 /* We couldn't find the entry symbol. Try parsing it as a
3526 val
= bfd_scan_vma (entry_symbol
, &send
, 0);
3529 if (! bfd_set_start_address (output_bfd
, val
))
3530 einfo (_("%P%F: can't set start address\n"));
3536 /* Can't find the entry symbol, and it's not a number. Use
3537 the first address in the text section. */
3538 ts
= bfd_get_section_by_name (output_bfd
, entry_section
);
3539 if (ts
!= (asection
*) NULL
)
3542 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3543 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
3544 if (! bfd_set_start_address (output_bfd
,
3545 bfd_get_section_vma (output_bfd
,
3547 einfo (_("%P%F: can't set start address\n"));
3552 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3559 /* This is a small function used when we want to ignore errors from
3563 #ifdef ANSI_PROTOTYPES
3564 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED
, ...)
3566 ignore_bfd_errors (s
)
3567 const char *s ATTRIBUTE_UNUSED
;
3570 /* Don't do anything. */
3573 /* Check that the architecture of all the input files is compatible
3574 with the output file. Also call the backend to let it do any
3575 other checking that is needed. */
3580 lang_statement_union_type
*file
;
3582 const bfd_arch_info_type
*compatible
;
3584 for (file
= file_chain
.head
;
3585 file
!= (lang_statement_union_type
*) NULL
;
3586 file
= file
->input_statement
.next
)
3588 input_bfd
= file
->input_statement
.the_bfd
;
3589 compatible
= bfd_arch_get_compatible (input_bfd
, output_bfd
);
3591 /* In general it is not possible to perform a relocatable
3592 link between differing object formats when the input
3593 file has relocations, because the relocations in the
3594 input format may not have equivalent representations in
3595 the output format (and besides BFD does not translate
3596 relocs for other link purposes than a final link). */
3597 if ((link_info
.relocateable
|| link_info
.emitrelocations
)
3598 && (compatible
== NULL
3599 || bfd_get_flavour (input_bfd
) != bfd_get_flavour (output_bfd
))
3600 && (bfd_get_file_flags (input_bfd
) & HAS_RELOC
) != 0)
3602 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3603 bfd_get_target (input_bfd
), input_bfd
,
3604 bfd_get_target (output_bfd
), output_bfd
);
3605 /* einfo with %F exits. */
3608 if (compatible
== NULL
)
3610 if (command_line
.warn_mismatch
)
3611 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3612 bfd_printable_name (input_bfd
), input_bfd
,
3613 bfd_printable_name (output_bfd
));
3615 else if (bfd_count_sections (input_bfd
))
3617 /* If the input bfd has no contents, it shouldn't set the
3618 private data of the output bfd. */
3620 bfd_error_handler_type pfn
= NULL
;
3622 /* If we aren't supposed to warn about mismatched input
3623 files, temporarily set the BFD error handler to a
3624 function which will do nothing. We still want to call
3625 bfd_merge_private_bfd_data, since it may set up
3626 information which is needed in the output file. */
3627 if (! command_line
.warn_mismatch
)
3628 pfn
= bfd_set_error_handler (ignore_bfd_errors
);
3629 if (! bfd_merge_private_bfd_data (input_bfd
, output_bfd
))
3631 if (command_line
.warn_mismatch
)
3632 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3635 if (! command_line
.warn_mismatch
)
3636 bfd_set_error_handler (pfn
);
3641 /* Look through all the global common symbols and attach them to the
3642 correct section. The -sort-common command line switch may be used
3643 to roughly sort the entries by size. */
3648 if (command_line
.inhibit_common_definition
)
3650 if (link_info
.relocateable
3651 && ! command_line
.force_common_definition
)
3654 if (! config
.sort_common
)
3655 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
3660 for (power
= 4; power
>= 0; power
--)
3661 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
3666 /* Place one common symbol in the correct section. */
3669 lang_one_common (h
, info
)
3670 struct bfd_link_hash_entry
*h
;
3673 unsigned int power_of_two
;
3676 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3677 ldfile_output_machine
);
3679 if (h
->type
!= bfd_link_hash_common
)
3683 power_of_two
= h
->u
.c
.p
->alignment_power
;
3685 if (config
.sort_common
3686 && power_of_two
< (unsigned int) *(int *) info
)
3689 section
= h
->u
.c
.p
->section
;
3691 /* Increase the size of the section. */
3692 section
->_cooked_size
= ALIGN_N ((section
->_cooked_size
+ opb
- 1) / opb
,
3693 (bfd_size_type
) (1 << power_of_two
)) * opb
;
3695 /* Adjust the alignment if necessary. */
3696 if (power_of_two
> section
->alignment_power
)
3697 section
->alignment_power
= power_of_two
;
3699 /* Change the symbol from common to defined. */
3700 h
->type
= bfd_link_hash_defined
;
3701 h
->u
.def
.section
= section
;
3702 h
->u
.def
.value
= section
->_cooked_size
;
3704 /* Increase the size of the section. */
3705 section
->_cooked_size
+= size
;
3707 /* Make sure the section is allocated in memory, and make sure that
3708 it is no longer a common section. */
3709 section
->flags
|= SEC_ALLOC
;
3710 section
->flags
&= ~SEC_IS_COMMON
;
3712 if (config
.map_file
!= NULL
)
3714 static boolean header_printed
;
3719 if (! header_printed
)
3721 minfo (_("\nAllocating common symbols\n"));
3722 minfo (_("Common symbol size file\n\n"));
3723 header_printed
= true;
3726 name
= demangle (h
->root
.string
);
3728 len
= strlen (name
);
3743 if (size
<= 0xffffffff)
3744 sprintf (buf
, "%lx", (unsigned long) size
);
3746 sprintf_vma (buf
, size
);
3756 minfo ("%B\n", section
->owner
);
3762 /* Run through the input files and ensure that every input section has
3763 somewhere to go. If one is found without a destination then create
3764 an input request and place it into the statement tree. */
3767 lang_place_orphans ()
3769 LANG_FOR_EACH_INPUT_STATEMENT (file
)
3773 for (s
= file
->the_bfd
->sections
;
3774 s
!= (asection
*) NULL
;
3777 if (s
->output_section
== (asection
*) NULL
)
3779 /* This section of the file is not attatched, root
3780 around for a sensible place for it to go. */
3782 if (file
->just_syms_flag
)
3784 /* We are only retrieving symbol values from this
3785 file. We want the symbols to act as though the
3786 values in the file are absolute. */
3787 s
->output_section
= bfd_abs_section_ptr
;
3788 s
->output_offset
= s
->vma
;
3790 else if (strcmp (s
->name
, "COMMON") == 0)
3792 /* This is a lonely common section which must have
3793 come from an archive. We attach to the section
3794 with the wildcard. */
3795 if (! link_info
.relocateable
3796 || command_line
.force_common_definition
)
3798 if (default_common_section
== NULL
)
3801 /* This message happens when using the
3802 svr3.ifile linker script, so I have
3804 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3806 default_common_section
=
3807 lang_output_section_statement_lookup (".bss");
3810 lang_add_section (&default_common_section
->children
, s
,
3811 default_common_section
, file
);
3814 else if (ldemul_place_orphan (file
, s
))
3818 lang_output_section_statement_type
*os
;
3820 os
= lang_output_section_statement_lookup (s
->name
);
3821 lang_add_section (&os
->children
, s
, os
, file
);
3829 lang_set_flags (ptr
, flags
, invert
)
3830 lang_memory_region_type
*ptr
;
3834 flagword
*ptr_flags
;
3836 ptr_flags
= invert
? &ptr
->not_flags
: &ptr
->flags
;
3842 *ptr_flags
|= SEC_ALLOC
;
3846 *ptr_flags
|= SEC_READONLY
;
3850 *ptr_flags
|= SEC_DATA
;
3854 *ptr_flags
|= SEC_CODE
;
3859 *ptr_flags
|= SEC_LOAD
;
3863 einfo (_("%P%F: invalid syntax in flags\n"));
3870 /* Call a function on each input file. This function will be called
3871 on an archive, but not on the elements. */
3874 lang_for_each_input_file (func
)
3875 void (*func
) PARAMS ((lang_input_statement_type
*));
3877 lang_input_statement_type
*f
;
3879 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
3881 f
= (lang_input_statement_type
*) f
->next_real_file
)
3885 /* Call a function on each file. The function will be called on all
3886 the elements of an archive which are included in the link, but will
3887 not be called on the archive file itself. */
3890 lang_for_each_file (func
)
3891 void (*func
) PARAMS ((lang_input_statement_type
*));
3893 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3904 lang_for_each_input_section (func
)
3905 void (*func
) PARAMS ((bfd
*ab
, asection
*as
));
3907 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3911 for (s
= f
->the_bfd
->sections
;
3912 s
!= (asection
*) NULL
;
3915 func (f
->the_bfd
, s
);
3923 ldlang_add_file (entry
)
3924 lang_input_statement_type
*entry
;
3928 lang_statement_append (&file_chain
,
3929 (lang_statement_union_type
*) entry
,
3932 /* The BFD linker needs to have a list of all input BFDs involved in
3934 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
3935 ASSERT (entry
->the_bfd
!= output_bfd
);
3936 for (pp
= &link_info
.input_bfds
;
3937 *pp
!= (bfd
*) NULL
;
3938 pp
= &(*pp
)->link_next
)
3940 *pp
= entry
->the_bfd
;
3941 entry
->the_bfd
->usrdata
= (PTR
) entry
;
3942 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
3944 /* Look through the sections and check for any which should not be
3945 included in the link. We need to do this now, so that we can
3946 notice when the backend linker tries to report multiple
3947 definition errors for symbols which are in sections we aren't
3948 going to link. FIXME: It might be better to entirely ignore
3949 symbols which are defined in sections which are going to be
3950 discarded. This would require modifying the backend linker for
3951 each backend which might set the SEC_LINK_ONCE flag. If we do
3952 this, we should probably handle SEC_EXCLUDE in the same way. */
3954 bfd_map_over_sections (entry
->the_bfd
, section_already_linked
, (PTR
) entry
);
3958 lang_add_output (name
, from_script
)
3962 /* Make -o on command line override OUTPUT in script. */
3963 if (had_output_filename
== false || !from_script
)
3965 output_filename
= name
;
3966 had_output_filename
= true;
3970 static lang_output_section_statement_type
*current_section
;
3982 for (l
= 0; l
< 32; l
++)
3984 if (i
>= (unsigned int) x
)
3992 lang_output_section_statement_type
*
3993 lang_enter_output_section_statement (output_section_statement_name
,
3994 address_exp
, sectype
, block_value
,
3995 align
, subalign
, ebase
)
3996 const char *output_section_statement_name
;
3997 etree_type
*address_exp
;
3998 enum section_type sectype
;
3999 bfd_vma block_value
;
4001 etree_type
*subalign
;
4004 lang_output_section_statement_type
*os
;
4008 lang_output_section_statement_lookup (output_section_statement_name
);
4010 /* Add this statement to tree. */
4012 add_statement (lang_output_section_statement_enum
,
4013 output_section_statement
);
4015 /* Make next things chain into subchain of this. */
4017 if (os
->addr_tree
== (etree_type
*) NULL
)
4019 os
->addr_tree
= address_exp
;
4021 os
->sectype
= sectype
;
4022 if (sectype
!= noload_section
)
4023 os
->flags
= SEC_NO_FLAGS
;
4025 os
->flags
= SEC_NEVER_LOAD
;
4026 os
->block_value
= block_value
? block_value
: 1;
4027 stat_ptr
= &os
->children
;
4029 os
->subsection_alignment
=
4030 topower (exp_get_value_int (subalign
, -1, "subsection alignment", 0));
4031 os
->section_alignment
=
4032 topower (exp_get_value_int (align
, -1, "section alignment", 0));
4034 os
->load_base
= ebase
;
4041 lang_output_statement_type
*new =
4042 new_stat (lang_output_statement
, stat_ptr
);
4044 new->name
= output_filename
;
4047 /* Reset the current counters in the regions. */
4050 lang_reset_memory_regions ()
4052 lang_memory_region_type
*p
= lang_memory_region_list
;
4055 for (p
= lang_memory_region_list
;
4056 p
!= (lang_memory_region_type
*) NULL
;
4059 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
4060 p
->current
= p
->origin
;
4063 for (o
= output_bfd
->sections
; o
!= NULL
; o
= o
->next
)
4067 /* If the wild pattern was marked KEEP, the member sections
4068 should be as well. */
4071 gc_section_callback (ptr
, sec
, section
, file
, data
)
4072 lang_wild_statement_type
*ptr
;
4073 struct wildcard_list
*sec ATTRIBUTE_UNUSED
;
4075 lang_input_statement_type
*file ATTRIBUTE_UNUSED
;
4076 PTR data ATTRIBUTE_UNUSED
;
4078 if (ptr
->keep_sections
)
4079 section
->flags
|= SEC_KEEP
;
4082 /* Handle a wild statement, marking it against GC. */
4086 lang_wild_statement_type
*s
;
4088 walk_wild (s
, gc_section_callback
, NULL
);
4091 /* Iterate over sections marking them against GC. */
4094 lang_gc_sections_1 (s
)
4095 lang_statement_union_type
*s
;
4097 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
4099 switch (s
->header
.type
)
4101 case lang_wild_statement_enum
:
4102 lang_gc_wild (&s
->wild_statement
);
4104 case lang_constructors_statement_enum
:
4105 lang_gc_sections_1 (constructor_list
.head
);
4107 case lang_output_section_statement_enum
:
4108 lang_gc_sections_1 (s
->output_section_statement
.children
.head
);
4110 case lang_group_statement_enum
:
4111 lang_gc_sections_1 (s
->group_statement
.children
.head
);
4122 struct bfd_link_hash_entry
*h
;
4123 ldlang_undef_chain_list_type
*ulist
, fake_list_start
;
4125 /* Keep all sections so marked in the link script. */
4127 lang_gc_sections_1 (statement_list
.head
);
4129 /* Keep all sections containing symbols undefined on the command-line.
4130 Handle the entry symbol at the same time. */
4132 if (entry_symbol
!= NULL
)
4134 fake_list_start
.next
= ldlang_undef_chain_list_head
;
4135 fake_list_start
.name
= (char *) entry_symbol
;
4136 ulist
= &fake_list_start
;
4139 ulist
= ldlang_undef_chain_list_head
;
4141 for (; ulist
; ulist
= ulist
->next
)
4143 h
= bfd_link_hash_lookup (link_info
.hash
, ulist
->name
,
4144 false, false, false);
4146 if (h
!= (struct bfd_link_hash_entry
*) NULL
4147 && (h
->type
== bfd_link_hash_defined
4148 || h
->type
== bfd_link_hash_defweak
)
4149 && ! bfd_is_abs_section (h
->u
.def
.section
))
4151 h
->u
.def
.section
->flags
|= SEC_KEEP
;
4155 bfd_gc_sections (output_bfd
, &link_info
);
4161 lang_reasonable_defaults ();
4162 current_target
= default_target
;
4164 /* Open the output file. */
4165 lang_for_each_statement (ldlang_open_output
);
4167 ldemul_create_output_section_statements ();
4169 /* Add to the hash table all undefineds on the command line. */
4170 lang_place_undefineds ();
4172 already_linked_table_init ();
4174 /* Create a bfd for each input file. */
4175 current_target
= default_target
;
4176 open_input_bfds (statement_list
.head
, false);
4178 ldemul_after_open ();
4180 already_linked_table_free ();
4182 /* Make sure that we're not mixing architectures. We call this
4183 after all the input files have been opened, but before we do any
4184 other processing, so that any operations merge_private_bfd_data
4185 does on the output file will be known during the rest of the
4189 /* Handle .exports instead of a version script if we're told to do so. */
4190 if (command_line
.version_exports_section
)
4191 lang_do_version_exports_section ();
4193 /* Build all sets based on the information gathered from the input
4195 ldctor_build_sets ();
4197 /* Remove unreferenced sections if asked to. */
4198 if (command_line
.gc_sections
)
4199 lang_gc_sections ();
4201 /* If there were any SEC_MERGE sections, finish their merging, so that
4202 section sizes can be computed. This has to be done after GC of sections,
4203 so that GCed sections are not merged, but before assigning output
4204 sections, since removing whole input sections is hard then. */
4205 bfd_merge_sections (output_bfd
, &link_info
);
4207 /* Size up the common data. */
4210 /* Run through the contours of the script and attach input sections
4211 to the correct output sections. */
4212 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
4213 (lang_output_section_statement_type
*) NULL
);
4215 /* Find any sections not attached explicitly and handle them. */
4216 lang_place_orphans ();
4218 if (! link_info
.relocateable
)
4220 /* Look for a text section and set the readonly attribute in it. */
4221 asection
*found
= bfd_get_section_by_name (output_bfd
, ".text");
4223 if (found
!= (asection
*) NULL
)
4225 if (config
.text_read_only
)
4226 found
->flags
|= SEC_READONLY
;
4228 found
->flags
&= ~SEC_READONLY
;
4232 /* Do anything special before sizing sections. This is where ELF
4233 and other back-ends size dynamic sections. */
4234 ldemul_before_allocation ();
4236 /* We must record the program headers before we try to fix the
4237 section positions, since they will affect SIZEOF_HEADERS. */
4238 lang_record_phdrs ();
4240 /* Size up the sections. */
4241 lang_size_sections (statement_list
.head
,
4243 &statement_list
.head
, 0, (bfd_vma
) 0, NULL
);
4245 /* Now run around and relax if we can. */
4246 if (command_line
.relax
)
4248 /* Keep relaxing until bfd_relax_section gives up. */
4249 boolean relax_again
;
4253 lang_reset_memory_regions ();
4255 relax_again
= false;
4257 /* Note: pe-dll.c does something like this also. If you find
4258 you need to change this code, you probably need to change
4259 pe-dll.c also. DJ */
4261 /* Do all the assignments with our current guesses as to
4263 lang_do_assignments (statement_list
.head
,
4265 (fill_type
*) 0, (bfd_vma
) 0);
4267 /* Perform another relax pass - this time we know where the
4268 globals are, so can make better guess. */
4269 lang_size_sections (statement_list
.head
,
4271 &(statement_list
.head
), 0, (bfd_vma
) 0,
4274 while (relax_again
);
4277 /* See if anything special should be done now we know how big
4279 ldemul_after_allocation ();
4281 /* Fix any .startof. or .sizeof. symbols. */
4282 lang_set_startof ();
4284 /* Do all the assignments, now that we know the final resting places
4285 of all the symbols. */
4287 lang_do_assignments (statement_list
.head
,
4289 (fill_type
*) 0, (bfd_vma
) 0);
4291 /* Make sure that the section addresses make sense. */
4292 if (! link_info
.relocateable
4293 && command_line
.check_section_addresses
)
4294 lang_check_section_addresses ();
4302 /* EXPORTED TO YACC */
4305 lang_add_wild (filespec
, section_list
, keep_sections
)
4306 struct wildcard_spec
*filespec
;
4307 struct wildcard_list
*section_list
;
4308 boolean keep_sections
;
4310 struct wildcard_list
*curr
, *next
;
4311 lang_wild_statement_type
*new;
4313 /* Reverse the list as the parser puts it back to front. */
4314 for (curr
= section_list
, section_list
= NULL
;
4316 section_list
= curr
, curr
= next
)
4318 if (curr
->spec
.name
!= NULL
&& strcmp (curr
->spec
.name
, "COMMON") == 0)
4319 placed_commons
= true;
4322 curr
->next
= section_list
;
4325 if (filespec
!= NULL
&& filespec
->name
!= NULL
)
4327 if (strcmp (filespec
->name
, "*") == 0)
4328 filespec
->name
= NULL
;
4329 else if (! wildcardp (filespec
->name
))
4330 lang_has_input_file
= true;
4333 new = new_stat (lang_wild_statement
, stat_ptr
);
4334 new->filename
= NULL
;
4335 new->filenames_sorted
= false;
4336 if (filespec
!= NULL
)
4338 new->filename
= filespec
->name
;
4339 new->filenames_sorted
= filespec
->sorted
;
4341 new->section_list
= section_list
;
4342 new->keep_sections
= keep_sections
;
4343 lang_list_init (&new->children
);
4347 lang_section_start (name
, address
)
4349 etree_type
*address
;
4351 lang_address_statement_type
*ad
;
4353 ad
= new_stat (lang_address_statement
, stat_ptr
);
4354 ad
->section_name
= name
;
4355 ad
->address
= address
;
4358 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4359 because of a -e argument on the command line, or zero if this is
4360 called by ENTRY in a linker script. Command line arguments take
4364 lang_add_entry (name
, cmdline
)
4368 if (entry_symbol
== NULL
4370 || ! entry_from_cmdline
)
4372 entry_symbol
= name
;
4373 entry_from_cmdline
= cmdline
;
4378 lang_add_target (name
)
4381 lang_target_statement_type
*new = new_stat (lang_target_statement
,
4397 map_option_f
= true;
4405 lang_add_fill (fill
)
4408 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
4415 lang_add_data (type
, exp
)
4417 union etree_union
*exp
;
4420 lang_data_statement_type
*new = new_stat (lang_data_statement
,
4428 /* Create a new reloc statement. RELOC is the BFD relocation type to
4429 generate. HOWTO is the corresponding howto structure (we could
4430 look this up, but the caller has already done so). SECTION is the
4431 section to generate a reloc against, or NAME is the name of the
4432 symbol to generate a reloc against. Exactly one of SECTION and
4433 NAME must be NULL. ADDEND is an expression for the addend. */
4436 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
4437 bfd_reloc_code_real_type reloc
;
4438 reloc_howto_type
*howto
;
4441 union etree_union
*addend
;
4443 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
4447 p
->section
= section
;
4449 p
->addend_exp
= addend
;
4451 p
->addend_value
= 0;
4452 p
->output_section
= NULL
;
4456 lang_assignment_statement_type
*
4457 lang_add_assignment (exp
)
4460 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
4468 lang_add_attribute (attribute
)
4469 enum statement_enum attribute
;
4471 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
4478 if (startup_file
!= (char *) NULL
)
4480 einfo (_("%P%Fmultiple STARTUP files\n"));
4482 first_file
->filename
= name
;
4483 first_file
->local_sym_name
= name
;
4484 first_file
->real
= true;
4486 startup_file
= name
;
4493 lang_float_flag
= maybe
;
4497 lang_leave_output_section_statement (fill
, memspec
, phdrs
, lma_memspec
)
4499 const char *memspec
;
4500 struct lang_output_section_phdr_list
*phdrs
;
4501 const char *lma_memspec
;
4503 current_section
->fill
= fill
;
4504 current_section
->region
= lang_memory_region_lookup (memspec
);
4505 if (strcmp (lma_memspec
, "*default*") != 0)
4507 current_section
->lma_region
= lang_memory_region_lookup (lma_memspec
);
4508 /* If no runtime region has been given, but the load region has
4509 been, use the load region. */
4510 if (strcmp (memspec
, "*default*") == 0)
4511 current_section
->region
= lang_memory_region_lookup (lma_memspec
);
4513 current_section
->phdrs
= phdrs
;
4514 stat_ptr
= &statement_list
;
4517 /* Create an absolute symbol with the given name with the value of the
4518 address of first byte of the section named.
4520 If the symbol already exists, then do nothing. */
4523 lang_abs_symbol_at_beginning_of (secname
, name
)
4524 const char *secname
;
4527 struct bfd_link_hash_entry
*h
;
4529 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4530 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4531 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4533 if (h
->type
== bfd_link_hash_new
4534 || h
->type
== bfd_link_hash_undefined
)
4538 h
->type
= bfd_link_hash_defined
;
4540 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4541 if (sec
== (asection
*) NULL
)
4544 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
4546 h
->u
.def
.section
= bfd_abs_section_ptr
;
4550 /* Create an absolute symbol with the given name with the value of the
4551 address of the first byte after the end of the section named.
4553 If the symbol already exists, then do nothing. */
4556 lang_abs_symbol_at_end_of (secname
, name
)
4557 const char *secname
;
4560 struct bfd_link_hash_entry
*h
;
4562 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4563 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4564 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4566 if (h
->type
== bfd_link_hash_new
4567 || h
->type
== bfd_link_hash_undefined
)
4571 h
->type
= bfd_link_hash_defined
;
4573 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4574 if (sec
== (asection
*) NULL
)
4577 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
4578 + bfd_section_size (output_bfd
, sec
) /
4579 bfd_octets_per_byte (output_bfd
));
4581 h
->u
.def
.section
= bfd_abs_section_ptr
;
4586 lang_statement_append (list
, element
, field
)
4587 lang_statement_list_type
*list
;
4588 lang_statement_union_type
*element
;
4589 lang_statement_union_type
**field
;
4591 *(list
->tail
) = element
;
4595 /* Set the output format type. -oformat overrides scripts. */
4598 lang_add_output_format (format
, big
, little
, from_script
)
4604 if (output_target
== NULL
|| !from_script
)
4606 if (command_line
.endian
== ENDIAN_BIG
4609 else if (command_line
.endian
== ENDIAN_LITTLE
4613 output_target
= format
;
4617 /* Enter a group. This creates a new lang_group_statement, and sets
4618 stat_ptr to build new statements within the group. */
4623 lang_group_statement_type
*g
;
4625 g
= new_stat (lang_group_statement
, stat_ptr
);
4626 lang_list_init (&g
->children
);
4627 stat_ptr
= &g
->children
;
4630 /* Leave a group. This just resets stat_ptr to start writing to the
4631 regular list of statements again. Note that this will not work if
4632 groups can occur inside anything else which can adjust stat_ptr,
4633 but currently they can't. */
4638 stat_ptr
= &statement_list
;
4641 /* Add a new program header. This is called for each entry in a PHDRS
4642 command in a linker script. */
4645 lang_new_phdr (name
, type
, filehdr
, phdrs
, at
, flags
)
4653 struct lang_phdr
*n
, **pp
;
4655 n
= (struct lang_phdr
*) stat_alloc (sizeof (struct lang_phdr
));
4658 n
->type
= exp_get_value_int (type
, 0, "program header type",
4659 lang_final_phase_enum
);
4660 n
->filehdr
= filehdr
;
4665 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4670 /* Record the program header information in the output BFD. FIXME: We
4671 should not be calling an ELF specific function here. */
4674 lang_record_phdrs ()
4678 struct lang_output_section_phdr_list
*last
;
4679 struct lang_phdr
*l
;
4680 lang_statement_union_type
*u
;
4683 secs
= (asection
**) xmalloc (alc
* sizeof (asection
*));
4685 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
4692 for (u
= lang_output_section_statement
.head
;
4694 u
= u
->output_section_statement
.next
)
4696 lang_output_section_statement_type
*os
;
4697 struct lang_output_section_phdr_list
*pl
;
4699 os
= &u
->output_section_statement
;
4706 if (os
->sectype
== noload_section
4707 || os
->bfd_section
== NULL
4708 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
4713 if (os
->bfd_section
== NULL
)
4716 for (; pl
!= NULL
; pl
= pl
->next
)
4718 if (strcmp (pl
->name
, l
->name
) == 0)
4723 secs
= ((asection
**)
4724 xrealloc (secs
, alc
* sizeof (asection
*)));
4726 secs
[c
] = os
->bfd_section
;
4733 if (l
->flags
== NULL
)
4736 flags
= exp_get_vma (l
->flags
, 0, "phdr flags",
4737 lang_final_phase_enum
);
4742 at
= exp_get_vma (l
->at
, 0, "phdr load address",
4743 lang_final_phase_enum
);
4745 if (! bfd_record_phdr (output_bfd
, l
->type
,
4746 l
->flags
!= NULL
, flags
, l
->at
!= NULL
,
4747 at
, l
->filehdr
, l
->phdrs
, c
, secs
))
4748 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4753 /* Make sure all the phdr assignments succeeded. */
4754 for (u
= lang_output_section_statement
.head
;
4756 u
= u
->output_section_statement
.next
)
4758 struct lang_output_section_phdr_list
*pl
;
4760 if (u
->output_section_statement
.bfd_section
== NULL
)
4763 for (pl
= u
->output_section_statement
.phdrs
;
4766 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
4767 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4768 u
->output_section_statement
.name
, pl
->name
);
4772 /* Record a list of sections which may not be cross referenced. */
4775 lang_add_nocrossref (l
)
4776 struct lang_nocrossref
*l
;
4778 struct lang_nocrossrefs
*n
;
4780 n
= (struct lang_nocrossrefs
*) xmalloc (sizeof *n
);
4781 n
->next
= nocrossref_list
;
4783 nocrossref_list
= n
;
4785 /* Set notice_all so that we get informed about all symbols. */
4786 link_info
.notice_all
= true;
4789 /* Overlay handling. We handle overlays with some static variables. */
4791 /* The overlay virtual address. */
4792 static etree_type
*overlay_vma
;
4794 /* The overlay load address. */
4795 static etree_type
*overlay_lma
;
4797 /* Whether nocrossrefs is set for this overlay. */
4798 static int overlay_nocrossrefs
;
4800 /* An expression for the maximum section size seen so far. */
4801 static etree_type
*overlay_max
;
4803 /* A list of all the sections in this overlay. */
4805 struct overlay_list
{
4806 struct overlay_list
*next
;
4807 lang_output_section_statement_type
*os
;
4810 static struct overlay_list
*overlay_list
;
4812 /* Start handling an overlay. */
4815 lang_enter_overlay (vma_expr
, lma_expr
, nocrossrefs
)
4816 etree_type
*vma_expr
;
4817 etree_type
*lma_expr
;
4820 /* The grammar should prevent nested overlays from occurring. */
4821 ASSERT (overlay_vma
== NULL
4822 && overlay_lma
== NULL
4823 && overlay_list
== NULL
4824 && overlay_max
== NULL
);
4826 overlay_vma
= vma_expr
;
4827 overlay_lma
= lma_expr
;
4828 overlay_nocrossrefs
= nocrossrefs
;
4831 /* Start a section in an overlay. We handle this by calling
4832 lang_enter_output_section_statement with the correct VMA and LMA. */
4835 lang_enter_overlay_section (name
)
4838 struct overlay_list
*n
;
4841 lang_enter_output_section_statement (name
, overlay_vma
, normal_section
,
4842 0, 0, 0, overlay_lma
);
4844 /* If this is the first section, then base the VMA and LMA of future
4845 sections on this one. This will work correctly even if `.' is
4846 used in the addresses. */
4847 if (overlay_list
== NULL
)
4849 overlay_vma
= exp_nameop (ADDR
, name
);
4850 overlay_lma
= exp_nameop (LOADADDR
, name
);
4853 /* Remember the section. */
4854 n
= (struct overlay_list
*) xmalloc (sizeof *n
);
4855 n
->os
= current_section
;
4856 n
->next
= overlay_list
;
4859 size
= exp_nameop (SIZEOF
, name
);
4861 /* Adjust the LMA for the next section. */
4862 overlay_lma
= exp_binop ('+', overlay_lma
, size
);
4864 /* Arrange to work out the maximum section end address. */
4865 if (overlay_max
== NULL
)
4868 overlay_max
= exp_binop (MAX_K
, overlay_max
, size
);
4871 /* Finish a section in an overlay. There isn't any special to do
4875 lang_leave_overlay_section (fill
, phdrs
)
4877 struct lang_output_section_phdr_list
*phdrs
;
4884 name
= current_section
->name
;
4886 lang_leave_output_section_statement (fill
, "*default*",
4887 phdrs
, "*default*");
4889 /* Define the magic symbols. */
4891 clean
= xmalloc (strlen (name
) + 1);
4893 for (s1
= name
; *s1
!= '\0'; s1
++)
4894 if (ISALNUM (*s1
) || *s1
== '_')
4898 buf
= xmalloc (strlen (clean
) + sizeof "__load_start_");
4899 sprintf (buf
, "__load_start_%s", clean
);
4900 lang_add_assignment (exp_assop ('=', buf
,
4901 exp_nameop (LOADADDR
, name
)));
4903 buf
= xmalloc (strlen (clean
) + sizeof "__load_stop_");
4904 sprintf (buf
, "__load_stop_%s", clean
);
4905 lang_add_assignment (exp_assop ('=', buf
,
4907 exp_nameop (LOADADDR
, name
),
4908 exp_nameop (SIZEOF
, name
))));
4913 /* Finish an overlay. If there are any overlay wide settings, this
4914 looks through all the sections in the overlay and sets them. */
4917 lang_leave_overlay (fill
, memspec
, phdrs
, lma_memspec
)
4919 const char *memspec
;
4920 struct lang_output_section_phdr_list
*phdrs
;
4921 const char *lma_memspec
;
4923 lang_memory_region_type
*region
;
4924 lang_memory_region_type
* default_region
;
4925 lang_memory_region_type
*lma_region
;
4926 struct overlay_list
*l
;
4927 struct lang_nocrossref
*nocrossref
;
4929 default_region
= lang_memory_region_lookup ("*default*");
4931 if (memspec
== NULL
)
4934 region
= lang_memory_region_lookup (memspec
);
4936 if (lma_memspec
== NULL
)
4939 lma_region
= lang_memory_region_lookup (lma_memspec
);
4946 struct overlay_list
*next
;
4948 if (fill
!= (fill_type
*) 0 && l
->os
->fill
== (fill_type
*) 0)
4951 /* Assign a region to the sections, if one has been specified.
4952 Override the assignment of the default section, but not
4954 if (region
!= NULL
&&
4955 (l
->os
->region
== NULL
||
4956 l
->os
->region
== default_region
))
4957 l
->os
->region
= region
;
4959 /* We only set lma_region for the first overlay section, as
4960 subsequent overlay sections will have load_base set relative
4961 to the first section. Also, don't set lma_region if
4962 load_base is specified. FIXME: There should really be a test
4963 that `AT ( LDADDR )' doesn't conflict with `AT >LMA_REGION'
4964 rather than letting LDADDR simply override LMA_REGION. */
4965 if (lma_region
!= NULL
&& l
->os
->lma_region
== NULL
4966 && l
->next
== NULL
&& l
->os
->load_base
== NULL
)
4967 l
->os
->lma_region
= lma_region
;
4969 if (phdrs
!= NULL
&& l
->os
->phdrs
== NULL
)
4970 l
->os
->phdrs
= phdrs
;
4972 if (overlay_nocrossrefs
)
4974 struct lang_nocrossref
*nc
;
4976 nc
= (struct lang_nocrossref
*) xmalloc (sizeof *nc
);
4977 nc
->name
= l
->os
->name
;
4978 nc
->next
= nocrossref
;
4987 if (nocrossref
!= NULL
)
4988 lang_add_nocrossref (nocrossref
);
4990 /* Update . for the end of the overlay. */
4991 lang_add_assignment (exp_assop ('=', ".",
4992 exp_binop ('+', overlay_vma
, overlay_max
)));
4996 overlay_nocrossrefs
= 0;
4997 overlay_list
= NULL
;
5001 /* Version handling. This is only useful for ELF. */
5003 /* This global variable holds the version tree that we build. */
5005 struct bfd_elf_version_tree
*lang_elf_version_info
;
5008 lang_vers_match_lang_c (expr
, sym
)
5009 struct bfd_elf_version_expr
*expr
;
5012 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
5014 return fnmatch (expr
->pattern
, sym
, 0) == 0;
5018 lang_vers_match_lang_cplusplus (expr
, sym
)
5019 struct bfd_elf_version_expr
*expr
;
5025 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
5028 alt_sym
= cplus_demangle (sym
, /* DMGL_NO_TPARAMS */ 0);
5031 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
5032 Should we early out false in this case? */
5033 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
5037 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
5045 lang_vers_match_lang_java (expr
, sym
)
5046 struct bfd_elf_version_expr
*expr
;
5052 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
5055 alt_sym
= cplus_demangle (sym
, DMGL_JAVA
);
5058 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
5059 Should we early out false in this case? */
5060 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
5064 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
5071 /* This is called for each variable name or match expression. */
5073 struct bfd_elf_version_expr
*
5074 lang_new_vers_pattern (orig
, new, lang
)
5075 struct bfd_elf_version_expr
*orig
;
5079 struct bfd_elf_version_expr
*ret
;
5081 ret
= (struct bfd_elf_version_expr
*) xmalloc (sizeof *ret
);
5085 if (lang
== NULL
|| strcasecmp (lang
, "C") == 0)
5086 ret
->match
= lang_vers_match_lang_c
;
5087 else if (strcasecmp (lang
, "C++") == 0)
5088 ret
->match
= lang_vers_match_lang_cplusplus
;
5089 else if (strcasecmp (lang
, "Java") == 0)
5090 ret
->match
= lang_vers_match_lang_java
;
5093 einfo (_("%X%P: unknown language `%s' in version information\n"),
5095 ret
->match
= lang_vers_match_lang_c
;
5101 /* This is called for each set of variable names and match
5104 struct bfd_elf_version_tree
*
5105 lang_new_vers_node (globals
, locals
)
5106 struct bfd_elf_version_expr
*globals
;
5107 struct bfd_elf_version_expr
*locals
;
5109 struct bfd_elf_version_tree
*ret
;
5111 ret
= (struct bfd_elf_version_tree
*) xmalloc (sizeof *ret
);
5115 ret
->globals
= globals
;
5116 ret
->locals
= locals
;
5118 ret
->name_indx
= (unsigned int) -1;
5123 /* This static variable keeps track of version indices. */
5125 static int version_index
;
5127 /* This is called when we know the name and dependencies of the
5131 lang_register_vers_node (name
, version
, deps
)
5133 struct bfd_elf_version_tree
*version
;
5134 struct bfd_elf_version_deps
*deps
;
5136 struct bfd_elf_version_tree
*t
, **pp
;
5137 struct bfd_elf_version_expr
*e1
;
5142 if ((name
[0] == '\0' && lang_elf_version_info
!= NULL
)
5143 || (lang_elf_version_info
&& lang_elf_version_info
->name
[0] == '\0'))
5145 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5149 /* Make sure this node has a unique name. */
5150 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5151 if (strcmp (t
->name
, name
) == 0)
5152 einfo (_("%X%P: duplicate version tag `%s'\n"), name
);
5154 /* Check the global and local match names, and make sure there
5155 aren't any duplicates. */
5157 for (e1
= version
->globals
; e1
!= NULL
; e1
= e1
->next
)
5159 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5161 struct bfd_elf_version_expr
*e2
;
5163 for (e2
= t
->locals
; e2
!= NULL
; e2
= e2
->next
)
5164 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5165 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5170 for (e1
= version
->locals
; e1
!= NULL
; e1
= e1
->next
)
5172 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5174 struct bfd_elf_version_expr
*e2
;
5176 for (e2
= t
->globals
; e2
!= NULL
; e2
= e2
->next
)
5177 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5178 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5183 version
->deps
= deps
;
5184 version
->name
= name
;
5185 if (name
[0] != '\0')
5188 version
->vernum
= version_index
;
5191 version
->vernum
= 0;
5193 for (pp
= &lang_elf_version_info
; *pp
!= NULL
; pp
= &(*pp
)->next
)
5198 /* This is called when we see a version dependency. */
5200 struct bfd_elf_version_deps
*
5201 lang_add_vers_depend (list
, name
)
5202 struct bfd_elf_version_deps
*list
;
5205 struct bfd_elf_version_deps
*ret
;
5206 struct bfd_elf_version_tree
*t
;
5208 ret
= (struct bfd_elf_version_deps
*) xmalloc (sizeof *ret
);
5211 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5213 if (strcmp (t
->name
, name
) == 0)
5215 ret
->version_needed
= t
;
5220 einfo (_("%X%P: unable to find version dependency `%s'\n"), name
);
5226 lang_do_version_exports_section ()
5228 struct bfd_elf_version_expr
*greg
= NULL
, *lreg
;
5230 LANG_FOR_EACH_INPUT_STATEMENT (is
)
5232 asection
*sec
= bfd_get_section_by_name (is
->the_bfd
, ".exports");
5239 len
= bfd_section_size (is
->the_bfd
, sec
);
5240 contents
= xmalloc (len
);
5241 if (!bfd_get_section_contents (is
->the_bfd
, sec
, contents
, 0, len
))
5242 einfo (_("%X%P: unable to read .exports section contents\n"), sec
);
5245 while (p
< contents
+ len
)
5247 greg
= lang_new_vers_pattern (greg
, p
, NULL
);
5248 p
= strchr (p
, '\0') + 1;
5251 /* Do not free the contents, as we used them creating the regex. */
5253 /* Do not include this section in the link. */
5254 bfd_set_section_flags (is
->the_bfd
, sec
,
5255 bfd_get_section_flags (is
->the_bfd
, sec
) | SEC_EXCLUDE
);
5258 lreg
= lang_new_vers_pattern (NULL
, "*", NULL
);
5259 lang_register_vers_node (command_line
.version_exports_section
,
5260 lang_new_vers_node (greg
, lreg
), NULL
);
5264 lang_add_unique (name
)
5267 struct unique_sections
*ent
;
5269 for (ent
= unique_section_list
; ent
; ent
= ent
->next
)
5270 if (strcmp (ent
->name
, name
) == 0)
5273 ent
= (struct unique_sections
*) xmalloc (sizeof *ent
);
5274 ent
->name
= xstrdup (name
);
5275 ent
->next
= unique_section_list
;
5276 unique_section_list
= ent
;