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 #define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
47 /* Locals variables. */
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 bfd_boolean placed_commons
= FALSE
;
55 static lang_output_section_statement_type
*default_common_section
;
56 static bfd_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 /* Forward declarations. */
65 static void exp_init_os (etree_type
*);
66 static bfd_boolean
wildcardp (const char *);
67 static lang_input_statement_type
*lookup_name (const char *);
68 static bfd_boolean
load_symbols (lang_input_statement_type
*,
69 lang_statement_list_type
*);
70 static void insert_undefined (const char *);
71 static void print_statement (lang_statement_union_type
*,
72 lang_output_section_statement_type
*);
73 static void print_statement_list (lang_statement_union_type
*,
74 lang_output_section_statement_type
*);
75 static void print_statements (void);
76 static bfd_boolean
lang_one_common (struct bfd_link_hash_entry
*, void *);
77 static void lang_record_phdrs (void);
78 static void lang_do_version_exports_section (void);
80 typedef void (*callback_t
) (lang_wild_statement_type
*, struct wildcard_list
*,
81 asection
*, lang_input_statement_type
*, void *);
83 /* Exported variables. */
84 lang_output_section_statement_type
*abs_output_section
;
85 lang_statement_list_type lang_output_section_statement
;
86 lang_statement_list_type
*stat_ptr
= &statement_list
;
87 lang_statement_list_type file_chain
= { NULL
, NULL
};
88 struct bfd_sym_chain entry_symbol
= { NULL
, NULL
};
89 const char *entry_section
= ".text";
90 bfd_boolean entry_from_cmdline
;
91 bfd_boolean lang_has_input_file
= FALSE
;
92 bfd_boolean had_output_filename
= FALSE
;
93 bfd_boolean lang_float_flag
= FALSE
;
94 bfd_boolean delete_output_file_on_failure
= FALSE
;
95 struct lang_nocrossrefs
*nocrossref_list
;
96 struct unique_sections
*unique_section_list
;
97 static bfd_boolean ldlang_sysrooted_script
= FALSE
;
99 etree_type
*base
; /* Relocation base - or null */
101 #define new_stat(x, y) \
102 (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
104 #define outside_section_address(q) \
105 ((q)->output_offset + (q)->output_section->vma)
107 #define outside_symbol_address(q) \
108 ((q)->value + outside_section_address (q->section))
110 #define SECTION_NAME_MAP_LENGTH (16)
113 stat_alloc (size_t size
)
115 return obstack_alloc (&stat_obstack
, size
);
119 unique_section_p (const char *secnam
)
121 struct unique_sections
*unam
;
123 for (unam
= unique_section_list
; unam
; unam
= unam
->next
)
124 if (wildcardp (unam
->name
)
125 ? fnmatch (unam
->name
, secnam
, 0) == 0
126 : strcmp (unam
->name
, secnam
) == 0)
134 /* Generic traversal routines for finding matching sections. */
137 walk_wild_section (lang_wild_statement_type
*ptr
,
138 lang_input_statement_type
*file
,
144 if (file
->just_syms_flag
)
147 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
149 struct wildcard_list
*sec
;
151 sec
= ptr
->section_list
;
153 (*callback
) (ptr
, sec
, s
, file
, data
);
157 bfd_boolean skip
= FALSE
;
158 struct name_list
*list_tmp
;
160 /* Don't process sections from files which were
162 for (list_tmp
= sec
->spec
.exclude_name_list
;
164 list_tmp
= list_tmp
->next
)
166 if (wildcardp (list_tmp
->name
))
167 skip
= fnmatch (list_tmp
->name
, file
->filename
, 0) == 0;
169 skip
= strcmp (list_tmp
->name
, file
->filename
) == 0;
171 /* If this file is part of an archive, and the archive is
172 excluded, exclude this file. */
173 if (! skip
&& file
->the_bfd
!= NULL
174 && file
->the_bfd
->my_archive
!= NULL
175 && file
->the_bfd
->my_archive
->filename
!= NULL
)
177 if (wildcardp (list_tmp
->name
))
178 skip
= fnmatch (list_tmp
->name
,
179 file
->the_bfd
->my_archive
->filename
,
182 skip
= strcmp (list_tmp
->name
,
183 file
->the_bfd
->my_archive
->filename
) == 0;
190 if (!skip
&& sec
->spec
.name
!= NULL
)
192 const char *sname
= bfd_get_section_name (file
->the_bfd
, s
);
194 if (wildcardp (sec
->spec
.name
))
195 skip
= fnmatch (sec
->spec
.name
, sname
, 0) != 0;
197 skip
= strcmp (sec
->spec
.name
, sname
) != 0;
201 (*callback
) (ptr
, sec
, s
, file
, data
);
208 /* Handle a wild statement for a single file F. */
211 walk_wild_file (lang_wild_statement_type
*s
,
212 lang_input_statement_type
*f
,
216 if (f
->the_bfd
== NULL
217 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
218 walk_wild_section (s
, f
, callback
, data
);
223 /* This is an archive file. We must map each member of the
224 archive separately. */
225 member
= bfd_openr_next_archived_file (f
->the_bfd
, NULL
);
226 while (member
!= NULL
)
228 /* When lookup_name is called, it will call the add_symbols
229 entry point for the archive. For each element of the
230 archive which is included, BFD will call ldlang_add_file,
231 which will set the usrdata field of the member to the
232 lang_input_statement. */
233 if (member
->usrdata
!= NULL
)
235 walk_wild_section (s
, member
->usrdata
, callback
, data
);
238 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
244 walk_wild (lang_wild_statement_type
*s
, callback_t callback
, void *data
)
246 const char *file_spec
= s
->filename
;
248 if (file_spec
== NULL
)
250 /* Perform the iteration over all files in the list. */
251 LANG_FOR_EACH_INPUT_STATEMENT (f
)
253 walk_wild_file (s
, f
, callback
, data
);
256 else if (wildcardp (file_spec
))
258 LANG_FOR_EACH_INPUT_STATEMENT (f
)
260 if (fnmatch (file_spec
, f
->filename
, FNM_FILE_NAME
) == 0)
261 walk_wild_file (s
, f
, callback
, data
);
266 lang_input_statement_type
*f
;
268 /* Perform the iteration over a single file. */
269 f
= lookup_name (file_spec
);
271 walk_wild_file (s
, f
, callback
, data
);
275 /* lang_for_each_statement walks the parse tree and calls the provided
276 function for each node. */
279 lang_for_each_statement_worker (void (*func
) (lang_statement_union_type
*),
280 lang_statement_union_type
*s
)
282 for (; s
!= NULL
; s
= s
->header
.next
)
286 switch (s
->header
.type
)
288 case lang_constructors_statement_enum
:
289 lang_for_each_statement_worker (func
, constructor_list
.head
);
291 case lang_output_section_statement_enum
:
292 lang_for_each_statement_worker
294 s
->output_section_statement
.children
.head
);
296 case lang_wild_statement_enum
:
297 lang_for_each_statement_worker
299 s
->wild_statement
.children
.head
);
301 case lang_group_statement_enum
:
302 lang_for_each_statement_worker (func
,
303 s
->group_statement
.children
.head
);
305 case lang_data_statement_enum
:
306 case lang_reloc_statement_enum
:
307 case lang_object_symbols_statement_enum
:
308 case lang_output_statement_enum
:
309 case lang_target_statement_enum
:
310 case lang_input_section_enum
:
311 case lang_input_statement_enum
:
312 case lang_assignment_statement_enum
:
313 case lang_padding_statement_enum
:
314 case lang_address_statement_enum
:
315 case lang_fill_statement_enum
:
325 lang_for_each_statement (void (*func
) (lang_statement_union_type
*))
327 lang_for_each_statement_worker (func
, statement_list
.head
);
330 /*----------------------------------------------------------------------*/
333 lang_list_init (lang_statement_list_type
*list
)
336 list
->tail
= &list
->head
;
339 /* Build a new statement node for the parse tree. */
341 static lang_statement_union_type
*
342 new_statement (enum statement_enum type
,
344 lang_statement_list_type
*list
)
346 lang_statement_union_type
*new;
348 new = stat_alloc (size
);
349 new->header
.type
= type
;
350 new->header
.next
= NULL
;
351 lang_statement_append (list
, new, &new->header
.next
);
355 /* Build a new input file node for the language. There are several
356 ways in which we treat an input file, eg, we only look at symbols,
357 or prefix it with a -l etc.
359 We can be supplied with requests for input files more than once;
360 they may, for example be split over several lines like foo.o(.text)
361 foo.o(.data) etc, so when asked for a file we check that we haven't
362 got it already so we don't duplicate the bfd. */
364 static lang_input_statement_type
*
365 new_afile (const char *name
,
366 lang_input_file_enum_type file_type
,
368 bfd_boolean add_to_list
)
370 lang_input_statement_type
*p
;
373 p
= new_stat (lang_input_statement
, stat_ptr
);
376 p
= stat_alloc (sizeof (lang_input_statement_type
));
377 p
->header
.next
= NULL
;
380 lang_has_input_file
= TRUE
;
382 p
->sysrooted
= FALSE
;
385 case lang_input_file_is_symbols_only_enum
:
387 p
->is_archive
= FALSE
;
389 p
->local_sym_name
= name
;
390 p
->just_syms_flag
= TRUE
;
391 p
->search_dirs_flag
= FALSE
;
393 case lang_input_file_is_fake_enum
:
395 p
->is_archive
= FALSE
;
397 p
->local_sym_name
= name
;
398 p
->just_syms_flag
= FALSE
;
399 p
->search_dirs_flag
= FALSE
;
401 case lang_input_file_is_l_enum
:
402 p
->is_archive
= TRUE
;
405 p
->local_sym_name
= concat ("-l", name
, NULL
);
406 p
->just_syms_flag
= FALSE
;
407 p
->search_dirs_flag
= TRUE
;
409 case lang_input_file_is_marker_enum
:
411 p
->is_archive
= FALSE
;
413 p
->local_sym_name
= name
;
414 p
->just_syms_flag
= FALSE
;
415 p
->search_dirs_flag
= TRUE
;
417 case lang_input_file_is_search_file_enum
:
418 p
->sysrooted
= ldlang_sysrooted_script
;
420 p
->is_archive
= FALSE
;
422 p
->local_sym_name
= name
;
423 p
->just_syms_flag
= FALSE
;
424 p
->search_dirs_flag
= TRUE
;
426 case lang_input_file_is_file_enum
:
428 p
->is_archive
= FALSE
;
430 p
->local_sym_name
= name
;
431 p
->just_syms_flag
= FALSE
;
432 p
->search_dirs_flag
= FALSE
;
439 p
->next_real_file
= NULL
;
442 p
->dynamic
= config
.dynamic_link
;
443 p
->whole_archive
= whole_archive
;
445 lang_statement_append (&input_file_chain
,
446 (lang_statement_union_type
*) p
,
451 lang_input_statement_type
*
452 lang_add_input_file (const char *name
,
453 lang_input_file_enum_type file_type
,
456 lang_has_input_file
= TRUE
;
457 return new_afile (name
, file_type
, target
, TRUE
);
460 /* Build enough state so that the parser can build its tree. */
465 obstack_begin (&stat_obstack
, 1000);
467 stat_ptr
= &statement_list
;
469 lang_list_init (stat_ptr
);
471 lang_list_init (&input_file_chain
);
472 lang_list_init (&lang_output_section_statement
);
473 lang_list_init (&file_chain
);
474 first_file
= lang_add_input_file (NULL
, lang_input_file_is_marker_enum
,
477 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
479 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
482 /*----------------------------------------------------------------------
483 A region is an area of memory declared with the
484 MEMORY { name:org=exp, len=exp ... }
487 We maintain a list of all the regions here.
489 If no regions are specified in the script, then the default is used
490 which is created when looked up to be the entire data space. */
492 static lang_memory_region_type
*lang_memory_region_list
;
493 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
495 lang_memory_region_type
*
496 lang_memory_region_lookup (const char *const name
)
498 lang_memory_region_type
*p
;
499 lang_memory_region_type
*new;
501 /* NAME is NULL for LMA memspecs if no region was specified. */
505 for (p
= lang_memory_region_list
; p
!= NULL
; p
= p
->next
)
507 if (strcmp (p
->name
, name
) == 0)
512 /* This code used to always use the first region in the list as the
513 default region. I changed it to instead use a region
514 encompassing all of memory as the default region. This permits
515 NOLOAD sections to work reasonably without requiring a region.
516 People should specify what region they mean, if they really want
518 if (strcmp (name
, "*default*") == 0)
520 if (lang_memory_region_list
!= NULL
)
521 return lang_memory_region_list
;
525 new = stat_alloc (sizeof (lang_memory_region_type
));
527 new->name
= xstrdup (name
);
530 *lang_memory_region_list_tail
= new;
531 lang_memory_region_list_tail
= &new->next
;
535 new->length
= ~(bfd_size_type
) 0;
537 new->had_full_message
= FALSE
;
542 static lang_memory_region_type
*
543 lang_memory_default (asection
*section
)
545 lang_memory_region_type
*p
;
547 flagword sec_flags
= section
->flags
;
549 /* Override SEC_DATA to mean a writable section. */
550 if ((sec_flags
& (SEC_ALLOC
| SEC_READONLY
| SEC_CODE
)) == SEC_ALLOC
)
551 sec_flags
|= SEC_DATA
;
553 for (p
= lang_memory_region_list
; p
!= NULL
; p
= p
->next
)
555 if ((p
->flags
& sec_flags
) != 0
556 && (p
->not_flags
& sec_flags
) == 0)
561 return lang_memory_region_lookup ("*default*");
564 lang_output_section_statement_type
*
565 lang_output_section_find (const char *const name
)
567 lang_statement_union_type
*u
;
568 lang_output_section_statement_type
*lookup
;
570 for (u
= lang_output_section_statement
.head
; u
!= NULL
; u
= lookup
->next
)
572 lookup
= &u
->output_section_statement
;
573 if (strcmp (name
, lookup
->name
) == 0)
579 lang_output_section_statement_type
*
580 lang_output_section_statement_lookup (const char *const name
)
582 lang_output_section_statement_type
*lookup
;
584 lookup
= lang_output_section_find (name
);
587 lookup
= new_stat (lang_output_section_statement
, stat_ptr
);
588 lookup
->region
= NULL
;
589 lookup
->lma_region
= NULL
;
591 lookup
->block_value
= 1;
595 lookup
->bfd_section
= NULL
;
596 lookup
->processed
= FALSE
;
597 lookup
->sectype
= normal_section
;
598 lookup
->addr_tree
= NULL
;
599 lang_list_init (&lookup
->children
);
601 lookup
->memspec
= NULL
;
603 lookup
->subsection_alignment
= -1;
604 lookup
->section_alignment
= -1;
605 lookup
->load_base
= NULL
;
606 lookup
->update_dot_tree
= NULL
;
607 lookup
->phdrs
= NULL
;
609 lang_statement_append (&lang_output_section_statement
,
610 (lang_statement_union_type
*) lookup
,
617 lang_map_flags (flagword flag
)
619 if (flag
& SEC_ALLOC
)
625 if (flag
& SEC_READONLY
)
638 lang_memory_region_type
*m
;
640 minfo (_("\nMemory Configuration\n\n"));
641 fprintf (config
.map_file
, "%-16s %-18s %-18s %s\n",
642 _("Name"), _("Origin"), _("Length"), _("Attributes"));
644 for (m
= lang_memory_region_list
; m
!= NULL
; m
= m
->next
)
649 fprintf (config
.map_file
, "%-16s ", m
->name
);
651 sprintf_vma (buf
, m
->origin
);
652 minfo ("0x%s ", buf
);
660 minfo ("0x%V", m
->length
);
661 if (m
->flags
|| m
->not_flags
)
669 lang_map_flags (m
->flags
);
675 lang_map_flags (m
->not_flags
);
682 fprintf (config
.map_file
, _("\nLinker script and memory map\n\n"));
687 /* Initialize an output section. */
690 init_os (lang_output_section_statement_type
*s
)
692 section_userdata_type
*new;
694 if (s
->bfd_section
!= NULL
)
697 if (strcmp (s
->name
, DISCARD_SECTION_NAME
) == 0)
698 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME
);
700 new = stat_alloc (sizeof (section_userdata_type
));
702 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
703 if (s
->bfd_section
== NULL
)
704 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
705 if (s
->bfd_section
== NULL
)
707 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
708 output_bfd
->xvec
->name
, s
->name
);
710 s
->bfd_section
->output_section
= s
->bfd_section
;
712 /* We initialize an output sections output offset to minus its own
713 vma to allow us to output a section through itself. */
714 s
->bfd_section
->output_offset
= 0;
715 get_userdata (s
->bfd_section
) = new;
717 /* If there is a base address, make sure that any sections it might
718 mention are initialized. */
719 if (s
->addr_tree
!= NULL
)
720 exp_init_os (s
->addr_tree
);
722 if (s
->load_base
!= NULL
)
723 exp_init_os (s
->load_base
);
726 /* Make sure that all output sections mentioned in an expression are
730 exp_init_os (etree_type
*exp
)
732 switch (exp
->type
.node_class
)
735 exp_init_os (exp
->assign
.src
);
739 exp_init_os (exp
->binary
.lhs
);
740 exp_init_os (exp
->binary
.rhs
);
744 exp_init_os (exp
->trinary
.cond
);
745 exp_init_os (exp
->trinary
.lhs
);
746 exp_init_os (exp
->trinary
.rhs
);
750 exp_init_os (exp
->unary
.child
);
754 switch (exp
->type
.node_code
)
760 lang_output_section_statement_type
*os
;
762 os
= lang_output_section_find (exp
->name
.name
);
763 if (os
!= NULL
&& os
->bfd_section
== NULL
)
774 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
775 once into the output. This routine checks each section, and
776 arrange to discard it if a section of the same name has already
777 been linked. If the section has COMDAT information, then it uses
778 that to decide whether the section should be included. This code
779 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
780 that is, it does not depend solely upon the section name.
781 section_already_linked is called via bfd_map_over_sections. */
783 /* This is the shape of the elements inside the already_linked hash
784 table. It maps a name onto a list of already_linked elements with
785 the same name. It's possible to get more than one element in a
786 list if the COMDAT sections have different names. */
788 struct already_linked_hash_entry
790 struct bfd_hash_entry root
;
791 struct already_linked
*entry
;
794 struct already_linked
796 struct already_linked
*next
;
800 /* The hash table. */
802 static struct bfd_hash_table already_linked_table
;
805 section_already_linked (bfd
*abfd
, asection
*sec
, void *data
)
807 lang_input_statement_type
*entry
= data
;
810 struct already_linked
*l
;
811 struct already_linked_hash_entry
*already_linked_list
;
813 /* If we are only reading symbols from this object, then we want to
814 discard all sections. */
815 if (entry
->just_syms_flag
)
817 bfd_link_just_syms (sec
, &link_info
);
821 flags
= bfd_get_section_flags (abfd
, sec
);
823 if ((flags
& SEC_LINK_ONCE
) == 0)
826 /* FIXME: When doing a relocatable link, we may have trouble
827 copying relocations in other sections that refer to local symbols
828 in the section being discarded. Those relocations will have to
829 be converted somehow; as of this writing I'm not sure that any of
830 the backends handle that correctly.
832 It is tempting to instead not discard link once sections when
833 doing a relocatable link (technically, they should be discarded
834 whenever we are building constructors). However, that fails,
835 because the linker winds up combining all the link once sections
836 into a single large link once section, which defeats the purpose
837 of having link once sections in the first place.
839 Also, not merging link once sections in a relocatable link
840 causes trouble for MIPS ELF, which relies on link once semantics
841 to handle the .reginfo section correctly. */
843 name
= bfd_get_section_name (abfd
, sec
);
845 already_linked_list
=
846 ((struct already_linked_hash_entry
*)
847 bfd_hash_lookup (&already_linked_table
, name
, TRUE
, FALSE
));
849 for (l
= already_linked_list
->entry
; l
!= NULL
; l
= l
->next
)
851 if (sec
->comdat
== NULL
852 || l
->sec
->comdat
== NULL
853 || strcmp (sec
->comdat
->name
, l
->sec
->comdat
->name
) == 0)
855 /* The section has already been linked. See if we should
857 switch (flags
& SEC_LINK_DUPLICATES
)
862 case SEC_LINK_DUPLICATES_DISCARD
:
865 case SEC_LINK_DUPLICATES_ONE_ONLY
:
866 if (sec
->comdat
== NULL
)
867 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
870 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
871 abfd
, name
, sec
->comdat
->name
);
874 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
875 /* FIXME: We should really dig out the contents of both
876 sections and memcmp them. The COFF/PE spec says that
877 the Microsoft linker does not implement this
878 correctly, so I'm not going to bother doing it
881 case SEC_LINK_DUPLICATES_SAME_SIZE
:
882 if (bfd_section_size (abfd
, sec
)
883 != bfd_section_size (l
->sec
->owner
, l
->sec
))
884 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
889 /* Set the output_section field so that lang_add_section
890 does not create a lang_input_section structure for this
891 section. Since there might be a symbol in the section
892 being discarded, we must retain a pointer to the section
893 which we are really going to use. */
894 sec
->output_section
= bfd_abs_section_ptr
;
895 sec
->kept_section
= l
->sec
;
897 if (flags
& SEC_GROUP
)
898 bfd_discard_group (abfd
, sec
);
904 /* This is the first section with this name. Record it. Allocate
905 the memory from the same obstack as the hash table is kept in. */
907 l
= bfd_hash_allocate (&already_linked_table
, sizeof *l
);
910 l
->next
= already_linked_list
->entry
;
911 already_linked_list
->entry
= l
;
914 /* Support routines for the hash table used by section_already_linked,
915 initialize the table, fill in an entry and remove the table. */
917 static struct bfd_hash_entry
*
918 already_linked_newfunc (struct bfd_hash_entry
*entry ATTRIBUTE_UNUSED
,
919 struct bfd_hash_table
*table
,
920 const char *string ATTRIBUTE_UNUSED
)
922 struct already_linked_hash_entry
*ret
=
923 bfd_hash_allocate (table
, sizeof (struct already_linked_hash_entry
));
931 already_linked_table_init (void)
933 if (! bfd_hash_table_init_n (&already_linked_table
,
934 already_linked_newfunc
,
936 einfo (_("%P%F: Failed to create hash table\n"));
940 already_linked_table_free (void)
942 bfd_hash_table_free (&already_linked_table
);
945 /* The wild routines.
947 These expand statements like *(.text) and foo.o to a list of
948 explicit actions, like foo.o(.text), bar.o(.text) and
949 foo.o(.text, .data). */
951 /* Return TRUE if the PATTERN argument is a wildcard pattern.
952 Although backslashes are treated specially if a pattern contains
953 wildcards, we do not consider the mere presence of a backslash to
954 be enough to cause the pattern to be treated as a wildcard.
955 That lets us handle DOS filenames more naturally. */
958 wildcardp (const char *pattern
)
962 for (s
= pattern
; *s
!= '\0'; ++s
)
970 /* Add SECTION to the output section OUTPUT. Do this by creating a
971 lang_input_section statement which is placed at PTR. FILE is the
972 input file which holds SECTION. */
975 lang_add_section (lang_statement_list_type
*ptr
,
977 lang_output_section_statement_type
*output
,
978 lang_input_statement_type
*file
)
983 flags
= bfd_get_section_flags (section
->owner
, section
);
987 /* Discard sections marked with SEC_EXCLUDE if we are doing a final
988 link. Discard debugging sections marked with SEC_EXCLUDE on a
989 relocatable link too. */
990 if ((flags
& SEC_EXCLUDE
) != 0
991 && ((flags
& SEC_DEBUGGING
) != 0 || !link_info
.relocatable
))
994 /* Discard input sections which are assigned to a section named
995 DISCARD_SECTION_NAME. */
996 if (strcmp (output
->name
, DISCARD_SECTION_NAME
) == 0)
999 /* Discard debugging sections if we are stripping debugging
1001 if ((link_info
.strip
== strip_debugger
|| link_info
.strip
== strip_all
)
1002 && (flags
& SEC_DEBUGGING
) != 0)
1007 if (section
->output_section
== NULL
)
1009 /* This prevents future calls from assigning this section. */
1010 section
->output_section
= bfd_abs_section_ptr
;
1015 if (section
->output_section
== NULL
)
1018 lang_input_section_type
*new;
1021 if (output
->bfd_section
== NULL
)
1024 first
= ! output
->bfd_section
->linker_has_input
;
1025 output
->bfd_section
->linker_has_input
= 1;
1027 /* Add a section reference to the list. */
1028 new = new_stat (lang_input_section
, ptr
);
1030 new->section
= section
;
1032 section
->output_section
= output
->bfd_section
;
1034 flags
= section
->flags
;
1036 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1037 to an output section, because we want to be able to include a
1038 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1039 section (I don't know why we want to do this, but we do).
1040 build_link_order in ldwrite.c handles this case by turning
1041 the embedded SEC_NEVER_LOAD section into a fill. */
1043 flags
&= ~ SEC_NEVER_LOAD
;
1045 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1046 already been processed. One reason to do this is that on pe
1047 format targets, .text$foo sections go into .text and it's odd
1048 to see .text with SEC_LINK_ONCE set. */
1050 if (! link_info
.relocatable
)
1051 flags
&= ~ (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES
);
1053 /* If this is not the first input section, and the SEC_READONLY
1054 flag is not currently set, then don't set it just because the
1055 input section has it set. */
1057 if (! first
&& (section
->output_section
->flags
& SEC_READONLY
) == 0)
1058 flags
&= ~ SEC_READONLY
;
1060 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1062 && ((section
->output_section
->flags
& (SEC_MERGE
| SEC_STRINGS
))
1063 != (flags
& (SEC_MERGE
| SEC_STRINGS
))
1064 || ((flags
& SEC_MERGE
)
1065 && section
->output_section
->entsize
!= section
->entsize
)))
1067 section
->output_section
->flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1068 flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1071 /* For now make .tbss normal section. */
1072 if ((flags
& SEC_THREAD_LOCAL
) && ! link_info
.relocatable
)
1075 section
->output_section
->flags
|= flags
;
1077 if (flags
& SEC_MERGE
)
1078 section
->output_section
->entsize
= section
->entsize
;
1080 /* If SEC_READONLY is not set in the input section, then clear
1081 it from the output section. */
1082 if ((section
->flags
& SEC_READONLY
) == 0)
1083 section
->output_section
->flags
&= ~SEC_READONLY
;
1085 switch (output
->sectype
)
1087 case normal_section
:
1092 case overlay_section
:
1093 output
->bfd_section
->flags
&= ~SEC_ALLOC
;
1095 case noload_section
:
1096 output
->bfd_section
->flags
&= ~SEC_LOAD
;
1097 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
1101 /* Copy over SEC_SMALL_DATA. */
1102 if (section
->flags
& SEC_SMALL_DATA
)
1103 section
->output_section
->flags
|= SEC_SMALL_DATA
;
1105 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
1106 output
->bfd_section
->alignment_power
= section
->alignment_power
;
1108 /* If supplied an alignment, then force it. */
1109 if (output
->section_alignment
!= -1)
1110 output
->bfd_section
->alignment_power
= output
->section_alignment
;
1112 if (section
->flags
& SEC_BLOCK
)
1114 section
->output_section
->flags
|= SEC_BLOCK
;
1115 /* FIXME: This value should really be obtained from the bfd... */
1116 output
->block_value
= 128;
1121 /* Handle wildcard sorting. This returns the lang_input_section which
1122 should follow the one we are going to create for SECTION and FILE,
1123 based on the sorting requirements of WILD. It returns NULL if the
1124 new section should just go at the end of the current list. */
1126 static lang_statement_union_type
*
1127 wild_sort (lang_wild_statement_type
*wild
,
1128 struct wildcard_list
*sec
,
1129 lang_input_statement_type
*file
,
1132 const char *section_name
;
1133 lang_statement_union_type
*l
;
1135 if (!wild
->filenames_sorted
&& (sec
== NULL
|| !sec
->spec
.sorted
))
1138 section_name
= bfd_get_section_name (file
->the_bfd
, section
);
1139 for (l
= wild
->children
.head
; l
!= NULL
; l
= l
->header
.next
)
1141 lang_input_section_type
*ls
;
1143 if (l
->header
.type
!= lang_input_section_enum
)
1145 ls
= &l
->input_section
;
1147 /* Sorting by filename takes precedence over sorting by section
1150 if (wild
->filenames_sorted
)
1152 const char *fn
, *ln
;
1156 /* The PE support for the .idata section as generated by
1157 dlltool assumes that files will be sorted by the name of
1158 the archive and then the name of the file within the
1161 if (file
->the_bfd
!= NULL
1162 && bfd_my_archive (file
->the_bfd
) != NULL
)
1164 fn
= bfd_get_filename (bfd_my_archive (file
->the_bfd
));
1169 fn
= file
->filename
;
1173 if (ls
->ifile
->the_bfd
!= NULL
1174 && bfd_my_archive (ls
->ifile
->the_bfd
) != NULL
)
1176 ln
= bfd_get_filename (bfd_my_archive (ls
->ifile
->the_bfd
));
1181 ln
= ls
->ifile
->filename
;
1185 i
= strcmp (fn
, ln
);
1194 fn
= file
->filename
;
1196 ln
= ls
->ifile
->filename
;
1198 i
= strcmp (fn
, ln
);
1206 /* Here either the files are not sorted by name, or we are
1207 looking at the sections for this file. */
1209 if (sec
!= NULL
&& sec
->spec
.sorted
)
1211 if (strcmp (section_name
,
1212 bfd_get_section_name (ls
->ifile
->the_bfd
,
1222 /* Expand a wild statement for a particular FILE. SECTION may be
1223 NULL, in which case it is a wild card. */
1226 output_section_callback (lang_wild_statement_type
*ptr
,
1227 struct wildcard_list
*sec
,
1229 lang_input_statement_type
*file
,
1232 lang_statement_union_type
*before
;
1234 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1235 if (unique_section_p (bfd_get_section_name (file
->the_bfd
, section
)))
1238 /* If the wild pattern was marked KEEP, the member sections
1239 should be as well. */
1240 if (ptr
->keep_sections
)
1241 section
->flags
|= SEC_KEEP
;
1243 before
= wild_sort (ptr
, sec
, file
, section
);
1245 /* Here BEFORE points to the lang_input_section which
1246 should follow the one we are about to add. If BEFORE
1247 is NULL, then the section should just go at the end
1248 of the current list. */
1251 lang_add_section (&ptr
->children
, section
,
1252 (lang_output_section_statement_type
*) output
,
1256 lang_statement_list_type list
;
1257 lang_statement_union_type
**pp
;
1259 lang_list_init (&list
);
1260 lang_add_section (&list
, section
,
1261 (lang_output_section_statement_type
*) output
,
1264 /* If we are discarding the section, LIST.HEAD will
1266 if (list
.head
!= NULL
)
1268 ASSERT (list
.head
->header
.next
== NULL
);
1270 for (pp
= &ptr
->children
.head
;
1272 pp
= &(*pp
)->header
.next
)
1273 ASSERT (*pp
!= NULL
);
1275 list
.head
->header
.next
= *pp
;
1281 /* This is passed a file name which must have been seen already and
1282 added to the statement tree. We will see if it has been opened
1283 already and had its symbols read. If not then we'll read it. */
1285 static lang_input_statement_type
*
1286 lookup_name (const char *name
)
1288 lang_input_statement_type
*search
;
1290 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
1292 search
= (lang_input_statement_type
*) search
->next_real_file
)
1294 if (search
->filename
== NULL
&& name
== NULL
)
1296 if (search
->filename
!= NULL
1298 && strcmp (search
->filename
, name
) == 0)
1303 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
1306 /* If we have already added this file, or this file is not real
1307 (FIXME: can that ever actually happen?) or the name is NULL
1308 (FIXME: can that ever actually happen?) don't add this file. */
1311 || search
->filename
== NULL
)
1314 if (! load_symbols (search
, NULL
))
1320 /* Get the symbols for an input file. */
1323 load_symbols (lang_input_statement_type
*entry
,
1324 lang_statement_list_type
*place
)
1331 ldfile_open_file (entry
);
1333 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
1334 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
1337 lang_statement_list_type
*hold
;
1338 bfd_boolean bad_load
= TRUE
;
1339 bfd_boolean save_ldlang_sysrooted_script
;
1341 err
= bfd_get_error ();
1343 /* See if the emulation has some special knowledge. */
1344 if (ldemul_unrecognized_file (entry
))
1347 if (err
== bfd_error_file_ambiguously_recognized
)
1351 einfo (_("%B: file not recognized: %E\n"), entry
->the_bfd
);
1352 einfo (_("%B: matching formats:"), entry
->the_bfd
);
1353 for (p
= matching
; *p
!= NULL
; p
++)
1357 else if (err
!= bfd_error_file_not_recognized
1359 einfo (_("%F%B: file not recognized: %E\n"), entry
->the_bfd
);
1363 bfd_close (entry
->the_bfd
);
1364 entry
->the_bfd
= NULL
;
1366 /* Try to interpret the file as a linker script. */
1367 ldfile_open_command_file (entry
->filename
);
1371 save_ldlang_sysrooted_script
= ldlang_sysrooted_script
;
1372 ldlang_sysrooted_script
= entry
->sysrooted
;
1374 ldfile_assumed_script
= TRUE
;
1375 parser_input
= input_script
;
1377 ldfile_assumed_script
= FALSE
;
1379 ldlang_sysrooted_script
= save_ldlang_sysrooted_script
;
1385 if (ldemul_recognized_file (entry
))
1388 /* We don't call ldlang_add_file for an archive. Instead, the
1389 add_symbols entry point will call ldlang_add_file, via the
1390 add_archive_element callback, for each element of the archive
1392 switch (bfd_get_format (entry
->the_bfd
))
1398 ldlang_add_file (entry
);
1399 if (trace_files
|| trace_file_tries
)
1400 info_msg ("%I\n", entry
);
1404 if (entry
->whole_archive
)
1407 bfd_boolean loaded
= TRUE
;
1411 member
= bfd_openr_next_archived_file (entry
->the_bfd
, member
);
1416 if (! bfd_check_format (member
, bfd_object
))
1418 einfo (_("%F%B: member %B in archive is not an object\n"),
1419 entry
->the_bfd
, member
);
1423 if (! ((*link_info
.callbacks
->add_archive_element
)
1424 (&link_info
, member
, "--whole-archive")))
1427 if (! bfd_link_add_symbols (member
, &link_info
))
1429 einfo (_("%F%B: could not read symbols: %E\n"), member
);
1434 entry
->loaded
= loaded
;
1440 if (bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
1441 entry
->loaded
= TRUE
;
1443 einfo (_("%F%B: could not read symbols: %E\n"), entry
->the_bfd
);
1445 return entry
->loaded
;
1448 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1449 may be NULL, indicating that it is a wildcard. Separate
1450 lang_input_section statements are created for each part of the
1451 expansion; they are added after the wild statement S. OUTPUT is
1452 the output section. */
1455 wild (lang_wild_statement_type
*s
,
1456 const char *target ATTRIBUTE_UNUSED
,
1457 lang_output_section_statement_type
*output
)
1459 struct wildcard_list
*sec
;
1461 walk_wild (s
, output_section_callback
, output
);
1463 for (sec
= s
->section_list
; sec
!= NULL
; sec
= sec
->next
)
1465 if (default_common_section
!= NULL
)
1467 if (sec
->spec
.name
!= NULL
&& strcmp (sec
->spec
.name
, "COMMON") == 0)
1469 /* Remember the section that common is going to in case we
1470 later get something which doesn't know where to put it. */
1471 default_common_section
= output
;
1476 /* Return TRUE iff target is the sought target. */
1479 get_target (const bfd_target
*target
, void *data
)
1481 const char *sought
= data
;
1483 return strcmp (target
->name
, sought
) == 0;
1486 /* Like strcpy() but convert to lower case as well. */
1489 stricpy (char *dest
, char *src
)
1493 while ((c
= *src
++) != 0)
1494 *dest
++ = TOLOWER (c
);
1499 /* Remove the first occurrence of needle (if any) in haystack
1503 strcut (char *haystack
, char *needle
)
1505 haystack
= strstr (haystack
, needle
);
1511 for (src
= haystack
+ strlen (needle
); *src
;)
1512 *haystack
++ = *src
++;
1518 /* Compare two target format name strings.
1519 Return a value indicating how "similar" they are. */
1522 name_compare (char *first
, char *second
)
1528 copy1
= xmalloc (strlen (first
) + 1);
1529 copy2
= xmalloc (strlen (second
) + 1);
1531 /* Convert the names to lower case. */
1532 stricpy (copy1
, first
);
1533 stricpy (copy2
, second
);
1535 /* Remove size and endian strings from the name. */
1536 strcut (copy1
, "big");
1537 strcut (copy1
, "little");
1538 strcut (copy2
, "big");
1539 strcut (copy2
, "little");
1541 /* Return a value based on how many characters match,
1542 starting from the beginning. If both strings are
1543 the same then return 10 * their length. */
1544 for (result
= 0; copy1
[result
] == copy2
[result
]; result
++)
1545 if (copy1
[result
] == 0)
1557 /* Set by closest_target_match() below. */
1558 static const bfd_target
*winner
;
1560 /* Scan all the valid bfd targets looking for one that has the endianness
1561 requirement that was specified on the command line, and is the nearest
1562 match to the original output target. */
1565 closest_target_match (const bfd_target
*target
, void *data
)
1567 const bfd_target
*original
= data
;
1569 if (command_line
.endian
== ENDIAN_BIG
1570 && target
->byteorder
!= BFD_ENDIAN_BIG
)
1573 if (command_line
.endian
== ENDIAN_LITTLE
1574 && target
->byteorder
!= BFD_ENDIAN_LITTLE
)
1577 /* Must be the same flavour. */
1578 if (target
->flavour
!= original
->flavour
)
1581 /* If we have not found a potential winner yet, then record this one. */
1588 /* Oh dear, we now have two potential candidates for a successful match.
1589 Compare their names and choose the better one. */
1590 if (name_compare (target
->name
, original
->name
)
1591 > name_compare (winner
->name
, original
->name
))
1594 /* Keep on searching until wqe have checked them all. */
1598 /* Return the BFD target format of the first input file. */
1601 get_first_input_target (void)
1603 char *target
= NULL
;
1605 LANG_FOR_EACH_INPUT_STATEMENT (s
)
1607 if (s
->header
.type
== lang_input_statement_enum
1610 ldfile_open_file (s
);
1612 if (s
->the_bfd
!= NULL
1613 && bfd_check_format (s
->the_bfd
, bfd_object
))
1615 target
= bfd_get_target (s
->the_bfd
);
1627 lang_get_output_target (void)
1631 /* Has the user told us which output format to use? */
1632 if (output_target
!= NULL
)
1633 return output_target
;
1635 /* No - has the current target been set to something other than
1637 if (current_target
!= default_target
)
1638 return current_target
;
1640 /* No - can we determine the format of the first input file? */
1641 target
= get_first_input_target ();
1645 /* Failed - use the default output target. */
1646 return default_target
;
1649 /* Open the output file. */
1652 open_output (const char *name
)
1656 output_target
= lang_get_output_target ();
1658 /* Has the user requested a particular endianness on the command
1660 if (command_line
.endian
!= ENDIAN_UNSET
)
1662 const bfd_target
*target
;
1663 enum bfd_endian desired_endian
;
1665 /* Get the chosen target. */
1666 target
= bfd_search_for_target (get_target
, (void *) output_target
);
1668 /* If the target is not supported, we cannot do anything. */
1671 if (command_line
.endian
== ENDIAN_BIG
)
1672 desired_endian
= BFD_ENDIAN_BIG
;
1674 desired_endian
= BFD_ENDIAN_LITTLE
;
1676 /* See if the target has the wrong endianness. This should
1677 not happen if the linker script has provided big and
1678 little endian alternatives, but some scrips don't do
1680 if (target
->byteorder
!= desired_endian
)
1682 /* If it does, then see if the target provides
1683 an alternative with the correct endianness. */
1684 if (target
->alternative_target
!= NULL
1685 && (target
->alternative_target
->byteorder
== desired_endian
))
1686 output_target
= target
->alternative_target
->name
;
1689 /* Try to find a target as similar as possible to
1690 the default target, but which has the desired
1691 endian characteristic. */
1692 bfd_search_for_target (closest_target_match
,
1695 /* Oh dear - we could not find any targets that
1696 satisfy our requirements. */
1698 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1700 output_target
= winner
->name
;
1706 output
= bfd_openw (name
, output_target
);
1710 if (bfd_get_error () == bfd_error_invalid_target
)
1711 einfo (_("%P%F: target %s not found\n"), output_target
);
1713 einfo (_("%P%F: cannot open output file %s: %E\n"), name
);
1716 delete_output_file_on_failure
= TRUE
;
1719 output
->flags
|= D_PAGED
;
1722 if (! bfd_set_format (output
, bfd_object
))
1723 einfo (_("%P%F:%s: can not make object file: %E\n"), name
);
1724 if (! bfd_set_arch_mach (output
,
1725 ldfile_output_architecture
,
1726 ldfile_output_machine
))
1727 einfo (_("%P%F:%s: can not set architecture: %E\n"), name
);
1729 link_info
.hash
= bfd_link_hash_table_create (output
);
1730 if (link_info
.hash
== NULL
)
1731 einfo (_("%P%F: can not create link hash table: %E\n"));
1733 bfd_set_gp_size (output
, g_switch_value
);
1738 ldlang_open_output (lang_statement_union_type
*statement
)
1740 switch (statement
->header
.type
)
1742 case lang_output_statement_enum
:
1743 ASSERT (output_bfd
== NULL
);
1744 output_bfd
= open_output (statement
->output_statement
.name
);
1745 ldemul_set_output_arch ();
1746 if (config
.magic_demand_paged
&& !link_info
.relocatable
)
1747 output_bfd
->flags
|= D_PAGED
;
1749 output_bfd
->flags
&= ~D_PAGED
;
1750 if (config
.text_read_only
)
1751 output_bfd
->flags
|= WP_TEXT
;
1753 output_bfd
->flags
&= ~WP_TEXT
;
1754 if (link_info
.traditional_format
)
1755 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
1757 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
1760 case lang_target_statement_enum
:
1761 current_target
= statement
->target_statement
.target
;
1768 /* Open all the input files. */
1771 open_input_bfds (lang_statement_union_type
*s
, bfd_boolean force
)
1773 for (; s
!= NULL
; s
= s
->header
.next
)
1775 switch (s
->header
.type
)
1777 case lang_constructors_statement_enum
:
1778 open_input_bfds (constructor_list
.head
, force
);
1780 case lang_output_section_statement_enum
:
1781 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
1783 case lang_wild_statement_enum
:
1784 /* Maybe we should load the file's symbols. */
1785 if (s
->wild_statement
.filename
1786 && ! wildcardp (s
->wild_statement
.filename
))
1787 (void) lookup_name (s
->wild_statement
.filename
);
1788 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1790 case lang_group_statement_enum
:
1792 struct bfd_link_hash_entry
*undefs
;
1794 /* We must continually search the entries in the group
1795 until no new symbols are added to the list of undefined
1800 undefs
= link_info
.hash
->undefs_tail
;
1801 open_input_bfds (s
->group_statement
.children
.head
, TRUE
);
1803 while (undefs
!= link_info
.hash
->undefs_tail
);
1806 case lang_target_statement_enum
:
1807 current_target
= s
->target_statement
.target
;
1809 case lang_input_statement_enum
:
1810 if (s
->input_statement
.real
)
1812 lang_statement_list_type add
;
1814 s
->input_statement
.target
= current_target
;
1816 /* If we are being called from within a group, and this
1817 is an archive which has already been searched, then
1818 force it to be researched unless the whole archive
1819 has been loaded already. */
1821 && !s
->input_statement
.whole_archive
1822 && s
->input_statement
.loaded
1823 && bfd_check_format (s
->input_statement
.the_bfd
,
1825 s
->input_statement
.loaded
= FALSE
;
1827 lang_list_init (&add
);
1829 if (! load_symbols (&s
->input_statement
, &add
))
1830 config
.make_executable
= FALSE
;
1832 if (add
.head
!= NULL
)
1834 *add
.tail
= s
->header
.next
;
1835 s
->header
.next
= add
.head
;
1845 /* If there are [COMMONS] statements, put a wild one into the bss
1849 lang_reasonable_defaults (void)
1852 lang_output_section_statement_lookup (".text");
1853 lang_output_section_statement_lookup (".data");
1855 default_common_section
= lang_output_section_statement_lookup (".bss");
1857 if (!placed_commons
)
1859 lang_wild_statement_type
*new =
1860 new_stat (lang_wild_statement
,
1861 &default_common_section
->children
);
1863 new->section_name
= "COMMON";
1864 new->filename
= NULL
;
1865 lang_list_init (&new->children
);
1870 /* Add the supplied name to the symbol table as an undefined reference.
1871 This is a two step process as the symbol table doesn't even exist at
1872 the time the ld command line is processed. First we put the name
1873 on a list, then, once the output file has been opened, transfer the
1874 name to the symbol table. */
1876 typedef struct bfd_sym_chain ldlang_undef_chain_list_type
;
1878 #define ldlang_undef_chain_list_head entry_symbol.next
1881 ldlang_add_undef (const char *const name
)
1883 ldlang_undef_chain_list_type
*new =
1884 stat_alloc (sizeof (ldlang_undef_chain_list_type
));
1886 new->next
= ldlang_undef_chain_list_head
;
1887 ldlang_undef_chain_list_head
= new;
1889 new->name
= xstrdup (name
);
1891 if (output_bfd
!= NULL
)
1892 insert_undefined (new->name
);
1895 /* Insert NAME as undefined in the symbol table. */
1898 insert_undefined (const char *name
)
1900 struct bfd_link_hash_entry
*h
;
1902 h
= bfd_link_hash_lookup (link_info
.hash
, name
, TRUE
, FALSE
, TRUE
);
1904 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1905 if (h
->type
== bfd_link_hash_new
)
1907 h
->type
= bfd_link_hash_undefined
;
1908 h
->u
.undef
.abfd
= NULL
;
1909 bfd_link_add_undef (link_info
.hash
, h
);
1913 /* Run through the list of undefineds created above and place them
1914 into the linker hash table as undefined symbols belonging to the
1918 lang_place_undefineds (void)
1920 ldlang_undef_chain_list_type
*ptr
;
1922 for (ptr
= ldlang_undef_chain_list_head
; ptr
!= NULL
; ptr
= ptr
->next
)
1923 insert_undefined (ptr
->name
);
1926 /* Open input files and attach to output sections. */
1929 map_input_to_output_sections
1930 (lang_statement_union_type
*s
, const char *target
,
1931 lang_output_section_statement_type
*output_section_statement
)
1933 for (; s
!= NULL
; s
= s
->header
.next
)
1935 switch (s
->header
.type
)
1937 case lang_wild_statement_enum
:
1938 wild (&s
->wild_statement
, target
, output_section_statement
);
1940 case lang_constructors_statement_enum
:
1941 map_input_to_output_sections (constructor_list
.head
,
1943 output_section_statement
);
1945 case lang_output_section_statement_enum
:
1946 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
1948 &s
->output_section_statement
);
1950 case lang_output_statement_enum
:
1952 case lang_target_statement_enum
:
1953 target
= s
->target_statement
.target
;
1955 case lang_group_statement_enum
:
1956 map_input_to_output_sections (s
->group_statement
.children
.head
,
1958 output_section_statement
);
1960 case lang_fill_statement_enum
:
1961 case lang_input_section_enum
:
1962 case lang_object_symbols_statement_enum
:
1963 case lang_data_statement_enum
:
1964 case lang_reloc_statement_enum
:
1965 case lang_padding_statement_enum
:
1966 case lang_input_statement_enum
:
1967 if (output_section_statement
!= NULL
1968 && output_section_statement
->bfd_section
== NULL
)
1969 init_os (output_section_statement
);
1971 case lang_assignment_statement_enum
:
1972 if (output_section_statement
!= NULL
1973 && output_section_statement
->bfd_section
== NULL
)
1974 init_os (output_section_statement
);
1976 /* Make sure that any sections mentioned in the assignment
1978 exp_init_os (s
->assignment_statement
.exp
);
1980 case lang_afile_asection_pair_statement_enum
:
1983 case lang_address_statement_enum
:
1984 /* Mark the specified section with the supplied address. */
1986 lang_output_section_statement_type
*os
=
1987 lang_output_section_statement_lookup
1988 (s
->address_statement
.section_name
);
1990 if (os
->bfd_section
== NULL
)
1992 os
->addr_tree
= s
->address_statement
.address
;
1999 /* An output section might have been removed after its statement was
2000 added. For example, ldemul_before_allocation can remove dynamic
2001 sections if they turn out to be not needed. Clean them up here. */
2004 strip_excluded_output_sections (void)
2006 lang_statement_union_type
*u
;
2008 for (u
= lang_output_section_statement
.head
;
2010 u
= u
->output_section_statement
.next
)
2012 lang_output_section_statement_type
*os
;
2015 os
= &u
->output_section_statement
;
2016 s
= os
->bfd_section
;
2017 if (s
!= NULL
&& (s
->flags
& SEC_EXCLUDE
) != 0)
2021 os
->bfd_section
= NULL
;
2023 for (p
= &output_bfd
->sections
; *p
; p
= &(*p
)->next
)
2026 bfd_section_list_remove (output_bfd
, p
);
2027 output_bfd
->section_count
--;
2035 print_output_section_statement
2036 (lang_output_section_statement_type
*output_section_statement
)
2038 asection
*section
= output_section_statement
->bfd_section
;
2041 if (output_section_statement
!= abs_output_section
)
2043 minfo ("\n%s", output_section_statement
->name
);
2045 if (section
!= NULL
)
2047 print_dot
= section
->vma
;
2049 len
= strlen (output_section_statement
->name
);
2050 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2055 while (len
< SECTION_NAME_MAP_LENGTH
)
2061 minfo ("0x%V %W", section
->vma
, section
->_raw_size
);
2063 if (output_section_statement
->load_base
!= NULL
)
2067 addr
= exp_get_abs_int (output_section_statement
->load_base
, 0,
2068 "load base", lang_final_phase_enum
);
2069 minfo (_(" load address 0x%V"), addr
);
2076 print_statement_list (output_section_statement
->children
.head
,
2077 output_section_statement
);
2081 print_assignment (lang_assignment_statement_type
*assignment
,
2082 lang_output_section_statement_type
*output_section
)
2085 etree_value_type result
;
2087 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2090 result
= exp_fold_tree (assignment
->exp
->assign
.src
, output_section
,
2091 lang_final_phase_enum
, print_dot
, &print_dot
);
2097 value
= result
.value
+ result
.section
->bfd_section
->vma
;
2098 dst
= assignment
->exp
->assign
.dst
;
2100 minfo ("0x%V", value
);
2101 if (dst
[0] == '.' && dst
[1] == 0)
2114 exp_print_tree (assignment
->exp
);
2120 print_input_statement (lang_input_statement_type
*statm
)
2122 if (statm
->filename
!= NULL
)
2124 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
2128 /* Print all symbols defined in a particular section. This is called
2129 via bfd_link_hash_traverse. */
2132 print_one_symbol (struct bfd_link_hash_entry
*hash_entry
, void *ptr
)
2134 asection
*sec
= ptr
;
2136 if ((hash_entry
->type
== bfd_link_hash_defined
2137 || hash_entry
->type
== bfd_link_hash_defweak
)
2138 && sec
== hash_entry
->u
.def
.section
)
2142 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2145 (hash_entry
->u
.def
.value
2146 + hash_entry
->u
.def
.section
->output_offset
2147 + hash_entry
->u
.def
.section
->output_section
->vma
));
2149 minfo (" %T\n", hash_entry
->root
.string
);
2155 /* Print information about an input section to the map file. */
2158 print_input_section (lang_input_section_type
*in
)
2160 asection
*i
= in
->section
;
2161 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
2162 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2163 ldfile_output_machine
);
2168 minfo ("%s", i
->name
);
2170 if (i
->output_section
!= NULL
)
2174 len
= 1 + strlen (i
->name
);
2175 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2180 while (len
< SECTION_NAME_MAP_LENGTH
)
2186 minfo ("0x%V %W %B\n",
2187 i
->output_section
->vma
+ i
->output_offset
, size
/ opb
,
2190 if (i
->_cooked_size
!= 0 && i
->_cooked_size
!= i
->_raw_size
)
2192 len
= SECTION_NAME_MAP_LENGTH
+ 3;
2204 minfo (_("%W (size before relaxing)\n"), i
->_raw_size
);
2207 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, i
);
2209 print_dot
= i
->output_section
->vma
+ i
->output_offset
+ size
/ opb
;
2215 print_fill_statement (lang_fill_statement_type
*fill
)
2219 fputs (" FILL mask 0x", config
.map_file
);
2220 for (p
= fill
->fill
->data
, size
= fill
->fill
->size
; size
!= 0; p
++, size
--)
2221 fprintf (config
.map_file
, "%02x", *p
);
2222 fputs ("\n", config
.map_file
);
2226 print_data_statement (lang_data_statement_type
*data
)
2232 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2233 ldfile_output_machine
);
2235 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2238 addr
= data
->output_vma
;
2239 if (data
->output_section
!= NULL
)
2240 addr
+= data
->output_section
->vma
;
2268 minfo ("0x%V %W %s 0x%v", addr
, size
, name
, data
->value
);
2270 if (data
->exp
->type
.node_class
!= etree_value
)
2273 exp_print_tree (data
->exp
);
2278 print_dot
= addr
+ size
/ opb
;
2282 /* Print an address statement. These are generated by options like
2286 print_address_statement (lang_address_statement_type
*address
)
2288 minfo (_("Address of section %s set to "), address
->section_name
);
2289 exp_print_tree (address
->address
);
2293 /* Print a reloc statement. */
2296 print_reloc_statement (lang_reloc_statement_type
*reloc
)
2301 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2302 ldfile_output_machine
);
2304 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2307 addr
= reloc
->output_vma
;
2308 if (reloc
->output_section
!= NULL
)
2309 addr
+= reloc
->output_section
->vma
;
2311 size
= bfd_get_reloc_size (reloc
->howto
);
2313 minfo ("0x%V %W RELOC %s ", addr
, size
, reloc
->howto
->name
);
2315 if (reloc
->name
!= NULL
)
2316 minfo ("%s+", reloc
->name
);
2318 minfo ("%s+", reloc
->section
->name
);
2320 exp_print_tree (reloc
->addend_exp
);
2324 print_dot
= addr
+ size
/ opb
;
2328 print_padding_statement (lang_padding_statement_type
*s
)
2332 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2333 ldfile_output_machine
);
2337 len
= sizeof " *fill*" - 1;
2338 while (len
< SECTION_NAME_MAP_LENGTH
)
2344 addr
= s
->output_offset
;
2345 if (s
->output_section
!= NULL
)
2346 addr
+= s
->output_section
->vma
;
2347 minfo ("0x%V %W ", addr
, s
->size
);
2349 if (s
->fill
->size
!= 0)
2353 for (p
= s
->fill
->data
, size
= s
->fill
->size
; size
!= 0; p
++, size
--)
2354 fprintf (config
.map_file
, "%02x", *p
);
2359 print_dot
= addr
+ s
->size
/ opb
;
2363 print_wild_statement (lang_wild_statement_type
*w
,
2364 lang_output_section_statement_type
*os
)
2366 struct wildcard_list
*sec
;
2370 if (w
->filenames_sorted
)
2372 if (w
->filename
!= NULL
)
2373 minfo ("%s", w
->filename
);
2376 if (w
->filenames_sorted
)
2380 for (sec
= w
->section_list
; sec
; sec
= sec
->next
)
2382 if (sec
->spec
.sorted
)
2384 if (sec
->spec
.exclude_name_list
!= NULL
)
2387 minfo ("EXCLUDE_FILE(%s", sec
->spec
.exclude_name_list
->name
);
2388 for (tmp
= sec
->spec
.exclude_name_list
->next
; tmp
; tmp
= tmp
->next
)
2389 minfo (" %s", tmp
->name
);
2392 if (sec
->spec
.name
!= NULL
)
2393 minfo ("%s", sec
->spec
.name
);
2396 if (sec
->spec
.sorted
)
2405 print_statement_list (w
->children
.head
, os
);
2408 /* Print a group statement. */
2411 print_group (lang_group_statement_type
*s
,
2412 lang_output_section_statement_type
*os
)
2414 fprintf (config
.map_file
, "START GROUP\n");
2415 print_statement_list (s
->children
.head
, os
);
2416 fprintf (config
.map_file
, "END GROUP\n");
2419 /* Print the list of statements in S.
2420 This can be called for any statement type. */
2423 print_statement_list (lang_statement_union_type
*s
,
2424 lang_output_section_statement_type
*os
)
2428 print_statement (s
, os
);
2433 /* Print the first statement in statement list S.
2434 This can be called for any statement type. */
2437 print_statement (lang_statement_union_type
*s
,
2438 lang_output_section_statement_type
*os
)
2440 switch (s
->header
.type
)
2443 fprintf (config
.map_file
, _("Fail with %d\n"), s
->header
.type
);
2446 case lang_constructors_statement_enum
:
2447 if (constructor_list
.head
!= NULL
)
2449 if (constructors_sorted
)
2450 minfo (" SORT (CONSTRUCTORS)\n");
2452 minfo (" CONSTRUCTORS\n");
2453 print_statement_list (constructor_list
.head
, os
);
2456 case lang_wild_statement_enum
:
2457 print_wild_statement (&s
->wild_statement
, os
);
2459 case lang_address_statement_enum
:
2460 print_address_statement (&s
->address_statement
);
2462 case lang_object_symbols_statement_enum
:
2463 minfo (" CREATE_OBJECT_SYMBOLS\n");
2465 case lang_fill_statement_enum
:
2466 print_fill_statement (&s
->fill_statement
);
2468 case lang_data_statement_enum
:
2469 print_data_statement (&s
->data_statement
);
2471 case lang_reloc_statement_enum
:
2472 print_reloc_statement (&s
->reloc_statement
);
2474 case lang_input_section_enum
:
2475 print_input_section (&s
->input_section
);
2477 case lang_padding_statement_enum
:
2478 print_padding_statement (&s
->padding_statement
);
2480 case lang_output_section_statement_enum
:
2481 print_output_section_statement (&s
->output_section_statement
);
2483 case lang_assignment_statement_enum
:
2484 print_assignment (&s
->assignment_statement
, os
);
2486 case lang_target_statement_enum
:
2487 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
2489 case lang_output_statement_enum
:
2490 minfo ("OUTPUT(%s", s
->output_statement
.name
);
2491 if (output_target
!= NULL
)
2492 minfo (" %s", output_target
);
2495 case lang_input_statement_enum
:
2496 print_input_statement (&s
->input_statement
);
2498 case lang_group_statement_enum
:
2499 print_group (&s
->group_statement
, os
);
2501 case lang_afile_asection_pair_statement_enum
:
2508 print_statements (void)
2510 print_statement_list (statement_list
.head
, abs_output_section
);
2513 /* Print the first N statements in statement list S to STDERR.
2514 If N == 0, nothing is printed.
2515 If N < 0, the entire list is printed.
2516 Intended to be called from GDB. */
2519 dprint_statement (lang_statement_union_type
*s
, int n
)
2521 FILE *map_save
= config
.map_file
;
2523 config
.map_file
= stderr
;
2526 print_statement_list (s
, abs_output_section
);
2529 while (s
&& --n
>= 0)
2531 print_statement (s
, abs_output_section
);
2536 config
.map_file
= map_save
;
2540 insert_pad (lang_statement_union_type
**ptr
,
2542 unsigned int alignment_needed
,
2543 asection
*output_section
,
2546 static fill_type zero_fill
= { 1, { 0 } };
2547 lang_statement_union_type
*pad
;
2549 pad
= ((lang_statement_union_type
*)
2550 ((char *) ptr
- offsetof (lang_statement_union_type
, header
.next
)));
2551 if (ptr
!= &statement_list
.head
2552 && pad
->header
.type
== lang_padding_statement_enum
2553 && pad
->padding_statement
.output_section
== output_section
)
2555 /* Use the existing pad statement. The above test on output
2556 section is probably redundant, but it doesn't hurt to check. */
2560 /* Make a new padding statement, linked into existing chain. */
2561 pad
= stat_alloc (sizeof (lang_padding_statement_type
));
2562 pad
->header
.next
= *ptr
;
2564 pad
->header
.type
= lang_padding_statement_enum
;
2565 pad
->padding_statement
.output_section
= output_section
;
2568 pad
->padding_statement
.fill
= fill
;
2570 pad
->padding_statement
.output_offset
= dot
- output_section
->vma
;
2571 pad
->padding_statement
.size
= alignment_needed
;
2572 output_section
->_raw_size
+= alignment_needed
;
2575 /* Work out how much this section will move the dot point. */
2578 size_input_section (lang_statement_union_type
**this_ptr
,
2579 lang_output_section_statement_type
*output_section_statement
,
2583 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
2584 asection
*i
= is
->section
;
2586 if (!is
->ifile
->just_syms_flag
)
2588 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2589 ldfile_output_machine
);
2590 unsigned int alignment_needed
;
2593 /* Align this section first to the input sections requirement,
2594 then to the output section's requirement. If this alignment
2595 is greater than any seen before, then record it too. Perform
2596 the alignment by inserting a magic 'padding' statement. */
2598 if (output_section_statement
->subsection_alignment
!= -1)
2599 i
->alignment_power
= output_section_statement
->subsection_alignment
;
2601 o
= output_section_statement
->bfd_section
;
2602 if (o
->alignment_power
< i
->alignment_power
)
2603 o
->alignment_power
= i
->alignment_power
;
2605 alignment_needed
= align_power (dot
, i
->alignment_power
) - dot
;
2607 if (alignment_needed
!= 0)
2609 insert_pad (this_ptr
, fill
, alignment_needed
* opb
, o
, dot
);
2610 dot
+= alignment_needed
;
2613 /* Remember where in the output section this input section goes. */
2615 i
->output_offset
= dot
- o
->vma
;
2617 /* Mark how big the output section must be to contain this now. */
2618 if (i
->_cooked_size
!= 0)
2619 dot
+= i
->_cooked_size
/ opb
;
2621 dot
+= i
->_raw_size
/ opb
;
2622 o
->_raw_size
= (dot
- o
->vma
) * opb
;
2626 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
2632 #define IGNORE_SECTION(bfd, s) \
2633 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2634 != (SEC_ALLOC | SEC_LOAD)) \
2635 || bfd_section_size (bfd, s) == 0)
2637 /* Check to see if any allocated sections overlap with other allocated
2638 sections. This can happen when the linker script specifically specifies
2639 the output section addresses of the two sections. */
2642 lang_check_section_addresses (void)
2645 unsigned opb
= bfd_octets_per_byte (output_bfd
);
2647 /* Scan all sections in the output list. */
2648 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2652 /* Ignore sections which are not loaded or which have no contents. */
2653 if (IGNORE_SECTION (output_bfd
, s
))
2656 /* Once we reach section 's' stop our seach. This prevents two
2657 warning messages from being produced, one for 'section A overlaps
2658 section B' and one for 'section B overlaps section A'. */
2659 for (os
= output_bfd
->sections
; os
!= s
; os
= os
->next
)
2666 /* Only consider loadable sections with real contents. */
2667 if (IGNORE_SECTION (output_bfd
, os
))
2670 /* We must check the sections' LMA addresses not their
2671 VMA addresses because overlay sections can have
2672 overlapping VMAs but they must have distinct LMAs. */
2673 s_start
= bfd_section_lma (output_bfd
, s
);
2674 os_start
= bfd_section_lma (output_bfd
, os
);
2675 s_end
= s_start
+ bfd_section_size (output_bfd
, s
) / opb
- 1;
2676 os_end
= os_start
+ bfd_section_size (output_bfd
, os
) / opb
- 1;
2678 /* Look for an overlap. */
2679 if ((s_end
< os_start
) || (s_start
> os_end
))
2683 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2684 s
->name
, s_start
, s_end
, os
->name
, os_start
, os_end
);
2686 /* Once we have found one overlap for this section,
2687 stop looking for others. */
2693 /* Make sure the new address is within the region. We explicitly permit the
2694 current address to be at the exact end of the region when the address is
2695 non-zero, in case the region is at the end of addressable memory and the
2696 calculation wraps around. */
2699 os_region_check (lang_output_section_statement_type
*os
,
2700 struct memory_region_struct
*region
,
2704 if ((region
->current
< region
->origin
2705 || (region
->current
- region
->origin
> region
->length
))
2706 && ((region
->current
!= region
->origin
+ region
->length
)
2711 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2713 os
->bfd_section
->owner
,
2714 os
->bfd_section
->name
,
2719 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2721 os
->bfd_section
->owner
,
2722 os
->bfd_section
->name
);
2724 /* Reset the region pointer. */
2725 region
->current
= region
->origin
;
2729 /* Set the sizes for all the output sections. */
2732 lang_size_sections_1
2733 (lang_statement_union_type
*s
,
2734 lang_output_section_statement_type
*output_section_statement
,
2735 lang_statement_union_type
**prev
,
2739 bfd_boolean check_regions
)
2741 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2742 ldfile_output_machine
);
2744 /* Size up the sections from their constituent parts. */
2745 for (; s
!= NULL
; s
= s
->header
.next
)
2747 switch (s
->header
.type
)
2749 case lang_output_section_statement_enum
:
2752 lang_output_section_statement_type
*os
;
2754 os
= &s
->output_section_statement
;
2755 if (os
->bfd_section
== NULL
)
2756 /* This section was never actually created. */
2759 /* If this is a COFF shared library section, use the size and
2760 address from the input section. FIXME: This is COFF
2761 specific; it would be cleaner if there were some other way
2762 to do this, but nothing simple comes to mind. */
2763 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
2767 if (os
->children
.head
== NULL
2768 || os
->children
.head
->header
.next
!= NULL
2769 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
2770 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2773 input
= os
->children
.head
->input_section
.section
;
2774 bfd_set_section_vma (os
->bfd_section
->owner
,
2776 bfd_section_vma (input
->owner
, input
));
2777 os
->bfd_section
->_raw_size
= input
->_raw_size
;
2781 if (bfd_is_abs_section (os
->bfd_section
))
2783 /* No matter what happens, an abs section starts at zero. */
2784 ASSERT (os
->bfd_section
->vma
== 0);
2788 if (os
->addr_tree
== NULL
)
2790 /* No address specified for this section, get one
2791 from the region specification. */
2792 if (os
->region
== NULL
2793 || (((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2794 & (SEC_ALLOC
| SEC_LOAD
)) != 0)
2795 && os
->region
->name
[0] == '*'
2796 && strcmp (os
->region
->name
, "*default*") == 0))
2798 os
->region
= lang_memory_default (os
->bfd_section
);
2801 /* If a loadable section is using the default memory
2802 region, and some non default memory regions were
2803 defined, issue an error message. */
2804 if ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2805 & (SEC_ALLOC
| SEC_LOAD
)) != 0
2806 && (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2807 & SEC_NEVER_LOAD
) == 0
2808 && ! link_info
.relocatable
2810 && strcmp (os
->region
->name
, "*default*") == 0
2811 && lang_memory_region_list
!= NULL
2812 && (strcmp (lang_memory_region_list
->name
,
2814 || lang_memory_region_list
->next
!= NULL
))
2816 /* By default this is an error rather than just a
2817 warning because if we allocate the section to the
2818 default memory region we can end up creating an
2819 excessivly large binary, or even seg faulting when
2820 attmepting to perform a negative seek. See
2821 http://sources.redhat.com/ml/binutils/2003-04/msg00423.html
2822 for an example of this. This behaviour can be
2823 overridden by the using the --no-check-sections
2825 if (command_line
.check_section_addresses
)
2826 einfo (_("%P%F: error: no memory region specified for loadable section `%s'\n"),
2827 bfd_get_section_name (output_bfd
,
2830 einfo (_("%P: warning: no memory region specified for loadable section `%s'\n"),
2831 bfd_get_section_name (output_bfd
,
2835 dot
= os
->region
->current
;
2837 if (os
->section_alignment
== -1)
2842 dot
= align_power (dot
,
2843 os
->bfd_section
->alignment_power
);
2845 if (dot
!= olddot
&& config
.warn_section_align
)
2846 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2847 os
->name
, (unsigned int) (dot
- olddot
));
2854 r
= exp_fold_tree (os
->addr_tree
,
2856 lang_allocating_phase_enum
,
2859 einfo (_("%F%S: non constant address expression for section %s\n"),
2862 dot
= r
.value
+ r
.section
->bfd_section
->vma
;
2865 /* The section starts here.
2866 First, align to what the section needs. */
2868 if (os
->section_alignment
!= -1)
2869 dot
= align_power (dot
, os
->section_alignment
);
2871 bfd_set_section_vma (0, os
->bfd_section
, dot
);
2873 os
->bfd_section
->output_offset
= 0;
2876 lang_size_sections_1 (os
->children
.head
, os
, &os
->children
.head
,
2877 os
->fill
, dot
, relax
, check_regions
);
2879 /* Put the section within the requested block size, or
2880 align at the block boundary. */
2881 after
= align_n (os
->bfd_section
->vma
2882 + os
->bfd_section
->_raw_size
/ opb
,
2883 (bfd_vma
) os
->block_value
);
2885 if (bfd_is_abs_section (os
->bfd_section
))
2886 ASSERT (after
== os
->bfd_section
->vma
);
2887 else if ((os
->bfd_section
->flags
& SEC_HAS_CONTENTS
) == 0
2888 && (os
->bfd_section
->flags
& SEC_THREAD_LOCAL
)
2889 && ! link_info
.relocatable
)
2890 os
->bfd_section
->_raw_size
= 0;
2892 os
->bfd_section
->_raw_size
=
2893 (after
- os
->bfd_section
->vma
) * opb
;
2895 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
2896 os
->processed
= TRUE
;
2898 if (os
->update_dot_tree
!= 0)
2899 exp_fold_tree (os
->update_dot_tree
, abs_output_section
,
2900 lang_allocating_phase_enum
, dot
, &dot
);
2902 /* Update dot in the region ?
2903 We only do this if the section is going to be allocated,
2904 since unallocated sections do not contribute to the region's
2905 overall size in memory.
2907 If the SEC_NEVER_LOAD bit is not set, it will affect the
2908 addresses of sections after it. We have to update
2910 if (os
->region
!= NULL
2911 && ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2912 & SEC_NEVER_LOAD
) == 0
2913 || (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2914 & (SEC_ALLOC
| SEC_LOAD
))))
2916 os
->region
->current
= dot
;
2919 /* Make sure the new address is within the region. */
2920 os_region_check (os
, os
->region
, os
->addr_tree
,
2921 os
->bfd_section
->vma
);
2923 /* If there's no load address specified, use the run
2924 region as the load region. */
2925 if (os
->lma_region
== NULL
&& os
->load_base
== NULL
)
2926 os
->lma_region
= os
->region
;
2928 if (os
->lma_region
!= NULL
&& os
->lma_region
!= os
->region
)
2930 /* Set load_base, which will be handled later. */
2931 os
->load_base
= exp_intop (os
->lma_region
->current
);
2932 os
->lma_region
->current
+=
2933 os
->bfd_section
->_raw_size
/ opb
;
2935 os_region_check (os
, os
->lma_region
, NULL
,
2936 os
->bfd_section
->lma
);
2942 case lang_constructors_statement_enum
:
2943 dot
= lang_size_sections_1 (constructor_list
.head
,
2944 output_section_statement
,
2945 &s
->wild_statement
.children
.head
,
2946 fill
, dot
, relax
, check_regions
);
2949 case lang_data_statement_enum
:
2951 unsigned int size
= 0;
2953 s
->data_statement
.output_vma
=
2954 dot
- output_section_statement
->bfd_section
->vma
;
2955 s
->data_statement
.output_section
=
2956 output_section_statement
->bfd_section
;
2958 switch (s
->data_statement
.type
)
2979 output_section_statement
->bfd_section
->_raw_size
+= size
;
2980 /* The output section gets contents, and then we inspect for
2981 any flags set in the input script which override any ALLOC. */
2982 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
2983 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
))
2985 output_section_statement
->bfd_section
->flags
|=
2986 SEC_ALLOC
| SEC_LOAD
;
2991 case lang_reloc_statement_enum
:
2995 s
->reloc_statement
.output_vma
=
2996 dot
- output_section_statement
->bfd_section
->vma
;
2997 s
->reloc_statement
.output_section
=
2998 output_section_statement
->bfd_section
;
2999 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
3001 output_section_statement
->bfd_section
->_raw_size
+= size
;
3005 case lang_wild_statement_enum
:
3007 dot
= lang_size_sections_1 (s
->wild_statement
.children
.head
,
3008 output_section_statement
,
3009 &s
->wild_statement
.children
.head
,
3010 fill
, dot
, relax
, check_regions
);
3014 case lang_object_symbols_statement_enum
:
3015 link_info
.create_object_symbols_section
=
3016 output_section_statement
->bfd_section
;
3018 case lang_output_statement_enum
:
3019 case lang_target_statement_enum
:
3021 case lang_input_section_enum
:
3025 i
= (*prev
)->input_section
.section
;
3028 if (i
->_cooked_size
== 0)
3029 i
->_cooked_size
= i
->_raw_size
;
3035 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
3036 einfo (_("%P%F: can't relax section: %E\n"));
3040 dot
= size_input_section (prev
, output_section_statement
,
3041 output_section_statement
->fill
, dot
);
3044 case lang_input_statement_enum
:
3046 case lang_fill_statement_enum
:
3047 s
->fill_statement
.output_section
=
3048 output_section_statement
->bfd_section
;
3050 fill
= s
->fill_statement
.fill
;
3052 case lang_assignment_statement_enum
:
3054 bfd_vma newdot
= dot
;
3056 exp_fold_tree (s
->assignment_statement
.exp
,
3057 output_section_statement
,
3058 lang_allocating_phase_enum
,
3064 if (output_section_statement
== abs_output_section
)
3066 /* If we don't have an output section, then just adjust
3067 the default memory address. */
3068 lang_memory_region_lookup ("*default*")->current
= newdot
;
3072 /* Insert a pad after this statement. We can't
3073 put the pad before when relaxing, in case the
3074 assignment references dot. */
3075 insert_pad (&s
->header
.next
, fill
, (newdot
- dot
) * opb
,
3076 output_section_statement
->bfd_section
, dot
);
3078 /* Don't neuter the pad below when relaxing. */
3087 case lang_padding_statement_enum
:
3088 /* If this is the first time lang_size_sections is called,
3089 we won't have any padding statements. If this is the
3090 second or later passes when relaxing, we should allow
3091 padding to shrink. If padding is needed on this pass, it
3092 will be added back in. */
3093 s
->padding_statement
.size
= 0;
3095 /* Make sure output_offset is valid. If relaxation shrinks
3096 the section and this pad isn't needed, it's possible to
3097 have output_offset larger than the final size of the
3098 section. bfd_set_section_contents will complain even for
3099 a pad size of zero. */
3100 s
->padding_statement
.output_offset
3101 = dot
- output_section_statement
->bfd_section
->vma
;
3104 case lang_group_statement_enum
:
3105 dot
= lang_size_sections_1 (s
->group_statement
.children
.head
,
3106 output_section_statement
,
3107 &s
->group_statement
.children
.head
,
3108 fill
, dot
, relax
, check_regions
);
3115 /* We can only get here when relaxing is turned on. */
3116 case lang_address_statement_enum
:
3119 prev
= &s
->header
.next
;
3126 (lang_statement_union_type
*s
,
3127 lang_output_section_statement_type
*output_section_statement
,
3128 lang_statement_union_type
**prev
,
3132 bfd_boolean check_regions
)
3136 exp_data_seg
.phase
= exp_dataseg_none
;
3137 result
= lang_size_sections_1 (s
, output_section_statement
, prev
, fill
,
3138 dot
, relax
, check_regions
);
3139 if (exp_data_seg
.phase
== exp_dataseg_end_seen
)
3141 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3142 a page could be saved in the data segment. */
3143 bfd_vma first
, last
;
3145 first
= -exp_data_seg
.base
& (exp_data_seg
.pagesize
- 1);
3146 last
= exp_data_seg
.end
& (exp_data_seg
.pagesize
- 1);
3148 && ((exp_data_seg
.base
& ~(exp_data_seg
.pagesize
- 1))
3149 != (exp_data_seg
.end
& ~(exp_data_seg
.pagesize
- 1)))
3150 && first
+ last
<= exp_data_seg
.pagesize
)
3152 exp_data_seg
.phase
= exp_dataseg_adjust
;
3153 result
= lang_size_sections_1 (s
, output_section_statement
, prev
,
3154 fill
, dot
, relax
, check_regions
);
3163 (lang_statement_union_type
*s
,
3164 lang_output_section_statement_type
*output_section_statement
,
3168 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3169 ldfile_output_machine
);
3171 for (; s
!= NULL
; s
= s
->header
.next
)
3173 switch (s
->header
.type
)
3175 case lang_constructors_statement_enum
:
3176 dot
= lang_do_assignments (constructor_list
.head
,
3177 output_section_statement
,
3182 case lang_output_section_statement_enum
:
3184 lang_output_section_statement_type
*os
;
3186 os
= &(s
->output_section_statement
);
3187 if (os
->bfd_section
!= NULL
)
3189 dot
= os
->bfd_section
->vma
;
3190 (void) lang_do_assignments (os
->children
.head
, os
,
3192 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3197 /* If nothing has been placed into the output section then
3198 it won't have a bfd_section. */
3199 if (os
->bfd_section
)
3201 os
->bfd_section
->lma
3202 = exp_get_abs_int (os
->load_base
, 0, "load base",
3203 lang_final_phase_enum
);
3208 case lang_wild_statement_enum
:
3210 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
3211 output_section_statement
,
3216 case lang_object_symbols_statement_enum
:
3217 case lang_output_statement_enum
:
3218 case lang_target_statement_enum
:
3220 case lang_common_statement_enum
:
3223 case lang_data_statement_enum
:
3225 etree_value_type value
;
3227 value
= exp_fold_tree (s
->data_statement
.exp
,
3229 lang_final_phase_enum
, dot
, &dot
);
3230 s
->data_statement
.value
= value
.value
;
3232 einfo (_("%F%P: invalid data statement\n"));
3236 switch (s
->data_statement
.type
)
3260 case lang_reloc_statement_enum
:
3262 etree_value_type value
;
3264 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
3266 lang_final_phase_enum
, dot
, &dot
);
3267 s
->reloc_statement
.addend_value
= value
.value
;
3269 einfo (_("%F%P: invalid reloc statement\n"));
3271 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
) / opb
;
3274 case lang_input_section_enum
:
3276 asection
*in
= s
->input_section
.section
;
3278 if (in
->_cooked_size
!= 0)
3279 dot
+= in
->_cooked_size
/ opb
;
3281 dot
+= in
->_raw_size
/ opb
;
3285 case lang_input_statement_enum
:
3287 case lang_fill_statement_enum
:
3288 fill
= s
->fill_statement
.fill
;
3290 case lang_assignment_statement_enum
:
3292 exp_fold_tree (s
->assignment_statement
.exp
,
3293 output_section_statement
,
3294 lang_final_phase_enum
,
3300 case lang_padding_statement_enum
:
3301 dot
+= s
->padding_statement
.size
/ opb
;
3304 case lang_group_statement_enum
:
3305 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
3306 output_section_statement
,
3314 case lang_address_statement_enum
:
3322 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3323 operator .startof. (section_name), it produces an undefined symbol
3324 .startof.section_name. Similarly, when it sees
3325 .sizeof. (section_name), it produces an undefined symbol
3326 .sizeof.section_name. For all the output sections, we look for
3327 such symbols, and set them to the correct value. */
3330 lang_set_startof (void)
3334 if (link_info
.relocatable
)
3337 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3339 const char *secname
;
3341 struct bfd_link_hash_entry
*h
;
3343 secname
= bfd_get_section_name (output_bfd
, s
);
3344 buf
= xmalloc (10 + strlen (secname
));
3346 sprintf (buf
, ".startof.%s", secname
);
3347 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, FALSE
, FALSE
, TRUE
);
3348 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3350 h
->type
= bfd_link_hash_defined
;
3351 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
3352 h
->u
.def
.section
= bfd_abs_section_ptr
;
3355 sprintf (buf
, ".sizeof.%s", secname
);
3356 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, FALSE
, FALSE
, TRUE
);
3357 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3361 opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3362 ldfile_output_machine
);
3363 h
->type
= bfd_link_hash_defined
;
3364 if (s
->_cooked_size
!= 0)
3365 h
->u
.def
.value
= s
->_cooked_size
/ opb
;
3367 h
->u
.def
.value
= s
->_raw_size
/ opb
;
3368 h
->u
.def
.section
= bfd_abs_section_ptr
;
3378 struct bfd_link_hash_entry
*h
;
3381 if (link_info
.relocatable
|| link_info
.shared
)
3386 if (entry_symbol
.name
== NULL
)
3388 /* No entry has been specified. Look for start, but don't warn
3389 if we don't find it. */
3390 entry_symbol
.name
= "start";
3394 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
.name
,
3395 FALSE
, FALSE
, TRUE
);
3397 && (h
->type
== bfd_link_hash_defined
3398 || h
->type
== bfd_link_hash_defweak
)
3399 && h
->u
.def
.section
->output_section
!= NULL
)
3403 val
= (h
->u
.def
.value
3404 + bfd_get_section_vma (output_bfd
,
3405 h
->u
.def
.section
->output_section
)
3406 + h
->u
.def
.section
->output_offset
);
3407 if (! bfd_set_start_address (output_bfd
, val
))
3408 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol
.name
);
3415 /* We couldn't find the entry symbol. Try parsing it as a
3417 val
= bfd_scan_vma (entry_symbol
.name
, &send
, 0);
3420 if (! bfd_set_start_address (output_bfd
, val
))
3421 einfo (_("%P%F: can't set start address\n"));
3427 /* Can't find the entry symbol, and it's not a number. Use
3428 the first address in the text section. */
3429 ts
= bfd_get_section_by_name (output_bfd
, entry_section
);
3433 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3435 bfd_get_section_vma (output_bfd
, ts
));
3436 if (! bfd_set_start_address (output_bfd
,
3437 bfd_get_section_vma (output_bfd
,
3439 einfo (_("%P%F: can't set start address\n"));
3444 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3451 /* This is a small function used when we want to ignore errors from
3455 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED
, ...)
3457 /* Don't do anything. */
3460 /* Check that the architecture of all the input files is compatible
3461 with the output file. Also call the backend to let it do any
3462 other checking that is needed. */
3467 lang_statement_union_type
*file
;
3469 const bfd_arch_info_type
*compatible
;
3471 for (file
= file_chain
.head
; file
!= NULL
; file
= file
->input_statement
.next
)
3473 input_bfd
= file
->input_statement
.the_bfd
;
3474 compatible
= bfd_arch_get_compatible (input_bfd
, output_bfd
,
3475 command_line
.accept_unknown_input_arch
);
3477 /* In general it is not possible to perform a relocatable
3478 link between differing object formats when the input
3479 file has relocations, because the relocations in the
3480 input format may not have equivalent representations in
3481 the output format (and besides BFD does not translate
3482 relocs for other link purposes than a final link). */
3483 if ((link_info
.relocatable
|| link_info
.emitrelocations
)
3484 && (compatible
== NULL
3485 || bfd_get_flavour (input_bfd
) != bfd_get_flavour (output_bfd
))
3486 && (bfd_get_file_flags (input_bfd
) & HAS_RELOC
) != 0)
3488 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3489 bfd_get_target (input_bfd
), input_bfd
,
3490 bfd_get_target (output_bfd
), output_bfd
);
3491 /* einfo with %F exits. */
3494 if (compatible
== NULL
)
3496 if (command_line
.warn_mismatch
)
3497 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3498 bfd_printable_name (input_bfd
), input_bfd
,
3499 bfd_printable_name (output_bfd
));
3501 else if (bfd_count_sections (input_bfd
))
3503 /* If the input bfd has no contents, it shouldn't set the
3504 private data of the output bfd. */
3506 bfd_error_handler_type pfn
= NULL
;
3508 /* If we aren't supposed to warn about mismatched input
3509 files, temporarily set the BFD error handler to a
3510 function which will do nothing. We still want to call
3511 bfd_merge_private_bfd_data, since it may set up
3512 information which is needed in the output file. */
3513 if (! command_line
.warn_mismatch
)
3514 pfn
= bfd_set_error_handler (ignore_bfd_errors
);
3515 if (! bfd_merge_private_bfd_data (input_bfd
, output_bfd
))
3517 if (command_line
.warn_mismatch
)
3518 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3521 if (! command_line
.warn_mismatch
)
3522 bfd_set_error_handler (pfn
);
3527 /* Look through all the global common symbols and attach them to the
3528 correct section. The -sort-common command line switch may be used
3529 to roughly sort the entries by size. */
3534 if (command_line
.inhibit_common_definition
)
3536 if (link_info
.relocatable
3537 && ! command_line
.force_common_definition
)
3540 if (! config
.sort_common
)
3541 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, NULL
);
3546 for (power
= 4; power
>= 0; power
--)
3547 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, &power
);
3551 /* Place one common symbol in the correct section. */
3554 lang_one_common (struct bfd_link_hash_entry
*h
, void *info
)
3556 unsigned int power_of_two
;
3559 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3560 ldfile_output_machine
);
3562 if (h
->type
!= bfd_link_hash_common
)
3566 power_of_two
= h
->u
.c
.p
->alignment_power
;
3568 if (config
.sort_common
3569 && power_of_two
< (unsigned int) *(int *) info
)
3572 section
= h
->u
.c
.p
->section
;
3574 /* Increase the size of the section. */
3575 section
->_cooked_size
= align_n ((section
->_cooked_size
+ opb
- 1) / opb
,
3576 (bfd_vma
) 1 << power_of_two
) * opb
;
3578 /* Adjust the alignment if necessary. */
3579 if (power_of_two
> section
->alignment_power
)
3580 section
->alignment_power
= power_of_two
;
3582 /* Change the symbol from common to defined. */
3583 h
->type
= bfd_link_hash_defined
;
3584 h
->u
.def
.section
= section
;
3585 h
->u
.def
.value
= section
->_cooked_size
;
3587 /* Increase the size of the section. */
3588 section
->_cooked_size
+= size
;
3590 /* Make sure the section is allocated in memory, and make sure that
3591 it is no longer a common section. */
3592 section
->flags
|= SEC_ALLOC
;
3593 section
->flags
&= ~SEC_IS_COMMON
;
3595 if (config
.map_file
!= NULL
)
3597 static bfd_boolean header_printed
;
3602 if (! header_printed
)
3604 minfo (_("\nAllocating common symbols\n"));
3605 minfo (_("Common symbol size file\n\n"));
3606 header_printed
= TRUE
;
3609 name
= demangle (h
->root
.string
);
3611 len
= strlen (name
);
3626 if (size
<= 0xffffffff)
3627 sprintf (buf
, "%lx", (unsigned long) size
);
3629 sprintf_vma (buf
, size
);
3639 minfo ("%B\n", section
->owner
);
3645 /* Run through the input files and ensure that every input section has
3646 somewhere to go. If one is found without a destination then create
3647 an input request and place it into the statement tree. */
3650 lang_place_orphans (void)
3652 LANG_FOR_EACH_INPUT_STATEMENT (file
)
3656 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3658 if (s
->output_section
== NULL
)
3660 /* This section of the file is not attached, root
3661 around for a sensible place for it to go. */
3663 if (file
->just_syms_flag
)
3667 else if (strcmp (s
->name
, "COMMON") == 0)
3669 /* This is a lonely common section which must have
3670 come from an archive. We attach to the section
3671 with the wildcard. */
3672 if (! link_info
.relocatable
3673 || command_line
.force_common_definition
)
3675 if (default_common_section
== NULL
)
3678 /* This message happens when using the
3679 svr3.ifile linker script, so I have
3681 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3683 default_common_section
=
3684 lang_output_section_statement_lookup (".bss");
3687 lang_add_section (&default_common_section
->children
, s
,
3688 default_common_section
, file
);
3691 else if (ldemul_place_orphan (file
, s
))
3695 lang_output_section_statement_type
*os
;
3697 os
= lang_output_section_statement_lookup (s
->name
);
3698 lang_add_section (&os
->children
, s
, os
, file
);
3706 lang_set_flags (lang_memory_region_type
*ptr
, const char *flags
, int invert
)
3708 flagword
*ptr_flags
;
3710 ptr_flags
= invert
? &ptr
->not_flags
: &ptr
->flags
;
3716 *ptr_flags
|= SEC_ALLOC
;
3720 *ptr_flags
|= SEC_READONLY
;
3724 *ptr_flags
|= SEC_DATA
;
3728 *ptr_flags
|= SEC_CODE
;
3733 *ptr_flags
|= SEC_LOAD
;
3737 einfo (_("%P%F: invalid syntax in flags\n"));
3744 /* Call a function on each input file. This function will be called
3745 on an archive, but not on the elements. */
3748 lang_for_each_input_file (void (*func
) (lang_input_statement_type
*))
3750 lang_input_statement_type
*f
;
3752 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
3754 f
= (lang_input_statement_type
*) f
->next_real_file
)
3758 /* Call a function on each file. The function will be called on all
3759 the elements of an archive which are included in the link, but will
3760 not be called on the archive file itself. */
3763 lang_for_each_file (void (*func
) (lang_input_statement_type
*))
3765 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3776 lang_for_each_input_section (void (*func
) (bfd
*ab
, asection
*as
))
3778 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3782 for (s
= f
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3783 func (f
->the_bfd
, s
);
3790 ldlang_add_file (lang_input_statement_type
*entry
)
3794 lang_statement_append (&file_chain
,
3795 (lang_statement_union_type
*) entry
,
3798 /* The BFD linker needs to have a list of all input BFDs involved in
3800 ASSERT (entry
->the_bfd
->link_next
== NULL
);
3801 ASSERT (entry
->the_bfd
!= output_bfd
);
3802 for (pp
= &link_info
.input_bfds
; *pp
!= NULL
; pp
= &(*pp
)->link_next
)
3804 *pp
= entry
->the_bfd
;
3805 entry
->the_bfd
->usrdata
= entry
;
3806 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
3808 /* Look through the sections and check for any which should not be
3809 included in the link. We need to do this now, so that we can
3810 notice when the backend linker tries to report multiple
3811 definition errors for symbols which are in sections we aren't
3812 going to link. FIXME: It might be better to entirely ignore
3813 symbols which are defined in sections which are going to be
3814 discarded. This would require modifying the backend linker for
3815 each backend which might set the SEC_LINK_ONCE flag. If we do
3816 this, we should probably handle SEC_EXCLUDE in the same way. */
3818 bfd_map_over_sections (entry
->the_bfd
, section_already_linked
, entry
);
3822 lang_add_output (const char *name
, int from_script
)
3824 /* Make -o on command line override OUTPUT in script. */
3825 if (!had_output_filename
|| !from_script
)
3827 output_filename
= name
;
3828 had_output_filename
= TRUE
;
3832 static lang_output_section_statement_type
*current_section
;
3843 for (l
= 0; l
< 32; l
++)
3845 if (i
>= (unsigned int) x
)
3853 lang_output_section_statement_type
*
3854 lang_enter_output_section_statement (const char *output_section_statement_name
,
3855 etree_type
*address_exp
,
3856 enum section_type sectype
,
3857 bfd_vma block_value
,
3859 etree_type
*subalign
,
3862 lang_output_section_statement_type
*os
;
3866 lang_output_section_statement_lookup (output_section_statement_name
);
3868 /* Add this statement to tree. */
3870 add_statement (lang_output_section_statement_enum
,
3871 output_section_statement
);
3873 /* Make next things chain into subchain of this. */
3875 if (os
->addr_tree
== NULL
)
3877 os
->addr_tree
= address_exp
;
3879 os
->sectype
= sectype
;
3880 if (sectype
!= noload_section
)
3881 os
->flags
= SEC_NO_FLAGS
;
3883 os
->flags
= SEC_NEVER_LOAD
;
3884 os
->block_value
= block_value
? block_value
: 1;
3885 stat_ptr
= &os
->children
;
3887 os
->subsection_alignment
=
3888 topower (exp_get_value_int (subalign
, -1, "subsection alignment", 0));
3889 os
->section_alignment
=
3890 topower (exp_get_value_int (align
, -1, "section alignment", 0));
3892 os
->load_base
= ebase
;
3899 lang_output_statement_type
*new =
3900 new_stat (lang_output_statement
, stat_ptr
);
3902 new->name
= output_filename
;
3905 /* Reset the current counters in the regions. */
3908 lang_reset_memory_regions (void)
3910 lang_memory_region_type
*p
= lang_memory_region_list
;
3913 for (p
= lang_memory_region_list
; p
!= NULL
; p
= p
->next
)
3915 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
3916 p
->current
= p
->origin
;
3919 for (o
= output_bfd
->sections
; o
!= NULL
; o
= o
->next
)
3923 /* If the wild pattern was marked KEEP, the member sections
3924 should be as well. */
3927 gc_section_callback (lang_wild_statement_type
*ptr
,
3928 struct wildcard_list
*sec ATTRIBUTE_UNUSED
,
3930 lang_input_statement_type
*file ATTRIBUTE_UNUSED
,
3931 void *data ATTRIBUTE_UNUSED
)
3933 if (ptr
->keep_sections
)
3934 section
->flags
|= SEC_KEEP
;
3937 /* Handle a wild statement, marking it against GC. */
3940 lang_gc_wild (lang_wild_statement_type
*s
)
3942 walk_wild (s
, gc_section_callback
, NULL
);
3945 /* Iterate over sections marking them against GC. */
3948 lang_gc_sections_1 (lang_statement_union_type
*s
)
3950 for (; s
!= NULL
; s
= s
->header
.next
)
3952 switch (s
->header
.type
)
3954 case lang_wild_statement_enum
:
3955 lang_gc_wild (&s
->wild_statement
);
3957 case lang_constructors_statement_enum
:
3958 lang_gc_sections_1 (constructor_list
.head
);
3960 case lang_output_section_statement_enum
:
3961 lang_gc_sections_1 (s
->output_section_statement
.children
.head
);
3963 case lang_group_statement_enum
:
3964 lang_gc_sections_1 (s
->group_statement
.children
.head
);
3973 lang_gc_sections (void)
3975 struct bfd_link_hash_entry
*h
;
3976 ldlang_undef_chain_list_type
*ulist
;
3978 /* Keep all sections so marked in the link script. */
3980 lang_gc_sections_1 (statement_list
.head
);
3982 /* Keep all sections containing symbols undefined on the command-line,
3983 and the section containing the entry symbol. */
3985 for (ulist
= link_info
.gc_sym_list
; ulist
; ulist
= ulist
->next
)
3987 h
= bfd_link_hash_lookup (link_info
.hash
, ulist
->name
,
3988 FALSE
, FALSE
, FALSE
);
3991 && (h
->type
== bfd_link_hash_defined
3992 || h
->type
== bfd_link_hash_defweak
)
3993 && ! bfd_is_abs_section (h
->u
.def
.section
))
3995 h
->u
.def
.section
->flags
|= SEC_KEEP
;
3999 bfd_gc_sections (output_bfd
, &link_info
);
4005 lang_reasonable_defaults ();
4006 current_target
= default_target
;
4008 /* Open the output file. */
4009 lang_for_each_statement (ldlang_open_output
);
4011 ldemul_create_output_section_statements ();
4013 /* Add to the hash table all undefineds on the command line. */
4014 lang_place_undefineds ();
4016 already_linked_table_init ();
4018 /* Create a bfd for each input file. */
4019 current_target
= default_target
;
4020 open_input_bfds (statement_list
.head
, FALSE
);
4022 link_info
.gc_sym_list
= &entry_symbol
;
4023 if (entry_symbol
.name
== NULL
)
4024 link_info
.gc_sym_list
= ldlang_undef_chain_list_head
;
4026 ldemul_after_open ();
4028 already_linked_table_free ();
4030 /* Make sure that we're not mixing architectures. We call this
4031 after all the input files have been opened, but before we do any
4032 other processing, so that any operations merge_private_bfd_data
4033 does on the output file will be known during the rest of the
4037 /* Handle .exports instead of a version script if we're told to do so. */
4038 if (command_line
.version_exports_section
)
4039 lang_do_version_exports_section ();
4041 /* Build all sets based on the information gathered from the input
4043 ldctor_build_sets ();
4045 /* Remove unreferenced sections if asked to. */
4046 if (command_line
.gc_sections
)
4047 lang_gc_sections ();
4049 /* If there were any SEC_MERGE sections, finish their merging, so that
4050 section sizes can be computed. This has to be done after GC of sections,
4051 so that GCed sections are not merged, but before assigning output
4052 sections, since removing whole input sections is hard then. */
4053 bfd_merge_sections (output_bfd
, &link_info
);
4055 /* Size up the common data. */
4058 /* Run through the contours of the script and attach input sections
4059 to the correct output sections. */
4060 map_input_to_output_sections (statement_list
.head
, NULL
, NULL
);
4062 /* Find any sections not attached explicitly and handle them. */
4063 lang_place_orphans ();
4065 if (! link_info
.relocatable
)
4067 /* Look for a text section and set the readonly attribute in it. */
4068 asection
*found
= bfd_get_section_by_name (output_bfd
, ".text");
4072 if (config
.text_read_only
)
4073 found
->flags
|= SEC_READONLY
;
4075 found
->flags
&= ~SEC_READONLY
;
4079 /* Do anything special before sizing sections. This is where ELF
4080 and other back-ends size dynamic sections. */
4081 ldemul_before_allocation ();
4083 if (!link_info
.relocatable
)
4084 strip_excluded_output_sections ();
4086 /* We must record the program headers before we try to fix the
4087 section positions, since they will affect SIZEOF_HEADERS. */
4088 lang_record_phdrs ();
4090 /* Size up the sections. */
4091 lang_size_sections (statement_list
.head
, abs_output_section
,
4092 &statement_list
.head
, 0, 0, NULL
,
4093 command_line
.relax
? FALSE
: TRUE
);
4095 /* Now run around and relax if we can. */
4096 if (command_line
.relax
)
4098 /* Keep relaxing until bfd_relax_section gives up. */
4099 bfd_boolean relax_again
;
4103 lang_reset_memory_regions ();
4105 relax_again
= FALSE
;
4107 /* Note: pe-dll.c does something like this also. If you find
4108 you need to change this code, you probably need to change
4109 pe-dll.c also. DJ */
4111 /* Do all the assignments with our current guesses as to
4113 lang_do_assignments (statement_list
.head
, abs_output_section
,
4116 /* Perform another relax pass - this time we know where the
4117 globals are, so can make a better guess. */
4118 lang_size_sections (statement_list
.head
, abs_output_section
,
4119 &statement_list
.head
, 0, 0, &relax_again
, FALSE
);
4121 /* If the normal relax is done and the relax finalize pass
4122 is not performed yet, we perform another relax pass. */
4123 if (!relax_again
&& !link_info
.relax_finalizing
)
4125 link_info
.relax_finalizing
= TRUE
;
4129 while (relax_again
);
4131 /* Final extra sizing to report errors. */
4132 lang_reset_memory_regions ();
4133 lang_do_assignments (statement_list
.head
, abs_output_section
, NULL
, 0);
4134 lang_size_sections (statement_list
.head
, abs_output_section
,
4135 &statement_list
.head
, 0, 0, NULL
, TRUE
);
4138 /* See if anything special should be done now we know how big
4140 ldemul_after_allocation ();
4142 /* Fix any .startof. or .sizeof. symbols. */
4143 lang_set_startof ();
4145 /* Do all the assignments, now that we know the final resting places
4146 of all the symbols. */
4148 lang_do_assignments (statement_list
.head
, abs_output_section
, NULL
, 0);
4150 /* Make sure that the section addresses make sense. */
4151 if (! link_info
.relocatable
4152 && command_line
.check_section_addresses
)
4153 lang_check_section_addresses ();
4161 /* EXPORTED TO YACC */
4164 lang_add_wild (struct wildcard_spec
*filespec
,
4165 struct wildcard_list
*section_list
,
4166 bfd_boolean keep_sections
)
4168 struct wildcard_list
*curr
, *next
;
4169 lang_wild_statement_type
*new;
4171 /* Reverse the list as the parser puts it back to front. */
4172 for (curr
= section_list
, section_list
= NULL
;
4174 section_list
= curr
, curr
= next
)
4176 if (curr
->spec
.name
!= NULL
&& strcmp (curr
->spec
.name
, "COMMON") == 0)
4177 placed_commons
= TRUE
;
4180 curr
->next
= section_list
;
4183 if (filespec
!= NULL
&& filespec
->name
!= NULL
)
4185 if (strcmp (filespec
->name
, "*") == 0)
4186 filespec
->name
= NULL
;
4187 else if (! wildcardp (filespec
->name
))
4188 lang_has_input_file
= TRUE
;
4191 new = new_stat (lang_wild_statement
, stat_ptr
);
4192 new->filename
= NULL
;
4193 new->filenames_sorted
= FALSE
;
4194 if (filespec
!= NULL
)
4196 new->filename
= filespec
->name
;
4197 new->filenames_sorted
= filespec
->sorted
;
4199 new->section_list
= section_list
;
4200 new->keep_sections
= keep_sections
;
4201 lang_list_init (&new->children
);
4205 lang_section_start (const char *name
, etree_type
*address
)
4207 lang_address_statement_type
*ad
;
4209 ad
= new_stat (lang_address_statement
, stat_ptr
);
4210 ad
->section_name
= name
;
4211 ad
->address
= address
;
4214 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4215 because of a -e argument on the command line, or zero if this is
4216 called by ENTRY in a linker script. Command line arguments take
4220 lang_add_entry (const char *name
, bfd_boolean cmdline
)
4222 if (entry_symbol
.name
== NULL
4224 || ! entry_from_cmdline
)
4226 entry_symbol
.name
= name
;
4227 entry_from_cmdline
= cmdline
;
4232 lang_add_target (const char *name
)
4234 lang_target_statement_type
*new = new_stat (lang_target_statement
,
4242 lang_add_map (const char *name
)
4249 map_option_f
= TRUE
;
4257 lang_add_fill (fill_type
*fill
)
4259 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
4266 lang_add_data (int type
, union etree_union
*exp
)
4269 lang_data_statement_type
*new = new_stat (lang_data_statement
,
4277 /* Create a new reloc statement. RELOC is the BFD relocation type to
4278 generate. HOWTO is the corresponding howto structure (we could
4279 look this up, but the caller has already done so). SECTION is the
4280 section to generate a reloc against, or NAME is the name of the
4281 symbol to generate a reloc against. Exactly one of SECTION and
4282 NAME must be NULL. ADDEND is an expression for the addend. */
4285 lang_add_reloc (bfd_reloc_code_real_type reloc
,
4286 reloc_howto_type
*howto
,
4289 union etree_union
*addend
)
4291 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
4295 p
->section
= section
;
4297 p
->addend_exp
= addend
;
4299 p
->addend_value
= 0;
4300 p
->output_section
= NULL
;
4304 lang_assignment_statement_type
*
4305 lang_add_assignment (etree_type
*exp
)
4307 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
4315 lang_add_attribute (enum statement_enum attribute
)
4317 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
4321 lang_startup (const char *name
)
4323 if (startup_file
!= NULL
)
4325 einfo (_("%P%Fmultiple STARTUP files\n"));
4327 first_file
->filename
= name
;
4328 first_file
->local_sym_name
= name
;
4329 first_file
->real
= TRUE
;
4331 startup_file
= name
;
4335 lang_float (bfd_boolean maybe
)
4337 lang_float_flag
= maybe
;
4341 /* Work out the load- and run-time regions from a script statement, and
4342 store them in *LMA_REGION and *REGION respectively.
4344 MEMSPEC is the name of the run-time region, or "*default*" if the
4345 statement didn't specify one. LMA_MEMSPEC is the name of the
4346 load-time region, or null if the statement didn't specify one.
4347 HAVE_LMA_P is TRUE if the statement had an explicit load address.
4349 It is an error to specify both a load region and a load address. */
4352 lang_get_regions (struct memory_region_struct
**region
,
4353 struct memory_region_struct
**lma_region
,
4354 const char *memspec
,
4355 const char *lma_memspec
,
4358 *lma_region
= lang_memory_region_lookup (lma_memspec
);
4360 /* If no runtime region has been given, but the load region has
4361 been, use the load region. */
4362 if (lma_memspec
!= 0 && strcmp (memspec
, "*default*") == 0)
4363 *region
= *lma_region
;
4365 *region
= lang_memory_region_lookup (memspec
);
4367 if (have_lma_p
&& lma_memspec
!= 0)
4368 einfo (_("%X%P:%S: section has both a load address and a load region\n"));
4372 lang_leave_output_section_statement
4373 (fill_type
*fill
, const char *memspec
,
4374 struct lang_output_section_phdr_list
*phdrs
, const char *lma_memspec
)
4376 lang_get_regions (¤t_section
->region
,
4377 ¤t_section
->lma_region
,
4378 memspec
, lma_memspec
,
4379 current_section
->load_base
!= 0);
4380 current_section
->fill
= fill
;
4381 current_section
->phdrs
= phdrs
;
4382 stat_ptr
= &statement_list
;
4385 /* Create an absolute symbol with the given name with the value of the
4386 address of first byte of the section named.
4388 If the symbol already exists, then do nothing. */
4391 lang_abs_symbol_at_beginning_of (const char *secname
, const char *name
)
4393 struct bfd_link_hash_entry
*h
;
4395 h
= bfd_link_hash_lookup (link_info
.hash
, name
, TRUE
, TRUE
, TRUE
);
4397 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4399 if (h
->type
== bfd_link_hash_new
4400 || h
->type
== bfd_link_hash_undefined
)
4404 h
->type
= bfd_link_hash_defined
;
4406 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4410 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
4412 h
->u
.def
.section
= bfd_abs_section_ptr
;
4416 /* Create an absolute symbol with the given name with the value of the
4417 address of the first byte after the end of the section named.
4419 If the symbol already exists, then do nothing. */
4422 lang_abs_symbol_at_end_of (const char *secname
, const char *name
)
4424 struct bfd_link_hash_entry
*h
;
4426 h
= bfd_link_hash_lookup (link_info
.hash
, name
, TRUE
, TRUE
, TRUE
);
4428 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4430 if (h
->type
== bfd_link_hash_new
4431 || h
->type
== bfd_link_hash_undefined
)
4435 h
->type
= bfd_link_hash_defined
;
4437 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4441 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
4442 + bfd_section_size (output_bfd
, sec
) /
4443 bfd_octets_per_byte (output_bfd
));
4445 h
->u
.def
.section
= bfd_abs_section_ptr
;
4450 lang_statement_append (lang_statement_list_type
*list
,
4451 lang_statement_union_type
*element
,
4452 lang_statement_union_type
**field
)
4454 *(list
->tail
) = element
;
4458 /* Set the output format type. -oformat overrides scripts. */
4461 lang_add_output_format (const char *format
,
4466 if (output_target
== NULL
|| !from_script
)
4468 if (command_line
.endian
== ENDIAN_BIG
4471 else if (command_line
.endian
== ENDIAN_LITTLE
4475 output_target
= format
;
4479 /* Enter a group. This creates a new lang_group_statement, and sets
4480 stat_ptr to build new statements within the group. */
4483 lang_enter_group (void)
4485 lang_group_statement_type
*g
;
4487 g
= new_stat (lang_group_statement
, stat_ptr
);
4488 lang_list_init (&g
->children
);
4489 stat_ptr
= &g
->children
;
4492 /* Leave a group. This just resets stat_ptr to start writing to the
4493 regular list of statements again. Note that this will not work if
4494 groups can occur inside anything else which can adjust stat_ptr,
4495 but currently they can't. */
4498 lang_leave_group (void)
4500 stat_ptr
= &statement_list
;
4503 /* Add a new program header. This is called for each entry in a PHDRS
4504 command in a linker script. */
4507 lang_new_phdr (const char *name
,
4509 bfd_boolean filehdr
,
4514 struct lang_phdr
*n
, **pp
;
4516 n
= stat_alloc (sizeof (struct lang_phdr
));
4519 n
->type
= exp_get_value_int (type
, 0, "program header type",
4520 lang_final_phase_enum
);
4521 n
->filehdr
= filehdr
;
4526 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4531 /* Record the program header information in the output BFD. FIXME: We
4532 should not be calling an ELF specific function here. */
4535 lang_record_phdrs (void)
4539 struct lang_output_section_phdr_list
*last
;
4540 struct lang_phdr
*l
;
4541 lang_statement_union_type
*u
;
4544 secs
= xmalloc (alc
* sizeof (asection
*));
4546 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
4553 for (u
= lang_output_section_statement
.head
;
4555 u
= u
->output_section_statement
.next
)
4557 lang_output_section_statement_type
*os
;
4558 struct lang_output_section_phdr_list
*pl
;
4560 os
= &u
->output_section_statement
;
4567 if (os
->sectype
== noload_section
4568 || os
->bfd_section
== NULL
4569 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
4574 if (os
->bfd_section
== NULL
)
4577 for (; pl
!= NULL
; pl
= pl
->next
)
4579 if (strcmp (pl
->name
, l
->name
) == 0)
4584 secs
= xrealloc (secs
, alc
* sizeof (asection
*));
4586 secs
[c
] = os
->bfd_section
;
4593 if (l
->flags
== NULL
)
4596 flags
= exp_get_vma (l
->flags
, 0, "phdr flags",
4597 lang_final_phase_enum
);
4602 at
= exp_get_vma (l
->at
, 0, "phdr load address",
4603 lang_final_phase_enum
);
4605 if (! bfd_record_phdr (output_bfd
, l
->type
,
4606 l
->flags
!= NULL
, flags
, l
->at
!= NULL
,
4607 at
, l
->filehdr
, l
->phdrs
, c
, secs
))
4608 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4613 /* Make sure all the phdr assignments succeeded. */
4614 for (u
= lang_output_section_statement
.head
;
4616 u
= u
->output_section_statement
.next
)
4618 struct lang_output_section_phdr_list
*pl
;
4620 if (u
->output_section_statement
.bfd_section
== NULL
)
4623 for (pl
= u
->output_section_statement
.phdrs
;
4626 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
4627 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4628 u
->output_section_statement
.name
, pl
->name
);
4632 /* Record a list of sections which may not be cross referenced. */
4635 lang_add_nocrossref (struct lang_nocrossref
*l
)
4637 struct lang_nocrossrefs
*n
;
4639 n
= xmalloc (sizeof *n
);
4640 n
->next
= nocrossref_list
;
4642 nocrossref_list
= n
;
4644 /* Set notice_all so that we get informed about all symbols. */
4645 link_info
.notice_all
= TRUE
;
4648 /* Overlay handling. We handle overlays with some static variables. */
4650 /* The overlay virtual address. */
4651 static etree_type
*overlay_vma
;
4653 /* An expression for the maximum section size seen so far. */
4654 static etree_type
*overlay_max
;
4656 /* A list of all the sections in this overlay. */
4658 struct overlay_list
{
4659 struct overlay_list
*next
;
4660 lang_output_section_statement_type
*os
;
4663 static struct overlay_list
*overlay_list
;
4665 /* Start handling an overlay. */
4668 lang_enter_overlay (etree_type
*vma_expr
)
4670 /* The grammar should prevent nested overlays from occurring. */
4671 ASSERT (overlay_vma
== NULL
&& overlay_max
== NULL
);
4673 overlay_vma
= vma_expr
;
4676 /* Start a section in an overlay. We handle this by calling
4677 lang_enter_output_section_statement with the correct VMA.
4678 lang_leave_overlay sets up the LMA and memory regions. */
4681 lang_enter_overlay_section (const char *name
)
4683 struct overlay_list
*n
;
4686 lang_enter_output_section_statement (name
, overlay_vma
, normal_section
,
4689 /* If this is the first section, then base the VMA of future
4690 sections on this one. This will work correctly even if `.' is
4691 used in the addresses. */
4692 if (overlay_list
== NULL
)
4693 overlay_vma
= exp_nameop (ADDR
, name
);
4695 /* Remember the section. */
4696 n
= xmalloc (sizeof *n
);
4697 n
->os
= current_section
;
4698 n
->next
= overlay_list
;
4701 size
= exp_nameop (SIZEOF
, name
);
4703 /* Arrange to work out the maximum section end address. */
4704 if (overlay_max
== NULL
)
4707 overlay_max
= exp_binop (MAX_K
, overlay_max
, size
);
4710 /* Finish a section in an overlay. There isn't any special to do
4714 lang_leave_overlay_section (fill_type
*fill
,
4715 struct lang_output_section_phdr_list
*phdrs
)
4722 name
= current_section
->name
;
4724 /* For now, assume that "*default*" is the run-time memory region and
4725 that no load-time region has been specified. It doesn't really
4726 matter what we say here, since lang_leave_overlay will override it. */
4727 lang_leave_output_section_statement (fill
, "*default*", phdrs
, 0);
4729 /* Define the magic symbols. */
4731 clean
= xmalloc (strlen (name
) + 1);
4733 for (s1
= name
; *s1
!= '\0'; s1
++)
4734 if (ISALNUM (*s1
) || *s1
== '_')
4738 buf
= xmalloc (strlen (clean
) + sizeof "__load_start_");
4739 sprintf (buf
, "__load_start_%s", clean
);
4740 lang_add_assignment (exp_assop ('=', buf
,
4741 exp_nameop (LOADADDR
, name
)));
4743 buf
= xmalloc (strlen (clean
) + sizeof "__load_stop_");
4744 sprintf (buf
, "__load_stop_%s", clean
);
4745 lang_add_assignment (exp_assop ('=', buf
,
4747 exp_nameop (LOADADDR
, name
),
4748 exp_nameop (SIZEOF
, name
))));
4753 /* Finish an overlay. If there are any overlay wide settings, this
4754 looks through all the sections in the overlay and sets them. */
4757 lang_leave_overlay (etree_type
*lma_expr
,
4760 const char *memspec
,
4761 struct lang_output_section_phdr_list
*phdrs
,
4762 const char *lma_memspec
)
4764 lang_memory_region_type
*region
;
4765 lang_memory_region_type
*lma_region
;
4766 struct overlay_list
*l
;
4767 struct lang_nocrossref
*nocrossref
;
4769 lang_get_regions (®ion
, &lma_region
,
4770 memspec
, lma_memspec
,
4775 /* After setting the size of the last section, set '.' to end of the
4777 if (overlay_list
!= NULL
)
4778 overlay_list
->os
->update_dot_tree
4779 = exp_assop ('=', ".", exp_binop ('+', overlay_vma
, overlay_max
));
4784 struct overlay_list
*next
;
4786 if (fill
!= NULL
&& l
->os
->fill
== NULL
)
4789 l
->os
->region
= region
;
4790 l
->os
->lma_region
= lma_region
;
4792 /* The first section has the load address specified in the
4793 OVERLAY statement. The rest are worked out from that.
4794 The base address is not needed (and should be null) if
4795 an LMA region was specified. */
4797 l
->os
->load_base
= lma_expr
;
4798 else if (lma_region
== 0)
4799 l
->os
->load_base
= exp_binop ('+',
4800 exp_nameop (LOADADDR
, l
->next
->os
->name
),
4801 exp_nameop (SIZEOF
, l
->next
->os
->name
));
4803 if (phdrs
!= NULL
&& l
->os
->phdrs
== NULL
)
4804 l
->os
->phdrs
= phdrs
;
4808 struct lang_nocrossref
*nc
;
4810 nc
= xmalloc (sizeof *nc
);
4811 nc
->name
= l
->os
->name
;
4812 nc
->next
= nocrossref
;
4821 if (nocrossref
!= NULL
)
4822 lang_add_nocrossref (nocrossref
);
4825 overlay_list
= NULL
;
4829 /* Version handling. This is only useful for ELF. */
4831 /* This global variable holds the version tree that we build. */
4833 struct bfd_elf_version_tree
*lang_elf_version_info
;
4836 lang_vers_match_lang_c (struct bfd_elf_version_expr
*expr
,
4839 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4841 return fnmatch (expr
->pattern
, sym
, 0) == 0;
4845 lang_vers_match_lang_cplusplus (struct bfd_elf_version_expr
*expr
,
4851 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4854 alt_sym
= cplus_demangle (sym
, /* DMGL_NO_TPARAMS */ 0);
4857 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
4858 Should we early out FALSE in this case? */
4859 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
4863 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
4871 lang_vers_match_lang_java (struct bfd_elf_version_expr
*expr
,
4877 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4880 alt_sym
= cplus_demangle (sym
, DMGL_JAVA
);
4883 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
4884 Should we early out FALSE in this case? */
4885 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
4889 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
4896 /* This is called for each variable name or match expression. */
4898 struct bfd_elf_version_expr
*
4899 lang_new_vers_pattern (struct bfd_elf_version_expr
*orig
,
4903 struct bfd_elf_version_expr
*ret
;
4905 ret
= xmalloc (sizeof *ret
);
4911 if (lang
== NULL
|| strcasecmp (lang
, "C") == 0)
4912 ret
->match
= lang_vers_match_lang_c
;
4913 else if (strcasecmp (lang
, "C++") == 0)
4914 ret
->match
= lang_vers_match_lang_cplusplus
;
4915 else if (strcasecmp (lang
, "Java") == 0)
4916 ret
->match
= lang_vers_match_lang_java
;
4919 einfo (_("%X%P: unknown language `%s' in version information\n"),
4921 ret
->match
= lang_vers_match_lang_c
;
4924 return ldemul_new_vers_pattern (ret
);
4927 /* This is called for each set of variable names and match
4930 struct bfd_elf_version_tree
*
4931 lang_new_vers_node (struct bfd_elf_version_expr
*globals
,
4932 struct bfd_elf_version_expr
*locals
)
4934 struct bfd_elf_version_tree
*ret
;
4936 ret
= xmalloc (sizeof *ret
);
4940 ret
->globals
= globals
;
4941 ret
->locals
= locals
;
4943 ret
->name_indx
= (unsigned int) -1;
4948 /* This static variable keeps track of version indices. */
4950 static int version_index
;
4952 /* This is called when we know the name and dependencies of the
4956 lang_register_vers_node (const char *name
,
4957 struct bfd_elf_version_tree
*version
,
4958 struct bfd_elf_version_deps
*deps
)
4960 struct bfd_elf_version_tree
*t
, **pp
;
4961 struct bfd_elf_version_expr
*e1
;
4966 if ((name
[0] == '\0' && lang_elf_version_info
!= NULL
)
4967 || (lang_elf_version_info
&& lang_elf_version_info
->name
[0] == '\0'))
4969 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
4974 /* Make sure this node has a unique name. */
4975 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4976 if (strcmp (t
->name
, name
) == 0)
4977 einfo (_("%X%P: duplicate version tag `%s'\n"), name
);
4979 /* Check the global and local match names, and make sure there
4980 aren't any duplicates. */
4982 for (e1
= version
->globals
; e1
!= NULL
; e1
= e1
->next
)
4984 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4986 struct bfd_elf_version_expr
*e2
;
4988 for (e2
= t
->locals
; e2
!= NULL
; e2
= e2
->next
)
4989 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
4990 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4995 for (e1
= version
->locals
; e1
!= NULL
; e1
= e1
->next
)
4997 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4999 struct bfd_elf_version_expr
*e2
;
5001 for (e2
= t
->globals
; e2
!= NULL
; e2
= e2
->next
)
5002 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5003 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5008 version
->deps
= deps
;
5009 version
->name
= name
;
5010 if (name
[0] != '\0')
5013 version
->vernum
= version_index
;
5016 version
->vernum
= 0;
5018 for (pp
= &lang_elf_version_info
; *pp
!= NULL
; pp
= &(*pp
)->next
)
5023 /* This is called when we see a version dependency. */
5025 struct bfd_elf_version_deps
*
5026 lang_add_vers_depend (struct bfd_elf_version_deps
*list
, const char *name
)
5028 struct bfd_elf_version_deps
*ret
;
5029 struct bfd_elf_version_tree
*t
;
5031 ret
= xmalloc (sizeof *ret
);
5034 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5036 if (strcmp (t
->name
, name
) == 0)
5038 ret
->version_needed
= t
;
5043 einfo (_("%X%P: unable to find version dependency `%s'\n"), name
);
5049 lang_do_version_exports_section (void)
5051 struct bfd_elf_version_expr
*greg
= NULL
, *lreg
;
5053 LANG_FOR_EACH_INPUT_STATEMENT (is
)
5055 asection
*sec
= bfd_get_section_by_name (is
->the_bfd
, ".exports");
5062 len
= bfd_section_size (is
->the_bfd
, sec
);
5063 contents
= xmalloc (len
);
5064 if (!bfd_get_section_contents (is
->the_bfd
, sec
, contents
, 0, len
))
5065 einfo (_("%X%P: unable to read .exports section contents\n"), sec
);
5068 while (p
< contents
+ len
)
5070 greg
= lang_new_vers_pattern (greg
, p
, NULL
);
5071 p
= strchr (p
, '\0') + 1;
5074 /* Do not free the contents, as we used them creating the regex. */
5076 /* Do not include this section in the link. */
5077 bfd_set_section_flags (is
->the_bfd
, sec
,
5078 bfd_get_section_flags (is
->the_bfd
, sec
) | SEC_EXCLUDE
);
5081 lreg
= lang_new_vers_pattern (NULL
, "*", NULL
);
5082 lang_register_vers_node (command_line
.version_exports_section
,
5083 lang_new_vers_node (greg
, lreg
), NULL
);
5087 lang_add_unique (const char *name
)
5089 struct unique_sections
*ent
;
5091 for (ent
= unique_section_list
; ent
; ent
= ent
->next
)
5092 if (strcmp (ent
->name
, name
) == 0)
5095 ent
= xmalloc (sizeof *ent
);
5096 ent
->name
= xstrdup (name
);
5097 ent
->next
= unique_section_list
;
5098 unique_section_list
= ent
;