1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 #include "libiberty.h"
26 #include "safe-ctype.h"
44 static lang_statement_union_type
*new_statement
45 PARAMS ((enum statement_enum
, size_t, lang_statement_list_type
*));
48 static struct obstack stat_obstack
;
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52 static const char *startup_file
;
53 static lang_statement_list_type input_file_chain
;
54 static boolean placed_commons
= false;
55 static lang_output_section_statement_type
*default_common_section
;
56 static boolean map_option_f
;
57 static bfd_vma print_dot
;
58 static lang_input_statement_type
*first_file
;
59 static const char *current_target
;
60 static const char *output_target
;
61 static lang_statement_list_type statement_list
;
62 static struct lang_phdr
*lang_phdr_list
;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*) (lang_statement_union_type
*),
66 lang_statement_union_type
*));
67 static lang_input_statement_type
*new_afile
68 PARAMS ((const char *, lang_input_file_enum_type
, const char *, boolean
));
69 static lang_memory_region_type
*lang_memory_default
PARAMS ((asection
*));
70 static void lang_map_flags
PARAMS ((flagword
));
71 static void init_os
PARAMS ((lang_output_section_statement_type
*));
72 static void exp_init_os
PARAMS ((etree_type
*));
73 static void section_already_linked
PARAMS ((bfd
*, asection
*, PTR
));
74 static struct bfd_hash_entry
*already_linked_newfunc
75 PARAMS ((struct bfd_hash_entry
*, struct bfd_hash_table
*, const char *));
76 static void already_linked_table_init
PARAMS ((void));
77 static void already_linked_table_free
PARAMS ((void));
78 static boolean wildcardp
PARAMS ((const char *));
79 static lang_statement_union_type
*wild_sort
80 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*,
81 lang_input_statement_type
*, asection
*));
82 static void output_section_callback
83 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*, asection
*,
84 lang_input_statement_type
*, PTR
));
85 static lang_input_statement_type
*lookup_name
PARAMS ((const char *));
86 static boolean load_symbols
87 PARAMS ((lang_input_statement_type
*, lang_statement_list_type
*));
89 PARAMS ((lang_wild_statement_type
*,
90 const char *, lang_output_section_statement_type
*));
91 static bfd
*open_output
PARAMS ((const char *));
92 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*));
93 static void open_input_bfds
PARAMS ((lang_statement_union_type
*, boolean
));
94 static void lang_reasonable_defaults
PARAMS ((void));
95 static void lang_place_undefineds
PARAMS ((void));
96 static void map_input_to_output_sections
97 PARAMS ((lang_statement_union_type
*, const char *,
98 lang_output_section_statement_type
*));
99 static void print_output_section_statement
100 PARAMS ((lang_output_section_statement_type
*));
101 static void print_assignment
102 PARAMS ((lang_assignment_statement_type
*,
103 lang_output_section_statement_type
*));
104 static void print_input_statement
PARAMS ((lang_input_statement_type
*));
105 static boolean print_one_symbol
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
106 static void print_input_section
PARAMS ((lang_input_section_type
*));
107 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*));
108 static void print_data_statement
PARAMS ((lang_data_statement_type
*));
109 static void print_address_statement
PARAMS ((lang_address_statement_type
*));
110 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*));
111 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*));
112 static void print_wild_statement
113 PARAMS ((lang_wild_statement_type
*, lang_output_section_statement_type
*));
114 static void print_group
115 PARAMS ((lang_group_statement_type
*, lang_output_section_statement_type
*));
116 static void print_statement
117 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
118 static void print_statement_list
119 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
120 static void print_statements
PARAMS ((void));
121 static void insert_pad
122 PARAMS ((lang_statement_union_type
**, fill_type
,
123 unsigned int, asection
*, bfd_vma
));
124 static bfd_vma size_input_section
125 PARAMS ((lang_statement_union_type
**, lang_output_section_statement_type
*,
126 fill_type
, bfd_vma
));
127 static void lang_finish
PARAMS ((void));
128 static void ignore_bfd_errors
PARAMS ((const char *, ...));
129 static void lang_check
PARAMS ((void));
130 static void lang_common
PARAMS ((void));
131 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
132 static void lang_place_orphans
PARAMS ((void));
133 static int topower
PARAMS ((int));
134 static void lang_set_startof
PARAMS ((void));
135 static void reset_memory_regions
PARAMS ((void));
136 static void gc_section_callback
137 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*, asection
*,
138 lang_input_statement_type
*, PTR
));
139 static void lang_record_phdrs
PARAMS ((void));
140 static void lang_gc_wild
PARAMS ((lang_wild_statement_type
*));
141 static void lang_gc_sections_1
PARAMS ((lang_statement_union_type
*));
142 static void lang_gc_sections
PARAMS ((void));
143 static int lang_vers_match_lang_c
144 PARAMS ((struct bfd_elf_version_expr
*, const char *));
145 static int lang_vers_match_lang_cplusplus
146 PARAMS ((struct bfd_elf_version_expr
*, const char *));
147 static int lang_vers_match_lang_java
148 PARAMS ((struct bfd_elf_version_expr
*, const char *));
149 static void lang_do_version_exports_section
PARAMS ((void));
150 static void lang_check_section_addresses
PARAMS ((void));
151 static void os_region_check
152 PARAMS ((lang_output_section_statement_type
*,
153 struct memory_region_struct
*, etree_type
*, bfd_vma
));
155 typedef void (*callback_t
) PARAMS ((lang_wild_statement_type
*,
156 struct wildcard_list
*,
158 lang_input_statement_type
*,
160 static void walk_wild
161 PARAMS ((lang_wild_statement_type
*, callback_t
, PTR
));
162 static void walk_wild_section
163 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
165 static void walk_wild_file
166 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
169 static int get_target
PARAMS ((const bfd_target
*, PTR
));
170 static void stricpy
PARAMS ((char *, char *));
171 static void strcut
PARAMS ((char *, char *));
172 static int name_compare
PARAMS ((char *, char *));
173 static int closest_target_match
PARAMS ((const bfd_target
*, PTR
));
174 static char * get_first_input_target
PARAMS ((void));
177 lang_output_section_statement_type
*abs_output_section
;
178 lang_statement_list_type lang_output_section_statement
;
179 lang_statement_list_type
*stat_ptr
= &statement_list
;
180 lang_statement_list_type file_chain
= { NULL
, NULL
};
181 const char *entry_symbol
= NULL
;
182 boolean entry_from_cmdline
;
183 boolean lang_has_input_file
= false;
184 boolean had_output_filename
= false;
185 boolean lang_float_flag
= false;
186 boolean delete_output_file_on_failure
= false;
187 struct lang_nocrossrefs
*nocrossref_list
;
188 struct unique_sections
*unique_section_list
;
190 etree_type
*base
; /* Relocation base - or null */
192 #if defined (__STDC__) || defined (ALMOST_STDC)
193 #define cat(a,b) a##b
195 #define cat(a,b) a/**/b
198 /* Don't beautify the line below with "innocent" whitespace, it breaks
199 the K&R C preprocessor! */
200 #define new_stat(x, y) \
201 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
203 #define outside_section_address(q) \
204 ((q)->output_offset + (q)->output_section->vma)
206 #define outside_symbol_address(q) \
207 ((q)->value + outside_section_address (q->section))
209 #define SECTION_NAME_MAP_LENGTH (16)
215 return obstack_alloc (&stat_obstack
, size
);
219 unique_section_p (secnam
)
222 struct unique_sections
*unam
;
224 for (unam
= unique_section_list
; unam
; unam
= unam
->next
)
225 if (wildcardp (unam
->name
)
226 ? fnmatch (unam
->name
, secnam
, 0) == 0
227 : strcmp (unam
->name
, secnam
) == 0)
235 /* Generic traversal routines for finding matching sections. */
238 walk_wild_section (ptr
, file
, callback
, data
)
239 lang_wild_statement_type
*ptr
;
240 lang_input_statement_type
*file
;
246 if (file
->just_syms_flag
)
249 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
251 struct wildcard_list
*sec
;
253 sec
= ptr
->section_list
;
256 boolean skip
= false;
260 struct name_list
*list_tmp
;
262 /* Don't process sections from files which were
264 for (list_tmp
= sec
->spec
.exclude_name_list
;
266 list_tmp
= list_tmp
->next
)
268 if (wildcardp (list_tmp
->name
))
269 skip
= fnmatch (list_tmp
->name
, file
->filename
, 0) == 0;
271 skip
= strcmp (list_tmp
->name
, file
->filename
) == 0;
277 if (!skip
&& sec
->spec
.name
!= NULL
)
279 const char *sname
= bfd_get_section_name (file
->the_bfd
, s
);
281 if (wildcardp (sec
->spec
.name
))
282 skip
= fnmatch (sec
->spec
.name
, sname
, 0) != 0;
284 skip
= strcmp (sec
->spec
.name
, sname
) != 0;
289 (*callback
) (ptr
, sec
, s
, file
, data
);
298 /* Handle a wild statement for a single file F. */
301 walk_wild_file (s
, f
, callback
, data
)
302 lang_wild_statement_type
*s
;
303 lang_input_statement_type
*f
;
307 if (f
->the_bfd
== NULL
308 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
309 walk_wild_section (s
, f
, callback
, data
);
314 /* This is an archive file. We must map each member of the
315 archive separately. */
316 member
= bfd_openr_next_archived_file (f
->the_bfd
, (bfd
*) NULL
);
317 while (member
!= NULL
)
319 /* When lookup_name is called, it will call the add_symbols
320 entry point for the archive. For each element of the
321 archive which is included, BFD will call ldlang_add_file,
322 which will set the usrdata field of the member to the
323 lang_input_statement. */
324 if (member
->usrdata
!= NULL
)
326 walk_wild_section (s
,
327 (lang_input_statement_type
*) member
->usrdata
,
331 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
337 walk_wild (s
, callback
, data
)
338 lang_wild_statement_type
*s
;
342 const char *file_spec
= s
->filename
;
344 if (file_spec
== NULL
)
346 /* Perform the iteration over all files in the list. */
347 LANG_FOR_EACH_INPUT_STATEMENT (f
)
349 walk_wild_file (s
, f
, callback
, data
);
352 else if (wildcardp (file_spec
))
354 LANG_FOR_EACH_INPUT_STATEMENT (f
)
356 if (fnmatch (file_spec
, f
->filename
, FNM_FILE_NAME
) == 0)
357 walk_wild_file (s
, f
, callback
, data
);
362 lang_input_statement_type
*f
;
364 /* Perform the iteration over a single file. */
365 f
= lookup_name (file_spec
);
367 walk_wild_file (s
, f
, callback
, data
);
371 /* lang_for_each_statement walks the parse tree and calls the provided
372 function for each node. */
375 lang_for_each_statement_worker (func
, s
)
376 void (*func
) PARAMS ((lang_statement_union_type
*));
377 lang_statement_union_type
*s
;
379 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
383 switch (s
->header
.type
)
385 case lang_constructors_statement_enum
:
386 lang_for_each_statement_worker (func
, constructor_list
.head
);
388 case lang_output_section_statement_enum
:
389 lang_for_each_statement_worker
391 s
->output_section_statement
.children
.head
);
393 case lang_wild_statement_enum
:
394 lang_for_each_statement_worker
396 s
->wild_statement
.children
.head
);
398 case lang_group_statement_enum
:
399 lang_for_each_statement_worker (func
,
400 s
->group_statement
.children
.head
);
402 case lang_data_statement_enum
:
403 case lang_reloc_statement_enum
:
404 case lang_object_symbols_statement_enum
:
405 case lang_output_statement_enum
:
406 case lang_target_statement_enum
:
407 case lang_input_section_enum
:
408 case lang_input_statement_enum
:
409 case lang_assignment_statement_enum
:
410 case lang_padding_statement_enum
:
411 case lang_address_statement_enum
:
412 case lang_fill_statement_enum
:
422 lang_for_each_statement (func
)
423 void (*func
) PARAMS ((lang_statement_union_type
*));
425 lang_for_each_statement_worker (func
, statement_list
.head
);
428 /*----------------------------------------------------------------------*/
431 lang_list_init (list
)
432 lang_statement_list_type
*list
;
434 list
->head
= (lang_statement_union_type
*) NULL
;
435 list
->tail
= &list
->head
;
438 /* Build a new statement node for the parse tree. */
440 static lang_statement_union_type
*
441 new_statement (type
, size
, list
)
442 enum statement_enum type
;
444 lang_statement_list_type
*list
;
446 lang_statement_union_type
*new = (lang_statement_union_type
*)
449 new->header
.type
= type
;
450 new->header
.next
= (lang_statement_union_type
*) NULL
;
451 lang_statement_append (list
, new, &new->header
.next
);
455 /* Build a new input file node for the language. There are several
456 ways in which we treat an input file, eg, we only look at symbols,
457 or prefix it with a -l etc.
459 We can be supplied with requests for input files more than once;
460 they may, for example be split over serveral lines like foo.o(.text)
461 foo.o(.data) etc, so when asked for a file we check that we haven't
462 got it already so we don't duplicate the bfd. */
464 static lang_input_statement_type
*
465 new_afile (name
, file_type
, target
, add_to_list
)
467 lang_input_file_enum_type file_type
;
471 lang_input_statement_type
*p
;
474 p
= new_stat (lang_input_statement
, stat_ptr
);
477 p
= ((lang_input_statement_type
*)
478 stat_alloc (sizeof (lang_input_statement_type
)));
479 p
->header
.next
= NULL
;
482 lang_has_input_file
= true;
486 case lang_input_file_is_symbols_only_enum
:
488 p
->is_archive
= false;
490 p
->local_sym_name
= name
;
491 p
->just_syms_flag
= true;
492 p
->search_dirs_flag
= false;
494 case lang_input_file_is_fake_enum
:
496 p
->is_archive
= false;
498 p
->local_sym_name
= name
;
499 p
->just_syms_flag
= false;
500 p
->search_dirs_flag
= false;
502 case lang_input_file_is_l_enum
:
503 p
->is_archive
= true;
506 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
507 p
->just_syms_flag
= false;
508 p
->search_dirs_flag
= true;
510 case lang_input_file_is_marker_enum
:
512 p
->is_archive
= false;
514 p
->local_sym_name
= name
;
515 p
->just_syms_flag
= false;
516 p
->search_dirs_flag
= true;
518 case lang_input_file_is_search_file_enum
:
520 p
->is_archive
= false;
522 p
->local_sym_name
= name
;
523 p
->just_syms_flag
= false;
524 p
->search_dirs_flag
= true;
526 case lang_input_file_is_file_enum
:
528 p
->is_archive
= false;
530 p
->local_sym_name
= name
;
531 p
->just_syms_flag
= false;
532 p
->search_dirs_flag
= false;
537 p
->the_bfd
= (bfd
*) NULL
;
538 p
->asymbols
= (asymbol
**) NULL
;
539 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
540 p
->next
= (lang_statement_union_type
*) NULL
;
542 p
->dynamic
= config
.dynamic_link
;
543 p
->whole_archive
= whole_archive
;
545 lang_statement_append (&input_file_chain
,
546 (lang_statement_union_type
*) p
,
551 lang_input_statement_type
*
552 lang_add_input_file (name
, file_type
, target
)
554 lang_input_file_enum_type file_type
;
557 lang_has_input_file
= true;
558 return new_afile (name
, file_type
, target
, true);
561 /* Build enough state so that the parser can build its tree. */
566 obstack_begin (&stat_obstack
, 1000);
568 stat_ptr
= &statement_list
;
570 lang_list_init (stat_ptr
);
572 lang_list_init (&input_file_chain
);
573 lang_list_init (&lang_output_section_statement
);
574 lang_list_init (&file_chain
);
575 first_file
= lang_add_input_file ((char *) NULL
,
576 lang_input_file_is_marker_enum
,
579 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
581 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
585 /*----------------------------------------------------------------------
586 A region is an area of memory declared with the
587 MEMORY { name:org=exp, len=exp ... }
590 We maintain a list of all the regions here.
592 If no regions are specified in the script, then the default is used
593 which is created when looked up to be the entire data space. */
595 static lang_memory_region_type
*lang_memory_region_list
;
596 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
598 lang_memory_region_type
*
599 lang_memory_region_lookup (name
)
600 const char *const name
;
602 lang_memory_region_type
*p
;
604 for (p
= lang_memory_region_list
;
605 p
!= (lang_memory_region_type
*) NULL
;
608 if (strcmp (p
->name
, name
) == 0)
615 /* This code used to always use the first region in the list as the
616 default region. I changed it to instead use a region
617 encompassing all of memory as the default region. This permits
618 NOLOAD sections to work reasonably without requiring a region.
619 People should specify what region they mean, if they really want
621 if (strcmp (name
, "*default*") == 0)
623 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
625 return lang_memory_region_list
;
631 lang_memory_region_type
*new =
632 (lang_memory_region_type
*) stat_alloc (sizeof (lang_memory_region_type
));
634 new->name
= xstrdup (name
);
635 new->next
= (lang_memory_region_type
*) NULL
;
637 *lang_memory_region_list_tail
= new;
638 lang_memory_region_list_tail
= &new->next
;
642 new->length
= ~(bfd_size_type
) 0;
644 new->had_full_message
= false;
650 static lang_memory_region_type
*
651 lang_memory_default (section
)
654 lang_memory_region_type
*p
;
656 flagword sec_flags
= section
->flags
;
658 /* Override SEC_DATA to mean a writable section. */
659 if ((sec_flags
& (SEC_ALLOC
| SEC_READONLY
| SEC_CODE
)) == SEC_ALLOC
)
660 sec_flags
|= SEC_DATA
;
662 for (p
= lang_memory_region_list
;
663 p
!= (lang_memory_region_type
*) NULL
;
666 if ((p
->flags
& sec_flags
) != 0
667 && (p
->not_flags
& sec_flags
) == 0)
672 return lang_memory_region_lookup ("*default*");
675 lang_output_section_statement_type
*
676 lang_output_section_find (name
)
677 const char *const name
;
679 lang_statement_union_type
*u
;
680 lang_output_section_statement_type
*lookup
;
682 for (u
= lang_output_section_statement
.head
;
683 u
!= (lang_statement_union_type
*) NULL
;
686 lookup
= &u
->output_section_statement
;
687 if (strcmp (name
, lookup
->name
) == 0)
692 return (lang_output_section_statement_type
*) NULL
;
695 lang_output_section_statement_type
*
696 lang_output_section_statement_lookup (name
)
697 const char *const name
;
699 lang_output_section_statement_type
*lookup
;
701 lookup
= lang_output_section_find (name
);
702 if (lookup
== (lang_output_section_statement_type
*) NULL
)
705 lookup
= (lang_output_section_statement_type
*)
706 new_stat (lang_output_section_statement
, stat_ptr
);
707 lookup
->region
= (lang_memory_region_type
*) NULL
;
708 lookup
->lma_region
= (lang_memory_region_type
*) NULL
;
710 lookup
->block_value
= 1;
713 lookup
->next
= (lang_statement_union_type
*) NULL
;
714 lookup
->bfd_section
= (asection
*) NULL
;
715 lookup
->processed
= false;
716 lookup
->sectype
= normal_section
;
717 lookup
->addr_tree
= (etree_type
*) NULL
;
718 lang_list_init (&lookup
->children
);
720 lookup
->memspec
= (const char *) NULL
;
722 lookup
->subsection_alignment
= -1;
723 lookup
->section_alignment
= -1;
724 lookup
->load_base
= (union etree_union
*) NULL
;
725 lookup
->phdrs
= NULL
;
727 lang_statement_append (&lang_output_section_statement
,
728 (lang_statement_union_type
*) lookup
,
735 lang_map_flags (flag
)
738 if (flag
& SEC_ALLOC
)
744 if (flag
& SEC_READONLY
)
757 lang_memory_region_type
*m
;
759 minfo (_("\nMemory Configuration\n\n"));
760 fprintf (config
.map_file
, "%-16s %-18s %-18s %s\n",
761 _("Name"), _("Origin"), _("Length"), _("Attributes"));
763 for (m
= lang_memory_region_list
;
764 m
!= (lang_memory_region_type
*) NULL
;
770 fprintf (config
.map_file
, "%-16s ", m
->name
);
772 sprintf_vma (buf
, m
->origin
);
773 minfo ("0x%s ", buf
);
781 minfo ("0x%V", m
->length
);
782 if (m
->flags
|| m
->not_flags
)
790 lang_map_flags (m
->flags
);
796 lang_map_flags (m
->not_flags
);
803 fprintf (config
.map_file
, _("\nLinker script and memory map\n\n"));
808 /* Initialize an output section. */
812 lang_output_section_statement_type
*s
;
814 section_userdata_type
*new;
816 if (s
->bfd_section
!= NULL
)
819 if (strcmp (s
->name
, DISCARD_SECTION_NAME
) == 0)
820 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME
);
822 new = ((section_userdata_type
*)
823 stat_alloc (sizeof (section_userdata_type
)));
825 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
826 if (s
->bfd_section
== (asection
*) NULL
)
827 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
828 if (s
->bfd_section
== (asection
*) NULL
)
830 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
831 output_bfd
->xvec
->name
, s
->name
);
833 s
->bfd_section
->output_section
= s
->bfd_section
;
835 /* We initialize an output sections output offset to minus its own
836 vma to allow us to output a section through itself. */
837 s
->bfd_section
->output_offset
= 0;
838 get_userdata (s
->bfd_section
) = (PTR
) new;
840 /* If there is a base address, make sure that any sections it might
841 mention are initialized. */
842 if (s
->addr_tree
!= NULL
)
843 exp_init_os (s
->addr_tree
);
846 /* Make sure that all output sections mentioned in an expression are
853 switch (exp
->type
.node_class
)
856 exp_init_os (exp
->assign
.src
);
860 exp_init_os (exp
->binary
.lhs
);
861 exp_init_os (exp
->binary
.rhs
);
865 exp_init_os (exp
->trinary
.cond
);
866 exp_init_os (exp
->trinary
.lhs
);
867 exp_init_os (exp
->trinary
.rhs
);
871 exp_init_os (exp
->unary
.child
);
875 switch (exp
->type
.node_code
)
881 lang_output_section_statement_type
*os
;
883 os
= lang_output_section_find (exp
->name
.name
);
884 if (os
!= NULL
&& os
->bfd_section
== NULL
)
895 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
896 once into the output. This routine checks each section, and
897 arrange to discard it if a section of the same name has already
898 been linked. If the section has COMDAT information, then it uses
899 that to decide whether the section should be included. This code
900 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
901 that is, it does not depend solely upon the section name.
902 section_already_linked is called via bfd_map_over_sections. */
904 /* This is the shape of the elements inside the already_linked hash
905 table. It maps a name onto a list of already_linked elements with
906 the same name. It's possible to get more than one element in a
907 list if the COMDAT sections have different names. */
909 struct already_linked_hash_entry
911 struct bfd_hash_entry root
;
912 struct already_linked
*entry
;
915 struct already_linked
917 struct already_linked
*next
;
921 /* The hash table. */
923 static struct bfd_hash_table already_linked_table
;
926 section_already_linked (abfd
, sec
, data
)
931 lang_input_statement_type
*entry
= (lang_input_statement_type
*) data
;
934 struct already_linked
*l
;
935 struct already_linked_hash_entry
*already_linked_list
;
937 /* If we are only reading symbols from this object, then we want to
938 discard all sections. */
939 if (entry
->just_syms_flag
)
941 sec
->output_section
= bfd_abs_section_ptr
;
942 sec
->output_offset
= sec
->vma
;
946 flags
= bfd_get_section_flags (abfd
, sec
);
948 if ((flags
& SEC_LINK_ONCE
) == 0)
951 /* FIXME: When doing a relocatable link, we may have trouble
952 copying relocations in other sections that refer to local symbols
953 in the section being discarded. Those relocations will have to
954 be converted somehow; as of this writing I'm not sure that any of
955 the backends handle that correctly.
957 It is tempting to instead not discard link once sections when
958 doing a relocatable link (technically, they should be discarded
959 whenever we are building constructors). However, that fails,
960 because the linker winds up combining all the link once sections
961 into a single large link once section, which defeats the purpose
962 of having link once sections in the first place.
964 Also, not merging link once sections in a relocatable link
965 causes trouble for MIPS ELF, which relies in link once semantics
966 to handle the .reginfo section correctly. */
968 name
= bfd_get_section_name (abfd
, sec
);
970 already_linked_list
=
971 ((struct already_linked_hash_entry
*)
972 bfd_hash_lookup (&already_linked_table
, name
, true, false));
974 for (l
= already_linked_list
->entry
; l
!= NULL
; l
= l
->next
)
976 if (sec
->comdat
== NULL
977 || l
->sec
->comdat
== NULL
978 || strcmp (sec
->comdat
->name
, l
->sec
->comdat
->name
) == 0)
980 /* The section has already been linked. See if we should
982 switch (flags
& SEC_LINK_DUPLICATES
)
987 case SEC_LINK_DUPLICATES_DISCARD
:
990 case SEC_LINK_DUPLICATES_ONE_ONLY
:
991 if (sec
->comdat
== NULL
)
992 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
995 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
996 abfd
, name
, sec
->comdat
->name
);
999 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
1000 /* FIXME: We should really dig out the contents of both
1001 sections and memcmp them. The COFF/PE spec says that
1002 the Microsoft linker does not implement this
1003 correctly, so I'm not going to bother doing it
1006 case SEC_LINK_DUPLICATES_SAME_SIZE
:
1007 if (bfd_section_size (abfd
, sec
)
1008 != bfd_section_size (l
->sec
->owner
, l
->sec
))
1009 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1014 /* Set the output_section field so that lang_add_section
1015 does not create a lang_input_section structure for this
1017 sec
->output_section
= bfd_abs_section_ptr
;
1023 /* This is the first section with this name. Record it. Allocate
1024 the memory from the same obstack as the hash table is kept in. */
1026 l
= ((struct already_linked
*)
1027 bfd_hash_allocate (&already_linked_table
, sizeof *l
));
1030 l
->next
= already_linked_list
->entry
;
1031 already_linked_list
->entry
= l
;
1034 /* Support routines for the hash table used by section_already_linked,
1035 initialize the table, fill in an entry and remove the table. */
1037 static struct bfd_hash_entry
*
1038 already_linked_newfunc (entry
, table
, string
)
1039 struct bfd_hash_entry
*entry ATTRIBUTE_UNUSED
;
1040 struct bfd_hash_table
*table
;
1041 const char *string ATTRIBUTE_UNUSED
;
1043 struct already_linked_hash_entry
*ret
=
1044 bfd_hash_allocate (table
, sizeof (struct already_linked_hash_entry
));
1048 return (struct bfd_hash_entry
*) ret
;
1052 already_linked_table_init ()
1054 if (! bfd_hash_table_init_n (&already_linked_table
,
1055 already_linked_newfunc
,
1057 einfo (_("%P%F: Failed to create hash table\n"));
1061 already_linked_table_free ()
1063 bfd_hash_table_free (&already_linked_table
);
1066 /* The wild routines.
1068 These expand statements like *(.text) and foo.o to a list of
1069 explicit actions, like foo.o(.text), bar.o(.text) and
1070 foo.o(.text, .data). */
1072 /* Return true if the PATTERN argument is a wildcard pattern.
1073 Although backslashes are treated specially if a pattern contains
1074 wildcards, we do not consider the mere presence of a backslash to
1075 be enough to cause the pattern to be treated as a wildcard.
1076 That lets us handle DOS filenames more naturally. */
1080 const char *pattern
;
1084 for (s
= pattern
; *s
!= '\0'; ++s
)
1092 /* Add SECTION to the output section OUTPUT. Do this by creating a
1093 lang_input_section statement which is placed at PTR. FILE is the
1094 input file which holds SECTION. */
1097 lang_add_section (ptr
, section
, output
, file
)
1098 lang_statement_list_type
*ptr
;
1100 lang_output_section_statement_type
*output
;
1101 lang_input_statement_type
*file
;
1106 flags
= bfd_get_section_flags (section
->owner
, section
);
1110 /* If we are doing a final link, discard sections marked with
1112 if (! link_info
.relocateable
1113 && (flags
& SEC_EXCLUDE
) != 0)
1116 /* Discard input sections which are assigned to a section named
1117 DISCARD_SECTION_NAME. */
1118 if (strcmp (output
->name
, DISCARD_SECTION_NAME
) == 0)
1121 /* Discard debugging sections if we are stripping debugging
1123 if ((link_info
.strip
== strip_debugger
|| link_info
.strip
== strip_all
)
1124 && (flags
& SEC_DEBUGGING
) != 0)
1129 if (section
->output_section
== NULL
)
1131 /* This prevents future calls from assigning this section. */
1132 section
->output_section
= bfd_abs_section_ptr
;
1137 if (section
->output_section
== NULL
)
1140 lang_input_section_type
*new;
1143 if (output
->bfd_section
== NULL
)
1146 first
= ! output
->bfd_section
->linker_has_input
;
1147 output
->bfd_section
->linker_has_input
= 1;
1149 /* Add a section reference to the list. */
1150 new = new_stat (lang_input_section
, ptr
);
1152 new->section
= section
;
1154 section
->output_section
= output
->bfd_section
;
1156 flags
= section
->flags
;
1158 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1159 to an output section, because we want to be able to include a
1160 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1161 section (I don't know why we want to do this, but we do).
1162 build_link_order in ldwrite.c handles this case by turning
1163 the embedded SEC_NEVER_LOAD section into a fill. */
1165 flags
&= ~ SEC_NEVER_LOAD
;
1167 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1168 already been processed. One reason to do this is that on pe
1169 format targets, .text$foo sections go into .text and it's odd
1170 to see .text with SEC_LINK_ONCE set. */
1172 if (! link_info
.relocateable
)
1173 flags
&= ~ (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES
);
1175 /* If this is not the first input section, and the SEC_READONLY
1176 flag is not currently set, then don't set it just because the
1177 input section has it set. */
1179 if (! first
&& (section
->output_section
->flags
& SEC_READONLY
) == 0)
1180 flags
&= ~ SEC_READONLY
;
1182 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1184 && ((section
->output_section
->flags
& (SEC_MERGE
| SEC_STRINGS
))
1185 != (flags
& (SEC_MERGE
| SEC_STRINGS
))
1186 || ((flags
& SEC_MERGE
)
1187 && section
->output_section
->entsize
!= section
->entsize
)))
1189 section
->output_section
->flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1190 flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1193 section
->output_section
->flags
|= flags
;
1195 if (flags
& SEC_MERGE
)
1196 section
->output_section
->entsize
= section
->entsize
;
1198 /* If SEC_READONLY is not set in the input section, then clear
1199 it from the output section. */
1200 if ((section
->flags
& SEC_READONLY
) == 0)
1201 section
->output_section
->flags
&= ~SEC_READONLY
;
1203 switch (output
->sectype
)
1205 case normal_section
:
1210 case overlay_section
:
1211 output
->bfd_section
->flags
&= ~SEC_ALLOC
;
1213 case noload_section
:
1214 output
->bfd_section
->flags
&= ~SEC_LOAD
;
1215 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
1219 /* Copy over SEC_SMALL_DATA. */
1220 if (section
->flags
& SEC_SMALL_DATA
)
1221 section
->output_section
->flags
|= SEC_SMALL_DATA
;
1223 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
1224 output
->bfd_section
->alignment_power
= section
->alignment_power
;
1226 /* If supplied an aligment, then force it. */
1227 if (output
->section_alignment
!= -1)
1228 output
->bfd_section
->alignment_power
= output
->section_alignment
;
1230 if (section
->flags
& SEC_BLOCK
)
1232 section
->output_section
->flags
|= SEC_BLOCK
;
1233 /* FIXME: This value should really be obtained from the bfd... */
1234 output
->block_value
= 128;
1239 /* Handle wildcard sorting. This returns the lang_input_section which
1240 should follow the one we are going to create for SECTION and FILE,
1241 based on the sorting requirements of WILD. It returns NULL if the
1242 new section should just go at the end of the current list. */
1244 static lang_statement_union_type
*
1245 wild_sort (wild
, sec
, file
, section
)
1246 lang_wild_statement_type
*wild
;
1247 struct wildcard_list
*sec
;
1248 lang_input_statement_type
*file
;
1251 const char *section_name
;
1252 lang_statement_union_type
*l
;
1254 if (!wild
->filenames_sorted
&& (sec
== NULL
|| !sec
->spec
.sorted
))
1257 section_name
= bfd_get_section_name (file
->the_bfd
, section
);
1258 for (l
= wild
->children
.head
; l
!= NULL
; l
= l
->header
.next
)
1260 lang_input_section_type
*ls
;
1262 if (l
->header
.type
!= lang_input_section_enum
)
1264 ls
= &l
->input_section
;
1266 /* Sorting by filename takes precedence over sorting by section
1269 if (wild
->filenames_sorted
)
1271 const char *fn
, *ln
;
1275 /* The PE support for the .idata section as generated by
1276 dlltool assumes that files will be sorted by the name of
1277 the archive and then the name of the file within the
1280 if (file
->the_bfd
!= NULL
1281 && bfd_my_archive (file
->the_bfd
) != NULL
)
1283 fn
= bfd_get_filename (bfd_my_archive (file
->the_bfd
));
1288 fn
= file
->filename
;
1292 if (ls
->ifile
->the_bfd
!= NULL
1293 && bfd_my_archive (ls
->ifile
->the_bfd
) != NULL
)
1295 ln
= bfd_get_filename (bfd_my_archive (ls
->ifile
->the_bfd
));
1300 ln
= ls
->ifile
->filename
;
1304 i
= strcmp (fn
, ln
);
1313 fn
= file
->filename
;
1315 ln
= ls
->ifile
->filename
;
1317 i
= strcmp (fn
, ln
);
1325 /* Here either the files are not sorted by name, or we are
1326 looking at the sections for this file. */
1328 if (sec
!= NULL
&& sec
->spec
.sorted
)
1330 if (strcmp (section_name
,
1331 bfd_get_section_name (ls
->ifile
->the_bfd
,
1341 /* Expand a wild statement for a particular FILE. SECTION may be
1342 NULL, in which case it is a wild card. */
1345 output_section_callback (ptr
, sec
, section
, file
, output
)
1346 lang_wild_statement_type
*ptr
;
1347 struct wildcard_list
*sec
;
1349 lang_input_statement_type
*file
;
1352 lang_statement_union_type
*before
;
1354 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1355 if (unique_section_p (bfd_get_section_name (file
->the_bfd
, section
)))
1358 /* If the wild pattern was marked KEEP, the member sections
1359 should be as well. */
1360 if (ptr
->keep_sections
)
1361 section
->flags
|= SEC_KEEP
;
1363 before
= wild_sort (ptr
, sec
, file
, section
);
1365 /* Here BEFORE points to the lang_input_section which
1366 should follow the one we are about to add. If BEFORE
1367 is NULL, then the section should just go at the end
1368 of the current list. */
1371 lang_add_section (&ptr
->children
, section
,
1372 (lang_output_section_statement_type
*) output
,
1376 lang_statement_list_type list
;
1377 lang_statement_union_type
**pp
;
1379 lang_list_init (&list
);
1380 lang_add_section (&list
, section
,
1381 (lang_output_section_statement_type
*) output
,
1384 /* If we are discarding the section, LIST.HEAD will
1386 if (list
.head
!= NULL
)
1388 ASSERT (list
.head
->header
.next
== NULL
);
1390 for (pp
= &ptr
->children
.head
;
1392 pp
= &(*pp
)->header
.next
)
1393 ASSERT (*pp
!= NULL
);
1395 list
.head
->header
.next
= *pp
;
1401 /* This is passed a file name which must have been seen already and
1402 added to the statement tree. We will see if it has been opened
1403 already and had its symbols read. If not then we'll read it. */
1405 static lang_input_statement_type
*
1409 lang_input_statement_type
*search
;
1411 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
1412 search
!= (lang_input_statement_type
*) NULL
;
1413 search
= (lang_input_statement_type
*) search
->next_real_file
)
1415 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
1417 if (search
->filename
!= (char *) NULL
1418 && name
!= (char *) NULL
1419 && strcmp (search
->filename
, name
) == 0)
1423 if (search
== (lang_input_statement_type
*) NULL
)
1424 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
1427 /* If we have already added this file, or this file is not real
1428 (FIXME: can that ever actually happen?) or the name is NULL
1429 (FIXME: can that ever actually happen?) don't add this file. */
1432 || search
->filename
== (const char *) NULL
)
1435 if (! load_symbols (search
, (lang_statement_list_type
*) NULL
))
1441 /* Get the symbols for an input file. */
1444 load_symbols (entry
, place
)
1445 lang_input_statement_type
*entry
;
1446 lang_statement_list_type
*place
;
1453 ldfile_open_file (entry
);
1455 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
1456 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
1459 lang_statement_list_type
*hold
;
1460 boolean bad_load
= true;
1462 err
= bfd_get_error ();
1464 /* See if the emulation has some special knowledge. */
1465 if (ldemul_unrecognized_file (entry
))
1468 if (err
== bfd_error_file_ambiguously_recognized
)
1472 einfo (_("%B: file not recognized: %E\n"), entry
->the_bfd
);
1473 einfo (_("%B: matching formats:"), entry
->the_bfd
);
1474 for (p
= matching
; *p
!= NULL
; p
++)
1478 else if (err
!= bfd_error_file_not_recognized
1480 einfo (_("%F%B: file not recognized: %E\n"), entry
->the_bfd
);
1484 bfd_close (entry
->the_bfd
);
1485 entry
->the_bfd
= NULL
;
1487 /* Try to interpret the file as a linker script. */
1488 ldfile_open_command_file (entry
->filename
);
1493 ldfile_assumed_script
= true;
1494 parser_input
= input_script
;
1496 ldfile_assumed_script
= false;
1503 if (ldemul_recognized_file (entry
))
1506 /* We don't call ldlang_add_file for an archive. Instead, the
1507 add_symbols entry point will call ldlang_add_file, via the
1508 add_archive_element callback, for each element of the archive
1510 switch (bfd_get_format (entry
->the_bfd
))
1516 ldlang_add_file (entry
);
1517 if (trace_files
|| trace_file_tries
)
1518 info_msg ("%I\n", entry
);
1522 if (entry
->whole_archive
)
1524 bfd
* member
= NULL
;
1525 boolean loaded
= true;
1529 member
= bfd_openr_next_archived_file (entry
->the_bfd
, member
);
1534 if (! bfd_check_format (member
, bfd_object
))
1536 einfo (_("%F%B: member %B in archive is not an object\n"),
1537 entry
->the_bfd
, member
);
1541 if (! ((*link_info
.callbacks
->add_archive_element
)
1542 (&link_info
, member
, "--whole-archive")))
1545 if (! bfd_link_add_symbols (member
, &link_info
))
1547 einfo (_("%F%B: could not read symbols: %E\n"), member
);
1552 entry
->loaded
= loaded
;
1558 if (bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
1559 entry
->loaded
= true;
1561 einfo (_("%F%B: could not read symbols: %E\n"), entry
->the_bfd
);
1563 return entry
->loaded
;
1566 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1567 may be NULL, indicating that it is a wildcard. Separate
1568 lang_input_section statements are created for each part of the
1569 expansion; they are added after the wild statement S. OUTPUT is
1570 the output section. */
1573 wild (s
, target
, output
)
1574 lang_wild_statement_type
*s
;
1575 const char *target ATTRIBUTE_UNUSED
;
1576 lang_output_section_statement_type
*output
;
1578 struct wildcard_list
*sec
;
1580 walk_wild (s
, output_section_callback
, (PTR
) output
);
1582 for (sec
= s
->section_list
; sec
!= NULL
; sec
= sec
->next
)
1584 if (default_common_section
!= NULL
)
1586 if (sec
->spec
.name
!= NULL
&& strcmp (sec
->spec
.name
, "COMMON") == 0)
1588 /* Remember the section that common is going to in case we
1589 later get something which doesn't know where to put it. */
1590 default_common_section
= output
;
1595 /* Return true iff target is the sought target. */
1598 get_target (target
, data
)
1599 const bfd_target
*target
;
1602 const char *sought
= (const char *) data
;
1604 return strcmp (target
->name
, sought
) == 0;
1607 /* Like strcpy() but convert to lower case as well. */
1616 while ((c
= *src
++) != 0)
1617 *dest
++ = TOLOWER (c
);
1622 /* Remove the first occurance of needle (if any) in haystack
1626 strcut (haystack
, needle
)
1630 haystack
= strstr (haystack
, needle
);
1636 for (src
= haystack
+ strlen (needle
); *src
;)
1637 *haystack
++ = *src
++;
1643 /* Compare two target format name strings.
1644 Return a value indicating how "similar" they are. */
1647 name_compare (first
, second
)
1655 copy1
= xmalloc (strlen (first
) + 1);
1656 copy2
= xmalloc (strlen (second
) + 1);
1658 /* Convert the names to lower case. */
1659 stricpy (copy1
, first
);
1660 stricpy (copy2
, second
);
1662 /* Remove and endian strings from the name. */
1663 strcut (copy1
, "big");
1664 strcut (copy1
, "little");
1665 strcut (copy2
, "big");
1666 strcut (copy2
, "little");
1668 /* Return a value based on how many characters match,
1669 starting from the beginning. If both strings are
1670 the same then return 10 * their length. */
1671 for (result
= 0; copy1
[result
] == copy2
[result
]; result
++)
1672 if (copy1
[result
] == 0)
1684 /* Set by closest_target_match() below. */
1685 static const bfd_target
*winner
;
1687 /* Scan all the valid bfd targets looking for one that has the endianness
1688 requirement that was specified on the command line, and is the nearest
1689 match to the original output target. */
1692 closest_target_match (target
, data
)
1693 const bfd_target
*target
;
1696 const bfd_target
*original
= (const bfd_target
*) data
;
1698 if (command_line
.endian
== ENDIAN_BIG
1699 && target
->byteorder
!= BFD_ENDIAN_BIG
)
1702 if (command_line
.endian
== ENDIAN_LITTLE
1703 && target
->byteorder
!= BFD_ENDIAN_LITTLE
)
1706 /* Must be the same flavour. */
1707 if (target
->flavour
!= original
->flavour
)
1710 /* If we have not found a potential winner yet, then record this one. */
1717 /* Oh dear, we now have two potential candidates for a successful match.
1718 Compare their names and choose the better one. */
1719 if (name_compare (target
->name
, original
->name
)
1720 > name_compare (winner
->name
, original
->name
))
1723 /* Keep on searching until wqe have checked them all. */
1727 /* Return the BFD target format of the first input file. */
1730 get_first_input_target ()
1732 char *target
= NULL
;
1734 LANG_FOR_EACH_INPUT_STATEMENT (s
)
1736 if (s
->header
.type
== lang_input_statement_enum
1739 ldfile_open_file (s
);
1741 if (s
->the_bfd
!= NULL
1742 && bfd_check_format (s
->the_bfd
, bfd_object
))
1744 target
= bfd_get_target (s
->the_bfd
);
1755 /* Open the output file. */
1763 /* Has the user told us which output format to use? */
1764 if (output_target
== (char *) NULL
)
1766 /* No - has the current target been set to something other than
1768 if (current_target
!= default_target
)
1769 output_target
= current_target
;
1771 /* No - can we determine the format of the first input file? */
1774 output_target
= get_first_input_target ();
1776 /* Failed - use the default output target. */
1777 if (output_target
== NULL
)
1778 output_target
= default_target
;
1782 /* Has the user requested a particular endianness on the command
1784 if (command_line
.endian
!= ENDIAN_UNSET
)
1786 const bfd_target
*target
;
1787 enum bfd_endian desired_endian
;
1789 /* Get the chosen target. */
1790 target
= bfd_search_for_target (get_target
, (PTR
) output_target
);
1792 /* If the target is not supported, we cannot do anything. */
1795 if (command_line
.endian
== ENDIAN_BIG
)
1796 desired_endian
= BFD_ENDIAN_BIG
;
1798 desired_endian
= BFD_ENDIAN_LITTLE
;
1800 /* See if the target has the wrong endianness. This should
1801 not happen if the linker script has provided big and
1802 little endian alternatives, but some scrips don't do
1804 if (target
->byteorder
!= desired_endian
)
1806 /* If it does, then see if the target provides
1807 an alternative with the correct endianness. */
1808 if (target
->alternative_target
!= NULL
1809 && (target
->alternative_target
->byteorder
== desired_endian
))
1810 output_target
= target
->alternative_target
->name
;
1813 /* Try to find a target as similar as possible to
1814 the default target, but which has the desired
1815 endian characteristic. */
1816 (void) bfd_search_for_target (closest_target_match
,
1819 /* Oh dear - we could not find any targets that
1820 satisfy our requirements. */
1822 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1824 output_target
= winner
->name
;
1830 output
= bfd_openw (name
, output_target
);
1832 if (output
== (bfd
*) NULL
)
1834 if (bfd_get_error () == bfd_error_invalid_target
)
1835 einfo (_("%P%F: target %s not found\n"), output_target
);
1837 einfo (_("%P%F: cannot open output file %s: %E\n"), name
);
1840 delete_output_file_on_failure
= true;
1843 output
->flags
|= D_PAGED
;
1846 if (! bfd_set_format (output
, bfd_object
))
1847 einfo (_("%P%F:%s: can not make object file: %E\n"), name
);
1848 if (! bfd_set_arch_mach (output
,
1849 ldfile_output_architecture
,
1850 ldfile_output_machine
))
1851 einfo (_("%P%F:%s: can not set architecture: %E\n"), name
);
1853 link_info
.hash
= bfd_link_hash_table_create (output
);
1854 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
1855 einfo (_("%P%F: can not create link hash table: %E\n"));
1857 bfd_set_gp_size (output
, g_switch_value
);
1862 ldlang_open_output (statement
)
1863 lang_statement_union_type
*statement
;
1865 switch (statement
->header
.type
)
1867 case lang_output_statement_enum
:
1868 ASSERT (output_bfd
== (bfd
*) NULL
);
1869 output_bfd
= open_output (statement
->output_statement
.name
);
1870 ldemul_set_output_arch ();
1871 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
1872 output_bfd
->flags
|= D_PAGED
;
1874 output_bfd
->flags
&= ~D_PAGED
;
1875 if (config
.text_read_only
)
1876 output_bfd
->flags
|= WP_TEXT
;
1878 output_bfd
->flags
&= ~WP_TEXT
;
1879 if (link_info
.traditional_format
)
1880 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
1882 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
1885 case lang_target_statement_enum
:
1886 current_target
= statement
->target_statement
.target
;
1893 /* Open all the input files. */
1896 open_input_bfds (s
, force
)
1897 lang_statement_union_type
*s
;
1900 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
1902 switch (s
->header
.type
)
1904 case lang_constructors_statement_enum
:
1905 open_input_bfds (constructor_list
.head
, force
);
1907 case lang_output_section_statement_enum
:
1908 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
1910 case lang_wild_statement_enum
:
1911 /* Maybe we should load the file's symbols. */
1912 if (s
->wild_statement
.filename
1913 && ! wildcardp (s
->wild_statement
.filename
))
1914 (void) lookup_name (s
->wild_statement
.filename
);
1915 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1917 case lang_group_statement_enum
:
1919 struct bfd_link_hash_entry
*undefs
;
1921 /* We must continually search the entries in the group
1922 until no new symbols are added to the list of undefined
1927 undefs
= link_info
.hash
->undefs_tail
;
1928 open_input_bfds (s
->group_statement
.children
.head
, true);
1930 while (undefs
!= link_info
.hash
->undefs_tail
);
1933 case lang_target_statement_enum
:
1934 current_target
= s
->target_statement
.target
;
1936 case lang_input_statement_enum
:
1937 if (s
->input_statement
.real
)
1939 lang_statement_list_type add
;
1941 s
->input_statement
.target
= current_target
;
1943 /* If we are being called from within a group, and this
1944 is an archive which has already been searched, then
1945 force it to be researched unless the whole archive
1946 has been loaded already. */
1948 && !s
->input_statement
.whole_archive
1949 && s
->input_statement
.loaded
1950 && bfd_check_format (s
->input_statement
.the_bfd
,
1952 s
->input_statement
.loaded
= false;
1954 lang_list_init (&add
);
1956 if (! load_symbols (&s
->input_statement
, &add
))
1957 config
.make_executable
= false;
1959 if (add
.head
!= NULL
)
1961 *add
.tail
= s
->header
.next
;
1962 s
->header
.next
= add
.head
;
1972 /* If there are [COMMONS] statements, put a wild one into the bss
1976 lang_reasonable_defaults ()
1979 lang_output_section_statement_lookup (".text");
1980 lang_output_section_statement_lookup (".data");
1982 default_common_section
= lang_output_section_statement_lookup (".bss");
1984 if (placed_commons
== false)
1986 lang_wild_statement_type
*new =
1987 new_stat (lang_wild_statement
,
1988 &default_common_section
->children
);
1990 new->section_name
= "COMMON";
1991 new->filename
= (char *) NULL
;
1992 lang_list_init (&new->children
);
1997 /* Add the supplied name to the symbol table as an undefined reference.
1998 Remove items from the chain as we open input bfds. */
1999 typedef struct ldlang_undef_chain_list
2001 struct ldlang_undef_chain_list
*next
;
2003 } ldlang_undef_chain_list_type
;
2005 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
2008 ldlang_add_undef (name
)
2009 const char *const name
;
2011 ldlang_undef_chain_list_type
*new =
2012 ((ldlang_undef_chain_list_type
*)
2013 stat_alloc (sizeof (ldlang_undef_chain_list_type
)));
2015 new->next
= ldlang_undef_chain_list_head
;
2016 ldlang_undef_chain_list_head
= new;
2018 new->name
= xstrdup (name
);
2021 /* Run through the list of undefineds created above and place them
2022 into the linker hash table as undefined symbols belonging to the
2026 lang_place_undefineds ()
2028 ldlang_undef_chain_list_type
*ptr
;
2030 for (ptr
= ldlang_undef_chain_list_head
;
2031 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
2034 struct bfd_link_hash_entry
*h
;
2036 h
= bfd_link_hash_lookup (link_info
.hash
, ptr
->name
, true, false, true);
2037 if (h
== (struct bfd_link_hash_entry
*) NULL
)
2038 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2039 if (h
->type
== bfd_link_hash_new
)
2041 h
->type
= bfd_link_hash_undefined
;
2042 h
->u
.undef
.abfd
= NULL
;
2043 bfd_link_add_undef (link_info
.hash
, h
);
2048 /* Open input files and attatch to output sections. */
2051 map_input_to_output_sections (s
, target
, output_section_statement
)
2052 lang_statement_union_type
*s
;
2054 lang_output_section_statement_type
*output_section_statement
;
2056 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
2058 switch (s
->header
.type
)
2060 case lang_wild_statement_enum
:
2061 wild (&s
->wild_statement
, target
, output_section_statement
);
2062 case lang_constructors_statement_enum
:
2063 map_input_to_output_sections (constructor_list
.head
,
2065 output_section_statement
);
2067 case lang_output_section_statement_enum
:
2068 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
2070 &s
->output_section_statement
);
2072 case lang_output_statement_enum
:
2074 case lang_target_statement_enum
:
2075 target
= s
->target_statement
.target
;
2077 case lang_group_statement_enum
:
2078 map_input_to_output_sections (s
->group_statement
.children
.head
,
2080 output_section_statement
);
2082 case lang_fill_statement_enum
:
2083 case lang_input_section_enum
:
2084 case lang_object_symbols_statement_enum
:
2085 case lang_data_statement_enum
:
2086 case lang_reloc_statement_enum
:
2087 case lang_padding_statement_enum
:
2088 case lang_input_statement_enum
:
2089 if (output_section_statement
!= NULL
2090 && output_section_statement
->bfd_section
== NULL
)
2091 init_os (output_section_statement
);
2093 case lang_assignment_statement_enum
:
2094 if (output_section_statement
!= NULL
2095 && output_section_statement
->bfd_section
== NULL
)
2096 init_os (output_section_statement
);
2098 /* Make sure that any sections mentioned in the assignment
2100 exp_init_os (s
->assignment_statement
.exp
);
2102 case lang_afile_asection_pair_statement_enum
:
2105 case lang_address_statement_enum
:
2106 /* Mark the specified section with the supplied address. */
2108 lang_output_section_statement_type
*os
=
2109 lang_output_section_statement_lookup
2110 (s
->address_statement
.section_name
);
2112 if (os
->bfd_section
== NULL
)
2114 os
->addr_tree
= s
->address_statement
.address
;
2122 print_output_section_statement (output_section_statement
)
2123 lang_output_section_statement_type
*output_section_statement
;
2125 asection
*section
= output_section_statement
->bfd_section
;
2128 if (output_section_statement
!= abs_output_section
)
2130 minfo ("\n%s", output_section_statement
->name
);
2132 if (section
!= NULL
)
2134 print_dot
= section
->vma
;
2136 len
= strlen (output_section_statement
->name
);
2137 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2142 while (len
< SECTION_NAME_MAP_LENGTH
)
2148 minfo ("0x%V %W", section
->vma
, section
->_raw_size
);
2150 if (output_section_statement
->load_base
!= NULL
)
2154 addr
= exp_get_abs_int (output_section_statement
->load_base
, 0,
2155 "load base", lang_final_phase_enum
);
2156 minfo (_(" load address 0x%V"), addr
);
2163 print_statement_list (output_section_statement
->children
.head
,
2164 output_section_statement
);
2168 print_assignment (assignment
, output_section
)
2169 lang_assignment_statement_type
*assignment
;
2170 lang_output_section_statement_type
*output_section
;
2173 etree_value_type result
;
2175 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2178 result
= exp_fold_tree (assignment
->exp
->assign
.src
, output_section
,
2179 lang_final_phase_enum
, print_dot
, &print_dot
);
2181 minfo ("0x%V", result
.value
+ result
.section
->bfd_section
->vma
);
2192 exp_print_tree (assignment
->exp
);
2198 print_input_statement (statm
)
2199 lang_input_statement_type
*statm
;
2201 if (statm
->filename
!= (char *) NULL
)
2203 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
2207 /* Print all symbols defined in a particular section. This is called
2208 via bfd_link_hash_traverse. */
2211 print_one_symbol (hash_entry
, ptr
)
2212 struct bfd_link_hash_entry
*hash_entry
;
2215 asection
*sec
= (asection
*) ptr
;
2217 if ((hash_entry
->type
== bfd_link_hash_defined
2218 || hash_entry
->type
== bfd_link_hash_defweak
)
2219 && sec
== hash_entry
->u
.def
.section
)
2223 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2226 (hash_entry
->u
.def
.value
2227 + hash_entry
->u
.def
.section
->output_offset
2228 + hash_entry
->u
.def
.section
->output_section
->vma
));
2230 minfo (" %T\n", hash_entry
->root
.string
);
2236 /* Print information about an input section to the map file. */
2239 print_input_section (in
)
2240 lang_input_section_type
*in
;
2242 asection
*i
= in
->section
;
2243 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
2244 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2245 ldfile_output_machine
);
2250 minfo ("%s", i
->name
);
2252 if (i
->output_section
!= NULL
)
2256 len
= 1 + strlen (i
->name
);
2257 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2262 while (len
< SECTION_NAME_MAP_LENGTH
)
2268 minfo ("0x%V %W %B\n",
2269 i
->output_section
->vma
+ i
->output_offset
, size
/ opb
,
2272 if (i
->_cooked_size
!= 0 && i
->_cooked_size
!= i
->_raw_size
)
2274 len
= SECTION_NAME_MAP_LENGTH
+ 3;
2286 minfo (_("%W (size before relaxing)\n"), i
->_raw_size
);
2289 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
2291 print_dot
= i
->output_section
->vma
+ i
->output_offset
+ size
/ opb
;
2297 print_fill_statement (fill
)
2298 lang_fill_statement_type
*fill
;
2300 fprintf (config
.map_file
, " FILL mask 0x%x\n", fill
->fill
);
2304 print_data_statement (data
)
2305 lang_data_statement_type
*data
;
2311 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2312 ldfile_output_machine
);
2314 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2317 addr
= data
->output_vma
;
2318 if (data
->output_section
!= NULL
)
2319 addr
+= data
->output_section
->vma
;
2347 minfo ("0x%V %W %s 0x%v", addr
, size
, name
, data
->value
);
2349 if (data
->exp
->type
.node_class
!= etree_value
)
2352 exp_print_tree (data
->exp
);
2357 print_dot
= addr
+ size
/ opb
;
2361 /* Print an address statement. These are generated by options like
2365 print_address_statement (address
)
2366 lang_address_statement_type
*address
;
2368 minfo (_("Address of section %s set to "), address
->section_name
);
2369 exp_print_tree (address
->address
);
2373 /* Print a reloc statement. */
2376 print_reloc_statement (reloc
)
2377 lang_reloc_statement_type
*reloc
;
2382 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2383 ldfile_output_machine
);
2385 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2388 addr
= reloc
->output_vma
;
2389 if (reloc
->output_section
!= NULL
)
2390 addr
+= reloc
->output_section
->vma
;
2392 size
= bfd_get_reloc_size (reloc
->howto
);
2394 minfo ("0x%V %W RELOC %s ", addr
, size
, reloc
->howto
->name
);
2396 if (reloc
->name
!= NULL
)
2397 minfo ("%s+", reloc
->name
);
2399 minfo ("%s+", reloc
->section
->name
);
2401 exp_print_tree (reloc
->addend_exp
);
2405 print_dot
= addr
+ size
/ opb
;
2409 print_padding_statement (s
)
2410 lang_padding_statement_type
*s
;
2414 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2415 ldfile_output_machine
);
2419 len
= sizeof " *fill*" - 1;
2420 while (len
< SECTION_NAME_MAP_LENGTH
)
2426 addr
= s
->output_offset
;
2427 if (s
->output_section
!= NULL
)
2428 addr
+= s
->output_section
->vma
;
2429 minfo ("0x%V %W", addr
, s
->size
);
2432 minfo (" %u", s
->fill
);
2436 print_dot
= addr
+ s
->size
/ opb
;
2440 print_wild_statement (w
, os
)
2441 lang_wild_statement_type
*w
;
2442 lang_output_section_statement_type
*os
;
2444 struct wildcard_list
*sec
;
2448 if (w
->filenames_sorted
)
2450 if (w
->filename
!= NULL
)
2451 minfo ("%s", w
->filename
);
2454 if (w
->filenames_sorted
)
2458 for (sec
= w
->section_list
; sec
; sec
= sec
->next
)
2460 if (sec
->spec
.sorted
)
2462 if (sec
->spec
.exclude_name_list
!= NULL
)
2465 minfo ("EXCLUDE_FILE ( %s", sec
->spec
.exclude_name_list
->name
);
2466 for (tmp
= sec
->spec
.exclude_name_list
->next
; tmp
; tmp
= tmp
->next
)
2467 minfo (", %s", tmp
->name
);
2470 if (sec
->spec
.name
!= NULL
)
2471 minfo ("%s", sec
->spec
.name
);
2474 if (sec
->spec
.sorted
)
2481 print_statement_list (w
->children
.head
, os
);
2484 /* Print a group statement. */
2488 lang_group_statement_type
*s
;
2489 lang_output_section_statement_type
*os
;
2491 fprintf (config
.map_file
, "START GROUP\n");
2492 print_statement_list (s
->children
.head
, os
);
2493 fprintf (config
.map_file
, "END GROUP\n");
2496 /* Print the list of statements in S.
2497 This can be called for any statement type. */
2500 print_statement_list (s
, os
)
2501 lang_statement_union_type
*s
;
2502 lang_output_section_statement_type
*os
;
2506 print_statement (s
, os
);
2511 /* Print the first statement in statement list S.
2512 This can be called for any statement type. */
2515 print_statement (s
, os
)
2516 lang_statement_union_type
*s
;
2517 lang_output_section_statement_type
*os
;
2519 switch (s
->header
.type
)
2522 fprintf (config
.map_file
, _("Fail with %d\n"), s
->header
.type
);
2525 case lang_constructors_statement_enum
:
2526 if (constructor_list
.head
!= NULL
)
2528 if (constructors_sorted
)
2529 minfo (" SORT (CONSTRUCTORS)\n");
2531 minfo (" CONSTRUCTORS\n");
2532 print_statement_list (constructor_list
.head
, os
);
2535 case lang_wild_statement_enum
:
2536 print_wild_statement (&s
->wild_statement
, os
);
2538 case lang_address_statement_enum
:
2539 print_address_statement (&s
->address_statement
);
2541 case lang_object_symbols_statement_enum
:
2542 minfo (" CREATE_OBJECT_SYMBOLS\n");
2544 case lang_fill_statement_enum
:
2545 print_fill_statement (&s
->fill_statement
);
2547 case lang_data_statement_enum
:
2548 print_data_statement (&s
->data_statement
);
2550 case lang_reloc_statement_enum
:
2551 print_reloc_statement (&s
->reloc_statement
);
2553 case lang_input_section_enum
:
2554 print_input_section (&s
->input_section
);
2556 case lang_padding_statement_enum
:
2557 print_padding_statement (&s
->padding_statement
);
2559 case lang_output_section_statement_enum
:
2560 print_output_section_statement (&s
->output_section_statement
);
2562 case lang_assignment_statement_enum
:
2563 print_assignment (&s
->assignment_statement
, os
);
2565 case lang_target_statement_enum
:
2566 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
2568 case lang_output_statement_enum
:
2569 minfo ("OUTPUT(%s", s
->output_statement
.name
);
2570 if (output_target
!= NULL
)
2571 minfo (" %s", output_target
);
2574 case lang_input_statement_enum
:
2575 print_input_statement (&s
->input_statement
);
2577 case lang_group_statement_enum
:
2578 print_group (&s
->group_statement
, os
);
2580 case lang_afile_asection_pair_statement_enum
:
2589 print_statement_list (statement_list
.head
, abs_output_section
);
2592 /* Print the first N statements in statement list S to STDERR.
2593 If N == 0, nothing is printed.
2594 If N < 0, the entire list is printed.
2595 Intended to be called from GDB. */
2598 dprint_statement (s
, n
)
2599 lang_statement_union_type
*s
;
2602 FILE *map_save
= config
.map_file
;
2604 config
.map_file
= stderr
;
2607 print_statement_list (s
, abs_output_section
);
2610 while (s
&& --n
>= 0)
2612 print_statement (s
, abs_output_section
);
2617 config
.map_file
= map_save
;
2621 insert_pad (ptr
, fill
, alignment_needed
, output_section
, dot
)
2622 lang_statement_union_type
**ptr
;
2624 unsigned int alignment_needed
;
2625 asection
*output_section
;
2628 lang_statement_union_type
*pad
;
2630 pad
= ((lang_statement_union_type
*)
2631 ((char *) ptr
- offsetof (lang_statement_union_type
, header
.next
)));
2632 if (ptr
!= &statement_list
.head
2633 && pad
->header
.type
== lang_padding_statement_enum
2634 && pad
->padding_statement
.output_section
== output_section
)
2636 /* Use the existing pad statement. The above test on output
2637 section is probably redundant, but it doesn't hurt to check. */
2641 /* Make a new padding statement, linked into existing chain. */
2642 pad
= ((lang_statement_union_type
*)
2643 stat_alloc (sizeof (lang_padding_statement_type
)));
2644 pad
->header
.next
= *ptr
;
2646 pad
->header
.type
= lang_padding_statement_enum
;
2647 pad
->padding_statement
.output_section
= output_section
;
2648 pad
->padding_statement
.fill
= fill
;
2650 pad
->padding_statement
.output_offset
= dot
- output_section
->vma
;
2651 pad
->padding_statement
.size
= alignment_needed
;
2652 output_section
->_raw_size
+= alignment_needed
;
2655 /* Work out how much this section will move the dot point. */
2658 size_input_section (this_ptr
, output_section_statement
, fill
, dot
)
2659 lang_statement_union_type
**this_ptr
;
2660 lang_output_section_statement_type
*output_section_statement
;
2664 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
2665 asection
*i
= is
->section
;
2667 if (is
->ifile
->just_syms_flag
== false)
2669 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2670 ldfile_output_machine
);
2671 unsigned int alignment_needed
;
2674 /* Align this section first to the input sections requirement,
2675 then to the output section's requirement. If this alignment
2676 is greater than any seen before, then record it too. Perform
2677 the alignment by inserting a magic 'padding' statement. */
2679 if (output_section_statement
->subsection_alignment
!= -1)
2680 i
->alignment_power
= output_section_statement
->subsection_alignment
;
2682 o
= output_section_statement
->bfd_section
;
2683 if (o
->alignment_power
< i
->alignment_power
)
2684 o
->alignment_power
= i
->alignment_power
;
2686 alignment_needed
= align_power (dot
, i
->alignment_power
) - dot
;
2688 if (alignment_needed
!= 0)
2690 insert_pad (this_ptr
, fill
, alignment_needed
* opb
, o
, dot
);
2691 dot
+= alignment_needed
;
2694 /* Remember where in the output section this input section goes. */
2696 i
->output_offset
= dot
- o
->vma
;
2698 /* Mark how big the output section must be to contain this now. */
2699 if (i
->_cooked_size
!= 0)
2700 dot
+= i
->_cooked_size
/ opb
;
2702 dot
+= i
->_raw_size
/ opb
;
2703 o
->_raw_size
= (dot
- o
->vma
) * opb
;
2707 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
2713 #define IGNORE_SECTION(bfd, s) \
2714 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2715 != (SEC_ALLOC | SEC_LOAD)) \
2716 || bfd_section_size (bfd, s) == 0)
2718 /* Check to see if any allocated sections overlap with other allocated
2719 sections. This can happen when the linker script specifically specifies
2720 the output section addresses of the two sections. */
2723 lang_check_section_addresses ()
2726 unsigned opb
= bfd_octets_per_byte (output_bfd
);
2728 /* Scan all sections in the output list. */
2729 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2733 /* Ignore sections which are not loaded or which have no contents. */
2734 if (IGNORE_SECTION (output_bfd
, s
))
2737 /* Once we reach section 's' stop our seach. This prevents two
2738 warning messages from being produced, one for 'section A overlaps
2739 section B' and one for 'section B overlaps section A'. */
2740 for (os
= output_bfd
->sections
; os
!= s
; os
= os
->next
)
2747 /* Only consider loadable sections with real contents. */
2748 if (IGNORE_SECTION (output_bfd
, os
))
2751 /* We must check the sections' LMA addresses not their
2752 VMA addresses because overlay sections can have
2753 overlapping VMAs but they must have distinct LMAs. */
2754 s_start
= bfd_section_lma (output_bfd
, s
);
2755 os_start
= bfd_section_lma (output_bfd
, os
);
2756 s_end
= s_start
+ bfd_section_size (output_bfd
, s
) / opb
- 1;
2757 os_end
= os_start
+ bfd_section_size (output_bfd
, os
) / opb
- 1;
2759 /* Look for an overlap. */
2760 if ((s_end
< os_start
) || (s_start
> os_end
))
2764 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2765 s
->name
, s_start
, s_end
, os
->name
, os_start
, os_end
);
2767 /* Once we have found one overlap for this section,
2768 stop looking for others. */
2774 /* Make sure the new address is within the region. We explicitly permit the
2775 current address to be at the exact end of the region when the address is
2776 non-zero, in case the region is at the end of addressable memory and the
2777 calculation wraps around. */
2780 os_region_check (os
, region
, tree
, base
)
2781 lang_output_section_statement_type
*os
;
2782 struct memory_region_struct
*region
;
2786 if ((region
->current
< region
->origin
2787 || (region
->current
- region
->origin
> region
->length
))
2788 && ((region
->current
!= region
->origin
+ region
->length
)
2791 if (tree
!= (etree_type
*) NULL
)
2793 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2795 os
->bfd_section
->owner
,
2796 os
->bfd_section
->name
,
2801 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2803 os
->bfd_section
->owner
,
2804 os
->bfd_section
->name
);
2806 /* Reset the region pointer. */
2807 region
->current
= region
->origin
;
2811 /* Set the sizes for all the output sections. */
2814 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
2815 lang_statement_union_type
*s
;
2816 lang_output_section_statement_type
*output_section_statement
;
2817 lang_statement_union_type
**prev
;
2822 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2823 ldfile_output_machine
);
2825 /* Size up the sections from their constituent parts. */
2826 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
2828 switch (s
->header
.type
)
2830 case lang_output_section_statement_enum
:
2833 lang_output_section_statement_type
*os
;
2835 os
= &s
->output_section_statement
;
2836 if (os
->bfd_section
== NULL
)
2837 /* This section was never actually created. */
2840 /* If this is a COFF shared library section, use the size and
2841 address from the input section. FIXME: This is COFF
2842 specific; it would be cleaner if there were some other way
2843 to do this, but nothing simple comes to mind. */
2844 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
2848 if (os
->children
.head
== NULL
2849 || os
->children
.head
->header
.next
!= NULL
2850 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
2851 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2854 input
= os
->children
.head
->input_section
.section
;
2855 bfd_set_section_vma (os
->bfd_section
->owner
,
2857 bfd_section_vma (input
->owner
, input
));
2858 os
->bfd_section
->_raw_size
= input
->_raw_size
;
2862 if (bfd_is_abs_section (os
->bfd_section
))
2864 /* No matter what happens, an abs section starts at zero. */
2865 ASSERT (os
->bfd_section
->vma
== 0);
2869 if (os
->addr_tree
== (etree_type
*) NULL
)
2871 /* No address specified for this section, get one
2872 from the region specification. */
2873 if (os
->region
== (lang_memory_region_type
*) NULL
2874 || (((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2875 & (SEC_ALLOC
| SEC_LOAD
)) != 0)
2876 && os
->region
->name
[0] == '*'
2877 && strcmp (os
->region
->name
, "*default*") == 0))
2879 os
->region
= lang_memory_default (os
->bfd_section
);
2882 /* If a loadable section is using the default memory
2883 region, and some non default memory regions were
2884 defined, issue a warning. */
2885 if ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2886 & (SEC_ALLOC
| SEC_LOAD
)) != 0
2887 && ! link_info
.relocateable
2888 && strcmp (os
->region
->name
, "*default*") == 0
2889 && lang_memory_region_list
!= NULL
2890 && (strcmp (lang_memory_region_list
->name
,
2892 || lang_memory_region_list
->next
!= NULL
))
2893 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2894 bfd_get_section_name (output_bfd
,
2897 dot
= os
->region
->current
;
2899 if (os
->section_alignment
== -1)
2904 dot
= align_power (dot
,
2905 os
->bfd_section
->alignment_power
);
2907 if (dot
!= olddot
&& config
.warn_section_align
)
2908 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2909 os
->name
, (unsigned int) (dot
- olddot
));
2916 r
= exp_fold_tree (os
->addr_tree
,
2918 lang_allocating_phase_enum
,
2920 if (r
.valid_p
== false)
2922 einfo (_("%F%S: non constant address expression for section %s\n"),
2925 dot
= r
.value
+ r
.section
->bfd_section
->vma
;
2928 /* The section starts here.
2929 First, align to what the section needs. */
2931 if (os
->section_alignment
!= -1)
2932 dot
= align_power (dot
, os
->section_alignment
);
2934 bfd_set_section_vma (0, os
->bfd_section
, dot
);
2936 os
->bfd_section
->output_offset
= 0;
2939 lang_size_sections (os
->children
.head
, os
, &os
->children
.head
,
2940 os
->fill
, dot
, relax
);
2942 /* Put the section within the requested block size, or
2943 align at the block boundary. */
2944 after
= ALIGN_N (os
->bfd_section
->vma
2945 + os
->bfd_section
->_raw_size
/ opb
,
2946 /* The coercion here is important, see ld.h. */
2947 (bfd_vma
) os
->block_value
);
2949 if (bfd_is_abs_section (os
->bfd_section
))
2950 ASSERT (after
== os
->bfd_section
->vma
);
2952 os
->bfd_section
->_raw_size
=
2953 (after
- os
->bfd_section
->vma
) * opb
;
2954 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
2955 os
->processed
= true;
2957 /* Update dot in the region ?
2958 We only do this if the section is going to be allocated,
2959 since unallocated sections do not contribute to the region's
2960 overall size in memory.
2962 If the SEC_NEVER_LOAD bit is not set, it will affect the
2963 addresses of sections after it. We have to update
2965 if (os
->region
!= (lang_memory_region_type
*) NULL
2966 && ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2967 & SEC_NEVER_LOAD
) == 0
2968 || (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2969 & (SEC_ALLOC
| SEC_LOAD
))))
2971 os
->region
->current
= dot
;
2973 /* Make sure the new address is within the region. */
2974 os_region_check (os
, os
->region
, os
->addr_tree
,
2975 os
->bfd_section
->vma
);
2977 /* If there's no load address specified, use the run
2978 region as the load region. */
2979 if (os
->lma_region
== NULL
&& os
->load_base
== NULL
)
2980 os
->lma_region
= os
->region
;
2982 if (os
->lma_region
!= NULL
)
2984 if (os
->load_base
!= NULL
)
2986 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
2990 /* Don't allocate twice. */
2991 if (os
->lma_region
!= os
->region
)
2993 /* Set load_base, which will be handled later. */
2995 exp_intop (os
->lma_region
->current
);
2996 os
->lma_region
->current
+=
2997 os
->bfd_section
->_raw_size
/ opb
;
2998 os_region_check (os
, os
->lma_region
, NULL
,
2999 os
->bfd_section
->lma
);
3007 case lang_constructors_statement_enum
:
3008 dot
= lang_size_sections (constructor_list
.head
,
3009 output_section_statement
,
3010 &s
->wild_statement
.children
.head
,
3014 case lang_data_statement_enum
:
3016 unsigned int size
= 0;
3018 s
->data_statement
.output_vma
=
3019 dot
- output_section_statement
->bfd_section
->vma
;
3020 s
->data_statement
.output_section
=
3021 output_section_statement
->bfd_section
;
3023 switch (s
->data_statement
.type
)
3044 output_section_statement
->bfd_section
->_raw_size
+= size
;
3045 /* The output section gets contents, and then we inspect for
3046 any flags set in the input script which override any ALLOC. */
3047 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
3048 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
))
3050 output_section_statement
->bfd_section
->flags
|=
3051 SEC_ALLOC
| SEC_LOAD
;
3056 case lang_reloc_statement_enum
:
3060 s
->reloc_statement
.output_vma
=
3061 dot
- output_section_statement
->bfd_section
->vma
;
3062 s
->reloc_statement
.output_section
=
3063 output_section_statement
->bfd_section
;
3064 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
3066 output_section_statement
->bfd_section
->_raw_size
+= size
;
3070 case lang_wild_statement_enum
:
3072 dot
= lang_size_sections (s
->wild_statement
.children
.head
,
3073 output_section_statement
,
3074 &s
->wild_statement
.children
.head
,
3079 case lang_object_symbols_statement_enum
:
3080 link_info
.create_object_symbols_section
=
3081 output_section_statement
->bfd_section
;
3083 case lang_output_statement_enum
:
3084 case lang_target_statement_enum
:
3086 case lang_input_section_enum
:
3090 i
= (*prev
)->input_section
.section
;
3093 if (i
->_cooked_size
== 0)
3094 i
->_cooked_size
= i
->_raw_size
;
3100 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
3101 einfo (_("%P%F: can't relax section: %E\n"));
3105 dot
= size_input_section (prev
, output_section_statement
,
3106 output_section_statement
->fill
, dot
);
3109 case lang_input_statement_enum
:
3111 case lang_fill_statement_enum
:
3112 s
->fill_statement
.output_section
=
3113 output_section_statement
->bfd_section
;
3115 fill
= s
->fill_statement
.fill
;
3117 case lang_assignment_statement_enum
:
3119 bfd_vma newdot
= dot
;
3121 exp_fold_tree (s
->assignment_statement
.exp
,
3122 output_section_statement
,
3123 lang_allocating_phase_enum
,
3129 if (output_section_statement
== abs_output_section
)
3131 /* If we don't have an output section, then just adjust
3132 the default memory address. */
3133 lang_memory_region_lookup ("*default*")->current
= newdot
;
3137 /* Insert a pad after this statement. We can't
3138 put the pad before when relaxing, in case the
3139 assignment references dot. */
3140 insert_pad (&s
->header
.next
, fill
, (newdot
- dot
) * opb
,
3141 output_section_statement
->bfd_section
, dot
);
3143 /* Don't neuter the pad below when relaxing. */
3152 case lang_padding_statement_enum
:
3153 /* If this is the first time lang_size_sections is called,
3154 we won't have any padding statements. If this is the
3155 second or later passes when relaxing, we should allow
3156 padding to shrink. If padding is needed on this pass, it
3157 will be added back in. */
3158 s
->padding_statement
.size
= 0;
3160 /* Make sure output_offset is valid. If relaxation shrinks
3161 the section and this pad isn't needed, it's possible to
3162 have output_offset larger than the final size of the
3163 section. bfd_set_section_contents will complain even for
3164 a pad size of zero. */
3165 s
->padding_statement
.output_offset
3166 = dot
- output_section_statement
->bfd_section
->vma
;
3169 case lang_group_statement_enum
:
3170 dot
= lang_size_sections (s
->group_statement
.children
.head
,
3171 output_section_statement
,
3172 &s
->group_statement
.children
.head
,
3180 /* We can only get here when relaxing is turned on. */
3181 case lang_address_statement_enum
:
3184 prev
= &s
->header
.next
;
3190 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
3191 lang_statement_union_type
*s
;
3192 lang_output_section_statement_type
*output_section_statement
;
3196 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3197 ldfile_output_machine
);
3199 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
3201 switch (s
->header
.type
)
3203 case lang_constructors_statement_enum
:
3204 dot
= lang_do_assignments (constructor_list
.head
,
3205 output_section_statement
,
3210 case lang_output_section_statement_enum
:
3212 lang_output_section_statement_type
*os
;
3214 os
= &(s
->output_section_statement
);
3215 if (os
->bfd_section
!= NULL
)
3217 dot
= os
->bfd_section
->vma
;
3218 (void) lang_do_assignments (os
->children
.head
, os
,
3220 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3225 /* If nothing has been placed into the output section then
3226 it won't have a bfd_section. */
3227 if (os
->bfd_section
)
3229 os
->bfd_section
->lma
3230 = exp_get_abs_int (os
->load_base
, 0, "load base",
3231 lang_final_phase_enum
);
3236 case lang_wild_statement_enum
:
3238 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
3239 output_section_statement
,
3244 case lang_object_symbols_statement_enum
:
3245 case lang_output_statement_enum
:
3246 case lang_target_statement_enum
:
3248 case lang_common_statement_enum
:
3251 case lang_data_statement_enum
:
3253 etree_value_type value
;
3255 value
= exp_fold_tree (s
->data_statement
.exp
,
3257 lang_final_phase_enum
, dot
, &dot
);
3258 s
->data_statement
.value
= value
.value
;
3259 if (value
.valid_p
== false)
3260 einfo (_("%F%P: invalid data statement\n"));
3264 switch (s
->data_statement
.type
)
3288 case lang_reloc_statement_enum
:
3290 etree_value_type value
;
3292 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
3294 lang_final_phase_enum
, dot
, &dot
);
3295 s
->reloc_statement
.addend_value
= value
.value
;
3296 if (value
.valid_p
== false)
3297 einfo (_("%F%P: invalid reloc statement\n"));
3299 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
) / opb
;
3302 case lang_input_section_enum
:
3304 asection
*in
= s
->input_section
.section
;
3306 if (in
->_cooked_size
!= 0)
3307 dot
+= in
->_cooked_size
/ opb
;
3309 dot
+= in
->_raw_size
/ opb
;
3313 case lang_input_statement_enum
:
3315 case lang_fill_statement_enum
:
3316 fill
= s
->fill_statement
.fill
;
3318 case lang_assignment_statement_enum
:
3320 exp_fold_tree (s
->assignment_statement
.exp
,
3321 output_section_statement
,
3322 lang_final_phase_enum
,
3328 case lang_padding_statement_enum
:
3329 dot
+= s
->padding_statement
.size
/ opb
;
3332 case lang_group_statement_enum
:
3333 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
3334 output_section_statement
,
3342 case lang_address_statement_enum
:
3350 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3351 operator .startof. (section_name), it produces an undefined symbol
3352 .startof.section_name. Similarly, when it sees
3353 .sizeof. (section_name), it produces an undefined symbol
3354 .sizeof.section_name. For all the output sections, we look for
3355 such symbols, and set them to the correct value. */
3362 if (link_info
.relocateable
)
3365 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3367 const char *secname
;
3369 struct bfd_link_hash_entry
*h
;
3371 secname
= bfd_get_section_name (output_bfd
, s
);
3372 buf
= xmalloc (10 + strlen (secname
));
3374 sprintf (buf
, ".startof.%s", secname
);
3375 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3376 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3378 h
->type
= bfd_link_hash_defined
;
3379 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
3380 h
->u
.def
.section
= bfd_abs_section_ptr
;
3383 sprintf (buf
, ".sizeof.%s", secname
);
3384 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3385 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3389 opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3390 ldfile_output_machine
);
3391 h
->type
= bfd_link_hash_defined
;
3392 if (s
->_cooked_size
!= 0)
3393 h
->u
.def
.value
= s
->_cooked_size
/ opb
;
3395 h
->u
.def
.value
= s
->_raw_size
/ opb
;
3396 h
->u
.def
.section
= bfd_abs_section_ptr
;
3406 struct bfd_link_hash_entry
*h
;
3409 if (link_info
.relocateable
|| link_info
.shared
)
3414 if (entry_symbol
== (char *) NULL
)
3416 /* No entry has been specified. Look for start, but don't warn
3417 if we don't find it. */
3418 entry_symbol
= "start";
3422 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
3423 if (h
!= (struct bfd_link_hash_entry
*) NULL
3424 && (h
->type
== bfd_link_hash_defined
3425 || h
->type
== bfd_link_hash_defweak
)
3426 && h
->u
.def
.section
->output_section
!= NULL
)
3430 val
= (h
->u
.def
.value
3431 + bfd_get_section_vma (output_bfd
,
3432 h
->u
.def
.section
->output_section
)
3433 + h
->u
.def
.section
->output_offset
);
3434 if (! bfd_set_start_address (output_bfd
, val
))
3435 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol
);
3442 /* We couldn't find the entry symbol. Try parsing it as a
3444 val
= bfd_scan_vma (entry_symbol
, &send
, 0);
3447 if (! bfd_set_start_address (output_bfd
, val
))
3448 einfo (_("%P%F: can't set start address\n"));
3454 /* Can't find the entry symbol, and it's not a number. Use
3455 the first address in the text section. */
3456 ts
= bfd_get_section_by_name (output_bfd
, ".text");
3457 if (ts
!= (asection
*) NULL
)
3460 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3461 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
3462 if (! bfd_set_start_address (output_bfd
,
3463 bfd_get_section_vma (output_bfd
,
3465 einfo (_("%P%F: can't set start address\n"));
3470 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3477 /* This is a small function used when we want to ignore errors from
3481 #ifdef ANSI_PROTOTYPES
3482 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED
, ...)
3484 ignore_bfd_errors (s
)
3485 const char *s ATTRIBUTE_UNUSED
;
3488 /* Don't do anything. */
3491 /* Check that the architecture of all the input files is compatible
3492 with the output file. Also call the backend to let it do any
3493 other checking that is needed. */
3498 lang_statement_union_type
*file
;
3500 const bfd_arch_info_type
*compatible
;
3502 for (file
= file_chain
.head
;
3503 file
!= (lang_statement_union_type
*) NULL
;
3504 file
= file
->input_statement
.next
)
3506 input_bfd
= file
->input_statement
.the_bfd
;
3507 compatible
= bfd_arch_get_compatible (input_bfd
,
3509 if (compatible
== NULL
)
3511 if (command_line
.warn_mismatch
)
3512 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3513 bfd_printable_name (input_bfd
), input_bfd
,
3514 bfd_printable_name (output_bfd
));
3516 else if (link_info
.relocateable
3517 /* In general it is not possible to perform a relocatable
3518 link between differing object formats when the input
3519 file has relocations, because the relocations in the
3520 input format may not have equivalent representations in
3521 the output format (and besides BFD does not translate
3522 relocs for other link purposes than a final link). */
3523 && bfd_get_flavour (input_bfd
) != bfd_get_flavour (output_bfd
)
3524 && (bfd_get_file_flags (input_bfd
) & HAS_RELOC
) != 0)
3525 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3526 bfd_get_target (input_bfd
), input_bfd
,
3527 bfd_get_target (output_bfd
), output_bfd
);
3528 else if (bfd_count_sections (input_bfd
))
3530 /* If the input bfd has no contents, it shouldn't set the
3531 private data of the output bfd. */
3533 bfd_error_handler_type pfn
= NULL
;
3535 /* If we aren't supposed to warn about mismatched input
3536 files, temporarily set the BFD error handler to a
3537 function which will do nothing. We still want to call
3538 bfd_merge_private_bfd_data, since it may set up
3539 information which is needed in the output file. */
3540 if (! command_line
.warn_mismatch
)
3541 pfn
= bfd_set_error_handler (ignore_bfd_errors
);
3542 if (! bfd_merge_private_bfd_data (input_bfd
, output_bfd
))
3544 if (command_line
.warn_mismatch
)
3545 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3548 if (! command_line
.warn_mismatch
)
3549 bfd_set_error_handler (pfn
);
3554 /* Look through all the global common symbols and attach them to the
3555 correct section. The -sort-common command line switch may be used
3556 to roughly sort the entries by size. */
3561 if (command_line
.inhibit_common_definition
)
3563 if (link_info
.relocateable
3564 && ! command_line
.force_common_definition
)
3567 if (! config
.sort_common
)
3568 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
3573 for (power
= 4; power
>= 0; power
--)
3574 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
3579 /* Place one common symbol in the correct section. */
3582 lang_one_common (h
, info
)
3583 struct bfd_link_hash_entry
*h
;
3586 unsigned int power_of_two
;
3589 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3590 ldfile_output_machine
);
3592 if (h
->type
!= bfd_link_hash_common
)
3596 power_of_two
= h
->u
.c
.p
->alignment_power
;
3598 if (config
.sort_common
3599 && power_of_two
< (unsigned int) *(int *) info
)
3602 section
= h
->u
.c
.p
->section
;
3604 /* Increase the size of the section. */
3605 section
->_cooked_size
= ALIGN_N ((section
->_cooked_size
+ opb
- 1) / opb
,
3606 (bfd_size_type
) (1 << power_of_two
)) * opb
;
3608 /* Adjust the alignment if necessary. */
3609 if (power_of_two
> section
->alignment_power
)
3610 section
->alignment_power
= power_of_two
;
3612 /* Change the symbol from common to defined. */
3613 h
->type
= bfd_link_hash_defined
;
3614 h
->u
.def
.section
= section
;
3615 h
->u
.def
.value
= section
->_cooked_size
;
3617 /* Increase the size of the section. */
3618 section
->_cooked_size
+= size
;
3620 /* Make sure the section is allocated in memory, and make sure that
3621 it is no longer a common section. */
3622 section
->flags
|= SEC_ALLOC
;
3623 section
->flags
&= ~SEC_IS_COMMON
;
3625 if (config
.map_file
!= NULL
)
3627 static boolean header_printed
;
3632 if (! header_printed
)
3634 minfo (_("\nAllocating common symbols\n"));
3635 minfo (_("Common symbol size file\n\n"));
3636 header_printed
= true;
3639 name
= demangle (h
->root
.string
);
3641 len
= strlen (name
);
3656 if (size
<= 0xffffffff)
3657 sprintf (buf
, "%lx", (unsigned long) size
);
3659 sprintf_vma (buf
, size
);
3669 minfo ("%B\n", section
->owner
);
3675 /* Run through the input files and ensure that every input section has
3676 somewhere to go. If one is found without a destination then create
3677 an input request and place it into the statement tree. */
3680 lang_place_orphans ()
3682 LANG_FOR_EACH_INPUT_STATEMENT (file
)
3686 for (s
= file
->the_bfd
->sections
;
3687 s
!= (asection
*) NULL
;
3690 if (s
->output_section
== (asection
*) NULL
)
3692 /* This section of the file is not attatched, root
3693 around for a sensible place for it to go. */
3695 if (file
->just_syms_flag
)
3697 /* We are only retrieving symbol values from this
3698 file. We want the symbols to act as though the
3699 values in the file are absolute. */
3700 s
->output_section
= bfd_abs_section_ptr
;
3701 s
->output_offset
= s
->vma
;
3703 else if (strcmp (s
->name
, "COMMON") == 0)
3705 /* This is a lonely common section which must have
3706 come from an archive. We attach to the section
3707 with the wildcard. */
3708 if (! link_info
.relocateable
3709 || command_line
.force_common_definition
)
3711 if (default_common_section
== NULL
)
3714 /* This message happens when using the
3715 svr3.ifile linker script, so I have
3717 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3719 default_common_section
=
3720 lang_output_section_statement_lookup (".bss");
3723 lang_add_section (&default_common_section
->children
, s
,
3724 default_common_section
, file
);
3727 else if (ldemul_place_orphan (file
, s
))
3731 lang_output_section_statement_type
*os
;
3733 os
= lang_output_section_statement_lookup (s
->name
);
3734 lang_add_section (&os
->children
, s
, os
, file
);
3742 lang_set_flags (ptr
, flags
, invert
)
3743 lang_memory_region_type
*ptr
;
3747 flagword
*ptr_flags
;
3749 ptr_flags
= invert
? &ptr
->not_flags
: &ptr
->flags
;
3755 *ptr_flags
|= SEC_ALLOC
;
3759 *ptr_flags
|= SEC_READONLY
;
3763 *ptr_flags
|= SEC_DATA
;
3767 *ptr_flags
|= SEC_CODE
;
3772 *ptr_flags
|= SEC_LOAD
;
3776 einfo (_("%P%F: invalid syntax in flags\n"));
3783 /* Call a function on each input file. This function will be called
3784 on an archive, but not on the elements. */
3787 lang_for_each_input_file (func
)
3788 void (*func
) PARAMS ((lang_input_statement_type
*));
3790 lang_input_statement_type
*f
;
3792 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
3794 f
= (lang_input_statement_type
*) f
->next_real_file
)
3798 /* Call a function on each file. The function will be called on all
3799 the elements of an archive which are included in the link, but will
3800 not be called on the archive file itself. */
3803 lang_for_each_file (func
)
3804 void (*func
) PARAMS ((lang_input_statement_type
*));
3806 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3817 lang_for_each_input_section (func
)
3818 void (*func
) PARAMS ((bfd
*ab
, asection
*as
));
3820 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3824 for (s
= f
->the_bfd
->sections
;
3825 s
!= (asection
*) NULL
;
3828 func (f
->the_bfd
, s
);
3836 ldlang_add_file (entry
)
3837 lang_input_statement_type
*entry
;
3841 lang_statement_append (&file_chain
,
3842 (lang_statement_union_type
*) entry
,
3845 /* The BFD linker needs to have a list of all input BFDs involved in
3847 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
3848 ASSERT (entry
->the_bfd
!= output_bfd
);
3849 for (pp
= &link_info
.input_bfds
;
3850 *pp
!= (bfd
*) NULL
;
3851 pp
= &(*pp
)->link_next
)
3853 *pp
= entry
->the_bfd
;
3854 entry
->the_bfd
->usrdata
= (PTR
) entry
;
3855 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
3857 /* Look through the sections and check for any which should not be
3858 included in the link. We need to do this now, so that we can
3859 notice when the backend linker tries to report multiple
3860 definition errors for symbols which are in sections we aren't
3861 going to link. FIXME: It might be better to entirely ignore
3862 symbols which are defined in sections which are going to be
3863 discarded. This would require modifying the backend linker for
3864 each backend which might set the SEC_LINK_ONCE flag. If we do
3865 this, we should probably handle SEC_EXCLUDE in the same way. */
3867 bfd_map_over_sections (entry
->the_bfd
, section_already_linked
, (PTR
) entry
);
3871 lang_add_output (name
, from_script
)
3875 /* Make -o on command line override OUTPUT in script. */
3876 if (had_output_filename
== false || !from_script
)
3878 output_filename
= name
;
3879 had_output_filename
= true;
3883 static lang_output_section_statement_type
*current_section
;
3895 for (l
= 0; l
< 32; l
++)
3897 if (i
>= (unsigned int) x
)
3905 lang_output_section_statement_type
*
3906 lang_enter_output_section_statement (output_section_statement_name
,
3907 address_exp
, sectype
, block_value
,
3908 align
, subalign
, ebase
)
3909 const char *output_section_statement_name
;
3910 etree_type
*address_exp
;
3911 enum section_type sectype
;
3912 bfd_vma block_value
;
3914 etree_type
*subalign
;
3917 lang_output_section_statement_type
*os
;
3921 lang_output_section_statement_lookup (output_section_statement_name
);
3923 /* Add this statement to tree. */
3925 add_statement (lang_output_section_statement_enum
,
3926 output_section_statement
);
3928 /* Make next things chain into subchain of this. */
3930 if (os
->addr_tree
== (etree_type
*) NULL
)
3932 os
->addr_tree
= address_exp
;
3934 os
->sectype
= sectype
;
3935 if (sectype
!= noload_section
)
3936 os
->flags
= SEC_NO_FLAGS
;
3938 os
->flags
= SEC_NEVER_LOAD
;
3939 os
->block_value
= block_value
? block_value
: 1;
3940 stat_ptr
= &os
->children
;
3942 os
->subsection_alignment
=
3943 topower (exp_get_value_int (subalign
, -1, "subsection alignment", 0));
3944 os
->section_alignment
=
3945 topower (exp_get_value_int (align
, -1, "section alignment", 0));
3947 os
->load_base
= ebase
;
3954 lang_output_statement_type
*new =
3955 new_stat (lang_output_statement
, stat_ptr
);
3957 new->name
= output_filename
;
3960 /* Reset the current counters in the regions. */
3963 reset_memory_regions ()
3965 lang_memory_region_type
*p
= lang_memory_region_list
;
3968 for (p
= lang_memory_region_list
;
3969 p
!= (lang_memory_region_type
*) NULL
;
3972 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
3973 p
->current
= p
->origin
;
3976 for (o
= output_bfd
->sections
; o
!= NULL
; o
= o
->next
)
3980 /* If the wild pattern was marked KEEP, the member sections
3981 should be as well. */
3984 gc_section_callback (ptr
, sec
, section
, file
, data
)
3985 lang_wild_statement_type
*ptr
;
3986 struct wildcard_list
*sec ATTRIBUTE_UNUSED
;
3988 lang_input_statement_type
*file ATTRIBUTE_UNUSED
;
3989 PTR data ATTRIBUTE_UNUSED
;
3991 if (ptr
->keep_sections
)
3992 section
->flags
|= SEC_KEEP
;
3995 /* Handle a wild statement, marking it against GC. */
3999 lang_wild_statement_type
*s
;
4001 walk_wild (s
, gc_section_callback
, NULL
);
4004 /* Iterate over sections marking them against GC. */
4007 lang_gc_sections_1 (s
)
4008 lang_statement_union_type
*s
;
4010 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
4012 switch (s
->header
.type
)
4014 case lang_wild_statement_enum
:
4015 lang_gc_wild (&s
->wild_statement
);
4016 case lang_constructors_statement_enum
:
4017 lang_gc_sections_1 (constructor_list
.head
);
4019 case lang_output_section_statement_enum
:
4020 lang_gc_sections_1 (s
->output_section_statement
.children
.head
);
4022 case lang_group_statement_enum
:
4023 lang_gc_sections_1 (s
->group_statement
.children
.head
);
4034 struct bfd_link_hash_entry
*h
;
4035 ldlang_undef_chain_list_type
*ulist
, fake_list_start
;
4037 /* Keep all sections so marked in the link script. */
4039 lang_gc_sections_1 (statement_list
.head
);
4041 /* Keep all sections containing symbols undefined on the command-line.
4042 Handle the entry symbol at the same time. */
4044 if (entry_symbol
!= NULL
)
4046 fake_list_start
.next
= ldlang_undef_chain_list_head
;
4047 fake_list_start
.name
= (char *) entry_symbol
;
4048 ulist
= &fake_list_start
;
4051 ulist
= ldlang_undef_chain_list_head
;
4053 for (; ulist
; ulist
= ulist
->next
)
4055 h
= bfd_link_hash_lookup (link_info
.hash
, ulist
->name
,
4056 false, false, false);
4058 if (h
!= (struct bfd_link_hash_entry
*) NULL
4059 && (h
->type
== bfd_link_hash_defined
4060 || h
->type
== bfd_link_hash_defweak
)
4061 && ! bfd_is_abs_section (h
->u
.def
.section
))
4063 h
->u
.def
.section
->flags
|= SEC_KEEP
;
4067 bfd_gc_sections (output_bfd
, &link_info
);
4073 lang_reasonable_defaults ();
4074 current_target
= default_target
;
4076 /* Open the output file. */
4077 lang_for_each_statement (ldlang_open_output
);
4079 ldemul_create_output_section_statements ();
4081 /* Add to the hash table all undefineds on the command line. */
4082 lang_place_undefineds ();
4084 already_linked_table_init ();
4086 /* Create a bfd for each input file. */
4087 current_target
= default_target
;
4088 open_input_bfds (statement_list
.head
, false);
4090 ldemul_after_open ();
4092 already_linked_table_free ();
4094 /* Make sure that we're not mixing architectures. We call this
4095 after all the input files have been opened, but before we do any
4096 other processing, so that any operations merge_private_bfd_data
4097 does on the output file will be known during the rest of the
4101 /* Handle .exports instead of a version script if we're told to do so. */
4102 if (command_line
.version_exports_section
)
4103 lang_do_version_exports_section ();
4105 /* Build all sets based on the information gathered from the input
4107 ldctor_build_sets ();
4109 /* Remove unreferenced sections if asked to. */
4110 if (command_line
.gc_sections
)
4111 lang_gc_sections ();
4113 /* If there were any SEC_MERGE sections, finish their merging, so that
4114 section sizes can be computed. This has to be done after GC of sections,
4115 so that GCed sections are not merged, but before assigning output
4116 sections, since removing whole input sections is hard then. */
4117 bfd_merge_sections (output_bfd
, &link_info
);
4119 /* Size up the common data. */
4122 /* Run through the contours of the script and attach input sections
4123 to the correct output sections. */
4124 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
4125 (lang_output_section_statement_type
*) NULL
);
4127 /* Find any sections not attached explicitly and handle them. */
4128 lang_place_orphans ();
4130 ldemul_before_allocation ();
4132 /* We must record the program headers before we try to fix the
4133 section positions, since they will affect SIZEOF_HEADERS. */
4134 lang_record_phdrs ();
4136 /* Size up the sections. */
4137 lang_size_sections (statement_list
.head
,
4139 &statement_list
.head
, 0, (bfd_vma
) 0, NULL
);
4141 /* Now run around and relax if we can. */
4142 if (command_line
.relax
)
4144 /* Keep relaxing until bfd_relax_section gives up. */
4145 boolean relax_again
;
4149 reset_memory_regions ();
4151 relax_again
= false;
4153 /* Note: pe-dll.c does something like this also. If you find
4154 you need to change this code, you probably need to change
4155 pe-dll.c also. DJ */
4157 /* Do all the assignments with our current guesses as to
4159 lang_do_assignments (statement_list
.head
,
4161 (fill_type
) 0, (bfd_vma
) 0);
4163 /* Perform another relax pass - this time we know where the
4164 globals are, so can make better guess. */
4165 lang_size_sections (statement_list
.head
,
4167 &(statement_list
.head
), 0, (bfd_vma
) 0,
4170 while (relax_again
);
4173 /* See if anything special should be done now we know how big
4175 ldemul_after_allocation ();
4177 /* Fix any .startof. or .sizeof. symbols. */
4178 lang_set_startof ();
4180 /* Do all the assignments, now that we know the final resting places
4181 of all the symbols. */
4183 lang_do_assignments (statement_list
.head
,
4185 (fill_type
) 0, (bfd_vma
) 0);
4187 /* Make sure that the section addresses make sense. */
4188 if (! link_info
.relocateable
4189 && command_line
.check_section_addresses
)
4190 lang_check_section_addresses ();
4198 /* EXPORTED TO YACC */
4201 lang_add_wild (filespec
, section_list
, keep_sections
)
4202 struct wildcard_spec
*filespec
;
4203 struct wildcard_list
*section_list
;
4204 boolean keep_sections
;
4206 struct wildcard_list
*curr
, *next
;
4207 lang_wild_statement_type
*new;
4209 /* Reverse the list as the parser puts it back to front. */
4210 for (curr
= section_list
, section_list
= NULL
;
4212 section_list
= curr
, curr
= next
)
4214 if (curr
->spec
.name
!= NULL
&& strcmp (curr
->spec
.name
, "COMMON") == 0)
4215 placed_commons
= true;
4218 curr
->next
= section_list
;
4221 if (filespec
!= NULL
&& filespec
->name
!= NULL
)
4223 if (strcmp (filespec
->name
, "*") == 0)
4224 filespec
->name
= NULL
;
4225 else if (! wildcardp (filespec
->name
))
4226 lang_has_input_file
= true;
4229 new = new_stat (lang_wild_statement
, stat_ptr
);
4230 new->filename
= NULL
;
4231 new->filenames_sorted
= false;
4232 if (filespec
!= NULL
)
4234 new->filename
= filespec
->name
;
4235 new->filenames_sorted
= filespec
->sorted
;
4237 new->section_list
= section_list
;
4238 new->keep_sections
= keep_sections
;
4239 lang_list_init (&new->children
);
4243 lang_section_start (name
, address
)
4245 etree_type
*address
;
4247 lang_address_statement_type
*ad
;
4249 ad
= new_stat (lang_address_statement
, stat_ptr
);
4250 ad
->section_name
= name
;
4251 ad
->address
= address
;
4254 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4255 because of a -e argument on the command line, or zero if this is
4256 called by ENTRY in a linker script. Command line arguments take
4260 lang_add_entry (name
, cmdline
)
4264 if (entry_symbol
== NULL
4266 || ! entry_from_cmdline
)
4268 entry_symbol
= name
;
4269 entry_from_cmdline
= cmdline
;
4274 lang_add_target (name
)
4277 lang_target_statement_type
*new = new_stat (lang_target_statement
,
4293 map_option_f
= true;
4304 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
4311 lang_add_data (type
, exp
)
4313 union etree_union
*exp
;
4316 lang_data_statement_type
*new = new_stat (lang_data_statement
,
4324 /* Create a new reloc statement. RELOC is the BFD relocation type to
4325 generate. HOWTO is the corresponding howto structure (we could
4326 look this up, but the caller has already done so). SECTION is the
4327 section to generate a reloc against, or NAME is the name of the
4328 symbol to generate a reloc against. Exactly one of SECTION and
4329 NAME must be NULL. ADDEND is an expression for the addend. */
4332 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
4333 bfd_reloc_code_real_type reloc
;
4334 reloc_howto_type
*howto
;
4337 union etree_union
*addend
;
4339 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
4343 p
->section
= section
;
4345 p
->addend_exp
= addend
;
4347 p
->addend_value
= 0;
4348 p
->output_section
= NULL
;
4352 lang_assignment_statement_type
*
4353 lang_add_assignment (exp
)
4356 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
4364 lang_add_attribute (attribute
)
4365 enum statement_enum attribute
;
4367 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
4374 if (startup_file
!= (char *) NULL
)
4376 einfo (_("%P%Fmultiple STARTUP files\n"));
4378 first_file
->filename
= name
;
4379 first_file
->local_sym_name
= name
;
4380 first_file
->real
= true;
4382 startup_file
= name
;
4389 lang_float_flag
= maybe
;
4393 lang_leave_output_section_statement (fill
, memspec
, phdrs
, lma_memspec
)
4395 const char *memspec
;
4396 struct lang_output_section_phdr_list
*phdrs
;
4397 const char *lma_memspec
;
4399 current_section
->fill
= fill
;
4400 current_section
->region
= lang_memory_region_lookup (memspec
);
4401 if (strcmp (lma_memspec
, "*default*") != 0)
4403 current_section
->lma_region
= lang_memory_region_lookup (lma_memspec
);
4404 /* If no runtime region has been given, but the load region has
4405 been, use the load region. */
4406 if (strcmp (memspec
, "*default*") == 0)
4407 current_section
->region
= lang_memory_region_lookup (lma_memspec
);
4409 current_section
->phdrs
= phdrs
;
4410 stat_ptr
= &statement_list
;
4413 /* Create an absolute symbol with the given name with the value of the
4414 address of first byte of the section named.
4416 If the symbol already exists, then do nothing. */
4419 lang_abs_symbol_at_beginning_of (secname
, name
)
4420 const char *secname
;
4423 struct bfd_link_hash_entry
*h
;
4425 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4426 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4427 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4429 if (h
->type
== bfd_link_hash_new
4430 || h
->type
== bfd_link_hash_undefined
)
4434 h
->type
= bfd_link_hash_defined
;
4436 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4437 if (sec
== (asection
*) NULL
)
4440 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
4442 h
->u
.def
.section
= bfd_abs_section_ptr
;
4446 /* Create an absolute symbol with the given name with the value of the
4447 address of the first byte after the end of the section named.
4449 If the symbol already exists, then do nothing. */
4452 lang_abs_symbol_at_end_of (secname
, name
)
4453 const char *secname
;
4456 struct bfd_link_hash_entry
*h
;
4458 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4459 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4460 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4462 if (h
->type
== bfd_link_hash_new
4463 || h
->type
== bfd_link_hash_undefined
)
4467 h
->type
= bfd_link_hash_defined
;
4469 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4470 if (sec
== (asection
*) NULL
)
4473 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
4474 + bfd_section_size (output_bfd
, sec
) /
4475 bfd_octets_per_byte (output_bfd
));
4477 h
->u
.def
.section
= bfd_abs_section_ptr
;
4482 lang_statement_append (list
, element
, field
)
4483 lang_statement_list_type
*list
;
4484 lang_statement_union_type
*element
;
4485 lang_statement_union_type
**field
;
4487 *(list
->tail
) = element
;
4491 /* Set the output format type. -oformat overrides scripts. */
4494 lang_add_output_format (format
, big
, little
, from_script
)
4500 if (output_target
== NULL
|| !from_script
)
4502 if (command_line
.endian
== ENDIAN_BIG
4505 else if (command_line
.endian
== ENDIAN_LITTLE
4509 output_target
= format
;
4513 /* Enter a group. This creates a new lang_group_statement, and sets
4514 stat_ptr to build new statements within the group. */
4519 lang_group_statement_type
*g
;
4521 g
= new_stat (lang_group_statement
, stat_ptr
);
4522 lang_list_init (&g
->children
);
4523 stat_ptr
= &g
->children
;
4526 /* Leave a group. This just resets stat_ptr to start writing to the
4527 regular list of statements again. Note that this will not work if
4528 groups can occur inside anything else which can adjust stat_ptr,
4529 but currently they can't. */
4534 stat_ptr
= &statement_list
;
4537 /* Add a new program header. This is called for each entry in a PHDRS
4538 command in a linker script. */
4541 lang_new_phdr (name
, type
, filehdr
, phdrs
, at
, flags
)
4549 struct lang_phdr
*n
, **pp
;
4551 n
= (struct lang_phdr
*) stat_alloc (sizeof (struct lang_phdr
));
4554 n
->type
= exp_get_value_int (type
, 0, "program header type",
4555 lang_final_phase_enum
);
4556 n
->filehdr
= filehdr
;
4561 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4566 /* Record the program header information in the output BFD. FIXME: We
4567 should not be calling an ELF specific function here. */
4570 lang_record_phdrs ()
4574 struct lang_output_section_phdr_list
*last
;
4575 struct lang_phdr
*l
;
4576 lang_statement_union_type
*u
;
4579 secs
= (asection
**) xmalloc (alc
* sizeof (asection
*));
4581 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
4588 for (u
= lang_output_section_statement
.head
;
4590 u
= u
->output_section_statement
.next
)
4592 lang_output_section_statement_type
*os
;
4593 struct lang_output_section_phdr_list
*pl
;
4595 os
= &u
->output_section_statement
;
4602 if (os
->sectype
== noload_section
4603 || os
->bfd_section
== NULL
4604 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
4609 if (os
->bfd_section
== NULL
)
4612 for (; pl
!= NULL
; pl
= pl
->next
)
4614 if (strcmp (pl
->name
, l
->name
) == 0)
4619 secs
= ((asection
**)
4620 xrealloc (secs
, alc
* sizeof (asection
*)));
4622 secs
[c
] = os
->bfd_section
;
4629 if (l
->flags
== NULL
)
4632 flags
= exp_get_vma (l
->flags
, 0, "phdr flags",
4633 lang_final_phase_enum
);
4638 at
= exp_get_vma (l
->at
, 0, "phdr load address",
4639 lang_final_phase_enum
);
4641 if (! bfd_record_phdr (output_bfd
, l
->type
,
4642 l
->flags
!= NULL
, flags
, l
->at
!= NULL
,
4643 at
, l
->filehdr
, l
->phdrs
, c
, secs
))
4644 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4649 /* Make sure all the phdr assignments succeeded. */
4650 for (u
= lang_output_section_statement
.head
;
4652 u
= u
->output_section_statement
.next
)
4654 struct lang_output_section_phdr_list
*pl
;
4656 if (u
->output_section_statement
.bfd_section
== NULL
)
4659 for (pl
= u
->output_section_statement
.phdrs
;
4662 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
4663 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4664 u
->output_section_statement
.name
, pl
->name
);
4668 /* Record a list of sections which may not be cross referenced. */
4671 lang_add_nocrossref (l
)
4672 struct lang_nocrossref
*l
;
4674 struct lang_nocrossrefs
*n
;
4676 n
= (struct lang_nocrossrefs
*) xmalloc (sizeof *n
);
4677 n
->next
= nocrossref_list
;
4679 nocrossref_list
= n
;
4681 /* Set notice_all so that we get informed about all symbols. */
4682 link_info
.notice_all
= true;
4685 /* Overlay handling. We handle overlays with some static variables. */
4687 /* The overlay virtual address. */
4688 static etree_type
*overlay_vma
;
4690 /* The overlay load address. */
4691 static etree_type
*overlay_lma
;
4693 /* Whether nocrossrefs is set for this overlay. */
4694 static int overlay_nocrossrefs
;
4696 /* An expression for the maximum section size seen so far. */
4697 static etree_type
*overlay_max
;
4699 /* A list of all the sections in this overlay. */
4701 struct overlay_list
{
4702 struct overlay_list
*next
;
4703 lang_output_section_statement_type
*os
;
4706 static struct overlay_list
*overlay_list
;
4708 /* Start handling an overlay. */
4711 lang_enter_overlay (vma_expr
, lma_expr
, nocrossrefs
)
4712 etree_type
*vma_expr
;
4713 etree_type
*lma_expr
;
4716 /* The grammar should prevent nested overlays from occurring. */
4717 ASSERT (overlay_vma
== NULL
4718 && overlay_lma
== NULL
4719 && overlay_list
== NULL
4720 && overlay_max
== NULL
);
4722 overlay_vma
= vma_expr
;
4723 overlay_lma
= lma_expr
;
4724 overlay_nocrossrefs
= nocrossrefs
;
4727 /* Start a section in an overlay. We handle this by calling
4728 lang_enter_output_section_statement with the correct VMA and LMA. */
4731 lang_enter_overlay_section (name
)
4734 struct overlay_list
*n
;
4737 lang_enter_output_section_statement (name
, overlay_vma
, normal_section
,
4738 0, 0, 0, overlay_lma
);
4740 /* If this is the first section, then base the VMA and LMA of future
4741 sections on this one. This will work correctly even if `.' is
4742 used in the addresses. */
4743 if (overlay_list
== NULL
)
4745 overlay_vma
= exp_nameop (ADDR
, name
);
4746 overlay_lma
= exp_nameop (LOADADDR
, name
);
4749 /* Remember the section. */
4750 n
= (struct overlay_list
*) xmalloc (sizeof *n
);
4751 n
->os
= current_section
;
4752 n
->next
= overlay_list
;
4755 size
= exp_nameop (SIZEOF
, name
);
4757 /* Adjust the LMA for the next section. */
4758 overlay_lma
= exp_binop ('+', overlay_lma
, size
);
4760 /* Arrange to work out the maximum section end address. */
4761 if (overlay_max
== NULL
)
4764 overlay_max
= exp_binop (MAX_K
, overlay_max
, size
);
4767 /* Finish a section in an overlay. There isn't any special to do
4771 lang_leave_overlay_section (fill
, phdrs
)
4773 struct lang_output_section_phdr_list
*phdrs
;
4780 name
= current_section
->name
;
4782 lang_leave_output_section_statement (fill
, "*default*",
4783 phdrs
, "*default*");
4785 /* Define the magic symbols. */
4787 clean
= xmalloc (strlen (name
) + 1);
4789 for (s1
= name
; *s1
!= '\0'; s1
++)
4790 if (ISALNUM (*s1
) || *s1
== '_')
4794 buf
= xmalloc (strlen (clean
) + sizeof "__load_start_");
4795 sprintf (buf
, "__load_start_%s", clean
);
4796 lang_add_assignment (exp_assop ('=', buf
,
4797 exp_nameop (LOADADDR
, name
)));
4799 buf
= xmalloc (strlen (clean
) + sizeof "__load_stop_");
4800 sprintf (buf
, "__load_stop_%s", clean
);
4801 lang_add_assignment (exp_assop ('=', buf
,
4803 exp_nameop (LOADADDR
, name
),
4804 exp_nameop (SIZEOF
, name
))));
4809 /* Finish an overlay. If there are any overlay wide settings, this
4810 looks through all the sections in the overlay and sets them. */
4813 lang_leave_overlay (fill
, memspec
, phdrs
, lma_memspec
)
4815 const char *memspec
;
4816 struct lang_output_section_phdr_list
*phdrs
;
4817 const char *lma_memspec
;
4819 lang_memory_region_type
*region
;
4820 lang_memory_region_type
* default_region
;
4821 lang_memory_region_type
*lma_region
;
4822 struct overlay_list
*l
;
4823 struct lang_nocrossref
*nocrossref
;
4825 default_region
= lang_memory_region_lookup ("*default*");
4827 if (memspec
== NULL
)
4830 region
= lang_memory_region_lookup (memspec
);
4832 if (lma_memspec
== NULL
)
4835 lma_region
= lang_memory_region_lookup (lma_memspec
);
4842 struct overlay_list
*next
;
4844 if (fill
!= 0 && l
->os
->fill
== 0)
4847 /* Assign a region to the sections, if one has been specified.
4848 Override the assignment of the default section, but not
4850 if (region
!= NULL
&&
4851 (l
->os
->region
== NULL
||
4852 l
->os
->region
== default_region
))
4853 l
->os
->region
= region
;
4855 /* We only set lma_region for the first overlay section, as
4856 subsequent overlay sections will have load_base set relative
4857 to the first section. Also, don't set lma_region if
4858 load_base is specified. FIXME: There should really be a test
4859 that `AT ( LDADDR )' doesn't conflict with `AT >LMA_REGION'
4860 rather than letting LDADDR simply override LMA_REGION. */
4861 if (lma_region
!= NULL
&& l
->os
->lma_region
== NULL
4862 && l
->next
== NULL
&& l
->os
->load_base
== NULL
)
4863 l
->os
->lma_region
= lma_region
;
4865 if (phdrs
!= NULL
&& l
->os
->phdrs
== NULL
)
4866 l
->os
->phdrs
= phdrs
;
4868 if (overlay_nocrossrefs
)
4870 struct lang_nocrossref
*nc
;
4872 nc
= (struct lang_nocrossref
*) xmalloc (sizeof *nc
);
4873 nc
->name
= l
->os
->name
;
4874 nc
->next
= nocrossref
;
4883 if (nocrossref
!= NULL
)
4884 lang_add_nocrossref (nocrossref
);
4886 /* Update . for the end of the overlay. */
4887 lang_add_assignment (exp_assop ('=', ".",
4888 exp_binop ('+', overlay_vma
, overlay_max
)));
4892 overlay_nocrossrefs
= 0;
4893 overlay_list
= NULL
;
4897 /* Version handling. This is only useful for ELF. */
4899 /* This global variable holds the version tree that we build. */
4901 struct bfd_elf_version_tree
*lang_elf_version_info
;
4904 lang_vers_match_lang_c (expr
, sym
)
4905 struct bfd_elf_version_expr
*expr
;
4908 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4910 return fnmatch (expr
->pattern
, sym
, 0) == 0;
4914 lang_vers_match_lang_cplusplus (expr
, sym
)
4915 struct bfd_elf_version_expr
*expr
;
4921 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4924 alt_sym
= cplus_demangle (sym
, /* DMGL_NO_TPARAMS */ 0);
4927 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
4928 Should we early out false in this case? */
4929 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
4933 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
4941 lang_vers_match_lang_java (expr
, sym
)
4942 struct bfd_elf_version_expr
*expr
;
4948 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4951 alt_sym
= cplus_demangle (sym
, DMGL_JAVA
);
4954 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
4955 Should we early out false in this case? */
4956 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
4960 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
4967 /* This is called for each variable name or match expression. */
4969 struct bfd_elf_version_expr
*
4970 lang_new_vers_regex (orig
, new, lang
)
4971 struct bfd_elf_version_expr
*orig
;
4975 struct bfd_elf_version_expr
*ret
;
4977 ret
= (struct bfd_elf_version_expr
*) xmalloc (sizeof *ret
);
4981 if (lang
== NULL
|| strcasecmp (lang
, "C") == 0)
4982 ret
->match
= lang_vers_match_lang_c
;
4983 else if (strcasecmp (lang
, "C++") == 0)
4984 ret
->match
= lang_vers_match_lang_cplusplus
;
4985 else if (strcasecmp (lang
, "Java") == 0)
4986 ret
->match
= lang_vers_match_lang_java
;
4989 einfo (_("%X%P: unknown language `%s' in version information\n"),
4991 ret
->match
= lang_vers_match_lang_c
;
4997 /* This is called for each set of variable names and match
5000 struct bfd_elf_version_tree
*
5001 lang_new_vers_node (globals
, locals
)
5002 struct bfd_elf_version_expr
*globals
;
5003 struct bfd_elf_version_expr
*locals
;
5005 struct bfd_elf_version_tree
*ret
;
5007 ret
= (struct bfd_elf_version_tree
*) xmalloc (sizeof *ret
);
5011 ret
->globals
= globals
;
5012 ret
->locals
= locals
;
5014 ret
->name_indx
= (unsigned int) -1;
5019 /* This static variable keeps track of version indices. */
5021 static int version_index
;
5023 /* This is called when we know the name and dependencies of the
5027 lang_register_vers_node (name
, version
, deps
)
5029 struct bfd_elf_version_tree
*version
;
5030 struct bfd_elf_version_deps
*deps
;
5032 struct bfd_elf_version_tree
*t
, **pp
;
5033 struct bfd_elf_version_expr
*e1
;
5035 /* Make sure this node has a unique name. */
5036 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5037 if (strcmp (t
->name
, name
) == 0)
5038 einfo (_("%X%P: duplicate version tag `%s'\n"), name
);
5040 /* Check the global and local match names, and make sure there
5041 aren't any duplicates. */
5043 for (e1
= version
->globals
; e1
!= NULL
; e1
= e1
->next
)
5045 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5047 struct bfd_elf_version_expr
*e2
;
5049 for (e2
= t
->locals
; e2
!= NULL
; e2
= e2
->next
)
5050 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5051 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5056 for (e1
= version
->locals
; e1
!= NULL
; e1
= e1
->next
)
5058 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5060 struct bfd_elf_version_expr
*e2
;
5062 for (e2
= t
->globals
; e2
!= NULL
; e2
= e2
->next
)
5063 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5064 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5069 version
->deps
= deps
;
5070 version
->name
= name
;
5072 version
->vernum
= version_index
;
5074 for (pp
= &lang_elf_version_info
; *pp
!= NULL
; pp
= &(*pp
)->next
)
5079 /* This is called when we see a version dependency. */
5081 struct bfd_elf_version_deps
*
5082 lang_add_vers_depend (list
, name
)
5083 struct bfd_elf_version_deps
*list
;
5086 struct bfd_elf_version_deps
*ret
;
5087 struct bfd_elf_version_tree
*t
;
5089 ret
= (struct bfd_elf_version_deps
*) xmalloc (sizeof *ret
);
5092 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5094 if (strcmp (t
->name
, name
) == 0)
5096 ret
->version_needed
= t
;
5101 einfo (_("%X%P: unable to find version dependency `%s'\n"), name
);
5107 lang_do_version_exports_section ()
5109 struct bfd_elf_version_expr
*greg
= NULL
, *lreg
;
5111 LANG_FOR_EACH_INPUT_STATEMENT (is
)
5113 asection
*sec
= bfd_get_section_by_name (is
->the_bfd
, ".exports");
5120 len
= bfd_section_size (is
->the_bfd
, sec
);
5121 contents
= xmalloc (len
);
5122 if (!bfd_get_section_contents (is
->the_bfd
, sec
, contents
, 0, len
))
5123 einfo (_("%X%P: unable to read .exports section contents\n"), sec
);
5126 while (p
< contents
+ len
)
5128 greg
= lang_new_vers_regex (greg
, p
, NULL
);
5129 p
= strchr (p
, '\0') + 1;
5132 /* Do not free the contents, as we used them creating the regex. */
5134 /* Do not include this section in the link. */
5135 bfd_set_section_flags (is
->the_bfd
, sec
,
5136 bfd_get_section_flags (is
->the_bfd
, sec
) | SEC_EXCLUDE
);
5139 lreg
= lang_new_vers_regex (NULL
, "*", NULL
);
5140 lang_register_vers_node (command_line
.version_exports_section
,
5141 lang_new_vers_node (greg
, lreg
), NULL
);
5145 lang_add_unique (name
)
5148 struct unique_sections
*ent
;
5150 for (ent
= unique_section_list
; ent
; ent
= ent
->next
)
5151 if (strcmp (ent
->name
, name
) == 0)
5154 ent
= (struct unique_sections
*) xmalloc (sizeof *ent
);
5155 ent
->name
= xstrdup (name
);
5156 ent
->next
= unique_section_list
;
5157 unique_section_list
= ent
;