1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 #include "libiberty.h"
26 #include "safe-ctype.h"
44 static lang_statement_union_type
*new_statement
45 PARAMS ((enum statement_enum
, size_t, lang_statement_list_type
*));
48 static struct obstack stat_obstack
;
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52 static const char *startup_file
;
53 static lang_statement_list_type input_file_chain
;
54 static boolean placed_commons
= false;
55 static lang_output_section_statement_type
*default_common_section
;
56 static boolean map_option_f
;
57 static bfd_vma print_dot
;
58 static lang_input_statement_type
*first_file
;
59 static const char *current_target
;
60 static const char *output_target
;
61 static lang_statement_list_type statement_list
;
62 static struct lang_phdr
*lang_phdr_list
;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*) (lang_statement_union_type
*),
66 lang_statement_union_type
*));
67 static lang_input_statement_type
*new_afile
68 PARAMS ((const char *, lang_input_file_enum_type
, const char *, boolean
));
69 static lang_memory_region_type
*lang_memory_default
PARAMS ((asection
*));
70 static void lang_map_flags
PARAMS ((flagword
));
71 static void init_os
PARAMS ((lang_output_section_statement_type
*));
72 static void exp_init_os
PARAMS ((etree_type
*));
73 static void section_already_linked
PARAMS ((bfd
*, asection
*, PTR
));
74 static struct bfd_hash_entry
*already_linked_newfunc
75 PARAMS ((struct bfd_hash_entry
*, struct bfd_hash_table
*, const char *));
76 static void already_linked_table_init
PARAMS ((void));
77 static void already_linked_table_free
PARAMS ((void));
78 static boolean wildcardp
PARAMS ((const char *));
79 static lang_statement_union_type
*wild_sort
80 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*,
81 lang_input_statement_type
*, asection
*));
82 static void output_section_callback
83 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*, asection
*,
84 lang_input_statement_type
*, PTR
));
85 static lang_input_statement_type
*lookup_name
PARAMS ((const char *));
86 static boolean load_symbols
87 PARAMS ((lang_input_statement_type
*, lang_statement_list_type
*));
89 PARAMS ((lang_wild_statement_type
*,
90 const char *, lang_output_section_statement_type
*));
91 static bfd
*open_output
PARAMS ((const char *));
92 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*));
93 static void open_input_bfds
PARAMS ((lang_statement_union_type
*, boolean
));
94 static void lang_reasonable_defaults
PARAMS ((void));
95 static void insert_undefined
PARAMS ((const char *));
96 static void lang_place_undefineds
PARAMS ((void));
97 static void map_input_to_output_sections
98 PARAMS ((lang_statement_union_type
*, const char *,
99 lang_output_section_statement_type
*));
100 static void print_output_section_statement
101 PARAMS ((lang_output_section_statement_type
*));
102 static void print_assignment
103 PARAMS ((lang_assignment_statement_type
*,
104 lang_output_section_statement_type
*));
105 static void print_input_statement
PARAMS ((lang_input_statement_type
*));
106 static boolean print_one_symbol
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
107 static void print_input_section
PARAMS ((lang_input_section_type
*));
108 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*));
109 static void print_data_statement
PARAMS ((lang_data_statement_type
*));
110 static void print_address_statement
PARAMS ((lang_address_statement_type
*));
111 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*));
112 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*));
113 static void print_wild_statement
114 PARAMS ((lang_wild_statement_type
*, lang_output_section_statement_type
*));
115 static void print_group
116 PARAMS ((lang_group_statement_type
*, lang_output_section_statement_type
*));
117 static void print_statement
118 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
119 static void print_statement_list
120 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
121 static void print_statements
PARAMS ((void));
122 static void insert_pad
123 PARAMS ((lang_statement_union_type
**, fill_type
*,
124 unsigned int, asection
*, bfd_vma
));
125 static bfd_vma size_input_section
126 PARAMS ((lang_statement_union_type
**, lang_output_section_statement_type
*,
127 fill_type
*, bfd_vma
));
128 static void lang_finish
PARAMS ((void));
129 static void ignore_bfd_errors
PARAMS ((const char *, ...));
130 static void lang_check
PARAMS ((void));
131 static void lang_common
PARAMS ((void));
132 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
133 static void lang_place_orphans
PARAMS ((void));
134 static int topower
PARAMS ((int));
135 static void lang_set_startof
PARAMS ((void));
136 static void gc_section_callback
137 PARAMS ((lang_wild_statement_type
*, struct wildcard_list
*, asection
*,
138 lang_input_statement_type
*, PTR
));
139 static void lang_record_phdrs
PARAMS ((void));
140 static void lang_gc_wild
PARAMS ((lang_wild_statement_type
*));
141 static void lang_gc_sections_1
PARAMS ((lang_statement_union_type
*));
142 static void lang_gc_sections
PARAMS ((void));
143 static int lang_vers_match_lang_c
144 PARAMS ((struct bfd_elf_version_expr
*, const char *));
145 static int lang_vers_match_lang_cplusplus
146 PARAMS ((struct bfd_elf_version_expr
*, const char *));
147 static int lang_vers_match_lang_java
148 PARAMS ((struct bfd_elf_version_expr
*, const char *));
149 static void lang_do_version_exports_section
PARAMS ((void));
150 static void lang_check_section_addresses
PARAMS ((void));
151 static void os_region_check
152 PARAMS ((lang_output_section_statement_type
*,
153 struct memory_region_struct
*, etree_type
*, bfd_vma
));
154 static bfd_vma lang_size_sections_1
155 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*,
156 lang_statement_union_type
**, fill_type
*, bfd_vma
, boolean
*));
158 typedef void (*callback_t
) PARAMS ((lang_wild_statement_type
*,
159 struct wildcard_list
*,
161 lang_input_statement_type
*,
163 static void walk_wild
164 PARAMS ((lang_wild_statement_type
*, callback_t
, PTR
));
165 static void walk_wild_section
166 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
168 static void walk_wild_file
169 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
172 static int get_target
PARAMS ((const bfd_target
*, PTR
));
173 static void stricpy
PARAMS ((char *, char *));
174 static void strcut
PARAMS ((char *, char *));
175 static int name_compare
PARAMS ((char *, char *));
176 static int closest_target_match
PARAMS ((const bfd_target
*, PTR
));
177 static char * get_first_input_target
PARAMS ((void));
180 lang_output_section_statement_type
*abs_output_section
;
181 lang_statement_list_type lang_output_section_statement
;
182 lang_statement_list_type
*stat_ptr
= &statement_list
;
183 lang_statement_list_type file_chain
= { NULL
, NULL
};
184 const char *entry_symbol
= NULL
;
185 const char *entry_section
= ".text";
186 boolean entry_from_cmdline
;
187 boolean lang_has_input_file
= false;
188 boolean had_output_filename
= false;
189 boolean lang_float_flag
= false;
190 boolean delete_output_file_on_failure
= false;
191 struct lang_nocrossrefs
*nocrossref_list
;
192 struct unique_sections
*unique_section_list
;
194 etree_type
*base
; /* Relocation base - or null */
196 #if defined (__STDC__) || defined (ALMOST_STDC)
197 #define cat(a,b) a##b
199 #define cat(a,b) a/**/b
202 /* Don't beautify the line below with "innocent" whitespace, it breaks
203 the K&R C preprocessor! */
204 #define new_stat(x, y) \
205 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
207 #define outside_section_address(q) \
208 ((q)->output_offset + (q)->output_section->vma)
210 #define outside_symbol_address(q) \
211 ((q)->value + outside_section_address (q->section))
213 #define SECTION_NAME_MAP_LENGTH (16)
219 return obstack_alloc (&stat_obstack
, size
);
223 unique_section_p (secnam
)
226 struct unique_sections
*unam
;
228 for (unam
= unique_section_list
; unam
; unam
= unam
->next
)
229 if (wildcardp (unam
->name
)
230 ? fnmatch (unam
->name
, secnam
, 0) == 0
231 : strcmp (unam
->name
, secnam
) == 0)
239 /* Generic traversal routines for finding matching sections. */
242 walk_wild_section (ptr
, file
, callback
, data
)
243 lang_wild_statement_type
*ptr
;
244 lang_input_statement_type
*file
;
250 if (file
->just_syms_flag
)
253 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
255 struct wildcard_list
*sec
;
257 sec
= ptr
->section_list
;
259 (*callback
) (ptr
, sec
, s
, file
, data
);
263 boolean skip
= false;
264 struct name_list
*list_tmp
;
266 /* Don't process sections from files which were
268 for (list_tmp
= sec
->spec
.exclude_name_list
;
270 list_tmp
= list_tmp
->next
)
272 if (wildcardp (list_tmp
->name
))
273 skip
= fnmatch (list_tmp
->name
, file
->filename
, 0) == 0;
275 skip
= strcmp (list_tmp
->name
, file
->filename
) == 0;
277 /* If this file is part of an archive, and the archive is
278 excluded, exclude this file. */
279 if (! skip
&& file
->the_bfd
!= NULL
280 && file
->the_bfd
->my_archive
!= NULL
281 && file
->the_bfd
->my_archive
->filename
!= NULL
)
283 if (wildcardp (list_tmp
->name
))
284 skip
= fnmatch (list_tmp
->name
,
285 file
->the_bfd
->my_archive
->filename
,
288 skip
= strcmp (list_tmp
->name
,
289 file
->the_bfd
->my_archive
->filename
) == 0;
296 if (!skip
&& sec
->spec
.name
!= NULL
)
298 const char *sname
= bfd_get_section_name (file
->the_bfd
, s
);
300 if (wildcardp (sec
->spec
.name
))
301 skip
= fnmatch (sec
->spec
.name
, sname
, 0) != 0;
303 skip
= strcmp (sec
->spec
.name
, sname
) != 0;
307 (*callback
) (ptr
, sec
, s
, file
, data
);
314 /* Handle a wild statement for a single file F. */
317 walk_wild_file (s
, f
, callback
, data
)
318 lang_wild_statement_type
*s
;
319 lang_input_statement_type
*f
;
323 if (f
->the_bfd
== NULL
324 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
325 walk_wild_section (s
, f
, callback
, data
);
330 /* This is an archive file. We must map each member of the
331 archive separately. */
332 member
= bfd_openr_next_archived_file (f
->the_bfd
, (bfd
*) NULL
);
333 while (member
!= NULL
)
335 /* When lookup_name is called, it will call the add_symbols
336 entry point for the archive. For each element of the
337 archive which is included, BFD will call ldlang_add_file,
338 which will set the usrdata field of the member to the
339 lang_input_statement. */
340 if (member
->usrdata
!= NULL
)
342 walk_wild_section (s
,
343 (lang_input_statement_type
*) member
->usrdata
,
347 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
353 walk_wild (s
, callback
, data
)
354 lang_wild_statement_type
*s
;
358 const char *file_spec
= s
->filename
;
360 if (file_spec
== NULL
)
362 /* Perform the iteration over all files in the list. */
363 LANG_FOR_EACH_INPUT_STATEMENT (f
)
365 walk_wild_file (s
, f
, callback
, data
);
368 else if (wildcardp (file_spec
))
370 LANG_FOR_EACH_INPUT_STATEMENT (f
)
372 if (fnmatch (file_spec
, f
->filename
, FNM_FILE_NAME
) == 0)
373 walk_wild_file (s
, f
, callback
, data
);
378 lang_input_statement_type
*f
;
380 /* Perform the iteration over a single file. */
381 f
= lookup_name (file_spec
);
383 walk_wild_file (s
, f
, callback
, data
);
387 /* lang_for_each_statement walks the parse tree and calls the provided
388 function for each node. */
391 lang_for_each_statement_worker (func
, s
)
392 void (*func
) PARAMS ((lang_statement_union_type
*));
393 lang_statement_union_type
*s
;
395 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
399 switch (s
->header
.type
)
401 case lang_constructors_statement_enum
:
402 lang_for_each_statement_worker (func
, constructor_list
.head
);
404 case lang_output_section_statement_enum
:
405 lang_for_each_statement_worker
407 s
->output_section_statement
.children
.head
);
409 case lang_wild_statement_enum
:
410 lang_for_each_statement_worker
412 s
->wild_statement
.children
.head
);
414 case lang_group_statement_enum
:
415 lang_for_each_statement_worker (func
,
416 s
->group_statement
.children
.head
);
418 case lang_data_statement_enum
:
419 case lang_reloc_statement_enum
:
420 case lang_object_symbols_statement_enum
:
421 case lang_output_statement_enum
:
422 case lang_target_statement_enum
:
423 case lang_input_section_enum
:
424 case lang_input_statement_enum
:
425 case lang_assignment_statement_enum
:
426 case lang_padding_statement_enum
:
427 case lang_address_statement_enum
:
428 case lang_fill_statement_enum
:
438 lang_for_each_statement (func
)
439 void (*func
) PARAMS ((lang_statement_union_type
*));
441 lang_for_each_statement_worker (func
, statement_list
.head
);
444 /*----------------------------------------------------------------------*/
447 lang_list_init (list
)
448 lang_statement_list_type
*list
;
450 list
->head
= (lang_statement_union_type
*) NULL
;
451 list
->tail
= &list
->head
;
454 /* Build a new statement node for the parse tree. */
456 static lang_statement_union_type
*
457 new_statement (type
, size
, list
)
458 enum statement_enum type
;
460 lang_statement_list_type
*list
;
462 lang_statement_union_type
*new = (lang_statement_union_type
*)
465 new->header
.type
= type
;
466 new->header
.next
= (lang_statement_union_type
*) NULL
;
467 lang_statement_append (list
, new, &new->header
.next
);
471 /* Build a new input file node for the language. There are several
472 ways in which we treat an input file, eg, we only look at symbols,
473 or prefix it with a -l etc.
475 We can be supplied with requests for input files more than once;
476 they may, for example be split over serveral lines like foo.o(.text)
477 foo.o(.data) etc, so when asked for a file we check that we haven't
478 got it already so we don't duplicate the bfd. */
480 static lang_input_statement_type
*
481 new_afile (name
, file_type
, target
, add_to_list
)
483 lang_input_file_enum_type file_type
;
487 lang_input_statement_type
*p
;
490 p
= new_stat (lang_input_statement
, stat_ptr
);
493 p
= ((lang_input_statement_type
*)
494 stat_alloc (sizeof (lang_input_statement_type
)));
495 p
->header
.next
= NULL
;
498 lang_has_input_file
= true;
502 case lang_input_file_is_symbols_only_enum
:
504 p
->is_archive
= false;
506 p
->local_sym_name
= name
;
507 p
->just_syms_flag
= true;
508 p
->search_dirs_flag
= false;
510 case lang_input_file_is_fake_enum
:
512 p
->is_archive
= false;
514 p
->local_sym_name
= name
;
515 p
->just_syms_flag
= false;
516 p
->search_dirs_flag
= false;
518 case lang_input_file_is_l_enum
:
519 p
->is_archive
= true;
522 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
523 p
->just_syms_flag
= false;
524 p
->search_dirs_flag
= true;
526 case lang_input_file_is_marker_enum
:
528 p
->is_archive
= false;
530 p
->local_sym_name
= name
;
531 p
->just_syms_flag
= false;
532 p
->search_dirs_flag
= true;
534 case lang_input_file_is_search_file_enum
:
536 p
->is_archive
= false;
538 p
->local_sym_name
= name
;
539 p
->just_syms_flag
= false;
540 p
->search_dirs_flag
= true;
542 case lang_input_file_is_file_enum
:
544 p
->is_archive
= false;
546 p
->local_sym_name
= name
;
547 p
->just_syms_flag
= false;
548 p
->search_dirs_flag
= false;
553 p
->the_bfd
= (bfd
*) NULL
;
554 p
->asymbols
= (asymbol
**) NULL
;
555 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
556 p
->next
= (lang_statement_union_type
*) NULL
;
558 p
->dynamic
= config
.dynamic_link
;
559 p
->whole_archive
= whole_archive
;
561 lang_statement_append (&input_file_chain
,
562 (lang_statement_union_type
*) p
,
567 lang_input_statement_type
*
568 lang_add_input_file (name
, file_type
, target
)
570 lang_input_file_enum_type file_type
;
573 lang_has_input_file
= true;
574 return new_afile (name
, file_type
, target
, true);
577 /* Build enough state so that the parser can build its tree. */
582 obstack_begin (&stat_obstack
, 1000);
584 stat_ptr
= &statement_list
;
586 lang_list_init (stat_ptr
);
588 lang_list_init (&input_file_chain
);
589 lang_list_init (&lang_output_section_statement
);
590 lang_list_init (&file_chain
);
591 first_file
= lang_add_input_file ((char *) NULL
,
592 lang_input_file_is_marker_enum
,
595 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
597 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
601 /*----------------------------------------------------------------------
602 A region is an area of memory declared with the
603 MEMORY { name:org=exp, len=exp ... }
606 We maintain a list of all the regions here.
608 If no regions are specified in the script, then the default is used
609 which is created when looked up to be the entire data space. */
611 static lang_memory_region_type
*lang_memory_region_list
;
612 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
614 lang_memory_region_type
*
615 lang_memory_region_lookup (name
)
616 const char *const name
;
618 lang_memory_region_type
*p
;
620 /* NAME is NULL for LMA memspecs if no region was specified. */
624 for (p
= lang_memory_region_list
;
625 p
!= (lang_memory_region_type
*) NULL
;
628 if (strcmp (p
->name
, name
) == 0)
635 /* This code used to always use the first region in the list as the
636 default region. I changed it to instead use a region
637 encompassing all of memory as the default region. This permits
638 NOLOAD sections to work reasonably without requiring a region.
639 People should specify what region they mean, if they really want
641 if (strcmp (name
, "*default*") == 0)
643 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
645 return lang_memory_region_list
;
651 lang_memory_region_type
*new =
652 (lang_memory_region_type
*) stat_alloc (sizeof (lang_memory_region_type
));
654 new->name
= xstrdup (name
);
655 new->next
= (lang_memory_region_type
*) NULL
;
657 *lang_memory_region_list_tail
= new;
658 lang_memory_region_list_tail
= &new->next
;
662 new->length
= ~(bfd_size_type
) 0;
664 new->had_full_message
= false;
670 static lang_memory_region_type
*
671 lang_memory_default (section
)
674 lang_memory_region_type
*p
;
676 flagword sec_flags
= section
->flags
;
678 /* Override SEC_DATA to mean a writable section. */
679 if ((sec_flags
& (SEC_ALLOC
| SEC_READONLY
| SEC_CODE
)) == SEC_ALLOC
)
680 sec_flags
|= SEC_DATA
;
682 for (p
= lang_memory_region_list
;
683 p
!= (lang_memory_region_type
*) NULL
;
686 if ((p
->flags
& sec_flags
) != 0
687 && (p
->not_flags
& sec_flags
) == 0)
692 return lang_memory_region_lookup ("*default*");
695 lang_output_section_statement_type
*
696 lang_output_section_find (name
)
697 const char *const name
;
699 lang_statement_union_type
*u
;
700 lang_output_section_statement_type
*lookup
;
702 for (u
= lang_output_section_statement
.head
;
703 u
!= (lang_statement_union_type
*) NULL
;
706 lookup
= &u
->output_section_statement
;
707 if (strcmp (name
, lookup
->name
) == 0)
712 return (lang_output_section_statement_type
*) NULL
;
715 lang_output_section_statement_type
*
716 lang_output_section_statement_lookup (name
)
717 const char *const name
;
719 lang_output_section_statement_type
*lookup
;
721 lookup
= lang_output_section_find (name
);
722 if (lookup
== (lang_output_section_statement_type
*) NULL
)
725 lookup
= (lang_output_section_statement_type
*)
726 new_stat (lang_output_section_statement
, stat_ptr
);
727 lookup
->region
= (lang_memory_region_type
*) NULL
;
728 lookup
->lma_region
= (lang_memory_region_type
*) NULL
;
729 lookup
->fill
= (fill_type
*) 0;
730 lookup
->block_value
= 1;
733 lookup
->next
= (lang_statement_union_type
*) NULL
;
734 lookup
->bfd_section
= (asection
*) NULL
;
735 lookup
->processed
= false;
736 lookup
->sectype
= normal_section
;
737 lookup
->addr_tree
= (etree_type
*) NULL
;
738 lang_list_init (&lookup
->children
);
740 lookup
->memspec
= (const char *) NULL
;
742 lookup
->subsection_alignment
= -1;
743 lookup
->section_alignment
= -1;
744 lookup
->load_base
= (union etree_union
*) NULL
;
745 lookup
->update_dot_tree
= NULL
;
746 lookup
->phdrs
= NULL
;
748 lang_statement_append (&lang_output_section_statement
,
749 (lang_statement_union_type
*) lookup
,
756 lang_map_flags (flag
)
759 if (flag
& SEC_ALLOC
)
765 if (flag
& SEC_READONLY
)
778 lang_memory_region_type
*m
;
780 minfo (_("\nMemory Configuration\n\n"));
781 fprintf (config
.map_file
, "%-16s %-18s %-18s %s\n",
782 _("Name"), _("Origin"), _("Length"), _("Attributes"));
784 for (m
= lang_memory_region_list
;
785 m
!= (lang_memory_region_type
*) NULL
;
791 fprintf (config
.map_file
, "%-16s ", m
->name
);
793 sprintf_vma (buf
, m
->origin
);
794 minfo ("0x%s ", buf
);
802 minfo ("0x%V", m
->length
);
803 if (m
->flags
|| m
->not_flags
)
811 lang_map_flags (m
->flags
);
817 lang_map_flags (m
->not_flags
);
824 fprintf (config
.map_file
, _("\nLinker script and memory map\n\n"));
829 /* Initialize an output section. */
833 lang_output_section_statement_type
*s
;
835 section_userdata_type
*new;
837 if (s
->bfd_section
!= NULL
)
840 if (strcmp (s
->name
, DISCARD_SECTION_NAME
) == 0)
841 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME
);
843 new = ((section_userdata_type
*)
844 stat_alloc (sizeof (section_userdata_type
)));
846 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
847 if (s
->bfd_section
== (asection
*) NULL
)
848 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
849 if (s
->bfd_section
== (asection
*) NULL
)
851 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
852 output_bfd
->xvec
->name
, s
->name
);
854 s
->bfd_section
->output_section
= s
->bfd_section
;
856 /* We initialize an output sections output offset to minus its own
857 vma to allow us to output a section through itself. */
858 s
->bfd_section
->output_offset
= 0;
859 get_userdata (s
->bfd_section
) = (PTR
) new;
861 /* If there is a base address, make sure that any sections it might
862 mention are initialized. */
863 if (s
->addr_tree
!= NULL
)
864 exp_init_os (s
->addr_tree
);
867 /* Make sure that all output sections mentioned in an expression are
874 switch (exp
->type
.node_class
)
877 exp_init_os (exp
->assign
.src
);
881 exp_init_os (exp
->binary
.lhs
);
882 exp_init_os (exp
->binary
.rhs
);
886 exp_init_os (exp
->trinary
.cond
);
887 exp_init_os (exp
->trinary
.lhs
);
888 exp_init_os (exp
->trinary
.rhs
);
892 exp_init_os (exp
->unary
.child
);
896 switch (exp
->type
.node_code
)
902 lang_output_section_statement_type
*os
;
904 os
= lang_output_section_find (exp
->name
.name
);
905 if (os
!= NULL
&& os
->bfd_section
== NULL
)
916 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
917 once into the output. This routine checks each section, and
918 arrange to discard it if a section of the same name has already
919 been linked. If the section has COMDAT information, then it uses
920 that to decide whether the section should be included. This code
921 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
922 that is, it does not depend solely upon the section name.
923 section_already_linked is called via bfd_map_over_sections. */
925 /* This is the shape of the elements inside the already_linked hash
926 table. It maps a name onto a list of already_linked elements with
927 the same name. It's possible to get more than one element in a
928 list if the COMDAT sections have different names. */
930 struct already_linked_hash_entry
932 struct bfd_hash_entry root
;
933 struct already_linked
*entry
;
936 struct already_linked
938 struct already_linked
*next
;
942 /* The hash table. */
944 static struct bfd_hash_table already_linked_table
;
947 section_already_linked (abfd
, sec
, data
)
952 lang_input_statement_type
*entry
= (lang_input_statement_type
*) data
;
955 struct already_linked
*l
;
956 struct already_linked_hash_entry
*already_linked_list
;
958 /* If we are only reading symbols from this object, then we want to
959 discard all sections. */
960 if (entry
->just_syms_flag
)
962 bfd_link_just_syms (sec
, &link_info
);
966 flags
= bfd_get_section_flags (abfd
, sec
);
968 if ((flags
& SEC_LINK_ONCE
) == 0)
971 /* FIXME: When doing a relocatable link, we may have trouble
972 copying relocations in other sections that refer to local symbols
973 in the section being discarded. Those relocations will have to
974 be converted somehow; as of this writing I'm not sure that any of
975 the backends handle that correctly.
977 It is tempting to instead not discard link once sections when
978 doing a relocatable link (technically, they should be discarded
979 whenever we are building constructors). However, that fails,
980 because the linker winds up combining all the link once sections
981 into a single large link once section, which defeats the purpose
982 of having link once sections in the first place.
984 Also, not merging link once sections in a relocatable link
985 causes trouble for MIPS ELF, which relies in link once semantics
986 to handle the .reginfo section correctly. */
988 name
= bfd_get_section_name (abfd
, sec
);
990 already_linked_list
=
991 ((struct already_linked_hash_entry
*)
992 bfd_hash_lookup (&already_linked_table
, name
, true, false));
994 for (l
= already_linked_list
->entry
; l
!= NULL
; l
= l
->next
)
996 if (sec
->comdat
== NULL
997 || l
->sec
->comdat
== NULL
998 || strcmp (sec
->comdat
->name
, l
->sec
->comdat
->name
) == 0)
1000 /* The section has already been linked. See if we should
1002 switch (flags
& SEC_LINK_DUPLICATES
)
1007 case SEC_LINK_DUPLICATES_DISCARD
:
1010 case SEC_LINK_DUPLICATES_ONE_ONLY
:
1011 if (sec
->comdat
== NULL
)
1012 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1015 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1016 abfd
, name
, sec
->comdat
->name
);
1019 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
1020 /* FIXME: We should really dig out the contents of both
1021 sections and memcmp them. The COFF/PE spec says that
1022 the Microsoft linker does not implement this
1023 correctly, so I'm not going to bother doing it
1026 case SEC_LINK_DUPLICATES_SAME_SIZE
:
1027 if (bfd_section_size (abfd
, sec
)
1028 != bfd_section_size (l
->sec
->owner
, l
->sec
))
1029 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1034 /* Set the output_section field so that lang_add_section
1035 does not create a lang_input_section structure for this
1037 sec
->output_section
= bfd_abs_section_ptr
;
1043 /* This is the first section with this name. Record it. Allocate
1044 the memory from the same obstack as the hash table is kept in. */
1046 l
= ((struct already_linked
*)
1047 bfd_hash_allocate (&already_linked_table
, sizeof *l
));
1050 l
->next
= already_linked_list
->entry
;
1051 already_linked_list
->entry
= l
;
1054 /* Support routines for the hash table used by section_already_linked,
1055 initialize the table, fill in an entry and remove the table. */
1057 static struct bfd_hash_entry
*
1058 already_linked_newfunc (entry
, table
, string
)
1059 struct bfd_hash_entry
*entry ATTRIBUTE_UNUSED
;
1060 struct bfd_hash_table
*table
;
1061 const char *string ATTRIBUTE_UNUSED
;
1063 struct already_linked_hash_entry
*ret
=
1064 bfd_hash_allocate (table
, sizeof (struct already_linked_hash_entry
));
1068 return (struct bfd_hash_entry
*) ret
;
1072 already_linked_table_init ()
1074 if (! bfd_hash_table_init_n (&already_linked_table
,
1075 already_linked_newfunc
,
1077 einfo (_("%P%F: Failed to create hash table\n"));
1081 already_linked_table_free ()
1083 bfd_hash_table_free (&already_linked_table
);
1086 /* The wild routines.
1088 These expand statements like *(.text) and foo.o to a list of
1089 explicit actions, like foo.o(.text), bar.o(.text) and
1090 foo.o(.text, .data). */
1092 /* Return true if the PATTERN argument is a wildcard pattern.
1093 Although backslashes are treated specially if a pattern contains
1094 wildcards, we do not consider the mere presence of a backslash to
1095 be enough to cause the pattern to be treated as a wildcard.
1096 That lets us handle DOS filenames more naturally. */
1100 const char *pattern
;
1104 for (s
= pattern
; *s
!= '\0'; ++s
)
1112 /* Add SECTION to the output section OUTPUT. Do this by creating a
1113 lang_input_section statement which is placed at PTR. FILE is the
1114 input file which holds SECTION. */
1117 lang_add_section (ptr
, section
, output
, file
)
1118 lang_statement_list_type
*ptr
;
1120 lang_output_section_statement_type
*output
;
1121 lang_input_statement_type
*file
;
1126 flags
= bfd_get_section_flags (section
->owner
, section
);
1130 /* If we are doing a final link, discard sections marked with
1132 if (! link_info
.relocateable
1133 && (flags
& SEC_EXCLUDE
) != 0)
1136 /* Discard input sections which are assigned to a section named
1137 DISCARD_SECTION_NAME. */
1138 if (strcmp (output
->name
, DISCARD_SECTION_NAME
) == 0)
1141 /* Discard debugging sections if we are stripping debugging
1143 if ((link_info
.strip
== strip_debugger
|| link_info
.strip
== strip_all
)
1144 && (flags
& SEC_DEBUGGING
) != 0)
1149 if (section
->output_section
== NULL
)
1151 /* This prevents future calls from assigning this section. */
1152 section
->output_section
= bfd_abs_section_ptr
;
1157 if (section
->output_section
== NULL
)
1160 lang_input_section_type
*new;
1163 if (output
->bfd_section
== NULL
)
1166 first
= ! output
->bfd_section
->linker_has_input
;
1167 output
->bfd_section
->linker_has_input
= 1;
1169 /* Add a section reference to the list. */
1170 new = new_stat (lang_input_section
, ptr
);
1172 new->section
= section
;
1174 section
->output_section
= output
->bfd_section
;
1176 flags
= section
->flags
;
1178 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1179 to an output section, because we want to be able to include a
1180 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1181 section (I don't know why we want to do this, but we do).
1182 build_link_order in ldwrite.c handles this case by turning
1183 the embedded SEC_NEVER_LOAD section into a fill. */
1185 flags
&= ~ SEC_NEVER_LOAD
;
1187 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1188 already been processed. One reason to do this is that on pe
1189 format targets, .text$foo sections go into .text and it's odd
1190 to see .text with SEC_LINK_ONCE set. */
1192 if (! link_info
.relocateable
)
1193 flags
&= ~ (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES
);
1195 /* If this is not the first input section, and the SEC_READONLY
1196 flag is not currently set, then don't set it just because the
1197 input section has it set. */
1199 if (! first
&& (section
->output_section
->flags
& SEC_READONLY
) == 0)
1200 flags
&= ~ SEC_READONLY
;
1202 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1204 && ((section
->output_section
->flags
& (SEC_MERGE
| SEC_STRINGS
))
1205 != (flags
& (SEC_MERGE
| SEC_STRINGS
))
1206 || ((flags
& SEC_MERGE
)
1207 && section
->output_section
->entsize
!= section
->entsize
)))
1209 section
->output_section
->flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1210 flags
&= ~ (SEC_MERGE
| SEC_STRINGS
);
1213 section
->output_section
->flags
|= flags
;
1215 if (flags
& SEC_MERGE
)
1216 section
->output_section
->entsize
= section
->entsize
;
1218 /* If SEC_READONLY is not set in the input section, then clear
1219 it from the output section. */
1220 if ((section
->flags
& SEC_READONLY
) == 0)
1221 section
->output_section
->flags
&= ~SEC_READONLY
;
1223 switch (output
->sectype
)
1225 case normal_section
:
1230 case overlay_section
:
1231 output
->bfd_section
->flags
&= ~SEC_ALLOC
;
1233 case noload_section
:
1234 output
->bfd_section
->flags
&= ~SEC_LOAD
;
1235 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
1239 /* Copy over SEC_SMALL_DATA. */
1240 if (section
->flags
& SEC_SMALL_DATA
)
1241 section
->output_section
->flags
|= SEC_SMALL_DATA
;
1243 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
1244 output
->bfd_section
->alignment_power
= section
->alignment_power
;
1246 /* If supplied an aligment, then force it. */
1247 if (output
->section_alignment
!= -1)
1248 output
->bfd_section
->alignment_power
= output
->section_alignment
;
1250 if (section
->flags
& SEC_BLOCK
)
1252 section
->output_section
->flags
|= SEC_BLOCK
;
1253 /* FIXME: This value should really be obtained from the bfd... */
1254 output
->block_value
= 128;
1259 /* Handle wildcard sorting. This returns the lang_input_section which
1260 should follow the one we are going to create for SECTION and FILE,
1261 based on the sorting requirements of WILD. It returns NULL if the
1262 new section should just go at the end of the current list. */
1264 static lang_statement_union_type
*
1265 wild_sort (wild
, sec
, file
, section
)
1266 lang_wild_statement_type
*wild
;
1267 struct wildcard_list
*sec
;
1268 lang_input_statement_type
*file
;
1271 const char *section_name
;
1272 lang_statement_union_type
*l
;
1274 if (!wild
->filenames_sorted
&& (sec
== NULL
|| !sec
->spec
.sorted
))
1277 section_name
= bfd_get_section_name (file
->the_bfd
, section
);
1278 for (l
= wild
->children
.head
; l
!= NULL
; l
= l
->header
.next
)
1280 lang_input_section_type
*ls
;
1282 if (l
->header
.type
!= lang_input_section_enum
)
1284 ls
= &l
->input_section
;
1286 /* Sorting by filename takes precedence over sorting by section
1289 if (wild
->filenames_sorted
)
1291 const char *fn
, *ln
;
1295 /* The PE support for the .idata section as generated by
1296 dlltool assumes that files will be sorted by the name of
1297 the archive and then the name of the file within the
1300 if (file
->the_bfd
!= NULL
1301 && bfd_my_archive (file
->the_bfd
) != NULL
)
1303 fn
= bfd_get_filename (bfd_my_archive (file
->the_bfd
));
1308 fn
= file
->filename
;
1312 if (ls
->ifile
->the_bfd
!= NULL
1313 && bfd_my_archive (ls
->ifile
->the_bfd
) != NULL
)
1315 ln
= bfd_get_filename (bfd_my_archive (ls
->ifile
->the_bfd
));
1320 ln
= ls
->ifile
->filename
;
1324 i
= strcmp (fn
, ln
);
1333 fn
= file
->filename
;
1335 ln
= ls
->ifile
->filename
;
1337 i
= strcmp (fn
, ln
);
1345 /* Here either the files are not sorted by name, or we are
1346 looking at the sections for this file. */
1348 if (sec
!= NULL
&& sec
->spec
.sorted
)
1350 if (strcmp (section_name
,
1351 bfd_get_section_name (ls
->ifile
->the_bfd
,
1361 /* Expand a wild statement for a particular FILE. SECTION may be
1362 NULL, in which case it is a wild card. */
1365 output_section_callback (ptr
, sec
, section
, file
, output
)
1366 lang_wild_statement_type
*ptr
;
1367 struct wildcard_list
*sec
;
1369 lang_input_statement_type
*file
;
1372 lang_statement_union_type
*before
;
1374 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1375 if (unique_section_p (bfd_get_section_name (file
->the_bfd
, section
)))
1378 /* If the wild pattern was marked KEEP, the member sections
1379 should be as well. */
1380 if (ptr
->keep_sections
)
1381 section
->flags
|= SEC_KEEP
;
1383 before
= wild_sort (ptr
, sec
, file
, section
);
1385 /* Here BEFORE points to the lang_input_section which
1386 should follow the one we are about to add. If BEFORE
1387 is NULL, then the section should just go at the end
1388 of the current list. */
1391 lang_add_section (&ptr
->children
, section
,
1392 (lang_output_section_statement_type
*) output
,
1396 lang_statement_list_type list
;
1397 lang_statement_union_type
**pp
;
1399 lang_list_init (&list
);
1400 lang_add_section (&list
, section
,
1401 (lang_output_section_statement_type
*) output
,
1404 /* If we are discarding the section, LIST.HEAD will
1406 if (list
.head
!= NULL
)
1408 ASSERT (list
.head
->header
.next
== NULL
);
1410 for (pp
= &ptr
->children
.head
;
1412 pp
= &(*pp
)->header
.next
)
1413 ASSERT (*pp
!= NULL
);
1415 list
.head
->header
.next
= *pp
;
1421 /* This is passed a file name which must have been seen already and
1422 added to the statement tree. We will see if it has been opened
1423 already and had its symbols read. If not then we'll read it. */
1425 static lang_input_statement_type
*
1429 lang_input_statement_type
*search
;
1431 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
1432 search
!= (lang_input_statement_type
*) NULL
;
1433 search
= (lang_input_statement_type
*) search
->next_real_file
)
1435 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
1437 if (search
->filename
!= (char *) NULL
1438 && name
!= (char *) NULL
1439 && strcmp (search
->filename
, name
) == 0)
1443 if (search
== (lang_input_statement_type
*) NULL
)
1444 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
1447 /* If we have already added this file, or this file is not real
1448 (FIXME: can that ever actually happen?) or the name is NULL
1449 (FIXME: can that ever actually happen?) don't add this file. */
1452 || search
->filename
== (const char *) NULL
)
1455 if (! load_symbols (search
, (lang_statement_list_type
*) NULL
))
1461 /* Get the symbols for an input file. */
1464 load_symbols (entry
, place
)
1465 lang_input_statement_type
*entry
;
1466 lang_statement_list_type
*place
;
1473 ldfile_open_file (entry
);
1475 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
1476 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
1479 lang_statement_list_type
*hold
;
1480 boolean bad_load
= true;
1482 err
= bfd_get_error ();
1484 /* See if the emulation has some special knowledge. */
1485 if (ldemul_unrecognized_file (entry
))
1488 if (err
== bfd_error_file_ambiguously_recognized
)
1492 einfo (_("%B: file not recognized: %E\n"), entry
->the_bfd
);
1493 einfo (_("%B: matching formats:"), entry
->the_bfd
);
1494 for (p
= matching
; *p
!= NULL
; p
++)
1498 else if (err
!= bfd_error_file_not_recognized
1500 einfo (_("%F%B: file not recognized: %E\n"), entry
->the_bfd
);
1504 bfd_close (entry
->the_bfd
);
1505 entry
->the_bfd
= NULL
;
1507 /* Try to interpret the file as a linker script. */
1508 ldfile_open_command_file (entry
->filename
);
1513 ldfile_assumed_script
= true;
1514 parser_input
= input_script
;
1516 ldfile_assumed_script
= false;
1523 if (ldemul_recognized_file (entry
))
1526 /* We don't call ldlang_add_file for an archive. Instead, the
1527 add_symbols entry point will call ldlang_add_file, via the
1528 add_archive_element callback, for each element of the archive
1530 switch (bfd_get_format (entry
->the_bfd
))
1536 ldlang_add_file (entry
);
1537 if (trace_files
|| trace_file_tries
)
1538 info_msg ("%I\n", entry
);
1542 if (entry
->whole_archive
)
1545 boolean loaded
= true;
1549 member
= bfd_openr_next_archived_file (entry
->the_bfd
, member
);
1554 if (! bfd_check_format (member
, bfd_object
))
1556 einfo (_("%F%B: member %B in archive is not an object\n"),
1557 entry
->the_bfd
, member
);
1561 if (! ((*link_info
.callbacks
->add_archive_element
)
1562 (&link_info
, member
, "--whole-archive")))
1565 if (! bfd_link_add_symbols (member
, &link_info
))
1567 einfo (_("%F%B: could not read symbols: %E\n"), member
);
1572 entry
->loaded
= loaded
;
1578 if (bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
1579 entry
->loaded
= true;
1581 einfo (_("%F%B: could not read symbols: %E\n"), entry
->the_bfd
);
1583 return entry
->loaded
;
1586 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1587 may be NULL, indicating that it is a wildcard. Separate
1588 lang_input_section statements are created for each part of the
1589 expansion; they are added after the wild statement S. OUTPUT is
1590 the output section. */
1593 wild (s
, target
, output
)
1594 lang_wild_statement_type
*s
;
1595 const char *target ATTRIBUTE_UNUSED
;
1596 lang_output_section_statement_type
*output
;
1598 struct wildcard_list
*sec
;
1600 walk_wild (s
, output_section_callback
, (PTR
) output
);
1602 for (sec
= s
->section_list
; sec
!= NULL
; sec
= sec
->next
)
1604 if (default_common_section
!= NULL
)
1606 if (sec
->spec
.name
!= NULL
&& strcmp (sec
->spec
.name
, "COMMON") == 0)
1608 /* Remember the section that common is going to in case we
1609 later get something which doesn't know where to put it. */
1610 default_common_section
= output
;
1615 /* Return true iff target is the sought target. */
1618 get_target (target
, data
)
1619 const bfd_target
*target
;
1622 const char *sought
= (const char *) data
;
1624 return strcmp (target
->name
, sought
) == 0;
1627 /* Like strcpy() but convert to lower case as well. */
1636 while ((c
= *src
++) != 0)
1637 *dest
++ = TOLOWER (c
);
1642 /* Remove the first occurance of needle (if any) in haystack
1646 strcut (haystack
, needle
)
1650 haystack
= strstr (haystack
, needle
);
1656 for (src
= haystack
+ strlen (needle
); *src
;)
1657 *haystack
++ = *src
++;
1663 /* Compare two target format name strings.
1664 Return a value indicating how "similar" they are. */
1667 name_compare (first
, second
)
1675 copy1
= xmalloc (strlen (first
) + 1);
1676 copy2
= xmalloc (strlen (second
) + 1);
1678 /* Convert the names to lower case. */
1679 stricpy (copy1
, first
);
1680 stricpy (copy2
, second
);
1682 /* Remove and endian strings from the name. */
1683 strcut (copy1
, "big");
1684 strcut (copy1
, "little");
1685 strcut (copy2
, "big");
1686 strcut (copy2
, "little");
1688 /* Return a value based on how many characters match,
1689 starting from the beginning. If both strings are
1690 the same then return 10 * their length. */
1691 for (result
= 0; copy1
[result
] == copy2
[result
]; result
++)
1692 if (copy1
[result
] == 0)
1704 /* Set by closest_target_match() below. */
1705 static const bfd_target
*winner
;
1707 /* Scan all the valid bfd targets looking for one that has the endianness
1708 requirement that was specified on the command line, and is the nearest
1709 match to the original output target. */
1712 closest_target_match (target
, data
)
1713 const bfd_target
*target
;
1716 const bfd_target
*original
= (const bfd_target
*) data
;
1718 if (command_line
.endian
== ENDIAN_BIG
1719 && target
->byteorder
!= BFD_ENDIAN_BIG
)
1722 if (command_line
.endian
== ENDIAN_LITTLE
1723 && target
->byteorder
!= BFD_ENDIAN_LITTLE
)
1726 /* Must be the same flavour. */
1727 if (target
->flavour
!= original
->flavour
)
1730 /* If we have not found a potential winner yet, then record this one. */
1737 /* Oh dear, we now have two potential candidates for a successful match.
1738 Compare their names and choose the better one. */
1739 if (name_compare (target
->name
, original
->name
)
1740 > name_compare (winner
->name
, original
->name
))
1743 /* Keep on searching until wqe have checked them all. */
1747 /* Return the BFD target format of the first input file. */
1750 get_first_input_target ()
1752 char *target
= NULL
;
1754 LANG_FOR_EACH_INPUT_STATEMENT (s
)
1756 if (s
->header
.type
== lang_input_statement_enum
1759 ldfile_open_file (s
);
1761 if (s
->the_bfd
!= NULL
1762 && bfd_check_format (s
->the_bfd
, bfd_object
))
1764 target
= bfd_get_target (s
->the_bfd
);
1775 /* Open the output file. */
1783 /* Has the user told us which output format to use? */
1784 if (output_target
== (char *) NULL
)
1786 /* No - has the current target been set to something other than
1788 if (current_target
!= default_target
)
1789 output_target
= current_target
;
1791 /* No - can we determine the format of the first input file? */
1794 output_target
= get_first_input_target ();
1796 /* Failed - use the default output target. */
1797 if (output_target
== NULL
)
1798 output_target
= default_target
;
1802 /* Has the user requested a particular endianness on the command
1804 if (command_line
.endian
!= ENDIAN_UNSET
)
1806 const bfd_target
*target
;
1807 enum bfd_endian desired_endian
;
1809 /* Get the chosen target. */
1810 target
= bfd_search_for_target (get_target
, (PTR
) output_target
);
1812 /* If the target is not supported, we cannot do anything. */
1815 if (command_line
.endian
== ENDIAN_BIG
)
1816 desired_endian
= BFD_ENDIAN_BIG
;
1818 desired_endian
= BFD_ENDIAN_LITTLE
;
1820 /* See if the target has the wrong endianness. This should
1821 not happen if the linker script has provided big and
1822 little endian alternatives, but some scrips don't do
1824 if (target
->byteorder
!= desired_endian
)
1826 /* If it does, then see if the target provides
1827 an alternative with the correct endianness. */
1828 if (target
->alternative_target
!= NULL
1829 && (target
->alternative_target
->byteorder
== desired_endian
))
1830 output_target
= target
->alternative_target
->name
;
1833 /* Try to find a target as similar as possible to
1834 the default target, but which has the desired
1835 endian characteristic. */
1836 (void) bfd_search_for_target (closest_target_match
,
1839 /* Oh dear - we could not find any targets that
1840 satisfy our requirements. */
1842 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1844 output_target
= winner
->name
;
1850 output
= bfd_openw (name
, output_target
);
1852 if (output
== (bfd
*) NULL
)
1854 if (bfd_get_error () == bfd_error_invalid_target
)
1855 einfo (_("%P%F: target %s not found\n"), output_target
);
1857 einfo (_("%P%F: cannot open output file %s: %E\n"), name
);
1860 delete_output_file_on_failure
= true;
1863 output
->flags
|= D_PAGED
;
1866 if (! bfd_set_format (output
, bfd_object
))
1867 einfo (_("%P%F:%s: can not make object file: %E\n"), name
);
1868 if (! bfd_set_arch_mach (output
,
1869 ldfile_output_architecture
,
1870 ldfile_output_machine
))
1871 einfo (_("%P%F:%s: can not set architecture: %E\n"), name
);
1873 link_info
.hash
= bfd_link_hash_table_create (output
);
1874 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
1875 einfo (_("%P%F: can not create link hash table: %E\n"));
1877 bfd_set_gp_size (output
, g_switch_value
);
1882 ldlang_open_output (statement
)
1883 lang_statement_union_type
*statement
;
1885 switch (statement
->header
.type
)
1887 case lang_output_statement_enum
:
1888 ASSERT (output_bfd
== (bfd
*) NULL
);
1889 output_bfd
= open_output (statement
->output_statement
.name
);
1890 ldemul_set_output_arch ();
1891 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
1892 output_bfd
->flags
|= D_PAGED
;
1894 output_bfd
->flags
&= ~D_PAGED
;
1895 if (config
.text_read_only
)
1896 output_bfd
->flags
|= WP_TEXT
;
1898 output_bfd
->flags
&= ~WP_TEXT
;
1899 if (link_info
.traditional_format
)
1900 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
1902 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
1905 case lang_target_statement_enum
:
1906 current_target
= statement
->target_statement
.target
;
1913 /* Open all the input files. */
1916 open_input_bfds (s
, force
)
1917 lang_statement_union_type
*s
;
1920 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
1922 switch (s
->header
.type
)
1924 case lang_constructors_statement_enum
:
1925 open_input_bfds (constructor_list
.head
, force
);
1927 case lang_output_section_statement_enum
:
1928 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
1930 case lang_wild_statement_enum
:
1931 /* Maybe we should load the file's symbols. */
1932 if (s
->wild_statement
.filename
1933 && ! wildcardp (s
->wild_statement
.filename
))
1934 (void) lookup_name (s
->wild_statement
.filename
);
1935 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1937 case lang_group_statement_enum
:
1939 struct bfd_link_hash_entry
*undefs
;
1941 /* We must continually search the entries in the group
1942 until no new symbols are added to the list of undefined
1947 undefs
= link_info
.hash
->undefs_tail
;
1948 open_input_bfds (s
->group_statement
.children
.head
, true);
1950 while (undefs
!= link_info
.hash
->undefs_tail
);
1953 case lang_target_statement_enum
:
1954 current_target
= s
->target_statement
.target
;
1956 case lang_input_statement_enum
:
1957 if (s
->input_statement
.real
)
1959 lang_statement_list_type add
;
1961 s
->input_statement
.target
= current_target
;
1963 /* If we are being called from within a group, and this
1964 is an archive which has already been searched, then
1965 force it to be researched unless the whole archive
1966 has been loaded already. */
1968 && !s
->input_statement
.whole_archive
1969 && s
->input_statement
.loaded
1970 && bfd_check_format (s
->input_statement
.the_bfd
,
1972 s
->input_statement
.loaded
= false;
1974 lang_list_init (&add
);
1976 if (! load_symbols (&s
->input_statement
, &add
))
1977 config
.make_executable
= false;
1979 if (add
.head
!= NULL
)
1981 *add
.tail
= s
->header
.next
;
1982 s
->header
.next
= add
.head
;
1992 /* If there are [COMMONS] statements, put a wild one into the bss
1996 lang_reasonable_defaults ()
1999 lang_output_section_statement_lookup (".text");
2000 lang_output_section_statement_lookup (".data");
2002 default_common_section
= lang_output_section_statement_lookup (".bss");
2004 if (placed_commons
== false)
2006 lang_wild_statement_type
*new =
2007 new_stat (lang_wild_statement
,
2008 &default_common_section
->children
);
2010 new->section_name
= "COMMON";
2011 new->filename
= (char *) NULL
;
2012 lang_list_init (&new->children
);
2017 /* Add the supplied name to the symbol table as an undefined reference.
2018 This is a two step process as the symbol table doesn't even exist at
2019 the time the ld command line is processed. First we put the name
2020 on a list, then, once the output file has been opened, transfer the
2021 name to the symbol table. */
2023 typedef struct ldlang_undef_chain_list
2025 struct ldlang_undef_chain_list
*next
;
2027 } ldlang_undef_chain_list_type
;
2029 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
2032 ldlang_add_undef (name
)
2033 const char *const name
;
2035 ldlang_undef_chain_list_type
*new =
2036 ((ldlang_undef_chain_list_type
*)
2037 stat_alloc (sizeof (ldlang_undef_chain_list_type
)));
2039 new->next
= ldlang_undef_chain_list_head
;
2040 ldlang_undef_chain_list_head
= new;
2042 new->name
= xstrdup (name
);
2044 if (output_bfd
!= NULL
)
2045 insert_undefined (new->name
);
2048 /* Insert NAME as undefined in the symbol table. */
2051 insert_undefined (name
)
2054 struct bfd_link_hash_entry
*h
;
2056 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, false, true);
2057 if (h
== (struct bfd_link_hash_entry
*) NULL
)
2058 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2059 if (h
->type
== bfd_link_hash_new
)
2061 h
->type
= bfd_link_hash_undefined
;
2062 h
->u
.undef
.abfd
= NULL
;
2063 bfd_link_add_undef (link_info
.hash
, h
);
2067 /* Run through the list of undefineds created above and place them
2068 into the linker hash table as undefined symbols belonging to the
2072 lang_place_undefineds ()
2074 ldlang_undef_chain_list_type
*ptr
;
2076 for (ptr
= ldlang_undef_chain_list_head
;
2077 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
2080 insert_undefined (ptr
->name
);
2084 /* Open input files and attatch to output sections. */
2087 map_input_to_output_sections (s
, target
, output_section_statement
)
2088 lang_statement_union_type
*s
;
2090 lang_output_section_statement_type
*output_section_statement
;
2092 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
2094 switch (s
->header
.type
)
2096 case lang_wild_statement_enum
:
2097 wild (&s
->wild_statement
, target
, output_section_statement
);
2099 case lang_constructors_statement_enum
:
2100 map_input_to_output_sections (constructor_list
.head
,
2102 output_section_statement
);
2104 case lang_output_section_statement_enum
:
2105 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
2107 &s
->output_section_statement
);
2109 case lang_output_statement_enum
:
2111 case lang_target_statement_enum
:
2112 target
= s
->target_statement
.target
;
2114 case lang_group_statement_enum
:
2115 map_input_to_output_sections (s
->group_statement
.children
.head
,
2117 output_section_statement
);
2119 case lang_fill_statement_enum
:
2120 case lang_input_section_enum
:
2121 case lang_object_symbols_statement_enum
:
2122 case lang_data_statement_enum
:
2123 case lang_reloc_statement_enum
:
2124 case lang_padding_statement_enum
:
2125 case lang_input_statement_enum
:
2126 if (output_section_statement
!= NULL
2127 && output_section_statement
->bfd_section
== NULL
)
2128 init_os (output_section_statement
);
2130 case lang_assignment_statement_enum
:
2131 if (output_section_statement
!= NULL
2132 && output_section_statement
->bfd_section
== NULL
)
2133 init_os (output_section_statement
);
2135 /* Make sure that any sections mentioned in the assignment
2137 exp_init_os (s
->assignment_statement
.exp
);
2139 case lang_afile_asection_pair_statement_enum
:
2142 case lang_address_statement_enum
:
2143 /* Mark the specified section with the supplied address. */
2145 lang_output_section_statement_type
*os
=
2146 lang_output_section_statement_lookup
2147 (s
->address_statement
.section_name
);
2149 if (os
->bfd_section
== NULL
)
2151 os
->addr_tree
= s
->address_statement
.address
;
2159 print_output_section_statement (output_section_statement
)
2160 lang_output_section_statement_type
*output_section_statement
;
2162 asection
*section
= output_section_statement
->bfd_section
;
2165 if (output_section_statement
!= abs_output_section
)
2167 minfo ("\n%s", output_section_statement
->name
);
2169 if (section
!= NULL
)
2171 print_dot
= section
->vma
;
2173 len
= strlen (output_section_statement
->name
);
2174 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2179 while (len
< SECTION_NAME_MAP_LENGTH
)
2185 minfo ("0x%V %W", section
->vma
, section
->_raw_size
);
2187 if (output_section_statement
->load_base
!= NULL
)
2191 addr
= exp_get_abs_int (output_section_statement
->load_base
, 0,
2192 "load base", lang_final_phase_enum
);
2193 minfo (_(" load address 0x%V"), addr
);
2200 print_statement_list (output_section_statement
->children
.head
,
2201 output_section_statement
);
2205 print_assignment (assignment
, output_section
)
2206 lang_assignment_statement_type
*assignment
;
2207 lang_output_section_statement_type
*output_section
;
2210 etree_value_type result
;
2212 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2215 result
= exp_fold_tree (assignment
->exp
->assign
.src
, output_section
,
2216 lang_final_phase_enum
, print_dot
, &print_dot
);
2222 value
= result
.value
+ result
.section
->bfd_section
->vma
;
2223 dst
= assignment
->exp
->assign
.dst
;
2225 minfo ("0x%V", value
);
2226 if (dst
[0] == '.' && dst
[1] == 0)
2239 exp_print_tree (assignment
->exp
);
2245 print_input_statement (statm
)
2246 lang_input_statement_type
*statm
;
2248 if (statm
->filename
!= (char *) NULL
)
2250 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
2254 /* Print all symbols defined in a particular section. This is called
2255 via bfd_link_hash_traverse. */
2258 print_one_symbol (hash_entry
, ptr
)
2259 struct bfd_link_hash_entry
*hash_entry
;
2262 asection
*sec
= (asection
*) ptr
;
2264 if ((hash_entry
->type
== bfd_link_hash_defined
2265 || hash_entry
->type
== bfd_link_hash_defweak
)
2266 && sec
== hash_entry
->u
.def
.section
)
2270 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2273 (hash_entry
->u
.def
.value
2274 + hash_entry
->u
.def
.section
->output_offset
2275 + hash_entry
->u
.def
.section
->output_section
->vma
));
2277 minfo (" %T\n", hash_entry
->root
.string
);
2283 /* Print information about an input section to the map file. */
2286 print_input_section (in
)
2287 lang_input_section_type
*in
;
2289 asection
*i
= in
->section
;
2290 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
2291 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2292 ldfile_output_machine
);
2297 minfo ("%s", i
->name
);
2299 if (i
->output_section
!= NULL
)
2303 len
= 1 + strlen (i
->name
);
2304 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2309 while (len
< SECTION_NAME_MAP_LENGTH
)
2315 minfo ("0x%V %W %B\n",
2316 i
->output_section
->vma
+ i
->output_offset
, size
/ opb
,
2319 if (i
->_cooked_size
!= 0 && i
->_cooked_size
!= i
->_raw_size
)
2321 len
= SECTION_NAME_MAP_LENGTH
+ 3;
2333 minfo (_("%W (size before relaxing)\n"), i
->_raw_size
);
2336 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
2338 print_dot
= i
->output_section
->vma
+ i
->output_offset
+ size
/ opb
;
2344 print_fill_statement (fill
)
2345 lang_fill_statement_type
*fill
;
2349 fputs (" FILL mask 0x", config
.map_file
);
2350 for (p
= fill
->fill
->data
, size
= fill
->fill
->size
; size
!= 0; p
++, size
--)
2351 fprintf (config
.map_file
, "%02x", *p
);
2352 fputs ("\n", config
.map_file
);
2356 print_data_statement (data
)
2357 lang_data_statement_type
*data
;
2363 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2364 ldfile_output_machine
);
2366 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2369 addr
= data
->output_vma
;
2370 if (data
->output_section
!= NULL
)
2371 addr
+= data
->output_section
->vma
;
2399 minfo ("0x%V %W %s 0x%v", addr
, size
, name
, data
->value
);
2401 if (data
->exp
->type
.node_class
!= etree_value
)
2404 exp_print_tree (data
->exp
);
2409 print_dot
= addr
+ size
/ opb
;
2413 /* Print an address statement. These are generated by options like
2417 print_address_statement (address
)
2418 lang_address_statement_type
*address
;
2420 minfo (_("Address of section %s set to "), address
->section_name
);
2421 exp_print_tree (address
->address
);
2425 /* Print a reloc statement. */
2428 print_reloc_statement (reloc
)
2429 lang_reloc_statement_type
*reloc
;
2434 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2435 ldfile_output_machine
);
2437 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2440 addr
= reloc
->output_vma
;
2441 if (reloc
->output_section
!= NULL
)
2442 addr
+= reloc
->output_section
->vma
;
2444 size
= bfd_get_reloc_size (reloc
->howto
);
2446 minfo ("0x%V %W RELOC %s ", addr
, size
, reloc
->howto
->name
);
2448 if (reloc
->name
!= NULL
)
2449 minfo ("%s+", reloc
->name
);
2451 minfo ("%s+", reloc
->section
->name
);
2453 exp_print_tree (reloc
->addend_exp
);
2457 print_dot
= addr
+ size
/ opb
;
2461 print_padding_statement (s
)
2462 lang_padding_statement_type
*s
;
2466 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2467 ldfile_output_machine
);
2471 len
= sizeof " *fill*" - 1;
2472 while (len
< SECTION_NAME_MAP_LENGTH
)
2478 addr
= s
->output_offset
;
2479 if (s
->output_section
!= NULL
)
2480 addr
+= s
->output_section
->vma
;
2481 minfo ("0x%V %W ", addr
, s
->size
);
2483 if (s
->fill
->size
!= 0)
2487 for (p
= s
->fill
->data
, size
= s
->fill
->size
; size
!= 0; p
++, size
--)
2488 fprintf (config
.map_file
, "%02x", *p
);
2493 print_dot
= addr
+ s
->size
/ opb
;
2497 print_wild_statement (w
, os
)
2498 lang_wild_statement_type
*w
;
2499 lang_output_section_statement_type
*os
;
2501 struct wildcard_list
*sec
;
2505 if (w
->filenames_sorted
)
2507 if (w
->filename
!= NULL
)
2508 minfo ("%s", w
->filename
);
2511 if (w
->filenames_sorted
)
2515 for (sec
= w
->section_list
; sec
; sec
= sec
->next
)
2517 if (sec
->spec
.sorted
)
2519 if (sec
->spec
.exclude_name_list
!= NULL
)
2522 minfo ("EXCLUDE_FILE ( %s", sec
->spec
.exclude_name_list
->name
);
2523 for (tmp
= sec
->spec
.exclude_name_list
->next
; tmp
; tmp
= tmp
->next
)
2524 minfo (", %s", tmp
->name
);
2527 if (sec
->spec
.name
!= NULL
)
2528 minfo ("%s", sec
->spec
.name
);
2531 if (sec
->spec
.sorted
)
2538 print_statement_list (w
->children
.head
, os
);
2541 /* Print a group statement. */
2545 lang_group_statement_type
*s
;
2546 lang_output_section_statement_type
*os
;
2548 fprintf (config
.map_file
, "START GROUP\n");
2549 print_statement_list (s
->children
.head
, os
);
2550 fprintf (config
.map_file
, "END GROUP\n");
2553 /* Print the list of statements in S.
2554 This can be called for any statement type. */
2557 print_statement_list (s
, os
)
2558 lang_statement_union_type
*s
;
2559 lang_output_section_statement_type
*os
;
2563 print_statement (s
, os
);
2568 /* Print the first statement in statement list S.
2569 This can be called for any statement type. */
2572 print_statement (s
, os
)
2573 lang_statement_union_type
*s
;
2574 lang_output_section_statement_type
*os
;
2576 switch (s
->header
.type
)
2579 fprintf (config
.map_file
, _("Fail with %d\n"), s
->header
.type
);
2582 case lang_constructors_statement_enum
:
2583 if (constructor_list
.head
!= NULL
)
2585 if (constructors_sorted
)
2586 minfo (" SORT (CONSTRUCTORS)\n");
2588 minfo (" CONSTRUCTORS\n");
2589 print_statement_list (constructor_list
.head
, os
);
2592 case lang_wild_statement_enum
:
2593 print_wild_statement (&s
->wild_statement
, os
);
2595 case lang_address_statement_enum
:
2596 print_address_statement (&s
->address_statement
);
2598 case lang_object_symbols_statement_enum
:
2599 minfo (" CREATE_OBJECT_SYMBOLS\n");
2601 case lang_fill_statement_enum
:
2602 print_fill_statement (&s
->fill_statement
);
2604 case lang_data_statement_enum
:
2605 print_data_statement (&s
->data_statement
);
2607 case lang_reloc_statement_enum
:
2608 print_reloc_statement (&s
->reloc_statement
);
2610 case lang_input_section_enum
:
2611 print_input_section (&s
->input_section
);
2613 case lang_padding_statement_enum
:
2614 print_padding_statement (&s
->padding_statement
);
2616 case lang_output_section_statement_enum
:
2617 print_output_section_statement (&s
->output_section_statement
);
2619 case lang_assignment_statement_enum
:
2620 print_assignment (&s
->assignment_statement
, os
);
2622 case lang_target_statement_enum
:
2623 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
2625 case lang_output_statement_enum
:
2626 minfo ("OUTPUT(%s", s
->output_statement
.name
);
2627 if (output_target
!= NULL
)
2628 minfo (" %s", output_target
);
2631 case lang_input_statement_enum
:
2632 print_input_statement (&s
->input_statement
);
2634 case lang_group_statement_enum
:
2635 print_group (&s
->group_statement
, os
);
2637 case lang_afile_asection_pair_statement_enum
:
2646 print_statement_list (statement_list
.head
, abs_output_section
);
2649 /* Print the first N statements in statement list S to STDERR.
2650 If N == 0, nothing is printed.
2651 If N < 0, the entire list is printed.
2652 Intended to be called from GDB. */
2655 dprint_statement (s
, n
)
2656 lang_statement_union_type
*s
;
2659 FILE *map_save
= config
.map_file
;
2661 config
.map_file
= stderr
;
2664 print_statement_list (s
, abs_output_section
);
2667 while (s
&& --n
>= 0)
2669 print_statement (s
, abs_output_section
);
2674 config
.map_file
= map_save
;
2678 insert_pad (ptr
, fill
, alignment_needed
, output_section
, dot
)
2679 lang_statement_union_type
**ptr
;
2681 unsigned int alignment_needed
;
2682 asection
*output_section
;
2685 static fill_type zero_fill
= { 1, { 0 } };
2686 lang_statement_union_type
*pad
;
2688 pad
= ((lang_statement_union_type
*)
2689 ((char *) ptr
- offsetof (lang_statement_union_type
, header
.next
)));
2690 if (ptr
!= &statement_list
.head
2691 && pad
->header
.type
== lang_padding_statement_enum
2692 && pad
->padding_statement
.output_section
== output_section
)
2694 /* Use the existing pad statement. The above test on output
2695 section is probably redundant, but it doesn't hurt to check. */
2699 /* Make a new padding statement, linked into existing chain. */
2700 pad
= ((lang_statement_union_type
*)
2701 stat_alloc (sizeof (lang_padding_statement_type
)));
2702 pad
->header
.next
= *ptr
;
2704 pad
->header
.type
= lang_padding_statement_enum
;
2705 pad
->padding_statement
.output_section
= output_section
;
2706 if (fill
== (fill_type
*) 0)
2708 pad
->padding_statement
.fill
= fill
;
2710 pad
->padding_statement
.output_offset
= dot
- output_section
->vma
;
2711 pad
->padding_statement
.size
= alignment_needed
;
2712 output_section
->_raw_size
+= alignment_needed
;
2715 /* Work out how much this section will move the dot point. */
2718 size_input_section (this_ptr
, output_section_statement
, fill
, dot
)
2719 lang_statement_union_type
**this_ptr
;
2720 lang_output_section_statement_type
*output_section_statement
;
2724 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
2725 asection
*i
= is
->section
;
2727 if (is
->ifile
->just_syms_flag
== false)
2729 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2730 ldfile_output_machine
);
2731 unsigned int alignment_needed
;
2734 /* Align this section first to the input sections requirement,
2735 then to the output section's requirement. If this alignment
2736 is greater than any seen before, then record it too. Perform
2737 the alignment by inserting a magic 'padding' statement. */
2739 if (output_section_statement
->subsection_alignment
!= -1)
2740 i
->alignment_power
= output_section_statement
->subsection_alignment
;
2742 o
= output_section_statement
->bfd_section
;
2743 if (o
->alignment_power
< i
->alignment_power
)
2744 o
->alignment_power
= i
->alignment_power
;
2746 alignment_needed
= align_power (dot
, i
->alignment_power
) - dot
;
2748 if (alignment_needed
!= 0)
2750 insert_pad (this_ptr
, fill
, alignment_needed
* opb
, o
, dot
);
2751 dot
+= alignment_needed
;
2754 /* Remember where in the output section this input section goes. */
2756 i
->output_offset
= dot
- o
->vma
;
2758 /* Mark how big the output section must be to contain this now. */
2759 if (i
->_cooked_size
!= 0)
2760 dot
+= i
->_cooked_size
/ opb
;
2762 dot
+= i
->_raw_size
/ opb
;
2763 o
->_raw_size
= (dot
- o
->vma
) * opb
;
2767 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
2773 #define IGNORE_SECTION(bfd, s) \
2774 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2775 != (SEC_ALLOC | SEC_LOAD)) \
2776 || bfd_section_size (bfd, s) == 0)
2778 /* Check to see if any allocated sections overlap with other allocated
2779 sections. This can happen when the linker script specifically specifies
2780 the output section addresses of the two sections. */
2783 lang_check_section_addresses ()
2786 unsigned opb
= bfd_octets_per_byte (output_bfd
);
2788 /* Scan all sections in the output list. */
2789 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2793 /* Ignore sections which are not loaded or which have no contents. */
2794 if (IGNORE_SECTION (output_bfd
, s
))
2797 /* Once we reach section 's' stop our seach. This prevents two
2798 warning messages from being produced, one for 'section A overlaps
2799 section B' and one for 'section B overlaps section A'. */
2800 for (os
= output_bfd
->sections
; os
!= s
; os
= os
->next
)
2807 /* Only consider loadable sections with real contents. */
2808 if (IGNORE_SECTION (output_bfd
, os
))
2811 /* We must check the sections' LMA addresses not their
2812 VMA addresses because overlay sections can have
2813 overlapping VMAs but they must have distinct LMAs. */
2814 s_start
= bfd_section_lma (output_bfd
, s
);
2815 os_start
= bfd_section_lma (output_bfd
, os
);
2816 s_end
= s_start
+ bfd_section_size (output_bfd
, s
) / opb
- 1;
2817 os_end
= os_start
+ bfd_section_size (output_bfd
, os
) / opb
- 1;
2819 /* Look for an overlap. */
2820 if ((s_end
< os_start
) || (s_start
> os_end
))
2824 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2825 s
->name
, s_start
, s_end
, os
->name
, os_start
, os_end
);
2827 /* Once we have found one overlap for this section,
2828 stop looking for others. */
2834 /* Make sure the new address is within the region. We explicitly permit the
2835 current address to be at the exact end of the region when the address is
2836 non-zero, in case the region is at the end of addressable memory and the
2837 calculation wraps around. */
2840 os_region_check (os
, region
, tree
, base
)
2841 lang_output_section_statement_type
*os
;
2842 struct memory_region_struct
*region
;
2846 if ((region
->current
< region
->origin
2847 || (region
->current
- region
->origin
> region
->length
))
2848 && ((region
->current
!= region
->origin
+ region
->length
)
2851 if (tree
!= (etree_type
*) NULL
)
2853 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2855 os
->bfd_section
->owner
,
2856 os
->bfd_section
->name
,
2861 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2863 os
->bfd_section
->owner
,
2864 os
->bfd_section
->name
);
2866 /* Reset the region pointer. */
2867 region
->current
= region
->origin
;
2871 /* Set the sizes for all the output sections. */
2874 lang_size_sections_1 (s
, output_section_statement
, prev
, fill
, dot
, relax
)
2875 lang_statement_union_type
*s
;
2876 lang_output_section_statement_type
*output_section_statement
;
2877 lang_statement_union_type
**prev
;
2882 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2883 ldfile_output_machine
);
2885 /* Size up the sections from their constituent parts. */
2886 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
2888 switch (s
->header
.type
)
2890 case lang_output_section_statement_enum
:
2893 lang_output_section_statement_type
*os
;
2895 os
= &s
->output_section_statement
;
2896 if (os
->bfd_section
== NULL
)
2897 /* This section was never actually created. */
2900 /* If this is a COFF shared library section, use the size and
2901 address from the input section. FIXME: This is COFF
2902 specific; it would be cleaner if there were some other way
2903 to do this, but nothing simple comes to mind. */
2904 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
2908 if (os
->children
.head
== NULL
2909 || os
->children
.head
->header
.next
!= NULL
2910 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
2911 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2914 input
= os
->children
.head
->input_section
.section
;
2915 bfd_set_section_vma (os
->bfd_section
->owner
,
2917 bfd_section_vma (input
->owner
, input
));
2918 os
->bfd_section
->_raw_size
= input
->_raw_size
;
2922 if (bfd_is_abs_section (os
->bfd_section
))
2924 /* No matter what happens, an abs section starts at zero. */
2925 ASSERT (os
->bfd_section
->vma
== 0);
2929 if (os
->addr_tree
== (etree_type
*) NULL
)
2931 /* No address specified for this section, get one
2932 from the region specification. */
2933 if (os
->region
== (lang_memory_region_type
*) NULL
2934 || (((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2935 & (SEC_ALLOC
| SEC_LOAD
)) != 0)
2936 && os
->region
->name
[0] == '*'
2937 && strcmp (os
->region
->name
, "*default*") == 0))
2939 os
->region
= lang_memory_default (os
->bfd_section
);
2942 /* If a loadable section is using the default memory
2943 region, and some non default memory regions were
2944 defined, issue a warning. */
2945 if ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2946 & (SEC_ALLOC
| SEC_LOAD
)) != 0
2947 && (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2948 & SEC_NEVER_LOAD
) == 0
2949 && ! link_info
.relocateable
2950 && strcmp (os
->region
->name
, "*default*") == 0
2951 && lang_memory_region_list
!= NULL
2952 && (strcmp (lang_memory_region_list
->name
,
2954 || lang_memory_region_list
->next
!= NULL
))
2955 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2956 bfd_get_section_name (output_bfd
,
2959 dot
= os
->region
->current
;
2961 if (os
->section_alignment
== -1)
2966 dot
= align_power (dot
,
2967 os
->bfd_section
->alignment_power
);
2969 if (dot
!= olddot
&& config
.warn_section_align
)
2970 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2971 os
->name
, (unsigned int) (dot
- olddot
));
2978 r
= exp_fold_tree (os
->addr_tree
,
2980 lang_allocating_phase_enum
,
2982 if (r
.valid_p
== false)
2984 einfo (_("%F%S: non constant address expression for section %s\n"),
2987 dot
= r
.value
+ r
.section
->bfd_section
->vma
;
2990 /* The section starts here.
2991 First, align to what the section needs. */
2993 if (os
->section_alignment
!= -1)
2994 dot
= align_power (dot
, os
->section_alignment
);
2996 bfd_set_section_vma (0, os
->bfd_section
, dot
);
2998 os
->bfd_section
->output_offset
= 0;
3001 lang_size_sections_1 (os
->children
.head
, os
, &os
->children
.head
,
3002 os
->fill
, dot
, relax
);
3004 /* Put the section within the requested block size, or
3005 align at the block boundary. */
3006 after
= ALIGN_N (os
->bfd_section
->vma
3007 + os
->bfd_section
->_raw_size
/ opb
,
3008 /* The coercion here is important, see ld.h. */
3009 (bfd_vma
) os
->block_value
);
3011 if (bfd_is_abs_section (os
->bfd_section
))
3012 ASSERT (after
== os
->bfd_section
->vma
);
3014 os
->bfd_section
->_raw_size
=
3015 (after
- os
->bfd_section
->vma
) * opb
;
3017 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3018 os
->processed
= true;
3020 if (os
->update_dot_tree
!= 0)
3021 exp_fold_tree (os
->update_dot_tree
, abs_output_section
,
3022 lang_allocating_phase_enum
, dot
, &dot
);
3024 /* Update dot in the region ?
3025 We only do this if the section is going to be allocated,
3026 since unallocated sections do not contribute to the region's
3027 overall size in memory.
3029 If the SEC_NEVER_LOAD bit is not set, it will affect the
3030 addresses of sections after it. We have to update
3032 if (os
->region
!= (lang_memory_region_type
*) NULL
3033 && ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
3034 & SEC_NEVER_LOAD
) == 0
3035 || (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
3036 & (SEC_ALLOC
| SEC_LOAD
))))
3038 os
->region
->current
= dot
;
3040 /* Make sure the new address is within the region. */
3041 os_region_check (os
, os
->region
, os
->addr_tree
,
3042 os
->bfd_section
->vma
);
3044 /* If there's no load address specified, use the run
3045 region as the load region. */
3046 if (os
->lma_region
== NULL
&& os
->load_base
== NULL
)
3047 os
->lma_region
= os
->region
;
3049 if (os
->lma_region
!= NULL
)
3051 if (os
->load_base
!= NULL
)
3053 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
3057 /* Don't allocate twice. */
3058 if (os
->lma_region
!= os
->region
)
3060 /* Set load_base, which will be handled later. */
3062 exp_intop (os
->lma_region
->current
);
3063 os
->lma_region
->current
+=
3064 os
->bfd_section
->_raw_size
/ opb
;
3065 os_region_check (os
, os
->lma_region
, NULL
,
3066 os
->bfd_section
->lma
);
3074 case lang_constructors_statement_enum
:
3075 dot
= lang_size_sections_1 (constructor_list
.head
,
3076 output_section_statement
,
3077 &s
->wild_statement
.children
.head
,
3081 case lang_data_statement_enum
:
3083 unsigned int size
= 0;
3085 s
->data_statement
.output_vma
=
3086 dot
- output_section_statement
->bfd_section
->vma
;
3087 s
->data_statement
.output_section
=
3088 output_section_statement
->bfd_section
;
3090 switch (s
->data_statement
.type
)
3111 output_section_statement
->bfd_section
->_raw_size
+= size
;
3112 /* The output section gets contents, and then we inspect for
3113 any flags set in the input script which override any ALLOC. */
3114 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
3115 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
))
3117 output_section_statement
->bfd_section
->flags
|=
3118 SEC_ALLOC
| SEC_LOAD
;
3123 case lang_reloc_statement_enum
:
3127 s
->reloc_statement
.output_vma
=
3128 dot
- output_section_statement
->bfd_section
->vma
;
3129 s
->reloc_statement
.output_section
=
3130 output_section_statement
->bfd_section
;
3131 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
3133 output_section_statement
->bfd_section
->_raw_size
+= size
;
3137 case lang_wild_statement_enum
:
3139 dot
= lang_size_sections_1 (s
->wild_statement
.children
.head
,
3140 output_section_statement
,
3141 &s
->wild_statement
.children
.head
,
3146 case lang_object_symbols_statement_enum
:
3147 link_info
.create_object_symbols_section
=
3148 output_section_statement
->bfd_section
;
3150 case lang_output_statement_enum
:
3151 case lang_target_statement_enum
:
3153 case lang_input_section_enum
:
3157 i
= (*prev
)->input_section
.section
;
3160 if (i
->_cooked_size
== 0)
3161 i
->_cooked_size
= i
->_raw_size
;
3167 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
3168 einfo (_("%P%F: can't relax section: %E\n"));
3172 dot
= size_input_section (prev
, output_section_statement
,
3173 output_section_statement
->fill
, dot
);
3176 case lang_input_statement_enum
:
3178 case lang_fill_statement_enum
:
3179 s
->fill_statement
.output_section
=
3180 output_section_statement
->bfd_section
;
3182 fill
= s
->fill_statement
.fill
;
3184 case lang_assignment_statement_enum
:
3186 bfd_vma newdot
= dot
;
3188 exp_fold_tree (s
->assignment_statement
.exp
,
3189 output_section_statement
,
3190 lang_allocating_phase_enum
,
3196 if (output_section_statement
== abs_output_section
)
3198 /* If we don't have an output section, then just adjust
3199 the default memory address. */
3200 lang_memory_region_lookup ("*default*")->current
= newdot
;
3204 /* Insert a pad after this statement. We can't
3205 put the pad before when relaxing, in case the
3206 assignment references dot. */
3207 insert_pad (&s
->header
.next
, fill
, (newdot
- dot
) * opb
,
3208 output_section_statement
->bfd_section
, dot
);
3210 /* Don't neuter the pad below when relaxing. */
3219 case lang_padding_statement_enum
:
3220 /* If this is the first time lang_size_sections is called,
3221 we won't have any padding statements. If this is the
3222 second or later passes when relaxing, we should allow
3223 padding to shrink. If padding is needed on this pass, it
3224 will be added back in. */
3225 s
->padding_statement
.size
= 0;
3227 /* Make sure output_offset is valid. If relaxation shrinks
3228 the section and this pad isn't needed, it's possible to
3229 have output_offset larger than the final size of the
3230 section. bfd_set_section_contents will complain even for
3231 a pad size of zero. */
3232 s
->padding_statement
.output_offset
3233 = dot
- output_section_statement
->bfd_section
->vma
;
3236 case lang_group_statement_enum
:
3237 dot
= lang_size_sections_1 (s
->group_statement
.children
.head
,
3238 output_section_statement
,
3239 &s
->group_statement
.children
.head
,
3247 /* We can only get here when relaxing is turned on. */
3248 case lang_address_statement_enum
:
3251 prev
= &s
->header
.next
;
3257 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
3258 lang_statement_union_type
*s
;
3259 lang_output_section_statement_type
*output_section_statement
;
3260 lang_statement_union_type
**prev
;
3267 exp_data_seg
.phase
= exp_dataseg_none
;
3268 result
= lang_size_sections_1 (s
, output_section_statement
, prev
, fill
,
3270 if (exp_data_seg
.phase
== exp_dataseg_end_seen
)
3272 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3273 a page could be saved in the data segment. */
3274 bfd_vma first
, last
;
3276 first
= -exp_data_seg
.base
& (exp_data_seg
.pagesize
- 1);
3277 last
= exp_data_seg
.end
& (exp_data_seg
.pagesize
- 1);
3279 && ((exp_data_seg
.base
& ~(exp_data_seg
.pagesize
- 1))
3280 != (exp_data_seg
.end
& ~(exp_data_seg
.pagesize
- 1)))
3281 && first
+ last
<= exp_data_seg
.pagesize
)
3283 exp_data_seg
.phase
= exp_dataseg_adjust
;
3284 result
= lang_size_sections_1 (s
, output_section_statement
, prev
,
3293 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
3294 lang_statement_union_type
*s
;
3295 lang_output_section_statement_type
*output_section_statement
;
3299 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3300 ldfile_output_machine
);
3302 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
3304 switch (s
->header
.type
)
3306 case lang_constructors_statement_enum
:
3307 dot
= lang_do_assignments (constructor_list
.head
,
3308 output_section_statement
,
3313 case lang_output_section_statement_enum
:
3315 lang_output_section_statement_type
*os
;
3317 os
= &(s
->output_section_statement
);
3318 if (os
->bfd_section
!= NULL
)
3320 dot
= os
->bfd_section
->vma
;
3321 (void) lang_do_assignments (os
->children
.head
, os
,
3323 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3328 /* If nothing has been placed into the output section then
3329 it won't have a bfd_section. */
3330 if (os
->bfd_section
)
3332 os
->bfd_section
->lma
3333 = exp_get_abs_int (os
->load_base
, 0, "load base",
3334 lang_final_phase_enum
);
3339 case lang_wild_statement_enum
:
3341 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
3342 output_section_statement
,
3347 case lang_object_symbols_statement_enum
:
3348 case lang_output_statement_enum
:
3349 case lang_target_statement_enum
:
3351 case lang_common_statement_enum
:
3354 case lang_data_statement_enum
:
3356 etree_value_type value
;
3358 value
= exp_fold_tree (s
->data_statement
.exp
,
3360 lang_final_phase_enum
, dot
, &dot
);
3361 s
->data_statement
.value
= value
.value
;
3362 if (value
.valid_p
== false)
3363 einfo (_("%F%P: invalid data statement\n"));
3367 switch (s
->data_statement
.type
)
3391 case lang_reloc_statement_enum
:
3393 etree_value_type value
;
3395 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
3397 lang_final_phase_enum
, dot
, &dot
);
3398 s
->reloc_statement
.addend_value
= value
.value
;
3399 if (value
.valid_p
== false)
3400 einfo (_("%F%P: invalid reloc statement\n"));
3402 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
) / opb
;
3405 case lang_input_section_enum
:
3407 asection
*in
= s
->input_section
.section
;
3409 if (in
->_cooked_size
!= 0)
3410 dot
+= in
->_cooked_size
/ opb
;
3412 dot
+= in
->_raw_size
/ opb
;
3416 case lang_input_statement_enum
:
3418 case lang_fill_statement_enum
:
3419 fill
= s
->fill_statement
.fill
;
3421 case lang_assignment_statement_enum
:
3423 exp_fold_tree (s
->assignment_statement
.exp
,
3424 output_section_statement
,
3425 lang_final_phase_enum
,
3431 case lang_padding_statement_enum
:
3432 dot
+= s
->padding_statement
.size
/ opb
;
3435 case lang_group_statement_enum
:
3436 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
3437 output_section_statement
,
3445 case lang_address_statement_enum
:
3453 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3454 operator .startof. (section_name), it produces an undefined symbol
3455 .startof.section_name. Similarly, when it sees
3456 .sizeof. (section_name), it produces an undefined symbol
3457 .sizeof.section_name. For all the output sections, we look for
3458 such symbols, and set them to the correct value. */
3465 if (link_info
.relocateable
)
3468 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3470 const char *secname
;
3472 struct bfd_link_hash_entry
*h
;
3474 secname
= bfd_get_section_name (output_bfd
, s
);
3475 buf
= xmalloc (10 + strlen (secname
));
3477 sprintf (buf
, ".startof.%s", secname
);
3478 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3479 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3481 h
->type
= bfd_link_hash_defined
;
3482 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
3483 h
->u
.def
.section
= bfd_abs_section_ptr
;
3486 sprintf (buf
, ".sizeof.%s", secname
);
3487 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3488 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3492 opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3493 ldfile_output_machine
);
3494 h
->type
= bfd_link_hash_defined
;
3495 if (s
->_cooked_size
!= 0)
3496 h
->u
.def
.value
= s
->_cooked_size
/ opb
;
3498 h
->u
.def
.value
= s
->_raw_size
/ opb
;
3499 h
->u
.def
.section
= bfd_abs_section_ptr
;
3509 struct bfd_link_hash_entry
*h
;
3512 if (link_info
.relocateable
|| link_info
.shared
)
3517 if (entry_symbol
== (char *) NULL
)
3519 /* No entry has been specified. Look for start, but don't warn
3520 if we don't find it. */
3521 entry_symbol
= "start";
3525 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
3526 if (h
!= (struct bfd_link_hash_entry
*) NULL
3527 && (h
->type
== bfd_link_hash_defined
3528 || h
->type
== bfd_link_hash_defweak
)
3529 && h
->u
.def
.section
->output_section
!= NULL
)
3533 val
= (h
->u
.def
.value
3534 + bfd_get_section_vma (output_bfd
,
3535 h
->u
.def
.section
->output_section
)
3536 + h
->u
.def
.section
->output_offset
);
3537 if (! bfd_set_start_address (output_bfd
, val
))
3538 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol
);
3545 /* We couldn't find the entry symbol. Try parsing it as a
3547 val
= bfd_scan_vma (entry_symbol
, &send
, 0);
3550 if (! bfd_set_start_address (output_bfd
, val
))
3551 einfo (_("%P%F: can't set start address\n"));
3557 /* Can't find the entry symbol, and it's not a number. Use
3558 the first address in the text section. */
3559 ts
= bfd_get_section_by_name (output_bfd
, entry_section
);
3560 if (ts
!= (asection
*) NULL
)
3563 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3564 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
3565 if (! bfd_set_start_address (output_bfd
,
3566 bfd_get_section_vma (output_bfd
,
3568 einfo (_("%P%F: can't set start address\n"));
3573 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3580 /* This is a small function used when we want to ignore errors from
3584 #ifdef ANSI_PROTOTYPES
3585 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED
, ...)
3587 ignore_bfd_errors (s
)
3588 const char *s ATTRIBUTE_UNUSED
;
3591 /* Don't do anything. */
3594 /* Check that the architecture of all the input files is compatible
3595 with the output file. Also call the backend to let it do any
3596 other checking that is needed. */
3601 lang_statement_union_type
*file
;
3603 const bfd_arch_info_type
*compatible
;
3605 for (file
= file_chain
.head
;
3606 file
!= (lang_statement_union_type
*) NULL
;
3607 file
= file
->input_statement
.next
)
3609 input_bfd
= file
->input_statement
.the_bfd
;
3610 compatible
= bfd_arch_get_compatible (input_bfd
, output_bfd
);
3612 /* In general it is not possible to perform a relocatable
3613 link between differing object formats when the input
3614 file has relocations, because the relocations in the
3615 input format may not have equivalent representations in
3616 the output format (and besides BFD does not translate
3617 relocs for other link purposes than a final link). */
3618 if ((link_info
.relocateable
|| link_info
.emitrelocations
)
3619 && (compatible
== NULL
3620 || bfd_get_flavour (input_bfd
) != bfd_get_flavour (output_bfd
))
3621 && (bfd_get_file_flags (input_bfd
) & HAS_RELOC
) != 0)
3623 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3624 bfd_get_target (input_bfd
), input_bfd
,
3625 bfd_get_target (output_bfd
), output_bfd
);
3626 /* einfo with %F exits. */
3629 if (compatible
== NULL
)
3631 if (command_line
.warn_mismatch
)
3632 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3633 bfd_printable_name (input_bfd
), input_bfd
,
3634 bfd_printable_name (output_bfd
));
3636 else if (bfd_count_sections (input_bfd
))
3638 /* If the input bfd has no contents, it shouldn't set the
3639 private data of the output bfd. */
3641 bfd_error_handler_type pfn
= NULL
;
3643 /* If we aren't supposed to warn about mismatched input
3644 files, temporarily set the BFD error handler to a
3645 function which will do nothing. We still want to call
3646 bfd_merge_private_bfd_data, since it may set up
3647 information which is needed in the output file. */
3648 if (! command_line
.warn_mismatch
)
3649 pfn
= bfd_set_error_handler (ignore_bfd_errors
);
3650 if (! bfd_merge_private_bfd_data (input_bfd
, output_bfd
))
3652 if (command_line
.warn_mismatch
)
3653 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3656 if (! command_line
.warn_mismatch
)
3657 bfd_set_error_handler (pfn
);
3662 /* Look through all the global common symbols and attach them to the
3663 correct section. The -sort-common command line switch may be used
3664 to roughly sort the entries by size. */
3669 if (command_line
.inhibit_common_definition
)
3671 if (link_info
.relocateable
3672 && ! command_line
.force_common_definition
)
3675 if (! config
.sort_common
)
3676 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
3681 for (power
= 4; power
>= 0; power
--)
3682 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
3687 /* Place one common symbol in the correct section. */
3690 lang_one_common (h
, info
)
3691 struct bfd_link_hash_entry
*h
;
3694 unsigned int power_of_two
;
3697 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3698 ldfile_output_machine
);
3700 if (h
->type
!= bfd_link_hash_common
)
3704 power_of_two
= h
->u
.c
.p
->alignment_power
;
3706 if (config
.sort_common
3707 && power_of_two
< (unsigned int) *(int *) info
)
3710 section
= h
->u
.c
.p
->section
;
3712 /* Increase the size of the section. */
3713 section
->_cooked_size
= ALIGN_N ((section
->_cooked_size
+ opb
- 1) / opb
,
3714 (bfd_size_type
) (1 << power_of_two
)) * opb
;
3716 /* Adjust the alignment if necessary. */
3717 if (power_of_two
> section
->alignment_power
)
3718 section
->alignment_power
= power_of_two
;
3720 /* Change the symbol from common to defined. */
3721 h
->type
= bfd_link_hash_defined
;
3722 h
->u
.def
.section
= section
;
3723 h
->u
.def
.value
= section
->_cooked_size
;
3725 /* Increase the size of the section. */
3726 section
->_cooked_size
+= size
;
3728 /* Make sure the section is allocated in memory, and make sure that
3729 it is no longer a common section. */
3730 section
->flags
|= SEC_ALLOC
;
3731 section
->flags
&= ~SEC_IS_COMMON
;
3733 if (config
.map_file
!= NULL
)
3735 static boolean header_printed
;
3740 if (! header_printed
)
3742 minfo (_("\nAllocating common symbols\n"));
3743 minfo (_("Common symbol size file\n\n"));
3744 header_printed
= true;
3747 name
= demangle (h
->root
.string
);
3749 len
= strlen (name
);
3764 if (size
<= 0xffffffff)
3765 sprintf (buf
, "%lx", (unsigned long) size
);
3767 sprintf_vma (buf
, size
);
3777 minfo ("%B\n", section
->owner
);
3783 /* Run through the input files and ensure that every input section has
3784 somewhere to go. If one is found without a destination then create
3785 an input request and place it into the statement tree. */
3788 lang_place_orphans ()
3790 LANG_FOR_EACH_INPUT_STATEMENT (file
)
3794 for (s
= file
->the_bfd
->sections
;
3795 s
!= (asection
*) NULL
;
3798 if (s
->output_section
== (asection
*) NULL
)
3800 /* This section of the file is not attatched, root
3801 around for a sensible place for it to go. */
3803 if (file
->just_syms_flag
)
3807 else if (strcmp (s
->name
, "COMMON") == 0)
3809 /* This is a lonely common section which must have
3810 come from an archive. We attach to the section
3811 with the wildcard. */
3812 if (! link_info
.relocateable
3813 || command_line
.force_common_definition
)
3815 if (default_common_section
== NULL
)
3818 /* This message happens when using the
3819 svr3.ifile linker script, so I have
3821 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3823 default_common_section
=
3824 lang_output_section_statement_lookup (".bss");
3827 lang_add_section (&default_common_section
->children
, s
,
3828 default_common_section
, file
);
3831 else if (ldemul_place_orphan (file
, s
))
3835 lang_output_section_statement_type
*os
;
3837 os
= lang_output_section_statement_lookup (s
->name
);
3838 lang_add_section (&os
->children
, s
, os
, file
);
3846 lang_set_flags (ptr
, flags
, invert
)
3847 lang_memory_region_type
*ptr
;
3851 flagword
*ptr_flags
;
3853 ptr_flags
= invert
? &ptr
->not_flags
: &ptr
->flags
;
3859 *ptr_flags
|= SEC_ALLOC
;
3863 *ptr_flags
|= SEC_READONLY
;
3867 *ptr_flags
|= SEC_DATA
;
3871 *ptr_flags
|= SEC_CODE
;
3876 *ptr_flags
|= SEC_LOAD
;
3880 einfo (_("%P%F: invalid syntax in flags\n"));
3887 /* Call a function on each input file. This function will be called
3888 on an archive, but not on the elements. */
3891 lang_for_each_input_file (func
)
3892 void (*func
) PARAMS ((lang_input_statement_type
*));
3894 lang_input_statement_type
*f
;
3896 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
3898 f
= (lang_input_statement_type
*) f
->next_real_file
)
3902 /* Call a function on each file. The function will be called on all
3903 the elements of an archive which are included in the link, but will
3904 not be called on the archive file itself. */
3907 lang_for_each_file (func
)
3908 void (*func
) PARAMS ((lang_input_statement_type
*));
3910 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3921 lang_for_each_input_section (func
)
3922 void (*func
) PARAMS ((bfd
*ab
, asection
*as
));
3924 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3928 for (s
= f
->the_bfd
->sections
;
3929 s
!= (asection
*) NULL
;
3932 func (f
->the_bfd
, s
);
3940 ldlang_add_file (entry
)
3941 lang_input_statement_type
*entry
;
3945 lang_statement_append (&file_chain
,
3946 (lang_statement_union_type
*) entry
,
3949 /* The BFD linker needs to have a list of all input BFDs involved in
3951 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
3952 ASSERT (entry
->the_bfd
!= output_bfd
);
3953 for (pp
= &link_info
.input_bfds
;
3954 *pp
!= (bfd
*) NULL
;
3955 pp
= &(*pp
)->link_next
)
3957 *pp
= entry
->the_bfd
;
3958 entry
->the_bfd
->usrdata
= (PTR
) entry
;
3959 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
3961 /* Look through the sections and check for any which should not be
3962 included in the link. We need to do this now, so that we can
3963 notice when the backend linker tries to report multiple
3964 definition errors for symbols which are in sections we aren't
3965 going to link. FIXME: It might be better to entirely ignore
3966 symbols which are defined in sections which are going to be
3967 discarded. This would require modifying the backend linker for
3968 each backend which might set the SEC_LINK_ONCE flag. If we do
3969 this, we should probably handle SEC_EXCLUDE in the same way. */
3971 bfd_map_over_sections (entry
->the_bfd
, section_already_linked
, (PTR
) entry
);
3975 lang_add_output (name
, from_script
)
3979 /* Make -o on command line override OUTPUT in script. */
3980 if (had_output_filename
== false || !from_script
)
3982 output_filename
= name
;
3983 had_output_filename
= true;
3987 static lang_output_section_statement_type
*current_section
;
3999 for (l
= 0; l
< 32; l
++)
4001 if (i
>= (unsigned int) x
)
4009 lang_output_section_statement_type
*
4010 lang_enter_output_section_statement (output_section_statement_name
,
4011 address_exp
, sectype
, block_value
,
4012 align
, subalign
, ebase
)
4013 const char *output_section_statement_name
;
4014 etree_type
*address_exp
;
4015 enum section_type sectype
;
4016 bfd_vma block_value
;
4018 etree_type
*subalign
;
4021 lang_output_section_statement_type
*os
;
4025 lang_output_section_statement_lookup (output_section_statement_name
);
4027 /* Add this statement to tree. */
4029 add_statement (lang_output_section_statement_enum
,
4030 output_section_statement
);
4032 /* Make next things chain into subchain of this. */
4034 if (os
->addr_tree
== (etree_type
*) NULL
)
4036 os
->addr_tree
= address_exp
;
4038 os
->sectype
= sectype
;
4039 if (sectype
!= noload_section
)
4040 os
->flags
= SEC_NO_FLAGS
;
4042 os
->flags
= SEC_NEVER_LOAD
;
4043 os
->block_value
= block_value
? block_value
: 1;
4044 stat_ptr
= &os
->children
;
4046 os
->subsection_alignment
=
4047 topower (exp_get_value_int (subalign
, -1, "subsection alignment", 0));
4048 os
->section_alignment
=
4049 topower (exp_get_value_int (align
, -1, "section alignment", 0));
4051 os
->load_base
= ebase
;
4058 lang_output_statement_type
*new =
4059 new_stat (lang_output_statement
, stat_ptr
);
4061 new->name
= output_filename
;
4064 /* Reset the current counters in the regions. */
4067 lang_reset_memory_regions ()
4069 lang_memory_region_type
*p
= lang_memory_region_list
;
4072 for (p
= lang_memory_region_list
;
4073 p
!= (lang_memory_region_type
*) NULL
;
4076 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
4077 p
->current
= p
->origin
;
4080 for (o
= output_bfd
->sections
; o
!= NULL
; o
= o
->next
)
4084 /* If the wild pattern was marked KEEP, the member sections
4085 should be as well. */
4088 gc_section_callback (ptr
, sec
, section
, file
, data
)
4089 lang_wild_statement_type
*ptr
;
4090 struct wildcard_list
*sec ATTRIBUTE_UNUSED
;
4092 lang_input_statement_type
*file ATTRIBUTE_UNUSED
;
4093 PTR data ATTRIBUTE_UNUSED
;
4095 if (ptr
->keep_sections
)
4096 section
->flags
|= SEC_KEEP
;
4099 /* Handle a wild statement, marking it against GC. */
4103 lang_wild_statement_type
*s
;
4105 walk_wild (s
, gc_section_callback
, NULL
);
4108 /* Iterate over sections marking them against GC. */
4111 lang_gc_sections_1 (s
)
4112 lang_statement_union_type
*s
;
4114 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->header
.next
)
4116 switch (s
->header
.type
)
4118 case lang_wild_statement_enum
:
4119 lang_gc_wild (&s
->wild_statement
);
4121 case lang_constructors_statement_enum
:
4122 lang_gc_sections_1 (constructor_list
.head
);
4124 case lang_output_section_statement_enum
:
4125 lang_gc_sections_1 (s
->output_section_statement
.children
.head
);
4127 case lang_group_statement_enum
:
4128 lang_gc_sections_1 (s
->group_statement
.children
.head
);
4139 struct bfd_link_hash_entry
*h
;
4140 ldlang_undef_chain_list_type
*ulist
, fake_list_start
;
4142 /* Keep all sections so marked in the link script. */
4144 lang_gc_sections_1 (statement_list
.head
);
4146 /* Keep all sections containing symbols undefined on the command-line.
4147 Handle the entry symbol at the same time. */
4149 if (entry_symbol
!= NULL
)
4151 fake_list_start
.next
= ldlang_undef_chain_list_head
;
4152 fake_list_start
.name
= (char *) entry_symbol
;
4153 ulist
= &fake_list_start
;
4156 ulist
= ldlang_undef_chain_list_head
;
4158 for (; ulist
; ulist
= ulist
->next
)
4160 h
= bfd_link_hash_lookup (link_info
.hash
, ulist
->name
,
4161 false, false, false);
4163 if (h
!= (struct bfd_link_hash_entry
*) NULL
4164 && (h
->type
== bfd_link_hash_defined
4165 || h
->type
== bfd_link_hash_defweak
)
4166 && ! bfd_is_abs_section (h
->u
.def
.section
))
4168 h
->u
.def
.section
->flags
|= SEC_KEEP
;
4172 bfd_gc_sections (output_bfd
, &link_info
);
4178 lang_reasonable_defaults ();
4179 current_target
= default_target
;
4181 /* Open the output file. */
4182 lang_for_each_statement (ldlang_open_output
);
4184 ldemul_create_output_section_statements ();
4186 /* Add to the hash table all undefineds on the command line. */
4187 lang_place_undefineds ();
4189 already_linked_table_init ();
4191 /* Create a bfd for each input file. */
4192 current_target
= default_target
;
4193 open_input_bfds (statement_list
.head
, false);
4195 ldemul_after_open ();
4197 already_linked_table_free ();
4199 /* Make sure that we're not mixing architectures. We call this
4200 after all the input files have been opened, but before we do any
4201 other processing, so that any operations merge_private_bfd_data
4202 does on the output file will be known during the rest of the
4206 /* Handle .exports instead of a version script if we're told to do so. */
4207 if (command_line
.version_exports_section
)
4208 lang_do_version_exports_section ();
4210 /* Build all sets based on the information gathered from the input
4212 ldctor_build_sets ();
4214 /* Remove unreferenced sections if asked to. */
4215 if (command_line
.gc_sections
)
4216 lang_gc_sections ();
4218 /* If there were any SEC_MERGE sections, finish their merging, so that
4219 section sizes can be computed. This has to be done after GC of sections,
4220 so that GCed sections are not merged, but before assigning output
4221 sections, since removing whole input sections is hard then. */
4222 bfd_merge_sections (output_bfd
, &link_info
);
4224 /* Size up the common data. */
4227 /* Run through the contours of the script and attach input sections
4228 to the correct output sections. */
4229 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
4230 (lang_output_section_statement_type
*) NULL
);
4232 /* Find any sections not attached explicitly and handle them. */
4233 lang_place_orphans ();
4235 if (! link_info
.relocateable
)
4237 /* Look for a text section and set the readonly attribute in it. */
4238 asection
*found
= bfd_get_section_by_name (output_bfd
, ".text");
4240 if (found
!= (asection
*) NULL
)
4242 if (config
.text_read_only
)
4243 found
->flags
|= SEC_READONLY
;
4245 found
->flags
&= ~SEC_READONLY
;
4249 /* Do anything special before sizing sections. This is where ELF
4250 and other back-ends size dynamic sections. */
4251 ldemul_before_allocation ();
4253 /* We must record the program headers before we try to fix the
4254 section positions, since they will affect SIZEOF_HEADERS. */
4255 lang_record_phdrs ();
4257 /* Size up the sections. */
4258 lang_size_sections (statement_list
.head
,
4260 &statement_list
.head
, 0, (bfd_vma
) 0, NULL
);
4262 /* Now run around and relax if we can. */
4263 if (command_line
.relax
)
4265 /* Keep relaxing until bfd_relax_section gives up. */
4266 boolean relax_again
;
4270 lang_reset_memory_regions ();
4272 relax_again
= false;
4274 /* Note: pe-dll.c does something like this also. If you find
4275 you need to change this code, you probably need to change
4276 pe-dll.c also. DJ */
4278 /* Do all the assignments with our current guesses as to
4280 lang_do_assignments (statement_list
.head
,
4282 (fill_type
*) 0, (bfd_vma
) 0);
4284 /* Perform another relax pass - this time we know where the
4285 globals are, so can make better guess. */
4286 lang_size_sections (statement_list
.head
,
4288 &(statement_list
.head
), 0, (bfd_vma
) 0,
4291 while (relax_again
);
4294 /* See if anything special should be done now we know how big
4296 ldemul_after_allocation ();
4298 /* Fix any .startof. or .sizeof. symbols. */
4299 lang_set_startof ();
4301 /* Do all the assignments, now that we know the final resting places
4302 of all the symbols. */
4304 lang_do_assignments (statement_list
.head
,
4306 (fill_type
*) 0, (bfd_vma
) 0);
4308 /* Make sure that the section addresses make sense. */
4309 if (! link_info
.relocateable
4310 && command_line
.check_section_addresses
)
4311 lang_check_section_addresses ();
4319 /* EXPORTED TO YACC */
4322 lang_add_wild (filespec
, section_list
, keep_sections
)
4323 struct wildcard_spec
*filespec
;
4324 struct wildcard_list
*section_list
;
4325 boolean keep_sections
;
4327 struct wildcard_list
*curr
, *next
;
4328 lang_wild_statement_type
*new;
4330 /* Reverse the list as the parser puts it back to front. */
4331 for (curr
= section_list
, section_list
= NULL
;
4333 section_list
= curr
, curr
= next
)
4335 if (curr
->spec
.name
!= NULL
&& strcmp (curr
->spec
.name
, "COMMON") == 0)
4336 placed_commons
= true;
4339 curr
->next
= section_list
;
4342 if (filespec
!= NULL
&& filespec
->name
!= NULL
)
4344 if (strcmp (filespec
->name
, "*") == 0)
4345 filespec
->name
= NULL
;
4346 else if (! wildcardp (filespec
->name
))
4347 lang_has_input_file
= true;
4350 new = new_stat (lang_wild_statement
, stat_ptr
);
4351 new->filename
= NULL
;
4352 new->filenames_sorted
= false;
4353 if (filespec
!= NULL
)
4355 new->filename
= filespec
->name
;
4356 new->filenames_sorted
= filespec
->sorted
;
4358 new->section_list
= section_list
;
4359 new->keep_sections
= keep_sections
;
4360 lang_list_init (&new->children
);
4364 lang_section_start (name
, address
)
4366 etree_type
*address
;
4368 lang_address_statement_type
*ad
;
4370 ad
= new_stat (lang_address_statement
, stat_ptr
);
4371 ad
->section_name
= name
;
4372 ad
->address
= address
;
4375 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4376 because of a -e argument on the command line, or zero if this is
4377 called by ENTRY in a linker script. Command line arguments take
4381 lang_add_entry (name
, cmdline
)
4385 if (entry_symbol
== NULL
4387 || ! entry_from_cmdline
)
4389 entry_symbol
= name
;
4390 entry_from_cmdline
= cmdline
;
4395 lang_add_target (name
)
4398 lang_target_statement_type
*new = new_stat (lang_target_statement
,
4414 map_option_f
= true;
4422 lang_add_fill (fill
)
4425 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
4432 lang_add_data (type
, exp
)
4434 union etree_union
*exp
;
4437 lang_data_statement_type
*new = new_stat (lang_data_statement
,
4445 /* Create a new reloc statement. RELOC is the BFD relocation type to
4446 generate. HOWTO is the corresponding howto structure (we could
4447 look this up, but the caller has already done so). SECTION is the
4448 section to generate a reloc against, or NAME is the name of the
4449 symbol to generate a reloc against. Exactly one of SECTION and
4450 NAME must be NULL. ADDEND is an expression for the addend. */
4453 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
4454 bfd_reloc_code_real_type reloc
;
4455 reloc_howto_type
*howto
;
4458 union etree_union
*addend
;
4460 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
4464 p
->section
= section
;
4466 p
->addend_exp
= addend
;
4468 p
->addend_value
= 0;
4469 p
->output_section
= NULL
;
4473 lang_assignment_statement_type
*
4474 lang_add_assignment (exp
)
4477 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
4485 lang_add_attribute (attribute
)
4486 enum statement_enum attribute
;
4488 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
4495 if (startup_file
!= (char *) NULL
)
4497 einfo (_("%P%Fmultiple STARTUP files\n"));
4499 first_file
->filename
= name
;
4500 first_file
->local_sym_name
= name
;
4501 first_file
->real
= true;
4503 startup_file
= name
;
4510 lang_float_flag
= maybe
;
4514 lang_leave_output_section_statement (fill
, memspec
, phdrs
, lma_memspec
)
4516 const char *memspec
;
4517 struct lang_output_section_phdr_list
*phdrs
;
4518 const char *lma_memspec
;
4520 current_section
->fill
= fill
;
4521 current_section
->region
= lang_memory_region_lookup (memspec
);
4522 current_section
->lma_region
= lang_memory_region_lookup (lma_memspec
);
4524 /* If no runtime region has been given, but the load region has
4525 been, use the load region. */
4526 if (current_section
->lma_region
!= 0 && strcmp (memspec
, "*default*") == 0)
4527 current_section
->region
= current_section
->lma_region
;
4529 current_section
->phdrs
= phdrs
;
4530 stat_ptr
= &statement_list
;
4533 /* Create an absolute symbol with the given name with the value of the
4534 address of first byte of the section named.
4536 If the symbol already exists, then do nothing. */
4539 lang_abs_symbol_at_beginning_of (secname
, name
)
4540 const char *secname
;
4543 struct bfd_link_hash_entry
*h
;
4545 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4546 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4547 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4549 if (h
->type
== bfd_link_hash_new
4550 || h
->type
== bfd_link_hash_undefined
)
4554 h
->type
= bfd_link_hash_defined
;
4556 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4557 if (sec
== (asection
*) NULL
)
4560 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
4562 h
->u
.def
.section
= bfd_abs_section_ptr
;
4566 /* Create an absolute symbol with the given name with the value of the
4567 address of the first byte after the end of the section named.
4569 If the symbol already exists, then do nothing. */
4572 lang_abs_symbol_at_end_of (secname
, name
)
4573 const char *secname
;
4576 struct bfd_link_hash_entry
*h
;
4578 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4579 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4580 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4582 if (h
->type
== bfd_link_hash_new
4583 || h
->type
== bfd_link_hash_undefined
)
4587 h
->type
= bfd_link_hash_defined
;
4589 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4590 if (sec
== (asection
*) NULL
)
4593 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
4594 + bfd_section_size (output_bfd
, sec
) /
4595 bfd_octets_per_byte (output_bfd
));
4597 h
->u
.def
.section
= bfd_abs_section_ptr
;
4602 lang_statement_append (list
, element
, field
)
4603 lang_statement_list_type
*list
;
4604 lang_statement_union_type
*element
;
4605 lang_statement_union_type
**field
;
4607 *(list
->tail
) = element
;
4611 /* Set the output format type. -oformat overrides scripts. */
4614 lang_add_output_format (format
, big
, little
, from_script
)
4620 if (output_target
== NULL
|| !from_script
)
4622 if (command_line
.endian
== ENDIAN_BIG
4625 else if (command_line
.endian
== ENDIAN_LITTLE
4629 output_target
= format
;
4633 /* Enter a group. This creates a new lang_group_statement, and sets
4634 stat_ptr to build new statements within the group. */
4639 lang_group_statement_type
*g
;
4641 g
= new_stat (lang_group_statement
, stat_ptr
);
4642 lang_list_init (&g
->children
);
4643 stat_ptr
= &g
->children
;
4646 /* Leave a group. This just resets stat_ptr to start writing to the
4647 regular list of statements again. Note that this will not work if
4648 groups can occur inside anything else which can adjust stat_ptr,
4649 but currently they can't. */
4654 stat_ptr
= &statement_list
;
4657 /* Add a new program header. This is called for each entry in a PHDRS
4658 command in a linker script. */
4661 lang_new_phdr (name
, type
, filehdr
, phdrs
, at
, flags
)
4669 struct lang_phdr
*n
, **pp
;
4671 n
= (struct lang_phdr
*) stat_alloc (sizeof (struct lang_phdr
));
4674 n
->type
= exp_get_value_int (type
, 0, "program header type",
4675 lang_final_phase_enum
);
4676 n
->filehdr
= filehdr
;
4681 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4686 /* Record the program header information in the output BFD. FIXME: We
4687 should not be calling an ELF specific function here. */
4690 lang_record_phdrs ()
4694 struct lang_output_section_phdr_list
*last
;
4695 struct lang_phdr
*l
;
4696 lang_statement_union_type
*u
;
4699 secs
= (asection
**) xmalloc (alc
* sizeof (asection
*));
4701 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
4708 for (u
= lang_output_section_statement
.head
;
4710 u
= u
->output_section_statement
.next
)
4712 lang_output_section_statement_type
*os
;
4713 struct lang_output_section_phdr_list
*pl
;
4715 os
= &u
->output_section_statement
;
4722 if (os
->sectype
== noload_section
4723 || os
->bfd_section
== NULL
4724 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
4729 if (os
->bfd_section
== NULL
)
4732 for (; pl
!= NULL
; pl
= pl
->next
)
4734 if (strcmp (pl
->name
, l
->name
) == 0)
4739 secs
= ((asection
**)
4740 xrealloc (secs
, alc
* sizeof (asection
*)));
4742 secs
[c
] = os
->bfd_section
;
4749 if (l
->flags
== NULL
)
4752 flags
= exp_get_vma (l
->flags
, 0, "phdr flags",
4753 lang_final_phase_enum
);
4758 at
= exp_get_vma (l
->at
, 0, "phdr load address",
4759 lang_final_phase_enum
);
4761 if (! bfd_record_phdr (output_bfd
, l
->type
,
4762 l
->flags
!= NULL
, flags
, l
->at
!= NULL
,
4763 at
, l
->filehdr
, l
->phdrs
, c
, secs
))
4764 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4769 /* Make sure all the phdr assignments succeeded. */
4770 for (u
= lang_output_section_statement
.head
;
4772 u
= u
->output_section_statement
.next
)
4774 struct lang_output_section_phdr_list
*pl
;
4776 if (u
->output_section_statement
.bfd_section
== NULL
)
4779 for (pl
= u
->output_section_statement
.phdrs
;
4782 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
4783 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4784 u
->output_section_statement
.name
, pl
->name
);
4788 /* Record a list of sections which may not be cross referenced. */
4791 lang_add_nocrossref (l
)
4792 struct lang_nocrossref
*l
;
4794 struct lang_nocrossrefs
*n
;
4796 n
= (struct lang_nocrossrefs
*) xmalloc (sizeof *n
);
4797 n
->next
= nocrossref_list
;
4799 nocrossref_list
= n
;
4801 /* Set notice_all so that we get informed about all symbols. */
4802 link_info
.notice_all
= true;
4805 /* Overlay handling. We handle overlays with some static variables. */
4807 /* The overlay virtual address. */
4808 static etree_type
*overlay_vma
;
4810 /* An expression for the maximum section size seen so far. */
4811 static etree_type
*overlay_max
;
4813 /* A list of all the sections in this overlay. */
4815 struct overlay_list
{
4816 struct overlay_list
*next
;
4817 lang_output_section_statement_type
*os
;
4820 static struct overlay_list
*overlay_list
;
4822 /* Start handling an overlay. */
4825 lang_enter_overlay (vma_expr
)
4826 etree_type
*vma_expr
;
4828 /* The grammar should prevent nested overlays from occurring. */
4829 ASSERT (overlay_vma
== NULL
&& overlay_max
== NULL
);
4831 overlay_vma
= vma_expr
;
4834 /* Start a section in an overlay. We handle this by calling
4835 lang_enter_output_section_statement with the correct VMA.
4836 lang_leave_overlay sets up the LMA and memory regions. */
4839 lang_enter_overlay_section (name
)
4842 struct overlay_list
*n
;
4845 lang_enter_output_section_statement (name
, overlay_vma
, normal_section
,
4848 /* If this is the first section, then base the VMA of future
4849 sections on this one. This will work correctly even if `.' is
4850 used in the addresses. */
4851 if (overlay_list
== NULL
)
4852 overlay_vma
= exp_nameop (ADDR
, name
);
4854 /* Remember the section. */
4855 n
= (struct overlay_list
*) xmalloc (sizeof *n
);
4856 n
->os
= current_section
;
4857 n
->next
= overlay_list
;
4860 size
= exp_nameop (SIZEOF
, name
);
4862 /* Arrange to work out the maximum section end address. */
4863 if (overlay_max
== NULL
)
4866 overlay_max
= exp_binop (MAX_K
, overlay_max
, size
);
4869 /* Finish a section in an overlay. There isn't any special to do
4873 lang_leave_overlay_section (fill
, phdrs
)
4875 struct lang_output_section_phdr_list
*phdrs
;
4882 name
= current_section
->name
;
4884 /* For now, assume that "*default*" is the run-time memory region and
4885 that no load-time region has been specified. It doesn't really
4886 matter what we say here, since lang_leave_overlay will override it. */
4887 lang_leave_output_section_statement (fill
, "*default*", phdrs
, 0);
4889 /* Define the magic symbols. */
4891 clean
= xmalloc (strlen (name
) + 1);
4893 for (s1
= name
; *s1
!= '\0'; s1
++)
4894 if (ISALNUM (*s1
) || *s1
== '_')
4898 buf
= xmalloc (strlen (clean
) + sizeof "__load_start_");
4899 sprintf (buf
, "__load_start_%s", clean
);
4900 lang_add_assignment (exp_assop ('=', buf
,
4901 exp_nameop (LOADADDR
, name
)));
4903 buf
= xmalloc (strlen (clean
) + sizeof "__load_stop_");
4904 sprintf (buf
, "__load_stop_%s", clean
);
4905 lang_add_assignment (exp_assop ('=', buf
,
4907 exp_nameop (LOADADDR
, name
),
4908 exp_nameop (SIZEOF
, name
))));
4913 /* Finish an overlay. If there are any overlay wide settings, this
4914 looks through all the sections in the overlay and sets them. */
4917 lang_leave_overlay (lma_expr
, nocrossrefs
, fill
, memspec
, phdrs
, lma_memspec
)
4918 etree_type
*lma_expr
;
4921 const char *memspec
;
4922 struct lang_output_section_phdr_list
*phdrs
;
4923 const char *lma_memspec
;
4925 lang_memory_region_type
*region
;
4926 lang_memory_region_type
*lma_region
;
4927 struct overlay_list
*l
;
4928 struct lang_nocrossref
*nocrossref
;
4930 region
= lang_memory_region_lookup (memspec
);
4931 lma_region
= lang_memory_region_lookup (lma_memspec
);
4935 /* After setting the size of the last section, set '.' to end of the
4937 if (overlay_list
!= NULL
)
4938 overlay_list
->os
->update_dot_tree
4939 = exp_assop ('=', ".", exp_binop ('+', overlay_vma
, overlay_max
));
4944 struct overlay_list
*next
;
4946 if (fill
!= (fill_type
*) 0 && l
->os
->fill
== (fill_type
*) 0)
4949 l
->os
->region
= region
;
4950 l
->os
->lma_region
= lma_region
;
4952 /* The first section has the load address specified in the
4953 OVERLAY statement. The rest are worked out from that.
4954 The base address is not needed (and should be null) if
4955 an LMA region was specified. */
4957 l
->os
->load_base
= lma_expr
;
4958 else if (lma_region
== 0)
4959 l
->os
->load_base
= exp_binop ('+',
4960 exp_nameop (LOADADDR
, l
->next
->os
->name
),
4961 exp_nameop (SIZEOF
, l
->next
->os
->name
));
4963 if (phdrs
!= NULL
&& l
->os
->phdrs
== NULL
)
4964 l
->os
->phdrs
= phdrs
;
4968 struct lang_nocrossref
*nc
;
4970 nc
= (struct lang_nocrossref
*) xmalloc (sizeof *nc
);
4971 nc
->name
= l
->os
->name
;
4972 nc
->next
= nocrossref
;
4981 if (nocrossref
!= NULL
)
4982 lang_add_nocrossref (nocrossref
);
4985 overlay_list
= NULL
;
4989 /* Version handling. This is only useful for ELF. */
4991 /* This global variable holds the version tree that we build. */
4993 struct bfd_elf_version_tree
*lang_elf_version_info
;
4996 lang_vers_match_lang_c (expr
, sym
)
4997 struct bfd_elf_version_expr
*expr
;
5000 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
5002 return fnmatch (expr
->pattern
, sym
, 0) == 0;
5006 lang_vers_match_lang_cplusplus (expr
, sym
)
5007 struct bfd_elf_version_expr
*expr
;
5013 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
5016 alt_sym
= cplus_demangle (sym
, /* DMGL_NO_TPARAMS */ 0);
5019 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
5020 Should we early out false in this case? */
5021 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
5025 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
5033 lang_vers_match_lang_java (expr
, sym
)
5034 struct bfd_elf_version_expr
*expr
;
5040 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
5043 alt_sym
= cplus_demangle (sym
, DMGL_JAVA
);
5046 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
5047 Should we early out false in this case? */
5048 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
5052 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
5059 /* This is called for each variable name or match expression. */
5061 struct bfd_elf_version_expr
*
5062 lang_new_vers_pattern (orig
, new, lang
)
5063 struct bfd_elf_version_expr
*orig
;
5067 struct bfd_elf_version_expr
*ret
;
5069 ret
= (struct bfd_elf_version_expr
*) xmalloc (sizeof *ret
);
5073 if (lang
== NULL
|| strcasecmp (lang
, "C") == 0)
5074 ret
->match
= lang_vers_match_lang_c
;
5075 else if (strcasecmp (lang
, "C++") == 0)
5076 ret
->match
= lang_vers_match_lang_cplusplus
;
5077 else if (strcasecmp (lang
, "Java") == 0)
5078 ret
->match
= lang_vers_match_lang_java
;
5081 einfo (_("%X%P: unknown language `%s' in version information\n"),
5083 ret
->match
= lang_vers_match_lang_c
;
5086 return ldemul_new_vers_pattern (ret
);
5089 /* This is called for each set of variable names and match
5092 struct bfd_elf_version_tree
*
5093 lang_new_vers_node (globals
, locals
)
5094 struct bfd_elf_version_expr
*globals
;
5095 struct bfd_elf_version_expr
*locals
;
5097 struct bfd_elf_version_tree
*ret
;
5099 ret
= (struct bfd_elf_version_tree
*) xmalloc (sizeof *ret
);
5103 ret
->globals
= globals
;
5104 ret
->locals
= locals
;
5106 ret
->name_indx
= (unsigned int) -1;
5111 /* This static variable keeps track of version indices. */
5113 static int version_index
;
5115 /* This is called when we know the name and dependencies of the
5119 lang_register_vers_node (name
, version
, deps
)
5121 struct bfd_elf_version_tree
*version
;
5122 struct bfd_elf_version_deps
*deps
;
5124 struct bfd_elf_version_tree
*t
, **pp
;
5125 struct bfd_elf_version_expr
*e1
;
5130 if ((name
[0] == '\0' && lang_elf_version_info
!= NULL
)
5131 || (lang_elf_version_info
&& lang_elf_version_info
->name
[0] == '\0'))
5133 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5137 /* Make sure this node has a unique name. */
5138 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5139 if (strcmp (t
->name
, name
) == 0)
5140 einfo (_("%X%P: duplicate version tag `%s'\n"), name
);
5142 /* Check the global and local match names, and make sure there
5143 aren't any duplicates. */
5145 for (e1
= version
->globals
; e1
!= NULL
; e1
= e1
->next
)
5147 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5149 struct bfd_elf_version_expr
*e2
;
5151 for (e2
= t
->locals
; e2
!= NULL
; e2
= e2
->next
)
5152 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5153 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5158 for (e1
= version
->locals
; e1
!= NULL
; e1
= e1
->next
)
5160 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5162 struct bfd_elf_version_expr
*e2
;
5164 for (e2
= t
->globals
; e2
!= NULL
; e2
= e2
->next
)
5165 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
5166 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5171 version
->deps
= deps
;
5172 version
->name
= name
;
5173 if (name
[0] != '\0')
5176 version
->vernum
= version_index
;
5179 version
->vernum
= 0;
5181 for (pp
= &lang_elf_version_info
; *pp
!= NULL
; pp
= &(*pp
)->next
)
5186 /* This is called when we see a version dependency. */
5188 struct bfd_elf_version_deps
*
5189 lang_add_vers_depend (list
, name
)
5190 struct bfd_elf_version_deps
*list
;
5193 struct bfd_elf_version_deps
*ret
;
5194 struct bfd_elf_version_tree
*t
;
5196 ret
= (struct bfd_elf_version_deps
*) xmalloc (sizeof *ret
);
5199 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
5201 if (strcmp (t
->name
, name
) == 0)
5203 ret
->version_needed
= t
;
5208 einfo (_("%X%P: unable to find version dependency `%s'\n"), name
);
5214 lang_do_version_exports_section ()
5216 struct bfd_elf_version_expr
*greg
= NULL
, *lreg
;
5218 LANG_FOR_EACH_INPUT_STATEMENT (is
)
5220 asection
*sec
= bfd_get_section_by_name (is
->the_bfd
, ".exports");
5227 len
= bfd_section_size (is
->the_bfd
, sec
);
5228 contents
= xmalloc (len
);
5229 if (!bfd_get_section_contents (is
->the_bfd
, sec
, contents
, 0, len
))
5230 einfo (_("%X%P: unable to read .exports section contents\n"), sec
);
5233 while (p
< contents
+ len
)
5235 greg
= lang_new_vers_pattern (greg
, p
, NULL
);
5236 p
= strchr (p
, '\0') + 1;
5239 /* Do not free the contents, as we used them creating the regex. */
5241 /* Do not include this section in the link. */
5242 bfd_set_section_flags (is
->the_bfd
, sec
,
5243 bfd_get_section_flags (is
->the_bfd
, sec
) | SEC_EXCLUDE
);
5246 lreg
= lang_new_vers_pattern (NULL
, "*", NULL
);
5247 lang_register_vers_node (command_line
.version_exports_section
,
5248 lang_new_vers_node (greg
, lreg
), NULL
);
5252 lang_add_unique (name
)
5255 struct unique_sections
*ent
;
5257 for (ent
= unique_section_list
; ent
; ent
= ent
->next
)
5258 if (strcmp (ent
->name
, name
) == 0)
5261 ent
= (struct unique_sections
*) xmalloc (sizeof *ent
);
5262 ent
->name
= xstrdup (name
);
5263 ent
->next
= unique_section_list
;
5264 unique_section_list
= ent
;