1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 1998
3 Free Software Foundation, Inc.
5 This file is part of GLD, the Gnu Linker.
7 GLD is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GLD is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GLD; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
24 #include "libiberty.h"
43 static lang_statement_union_type
*new_statement
PARAMS ((enum statement_enum
,
45 lang_statement_list_type
*));
49 static struct obstack stat_obstack
;
51 #define obstack_chunk_alloc xmalloc
52 #define obstack_chunk_free free
53 static CONST
char *startup_file
;
54 static lang_statement_list_type input_file_chain
;
55 static boolean placed_commons
= false;
56 static lang_output_section_statement_type
*default_common_section
;
57 static boolean map_option_f
;
58 static bfd_vma print_dot
;
59 static lang_input_statement_type
*first_file
;
60 static lang_statement_list_type lang_output_section_statement
;
61 static CONST
char *current_target
;
62 static CONST
char *output_target
;
63 static lang_statement_list_type statement_list
;
64 static struct lang_phdr
*lang_phdr_list
;
66 static void lang_for_each_statement_worker
67 PARAMS ((void (*func
) (lang_statement_union_type
*),
68 lang_statement_union_type
*s
));
69 static lang_input_statement_type
*new_afile
70 PARAMS ((const char *name
, lang_input_file_enum_type file_type
,
71 const char *target
, boolean add_to_list
));
72 static void init_os
PARAMS ((lang_output_section_statement_type
*s
));
73 static void exp_init_os
PARAMS ((etree_type
*));
74 static void section_already_linked
PARAMS ((bfd
*, asection
*, PTR
));
75 static boolean wildcardp
PARAMS ((const char *));
76 static lang_statement_union_type
*wild_sort
77 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
79 static void wild_section
PARAMS ((lang_wild_statement_type
*ptr
,
81 lang_input_statement_type
*file
,
82 lang_output_section_statement_type
*output
));
83 static lang_input_statement_type
*lookup_name
PARAMS ((const char *name
));
84 static void load_symbols
PARAMS ((lang_input_statement_type
*entry
,
85 lang_statement_list_type
*));
86 static void wild_file
PARAMS ((lang_wild_statement_type
*, const char *,
87 lang_input_statement_type
*,
88 lang_output_section_statement_type
*));
89 static void wild
PARAMS ((lang_wild_statement_type
*s
,
90 const char *section
, const char *file
,
92 lang_output_section_statement_type
*output
));
93 static bfd
*open_output
PARAMS ((const char *name
));
94 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*statement
));
95 static void open_input_bfds
96 PARAMS ((lang_statement_union_type
*statement
, boolean
));
97 static void lang_reasonable_defaults
PARAMS ((void));
98 static void lang_place_undefineds
PARAMS ((void));
99 static void map_input_to_output_sections
100 PARAMS ((lang_statement_union_type
*s
,
102 lang_output_section_statement_type
*output_section_statement
));
103 static void print_output_section_statement
104 PARAMS ((lang_output_section_statement_type
*output_section_statement
));
105 static void print_assignment
106 PARAMS ((lang_assignment_statement_type
*assignment
,
107 lang_output_section_statement_type
*output_section
));
108 static void print_input_statement
PARAMS ((lang_input_statement_type
*statm
));
109 static boolean print_one_symbol
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
110 static void print_input_section
PARAMS ((lang_input_section_type
*in
));
111 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*fill
));
112 static void print_data_statement
PARAMS ((lang_data_statement_type
*data
));
113 static void print_address_statement
PARAMS ((lang_address_statement_type
*));
114 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*reloc
));
115 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*s
));
116 static void print_wild_statement
117 PARAMS ((lang_wild_statement_type
*w
,
118 lang_output_section_statement_type
*os
));
119 static void print_group
120 PARAMS ((lang_group_statement_type
*, lang_output_section_statement_type
*));
121 static void print_statement
PARAMS ((lang_statement_union_type
*s
,
122 lang_output_section_statement_type
*os
));
123 static void print_statement_list
PARAMS ((lang_statement_union_type
*s
,
124 lang_output_section_statement_type
*os
));
125 static void print_statements
PARAMS ((void));
126 static bfd_vma insert_pad
PARAMS ((lang_statement_union_type
**this_ptr
,
127 fill_type fill
, unsigned int power
,
128 asection
*output_section_statement
,
130 static bfd_vma size_input_section
131 PARAMS ((lang_statement_union_type
**this_ptr
,
132 lang_output_section_statement_type
*output_section_statement
,
133 fill_type fill
, bfd_vma dot
, boolean relax
));
134 static void lang_finish
PARAMS ((void));
135 static void ignore_bfd_errors
PARAMS ((const char *, ...));
136 static void lang_check
PARAMS ((void));
137 static void lang_common
PARAMS ((void));
138 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
139 static void lang_place_orphans
PARAMS ((void));
140 static int topower
PARAMS ((int));
141 static void lang_set_startof
PARAMS ((void));
142 static void reset_memory_regions
PARAMS ((void));
143 static void lang_record_phdrs
PARAMS ((void));
144 static void lang_gc_wild_section
145 PARAMS ((lang_wild_statement_type
*, const char *,
146 lang_input_statement_type
*));
147 static void lang_gc_wild_file
148 PARAMS ((lang_wild_statement_type
*, const char *,
149 lang_input_statement_type
*));
150 static void lang_gc_wild
151 PARAMS ((lang_wild_statement_type
*, const char *, const char *));
152 static void lang_gc_sections_1
PARAMS ((lang_statement_union_type
*));
153 static void lang_gc_sections
PARAMS ((void));
154 static void lang_do_version_exports_section
PARAMS ((void));
158 lang_output_section_statement_type
*abs_output_section
;
159 lang_statement_list_type
*stat_ptr
= &statement_list
;
160 lang_statement_list_type file_chain
= { 0 };
161 const char *entry_symbol
= NULL
;
162 boolean entry_from_cmdline
;
163 boolean lang_has_input_file
= false;
164 boolean had_output_filename
= false;
165 boolean lang_float_flag
= false;
166 boolean delete_output_file_on_failure
= false;
167 struct lang_nocrossrefs
*nocrossref_list
;
169 etree_type
*base
; /* Relocation base - or null */
172 #if defined(__STDC__) || defined(ALMOST_STDC)
173 #define cat(a,b) a##b
175 #define cat(a,b) a/**/b
178 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
180 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
182 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
184 #define SECTION_NAME_MAP_LENGTH (16)
190 return obstack_alloc (&stat_obstack
, size
);
193 /*----------------------------------------------------------------------
194 lang_for_each_statement walks the parse tree and calls the provided
195 function for each node
199 lang_for_each_statement_worker (func
, s
)
200 void (*func
) PARAMS ((lang_statement_union_type
*));
201 lang_statement_union_type
*s
;
203 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
207 switch (s
->header
.type
)
209 case lang_constructors_statement_enum
:
210 lang_for_each_statement_worker (func
, constructor_list
.head
);
212 case lang_output_section_statement_enum
:
213 lang_for_each_statement_worker
215 s
->output_section_statement
.children
.head
);
217 case lang_wild_statement_enum
:
218 lang_for_each_statement_worker
220 s
->wild_statement
.children
.head
);
222 case lang_group_statement_enum
:
223 lang_for_each_statement_worker (func
,
224 s
->group_statement
.children
.head
);
226 case lang_data_statement_enum
:
227 case lang_reloc_statement_enum
:
228 case lang_object_symbols_statement_enum
:
229 case lang_output_statement_enum
:
230 case lang_target_statement_enum
:
231 case lang_input_section_enum
:
232 case lang_input_statement_enum
:
233 case lang_assignment_statement_enum
:
234 case lang_padding_statement_enum
:
235 case lang_address_statement_enum
:
236 case lang_fill_statement_enum
:
246 lang_for_each_statement (func
)
247 void (*func
) PARAMS ((lang_statement_union_type
*));
249 lang_for_each_statement_worker (func
,
250 statement_list
.head
);
253 /*----------------------------------------------------------------------*/
255 lang_list_init (list
)
256 lang_statement_list_type
*list
;
258 list
->head
= (lang_statement_union_type
*) NULL
;
259 list
->tail
= &list
->head
;
262 /*----------------------------------------------------------------------
264 build a new statement node for the parse tree
269 lang_statement_union_type
*
270 new_statement (type
, size
, list
)
271 enum statement_enum type
;
273 lang_statement_list_type
* list
;
275 lang_statement_union_type
*new = (lang_statement_union_type
*)
278 new->header
.type
= type
;
279 new->header
.next
= (lang_statement_union_type
*) NULL
;
280 lang_statement_append (list
, new, &new->header
.next
);
285 Build a new input file node for the language. There are several ways
286 in which we treat an input file, eg, we only look at symbols, or
287 prefix it with a -l etc.
289 We can be supplied with requests for input files more than once;
290 they may, for example be split over serveral lines like foo.o(.text)
291 foo.o(.data) etc, so when asked for a file we check that we havn't
292 got it already so we don't duplicate the bfd.
295 static lang_input_statement_type
*
296 new_afile (name
, file_type
, target
, add_to_list
)
298 lang_input_file_enum_type file_type
;
302 lang_input_statement_type
*p
;
305 p
= new_stat (lang_input_statement
, stat_ptr
);
308 p
= ((lang_input_statement_type
*)
309 stat_alloc (sizeof (lang_input_statement_type
)));
310 p
->header
.next
= NULL
;
313 lang_has_input_file
= true;
317 case lang_input_file_is_symbols_only_enum
:
319 p
->is_archive
= false;
321 p
->local_sym_name
= name
;
322 p
->just_syms_flag
= true;
323 p
->search_dirs_flag
= false;
325 case lang_input_file_is_fake_enum
:
327 p
->is_archive
= false;
329 p
->local_sym_name
= name
;
330 p
->just_syms_flag
= false;
331 p
->search_dirs_flag
= false;
333 case lang_input_file_is_l_enum
:
334 p
->is_archive
= true;
337 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
338 p
->just_syms_flag
= false;
339 p
->search_dirs_flag
= true;
341 case lang_input_file_is_marker_enum
:
343 p
->is_archive
= false;
345 p
->local_sym_name
= name
;
346 p
->just_syms_flag
= false;
347 p
->search_dirs_flag
= true;
349 case lang_input_file_is_search_file_enum
:
351 p
->is_archive
= false;
353 p
->local_sym_name
= name
;
354 p
->just_syms_flag
= false;
355 p
->search_dirs_flag
= true;
357 case lang_input_file_is_file_enum
:
359 p
->is_archive
= false;
361 p
->local_sym_name
= name
;
362 p
->just_syms_flag
= false;
363 p
->search_dirs_flag
= false;
368 p
->the_bfd
= (bfd
*) NULL
;
369 p
->asymbols
= (asymbol
**) NULL
;
370 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
371 p
->next
= (lang_statement_union_type
*) NULL
;
373 p
->dynamic
= config
.dynamic_link
;
374 p
->whole_archive
= whole_archive
;
376 lang_statement_append (&input_file_chain
,
377 (lang_statement_union_type
*) p
,
382 lang_input_statement_type
*
383 lang_add_input_file (name
, file_type
, target
)
385 lang_input_file_enum_type file_type
;
388 lang_has_input_file
= true;
389 return new_afile (name
, file_type
, target
, true);
392 /* Build enough state so that the parser can build its tree */
396 obstack_begin (&stat_obstack
, 1000);
398 stat_ptr
= &statement_list
;
400 lang_list_init (stat_ptr
);
402 lang_list_init (&input_file_chain
);
403 lang_list_init (&lang_output_section_statement
);
404 lang_list_init (&file_chain
);
405 first_file
= lang_add_input_file ((char *) NULL
,
406 lang_input_file_is_marker_enum
,
408 abs_output_section
= lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
410 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
414 /*----------------------------------------------------------------------
415 A region is an area of memory declared with the
416 MEMORY { name:org=exp, len=exp ... }
419 We maintain a list of all the regions here
421 If no regions are specified in the script, then the default is used
422 which is created when looked up to be the entire data space
425 static lang_memory_region_type
*lang_memory_region_list
;
426 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
428 lang_memory_region_type
*
429 lang_memory_region_lookup (name
)
430 CONST
char *CONST name
;
432 lang_memory_region_type
*p
;
434 for (p
= lang_memory_region_list
;
435 p
!= (lang_memory_region_type
*) NULL
;
438 if (strcmp (p
->name
, name
) == 0)
445 /* This code used to always use the first region in the list as the
446 default region. I changed it to instead use a region
447 encompassing all of memory as the default region. This permits
448 NOLOAD sections to work reasonably without requiring a region.
449 People should specify what region they mean, if they really want
451 if (strcmp (name
, "*default*") == 0)
453 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
455 return lang_memory_region_list
;
461 lang_memory_region_type
*new =
462 (lang_memory_region_type
*) stat_alloc (sizeof (lang_memory_region_type
));
464 new->name
= buystring (name
);
465 new->next
= (lang_memory_region_type
*) NULL
;
467 *lang_memory_region_list_tail
= new;
468 lang_memory_region_list_tail
= &new->next
;
472 new->length
= ~(bfd_size_type
)0;
474 new->had_full_message
= false;
481 lang_memory_region_type
*
482 lang_memory_default (section
)
485 lang_memory_region_type
*p
;
487 flagword sec_flags
= section
->flags
;
489 /* Override SEC_DATA to mean a writable section. */
490 if ((sec_flags
& (SEC_ALLOC
| SEC_READONLY
| SEC_CODE
)) == SEC_ALLOC
)
491 sec_flags
|= SEC_DATA
;
493 for (p
= lang_memory_region_list
;
494 p
!= (lang_memory_region_type
*) NULL
;
497 if ((p
->flags
& sec_flags
) != 0
498 && (p
->not_flags
& sec_flags
) == 0)
503 return lang_memory_region_lookup ("*default*");
506 lang_output_section_statement_type
*
507 lang_output_section_find (name
)
508 CONST
char *CONST name
;
510 lang_statement_union_type
*u
;
511 lang_output_section_statement_type
*lookup
;
513 for (u
= lang_output_section_statement
.head
;
514 u
!= (lang_statement_union_type
*) NULL
;
517 lookup
= &u
->output_section_statement
;
518 if (strcmp (name
, lookup
->name
) == 0)
523 return (lang_output_section_statement_type
*) NULL
;
526 lang_output_section_statement_type
*
527 lang_output_section_statement_lookup (name
)
528 CONST
char *CONST name
;
530 lang_output_section_statement_type
*lookup
;
532 lookup
= lang_output_section_find (name
);
533 if (lookup
== (lang_output_section_statement_type
*) NULL
)
536 lookup
= (lang_output_section_statement_type
*)
537 new_stat (lang_output_section_statement
, stat_ptr
);
538 lookup
->region
= (lang_memory_region_type
*) NULL
;
540 lookup
->block_value
= 1;
543 lookup
->next
= (lang_statement_union_type
*) NULL
;
544 lookup
->bfd_section
= (asection
*) NULL
;
545 lookup
->processed
= false;
546 lookup
->sectype
= normal_section
;
547 lookup
->addr_tree
= (etree_type
*) NULL
;
548 lang_list_init (&lookup
->children
);
550 lookup
->memspec
= (CONST
char *) NULL
;
552 lookup
->subsection_alignment
= -1;
553 lookup
->section_alignment
= -1;
554 lookup
->load_base
= (union etree_union
*) NULL
;
555 lookup
->phdrs
= NULL
;
557 lang_statement_append (&lang_output_section_statement
,
558 (lang_statement_union_type
*) lookup
,
565 lang_map_flags (flag
)
568 if (flag
& SEC_ALLOC
)
574 if (flag
& SEC_READONLY
)
587 lang_memory_region_type
*m
;
589 minfo (_("\nMemory Configuration\n\n"));
590 fprintf (config
.map_file
, "%-16s %-18s %-18s %s\n",
591 _("Name"), _("Origin"), _("Length"), _("Attributes"));
593 for (m
= lang_memory_region_list
;
594 m
!= (lang_memory_region_type
*) NULL
;
600 fprintf (config
.map_file
, "%-16s ", m
->name
);
602 sprintf_vma (buf
, m
->origin
);
603 minfo ("0x%s ", buf
);
611 minfo ("0x%V", m
->length
);
612 if (m
->flags
|| m
->not_flags
)
620 lang_map_flags (m
->flags
);
626 lang_map_flags (m
->not_flags
);
633 fprintf (config
.map_file
, _("\nLinker script and memory map\n\n"));
638 /* Initialize an output section. */
642 lang_output_section_statement_type
*s
;
644 section_userdata_type
*new;
646 if (s
->bfd_section
!= NULL
)
649 if (strcmp (s
->name
, DISCARD_SECTION_NAME
) == 0)
650 einfo (_("%P%F: Illegal use of `%s' section"), DISCARD_SECTION_NAME
);
652 new = ((section_userdata_type
*)
653 stat_alloc (sizeof (section_userdata_type
)));
655 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
656 if (s
->bfd_section
== (asection
*) NULL
)
657 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
658 if (s
->bfd_section
== (asection
*) NULL
)
660 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
661 output_bfd
->xvec
->name
, s
->name
);
663 s
->bfd_section
->output_section
= s
->bfd_section
;
665 /* We initialize an output sections output offset to minus its own */
666 /* vma to allow us to output a section through itself */
667 s
->bfd_section
->output_offset
= 0;
668 get_userdata (s
->bfd_section
) = (PTR
) new;
670 /* If there is a base address, make sure that any sections it might
671 mention are initialized. */
672 if (s
->addr_tree
!= NULL
)
673 exp_init_os (s
->addr_tree
);
676 /* Make sure that all output sections mentioned in an expression are
683 switch (exp
->type
.node_class
)
686 exp_init_os (exp
->assign
.src
);
690 exp_init_os (exp
->binary
.lhs
);
691 exp_init_os (exp
->binary
.rhs
);
695 exp_init_os (exp
->trinary
.cond
);
696 exp_init_os (exp
->trinary
.lhs
);
697 exp_init_os (exp
->trinary
.rhs
);
701 exp_init_os (exp
->unary
.child
);
705 switch (exp
->type
.node_code
)
711 lang_output_section_statement_type
*os
;
713 os
= lang_output_section_find (exp
->name
.name
);
714 if (os
!= NULL
&& os
->bfd_section
== NULL
)
725 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
726 once into the output. This routine checks each sections, and
727 arranges to discard it if a section of the same name has already
728 been linked. This code assumes that all relevant sections have the
729 SEC_LINK_ONCE flag set; that is, it does not depend solely upon the
730 section name. This is called via bfd_map_over_sections. */
734 section_already_linked (abfd
, sec
, data
)
739 lang_input_statement_type
*entry
= (lang_input_statement_type
*) data
;
742 struct sec_link_once
*next
;
745 static struct sec_link_once
*sec_link_once_list
;
748 struct sec_link_once
*l
;
750 /* If we are only reading symbols from this object, then we want to
751 discard all sections. */
752 if (entry
->just_syms_flag
)
754 sec
->output_section
= bfd_abs_section_ptr
;
755 sec
->output_offset
= sec
->vma
;
759 flags
= bfd_get_section_flags (abfd
, sec
);
761 if ((flags
& SEC_LINK_ONCE
) == 0)
764 name
= bfd_get_section_name (abfd
, sec
);
766 for (l
= sec_link_once_list
; l
!= NULL
; l
= l
->next
)
768 if (strcmp (name
, bfd_get_section_name (l
->sec
->owner
, l
->sec
)) == 0)
770 /* The section has already been linked. See if we should
772 switch (flags
& SEC_LINK_DUPLICATES
)
777 case SEC_LINK_DUPLICATES_DISCARD
:
780 case SEC_LINK_DUPLICATES_ONE_ONLY
:
781 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
785 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
786 /* FIXME: We should really dig out the contents of both
787 sections and memcmp them. The COFF/PE spec says that
788 the Microsoft linker does not implement this
789 correctly, so I'm not going to bother doing it
792 case SEC_LINK_DUPLICATES_SAME_SIZE
:
793 if (bfd_section_size (abfd
, sec
)
794 != bfd_section_size (l
->sec
->owner
, l
->sec
))
795 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
800 /* Set the output_section field so that wild_doit does not
801 create a lang_input_section structure for this section. */
802 sec
->output_section
= bfd_abs_section_ptr
;
808 /* This is the first section with this name. Record it. */
810 l
= (struct sec_link_once
*) xmalloc (sizeof *l
);
812 l
->next
= sec_link_once_list
;
813 sec_link_once_list
= l
;
816 /* The wild routines.
818 These expand statements like *(.text) and foo.o to a list of
819 explicit actions, like foo.o(.text), bar.o(.text) and
820 foo.o(.text, .data). */
822 /* Return true if the PATTERN argument is a wildcard pattern.
823 Although backslashes are treated specially if a pattern contains
824 wildcards, we do not consider the mere presence of a backslash to
825 be enough to cause the the pattern to be treated as a wildcard.
826 That lets us handle DOS filenames more naturally. */
834 for (s
= pattern
; *s
!= '\0'; ++s
)
842 /* Add SECTION to the output section OUTPUT. Do this by creating a
843 lang_input_section statement which is placed at PTR. FILE is the
844 input file which holds SECTION. */
847 wild_doit (ptr
, section
, output
, file
)
848 lang_statement_list_type
*ptr
;
850 lang_output_section_statement_type
*output
;
851 lang_input_statement_type
*file
;
856 flags
= bfd_get_section_flags (section
->owner
, section
);
860 /* If we are doing a final link, discard sections marked with
862 if (! link_info
.relocateable
863 && (flags
& SEC_EXCLUDE
) != 0)
866 /* Discard input sections which are assigned to a section named
867 DISCARD_SECTION_NAME. */
868 if (strcmp (output
->name
, DISCARD_SECTION_NAME
) == 0)
871 /* Discard debugging sections if we are stripping debugging
873 if ((link_info
.strip
== strip_debugger
|| link_info
.strip
== strip_all
)
874 && (flags
& SEC_DEBUGGING
) != 0)
879 if (section
->output_section
== NULL
)
881 /* This prevents future calls from assigning this section. */
882 section
->output_section
= bfd_abs_section_ptr
;
887 if (section
->output_section
== NULL
)
890 lang_input_section_type
*new;
893 if (output
->bfd_section
== NULL
)
901 /* Add a section reference to the list */
902 new = new_stat (lang_input_section
, ptr
);
904 new->section
= section
;
906 section
->output_section
= output
->bfd_section
;
908 flags
= section
->flags
;
910 /* We don't copy the SEC_NEVER_LOAD flag from an input section
911 to an output section, because we want to be able to include a
912 SEC_NEVER_LOAD section in the middle of an otherwise loaded
913 section (I don't know why we want to do this, but we do).
914 build_link_order in ldwrite.c handles this case by turning
915 the embedded SEC_NEVER_LOAD section into a fill. */
917 flags
&= ~ SEC_NEVER_LOAD
;
919 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
920 already been processed. One reason to do this is that on pe
921 format targets, .text$foo sections go into .text and it's odd
922 to see .text with SEC_LINK_ONCE set. */
924 if (! link_info
.relocateable
)
925 flags
&= ~ (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES
);
927 /* If this is not the first input section, and the SEC_READONLY
928 flag is not currently set, then don't set it just because the
929 input section has it set. */
931 if (! first
&& (section
->output_section
->flags
& SEC_READONLY
) == 0)
932 flags
&= ~ SEC_READONLY
;
934 section
->output_section
->flags
|= flags
;
936 /* If SEC_READONLY is not set in the input section, then clear
937 it from the output section. */
938 if ((section
->flags
& SEC_READONLY
) == 0)
939 section
->output_section
->flags
&= ~SEC_READONLY
;
941 switch (output
->sectype
)
948 case overlay_section
:
949 output
->bfd_section
->flags
&= ~SEC_ALLOC
;
952 output
->bfd_section
->flags
&= ~SEC_LOAD
;
953 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
957 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
958 output
->bfd_section
->alignment_power
= section
->alignment_power
;
960 /* If supplied an aligment, then force it. */
961 if (output
->section_alignment
!= -1)
962 output
->bfd_section
->alignment_power
= output
->section_alignment
;
966 /* Handle wildcard sorting. This returns the lang_input_section which
967 should follow the one we are going to create for SECTION and FILE,
968 based on the sorting requirements of WILD. It returns NULL if the
969 new section should just go at the end of the current list. */
971 static lang_statement_union_type
*
972 wild_sort (wild
, file
, section
)
973 lang_wild_statement_type
*wild
;
974 lang_input_statement_type
*file
;
977 const char *section_name
;
978 lang_statement_union_type
*l
;
980 if (! wild
->filenames_sorted
&& ! wild
->sections_sorted
)
983 section_name
= bfd_get_section_name (file
->the_bfd
, section
);
984 for (l
= wild
->children
.head
; l
!= NULL
; l
= l
->next
)
986 lang_input_section_type
*ls
;
988 if (l
->header
.type
!= lang_input_section_enum
)
990 ls
= &l
->input_section
;
992 /* Sorting by filename takes precedence over sorting by section
995 if (wild
->filenames_sorted
)
1001 /* The PE support for the .idata section as generated by
1002 dlltool assumes that files will be sorted by the name of
1003 the archive and then the name of the file within the
1006 if (file
->the_bfd
!= NULL
1007 && bfd_my_archive (file
->the_bfd
) != NULL
)
1009 fn
= bfd_get_filename (bfd_my_archive (file
->the_bfd
));
1014 fn
= file
->filename
;
1018 if (ls
->ifile
->the_bfd
!= NULL
1019 && bfd_my_archive (ls
->ifile
->the_bfd
) != NULL
)
1021 ln
= bfd_get_filename (bfd_my_archive (ls
->ifile
->the_bfd
));
1026 ln
= ls
->ifile
->filename
;
1030 i
= strcmp (fn
, ln
);
1039 fn
= file
->filename
;
1041 ln
= ls
->ifile
->filename
;
1043 i
= strcmp (fn
, ln
);
1051 /* Here either the files are not sorted by name, or we are
1052 looking at the sections for this file. */
1054 if (wild
->sections_sorted
)
1056 if (strcmp (section_name
,
1057 bfd_get_section_name (ls
->ifile
->the_bfd
,
1067 /* Expand a wild statement for a particular FILE. SECTION may be
1068 NULL, in which case it is a wild card. */
1071 wild_section (ptr
, section
, file
, output
)
1072 lang_wild_statement_type
*ptr
;
1073 const char *section
;
1074 lang_input_statement_type
*file
;
1075 lang_output_section_statement_type
*output
;
1077 if (file
->just_syms_flag
== false)
1079 register asection
*s
;
1082 if (section
== NULL
)
1085 wildcard
= wildcardp (section
);
1087 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
1091 /* Attach all sections named SECTION. If SECTION is NULL,
1092 then attach all sections.
1094 Previously, if SECTION was NULL, this code did not call
1095 wild_doit if the SEC_IS_COMMON flag was set for the
1096 section. I did not understand that, and I took it out.
1097 --ian@cygnus.com. */
1099 if (section
== NULL
)
1105 name
= bfd_get_section_name (file
->the_bfd
, s
);
1107 match
= fnmatch (section
, name
, 0) == 0 ? true : false;
1109 match
= strcmp (section
, name
) == 0 ? true : false;
1114 lang_statement_union_type
*before
;
1116 /* If the wild pattern was marked KEEP, the member sections
1117 should be as well. */
1118 if (ptr
->keep_sections
)
1119 s
->flags
|= SEC_KEEP
;
1121 before
= wild_sort (ptr
, file
, s
);
1123 /* Here BEFORE points to the lang_input_section which
1124 should follow the one we are about to add. If BEFORE
1125 is NULL, then the section should just go at the end
1126 of the current list. */
1129 wild_doit (&ptr
->children
, s
, output
, file
);
1132 lang_statement_list_type list
;
1133 lang_statement_union_type
**pp
;
1135 lang_list_init (&list
);
1136 wild_doit (&list
, s
, output
, file
);
1138 /* If we are discarding the section, LIST.HEAD will
1140 if (list
.head
!= NULL
)
1142 ASSERT (list
.head
->next
== NULL
);
1144 for (pp
= &ptr
->children
.head
;
1147 ASSERT (*pp
!= NULL
);
1149 list
.head
->next
= *pp
;
1158 /* This is passed a file name which must have been seen already and
1159 added to the statement tree. We will see if it has been opened
1160 already and had its symbols read. If not then we'll read it. */
1162 static lang_input_statement_type
*
1166 lang_input_statement_type
*search
;
1168 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
1169 search
!= (lang_input_statement_type
*) NULL
;
1170 search
= (lang_input_statement_type
*) search
->next_real_file
)
1172 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
1174 if (search
->filename
!= (char *) NULL
1175 && name
!= (char *) NULL
1176 && strcmp (search
->filename
, name
) == 0)
1180 if (search
== (lang_input_statement_type
*) NULL
)
1181 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
1184 /* If we have already added this file, or this file is not real
1185 (FIXME: can that ever actually happen?) or the name is NULL
1186 (FIXME: can that ever actually happen?) don't add this file. */
1189 || search
->filename
== (const char *) NULL
)
1192 load_symbols (search
, (lang_statement_list_type
*) NULL
);
1197 /* Get the symbols for an input file. */
1200 load_symbols (entry
, place
)
1201 lang_input_statement_type
*entry
;
1202 lang_statement_list_type
*place
;
1209 ldfile_open_file (entry
);
1211 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
1212 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
1215 lang_statement_list_type
*hold
;
1217 err
= bfd_get_error ();
1218 if (err
== bfd_error_file_ambiguously_recognized
)
1222 einfo (_("%B: file not recognized: %E\n"), entry
->the_bfd
);
1223 einfo (_("%B: matching formats:"), entry
->the_bfd
);
1224 for (p
= matching
; *p
!= NULL
; p
++)
1228 else if (err
!= bfd_error_file_not_recognized
1230 einfo (_("%F%B: file not recognized: %E\n"), entry
->the_bfd
);
1232 bfd_close (entry
->the_bfd
);
1233 entry
->the_bfd
= NULL
;
1235 /* See if the emulation has some special knowledge. */
1237 if (ldemul_unrecognized_file (entry
))
1240 /* Try to interpret the file as a linker script. */
1242 ldfile_open_command_file (entry
->filename
);
1247 ldfile_assumed_script
= true;
1248 parser_input
= input_script
;
1250 ldfile_assumed_script
= false;
1257 if (ldemul_recognized_file (entry
))
1260 /* We don't call ldlang_add_file for an archive. Instead, the
1261 add_symbols entry point will call ldlang_add_file, via the
1262 add_archive_element callback, for each element of the archive
1264 switch (bfd_get_format (entry
->the_bfd
))
1270 ldlang_add_file (entry
);
1271 if (trace_files
|| trace_file_tries
)
1272 info_msg ("%I\n", entry
);
1276 if (entry
->whole_archive
)
1278 bfd
*member
= bfd_openr_next_archived_file (entry
->the_bfd
,
1280 while (member
!= NULL
)
1282 if (! bfd_check_format (member
, bfd_object
))
1283 einfo (_("%F%B: object %B in archive is not object\n"),
1284 entry
->the_bfd
, member
);
1285 if (! ((*link_info
.callbacks
->add_archive_element
)
1286 (&link_info
, member
, "--whole-archive")))
1288 if (! bfd_link_add_symbols (member
, &link_info
))
1289 einfo (_("%F%B: could not read symbols: %E\n"), member
);
1290 member
= bfd_openr_next_archived_file (entry
->the_bfd
,
1294 entry
->loaded
= true;
1300 if (! bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
1301 einfo (_("%F%B: could not read symbols: %E\n"), entry
->the_bfd
);
1303 entry
->loaded
= true;
1306 /* Handle a wild statement for a single file F. */
1309 wild_file (s
, section
, f
, output
)
1310 lang_wild_statement_type
*s
;
1311 const char *section
;
1312 lang_input_statement_type
*f
;
1313 lang_output_section_statement_type
*output
;
1315 if (f
->the_bfd
== NULL
1316 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
1317 wild_section (s
, section
, f
, output
);
1322 /* This is an archive file. We must map each member of the
1323 archive separately. */
1324 member
= bfd_openr_next_archived_file (f
->the_bfd
, (bfd
*) NULL
);
1325 while (member
!= NULL
)
1327 /* When lookup_name is called, it will call the add_symbols
1328 entry point for the archive. For each element of the
1329 archive which is included, BFD will call ldlang_add_file,
1330 which will set the usrdata field of the member to the
1331 lang_input_statement. */
1332 if (member
->usrdata
!= NULL
)
1334 wild_section (s
, section
,
1335 (lang_input_statement_type
*) member
->usrdata
,
1339 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
1344 /* Handle a wild statement. SECTION or FILE or both may be NULL,
1345 indicating that it is a wildcard. Separate lang_input_section
1346 statements are created for each part of the expansion; they are
1347 added after the wild statement S. OUTPUT is the output section. */
1350 wild (s
, section
, file
, target
, output
)
1351 lang_wild_statement_type
*s
;
1352 const char *section
;
1355 lang_output_section_statement_type
*output
;
1357 lang_input_statement_type
*f
;
1359 if (file
== (char *) NULL
)
1361 /* Perform the iteration over all files in the list */
1362 for (f
= (lang_input_statement_type
*) file_chain
.head
;
1363 f
!= (lang_input_statement_type
*) NULL
;
1364 f
= (lang_input_statement_type
*) f
->next
)
1366 wild_file (s
, section
, f
, output
);
1369 else if (wildcardp (file
))
1371 for (f
= (lang_input_statement_type
*) file_chain
.head
;
1372 f
!= (lang_input_statement_type
*) NULL
;
1373 f
= (lang_input_statement_type
*) f
->next
)
1375 if (fnmatch (file
, f
->filename
, FNM_FILE_NAME
) == 0)
1376 wild_file (s
, section
, f
, output
);
1381 /* Perform the iteration over a single file */
1382 f
= lookup_name (file
);
1383 wild_file (s
, section
, f
, output
);
1386 if (section
!= (char *) NULL
1387 && strcmp (section
, "COMMON") == 0
1388 && default_common_section
== NULL
)
1390 /* Remember the section that common is going to in case we later
1391 get something which doesn't know where to put it. */
1392 default_common_section
= output
;
1396 /* Open the output file. */
1404 if (output_target
== (char *) NULL
)
1406 if (current_target
!= (char *) NULL
)
1407 output_target
= current_target
;
1409 output_target
= default_target
;
1411 output
= bfd_openw (name
, output_target
);
1413 if (output
== (bfd
*) NULL
)
1415 if (bfd_get_error () == bfd_error_invalid_target
)
1417 einfo (_("%P%F: target %s not found\n"), output_target
);
1419 einfo (_("%P%F: cannot open output file %s: %E\n"), name
);
1422 delete_output_file_on_failure
= true;
1424 /* output->flags |= D_PAGED;*/
1426 if (! bfd_set_format (output
, bfd_object
))
1427 einfo (_("%P%F:%s: can not make object file: %E\n"), name
);
1428 if (! bfd_set_arch_mach (output
,
1429 ldfile_output_architecture
,
1430 ldfile_output_machine
))
1431 einfo (_("%P%F:%s: can not set architecture: %E\n"), name
);
1433 link_info
.hash
= bfd_link_hash_table_create (output
);
1434 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
1435 einfo (_("%P%F: can not create link hash table: %E\n"));
1437 bfd_set_gp_size (output
, g_switch_value
);
1445 ldlang_open_output (statement
)
1446 lang_statement_union_type
* statement
;
1448 switch (statement
->header
.type
)
1450 case lang_output_statement_enum
:
1451 ASSERT (output_bfd
== (bfd
*) NULL
);
1452 output_bfd
= open_output (statement
->output_statement
.name
);
1453 ldemul_set_output_arch ();
1454 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
1455 output_bfd
->flags
|= D_PAGED
;
1457 output_bfd
->flags
&= ~D_PAGED
;
1458 if (config
.text_read_only
)
1459 output_bfd
->flags
|= WP_TEXT
;
1461 output_bfd
->flags
&= ~WP_TEXT
;
1462 if (link_info
.traditional_format
)
1463 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
1465 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
1468 case lang_target_statement_enum
:
1469 current_target
= statement
->target_statement
.target
;
1476 /* Open all the input files. */
1479 open_input_bfds (s
, force
)
1480 lang_statement_union_type
*s
;
1483 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1485 switch (s
->header
.type
)
1487 case lang_constructors_statement_enum
:
1488 open_input_bfds (constructor_list
.head
, force
);
1490 case lang_output_section_statement_enum
:
1491 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
1493 case lang_wild_statement_enum
:
1494 /* Maybe we should load the file's symbols */
1495 if (s
->wild_statement
.filename
1496 && ! wildcardp (s
->wild_statement
.filename
))
1497 (void) lookup_name (s
->wild_statement
.filename
);
1498 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1500 case lang_group_statement_enum
:
1502 struct bfd_link_hash_entry
*undefs
;
1504 /* We must continually search the entries in the group
1505 until no new symbols are added to the list of undefined
1510 undefs
= link_info
.hash
->undefs_tail
;
1511 open_input_bfds (s
->group_statement
.children
.head
, true);
1513 while (undefs
!= link_info
.hash
->undefs_tail
);
1516 case lang_target_statement_enum
:
1517 current_target
= s
->target_statement
.target
;
1519 case lang_input_statement_enum
:
1520 if (s
->input_statement
.real
== true)
1522 lang_statement_list_type add
;
1524 s
->input_statement
.target
= current_target
;
1526 /* If we are being called from within a group, and this
1527 is an archive which has already been searched, then
1528 force it to be researched. */
1530 && s
->input_statement
.loaded
1531 && bfd_check_format (s
->input_statement
.the_bfd
,
1533 s
->input_statement
.loaded
= false;
1535 lang_list_init (&add
);
1537 load_symbols (&s
->input_statement
, &add
);
1539 if (add
.head
!= NULL
)
1541 *add
.tail
= s
->next
;
1552 /* If there are [COMMONS] statements, put a wild one into the bss section */
1555 lang_reasonable_defaults ()
1558 lang_output_section_statement_lookup (".text");
1559 lang_output_section_statement_lookup (".data");
1561 default_common_section
=
1562 lang_output_section_statement_lookup (".bss");
1565 if (placed_commons
== false)
1567 lang_wild_statement_type
*new =
1568 new_stat (lang_wild_statement
,
1569 &default_common_section
->children
);
1571 new->section_name
= "COMMON";
1572 new->filename
= (char *) NULL
;
1573 lang_list_init (&new->children
);
1580 Add the supplied name to the symbol table as an undefined reference.
1581 Remove items from the chain as we open input bfds
1583 typedef struct ldlang_undef_chain_list
1585 struct ldlang_undef_chain_list
*next
;
1587 } ldlang_undef_chain_list_type
;
1589 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
1592 ldlang_add_undef (name
)
1593 CONST
char *CONST name
;
1595 ldlang_undef_chain_list_type
*new =
1596 ((ldlang_undef_chain_list_type
*)
1597 stat_alloc (sizeof (ldlang_undef_chain_list_type
)));
1599 new->next
= ldlang_undef_chain_list_head
;
1600 ldlang_undef_chain_list_head
= new;
1602 new->name
= buystring (name
);
1605 /* Run through the list of undefineds created above and place them
1606 into the linker hash table as undefined symbols belonging to the
1610 lang_place_undefineds ()
1612 ldlang_undef_chain_list_type
*ptr
;
1614 for (ptr
= ldlang_undef_chain_list_head
;
1615 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
1618 struct bfd_link_hash_entry
*h
;
1620 h
= bfd_link_hash_lookup (link_info
.hash
, ptr
->name
, true, false, true);
1621 if (h
== (struct bfd_link_hash_entry
*) NULL
)
1622 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1623 if (h
->type
== bfd_link_hash_new
)
1625 h
->type
= bfd_link_hash_undefined
;
1626 h
->u
.undef
.abfd
= NULL
;
1627 bfd_link_add_undef (link_info
.hash
, h
);
1632 /* Open input files and attatch to output sections */
1634 map_input_to_output_sections (s
, target
, output_section_statement
)
1635 lang_statement_union_type
* s
;
1637 lang_output_section_statement_type
* output_section_statement
;
1639 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1641 switch (s
->header
.type
)
1645 case lang_wild_statement_enum
:
1646 wild (&s
->wild_statement
, s
->wild_statement
.section_name
,
1647 s
->wild_statement
.filename
, target
,
1648 output_section_statement
);
1651 case lang_constructors_statement_enum
:
1652 map_input_to_output_sections (constructor_list
.head
,
1654 output_section_statement
);
1656 case lang_output_section_statement_enum
:
1657 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
1659 &s
->output_section_statement
);
1661 case lang_output_statement_enum
:
1663 case lang_target_statement_enum
:
1664 target
= s
->target_statement
.target
;
1666 case lang_group_statement_enum
:
1667 map_input_to_output_sections (s
->group_statement
.children
.head
,
1669 output_section_statement
);
1671 case lang_fill_statement_enum
:
1672 case lang_input_section_enum
:
1673 case lang_object_symbols_statement_enum
:
1674 case lang_data_statement_enum
:
1675 case lang_reloc_statement_enum
:
1676 case lang_padding_statement_enum
:
1677 case lang_input_statement_enum
:
1678 if (output_section_statement
!= NULL
1679 && output_section_statement
->bfd_section
== NULL
)
1680 init_os (output_section_statement
);
1682 case lang_assignment_statement_enum
:
1683 if (output_section_statement
!= NULL
1684 && output_section_statement
->bfd_section
== NULL
)
1685 init_os (output_section_statement
);
1687 /* Make sure that any sections mentioned in the assignment
1689 exp_init_os (s
->assignment_statement
.exp
);
1691 case lang_afile_asection_pair_statement_enum
:
1694 case lang_address_statement_enum
:
1695 /* Mark the specified section with the supplied address */
1697 lang_output_section_statement_type
*os
=
1698 lang_output_section_statement_lookup
1699 (s
->address_statement
.section_name
);
1701 if (os
->bfd_section
== NULL
)
1703 os
->addr_tree
= s
->address_statement
.address
;
1711 print_output_section_statement (output_section_statement
)
1712 lang_output_section_statement_type
* output_section_statement
;
1714 asection
*section
= output_section_statement
->bfd_section
;
1717 if (output_section_statement
!= abs_output_section
)
1719 minfo ("\n%s", output_section_statement
->name
);
1721 if (section
!= NULL
)
1723 print_dot
= section
->vma
;
1725 len
= strlen (output_section_statement
->name
);
1726 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
1731 while (len
< SECTION_NAME_MAP_LENGTH
)
1737 minfo ("0x%V %W", section
->vma
, section
->_raw_size
);
1739 if (output_section_statement
->load_base
!= NULL
)
1743 addr
= exp_get_abs_int (output_section_statement
->load_base
, 0,
1744 "load base", lang_final_phase_enum
);
1745 minfo (_(" load address 0x%V"), addr
);
1752 print_statement_list (output_section_statement
->children
.head
,
1753 output_section_statement
);
1757 print_assignment (assignment
, output_section
)
1758 lang_assignment_statement_type
* assignment
;
1759 lang_output_section_statement_type
* output_section
;
1762 etree_value_type result
;
1764 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
1767 result
= exp_fold_tree (assignment
->exp
->assign
.src
, output_section
,
1768 lang_final_phase_enum
, print_dot
, &print_dot
);
1770 minfo ("0x%V", result
.value
+ result
.section
->bfd_section
->vma
);
1781 exp_print_tree (assignment
->exp
);
1787 print_input_statement (statm
)
1788 lang_input_statement_type
* statm
;
1790 if (statm
->filename
!= (char *) NULL
)
1792 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
1796 /* Print all symbols defined in a particular section. This is called
1797 via bfd_link_hash_traverse. */
1800 print_one_symbol (hash_entry
, ptr
)
1801 struct bfd_link_hash_entry
*hash_entry
;
1804 asection
*sec
= (asection
*) ptr
;
1806 if ((hash_entry
->type
== bfd_link_hash_defined
1807 || hash_entry
->type
== bfd_link_hash_defweak
)
1808 && sec
== hash_entry
->u
.def
.section
)
1812 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
1815 (hash_entry
->u
.def
.value
1816 + hash_entry
->u
.def
.section
->output_offset
1817 + hash_entry
->u
.def
.section
->output_section
->vma
));
1819 minfo (" %T\n", hash_entry
->root
.string
);
1825 /* Print information about an input section to the map file. */
1828 print_input_section (in
)
1829 lang_input_section_type
* in
;
1831 asection
*i
= in
->section
;
1832 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
1838 minfo ("%s", i
->name
);
1840 if (i
->output_section
!= NULL
)
1844 len
= 1 + strlen (i
->name
);
1845 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
1850 while (len
< SECTION_NAME_MAP_LENGTH
)
1856 minfo ("0x%V %W %B\n",
1857 i
->output_section
->vma
+ i
->output_offset
, size
,
1860 if (i
->_cooked_size
!= 0 && i
->_cooked_size
!= i
->_raw_size
)
1862 len
= SECTION_NAME_MAP_LENGTH
+ 3;
1874 minfo (_("%W (size before relaxing)\n"), i
->_raw_size
);
1877 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
1879 print_dot
= i
->output_section
->vma
+ i
->output_offset
+ size
;
1885 print_fill_statement (fill
)
1886 lang_fill_statement_type
* fill
;
1888 fprintf (config
.map_file
, " FILL mask 0x%x\n", fill
->fill
);
1892 print_data_statement (data
)
1893 lang_data_statement_type
* data
;
1900 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
1903 addr
= data
->output_vma
;
1904 if (data
->output_section
!= NULL
)
1905 addr
+= data
->output_section
->vma
;
1933 minfo ("0x%V %W %s 0x%v", addr
, size
, name
, data
->value
);
1935 if (data
->exp
->type
.node_class
!= etree_value
)
1938 exp_print_tree (data
->exp
);
1943 print_dot
= addr
+ size
;
1946 /* Print an address statement. These are generated by options like
1950 print_address_statement (address
)
1951 lang_address_statement_type
*address
;
1953 minfo (_("Address of section %s set to "), address
->section_name
);
1954 exp_print_tree (address
->address
);
1958 /* Print a reloc statement. */
1961 print_reloc_statement (reloc
)
1962 lang_reloc_statement_type
*reloc
;
1968 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
1971 addr
= reloc
->output_vma
;
1972 if (reloc
->output_section
!= NULL
)
1973 addr
+= reloc
->output_section
->vma
;
1975 size
= bfd_get_reloc_size (reloc
->howto
);
1977 minfo ("0x%V %W RELOC %s ", addr
, size
, reloc
->howto
->name
);
1979 if (reloc
->name
!= NULL
)
1980 minfo ("%s+", reloc
->name
);
1982 minfo ("%s+", reloc
->section
->name
);
1984 exp_print_tree (reloc
->addend_exp
);
1988 print_dot
= addr
+ size
;
1992 print_padding_statement (s
)
1993 lang_padding_statement_type
*s
;
2000 len
= sizeof " *fill*" - 1;
2001 while (len
< SECTION_NAME_MAP_LENGTH
)
2007 addr
= s
->output_offset
;
2008 if (s
->output_section
!= NULL
)
2009 addr
+= s
->output_section
->vma
;
2010 minfo ("0x%V %W", addr
, s
->size
);
2013 minfo (" %u", s
->fill
);
2017 print_dot
= addr
+ s
->size
;
2021 print_wild_statement (w
, os
)
2022 lang_wild_statement_type
* w
;
2023 lang_output_section_statement_type
* os
;
2027 if (w
->filenames_sorted
)
2029 if (w
->filename
!= NULL
)
2030 minfo ("%s", w
->filename
);
2033 if (w
->filenames_sorted
)
2037 if (w
->sections_sorted
)
2039 if (w
->section_name
!= NULL
)
2040 minfo ("%s", w
->section_name
);
2043 if (w
->sections_sorted
)
2049 print_statement_list (w
->children
.head
, os
);
2052 /* Print a group statement. */
2056 lang_group_statement_type
*s
;
2057 lang_output_section_statement_type
*os
;
2059 fprintf (config
.map_file
, "START GROUP\n");
2060 print_statement_list (s
->children
.head
, os
);
2061 fprintf (config
.map_file
, "END GROUP\n");
2064 /* Print the list of statements in S.
2065 This can be called for any statement type. */
2068 print_statement_list (s
, os
)
2069 lang_statement_union_type
*s
;
2070 lang_output_section_statement_type
*os
;
2074 print_statement (s
, os
);
2079 /* Print the first statement in statement list S.
2080 This can be called for any statement type. */
2083 print_statement (s
, os
)
2084 lang_statement_union_type
*s
;
2085 lang_output_section_statement_type
*os
;
2087 switch (s
->header
.type
)
2090 fprintf (config
.map_file
, _("Fail with %d\n"), s
->header
.type
);
2093 case lang_constructors_statement_enum
:
2094 if (constructor_list
.head
!= NULL
)
2096 if (constructors_sorted
)
2097 minfo (" SORT (CONSTRUCTORS)\n");
2099 minfo (" CONSTRUCTORS\n");
2100 print_statement_list (constructor_list
.head
, os
);
2103 case lang_wild_statement_enum
:
2104 print_wild_statement (&s
->wild_statement
, os
);
2106 case lang_address_statement_enum
:
2107 print_address_statement (&s
->address_statement
);
2109 case lang_object_symbols_statement_enum
:
2110 minfo (" CREATE_OBJECT_SYMBOLS\n");
2112 case lang_fill_statement_enum
:
2113 print_fill_statement (&s
->fill_statement
);
2115 case lang_data_statement_enum
:
2116 print_data_statement (&s
->data_statement
);
2118 case lang_reloc_statement_enum
:
2119 print_reloc_statement (&s
->reloc_statement
);
2121 case lang_input_section_enum
:
2122 print_input_section (&s
->input_section
);
2124 case lang_padding_statement_enum
:
2125 print_padding_statement (&s
->padding_statement
);
2127 case lang_output_section_statement_enum
:
2128 print_output_section_statement (&s
->output_section_statement
);
2130 case lang_assignment_statement_enum
:
2131 print_assignment (&s
->assignment_statement
, os
);
2133 case lang_target_statement_enum
:
2134 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
2136 case lang_output_statement_enum
:
2137 minfo ("OUTPUT(%s", s
->output_statement
.name
);
2138 if (output_target
!= NULL
)
2139 minfo (" %s", output_target
);
2142 case lang_input_statement_enum
:
2143 print_input_statement (&s
->input_statement
);
2145 case lang_group_statement_enum
:
2146 print_group (&s
->group_statement
, os
);
2148 case lang_afile_asection_pair_statement_enum
:
2157 print_statement_list (statement_list
.head
, abs_output_section
);
2160 /* Print the first N statements in statement list S to STDERR.
2161 If N == 0, nothing is printed.
2162 If N < 0, the entire list is printed.
2163 Intended to be called from GDB. */
2166 dprint_statement (s
, n
)
2167 lang_statement_union_type
* s
;
2170 FILE *map_save
= config
.map_file
;
2172 config
.map_file
= stderr
;
2175 print_statement_list (s
, abs_output_section
);
2178 while (s
&& --n
>= 0)
2180 print_statement (s
, abs_output_section
);
2185 config
.map_file
= map_save
;
2189 insert_pad (this_ptr
, fill
, power
, output_section_statement
, dot
)
2190 lang_statement_union_type
** this_ptr
;
2193 asection
* output_section_statement
;
2196 /* Align this section first to the
2197 input sections requirement, then
2198 to the output section's requirement.
2199 If this alignment is > than any seen before,
2200 then record it too. Perform the alignment by
2201 inserting a magic 'padding' statement.
2204 unsigned int alignment_needed
= align_power (dot
, power
) - dot
;
2206 if (alignment_needed
!= 0)
2208 lang_statement_union_type
*new =
2209 ((lang_statement_union_type
*)
2210 stat_alloc (sizeof (lang_padding_statement_type
)));
2212 /* Link into existing chain */
2213 new->header
.next
= *this_ptr
;
2215 new->header
.type
= lang_padding_statement_enum
;
2216 new->padding_statement
.output_section
= output_section_statement
;
2217 new->padding_statement
.output_offset
=
2218 dot
- output_section_statement
->vma
;
2219 new->padding_statement
.fill
= fill
;
2220 new->padding_statement
.size
= alignment_needed
;
2224 /* Remember the most restrictive alignment */
2225 if (power
> output_section_statement
->alignment_power
)
2227 output_section_statement
->alignment_power
= power
;
2229 output_section_statement
->_raw_size
+= alignment_needed
;
2230 return alignment_needed
+ dot
;
2234 /* Work out how much this section will move the dot point */
2236 size_input_section (this_ptr
, output_section_statement
, fill
, dot
, relax
)
2237 lang_statement_union_type
** this_ptr
;
2238 lang_output_section_statement_type
* output_section_statement
;
2243 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
2244 asection
*i
= is
->section
;
2246 if (is
->ifile
->just_syms_flag
== false)
2248 if (output_section_statement
->subsection_alignment
!= -1)
2249 i
->alignment_power
=
2250 output_section_statement
->subsection_alignment
;
2252 dot
= insert_pad (this_ptr
, fill
, i
->alignment_power
,
2253 output_section_statement
->bfd_section
, dot
);
2255 /* Remember where in the output section this input section goes */
2257 i
->output_offset
= dot
- output_section_statement
->bfd_section
->vma
;
2259 /* Mark how big the output section must be to contain this now
2261 if (i
->_cooked_size
!= 0)
2262 dot
+= i
->_cooked_size
;
2264 dot
+= i
->_raw_size
;
2265 output_section_statement
->bfd_section
->_raw_size
= dot
- output_section_statement
->bfd_section
->vma
;
2269 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
2275 /* This variable indicates whether bfd_relax_section should be called
2278 static boolean relax_again
;
2280 /* Set the sizes for all the output sections. */
2283 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
2284 lang_statement_union_type
* s
;
2285 lang_output_section_statement_type
* output_section_statement
;
2286 lang_statement_union_type
** prev
;
2291 /* Size up the sections from their constituent parts. */
2292 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
2294 switch (s
->header
.type
)
2296 case lang_output_section_statement_enum
:
2299 lang_output_section_statement_type
*os
= &s
->output_section_statement
;
2301 if (os
->bfd_section
== NULL
)
2302 /* This section was never actually created. */
2305 /* If this is a COFF shared library section, use the size and
2306 address from the input section. FIXME: This is COFF
2307 specific; it would be cleaner if there were some other way
2308 to do this, but nothing simple comes to mind. */
2309 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
2313 if (os
->children
.head
== NULL
2314 || os
->children
.head
->next
!= NULL
2315 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
2316 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2319 input
= os
->children
.head
->input_section
.section
;
2320 bfd_set_section_vma (os
->bfd_section
->owner
,
2322 bfd_section_vma (input
->owner
, input
));
2323 os
->bfd_section
->_raw_size
= input
->_raw_size
;
2327 if (bfd_is_abs_section (os
->bfd_section
))
2329 /* No matter what happens, an abs section starts at zero. */
2330 ASSERT (os
->bfd_section
->vma
== 0);
2334 if (os
->addr_tree
== (etree_type
*) NULL
)
2336 /* No address specified for this section, get one
2337 from the region specification. */
2338 if (os
->region
== (lang_memory_region_type
*) NULL
2339 || (((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2340 & (SEC_ALLOC
| SEC_LOAD
)) != 0)
2341 && os
->region
->name
[0] == '*'
2342 && strcmp (os
->region
->name
, "*default*") == 0))
2344 os
->region
= lang_memory_default (os
->bfd_section
);
2347 /* If a loadable section is using the default memory
2348 region, and some non default memory regions were
2349 defined, issue a warning. */
2350 if ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2351 & (SEC_ALLOC
| SEC_LOAD
)) != 0
2352 && ! link_info
.relocateable
2353 && strcmp (os
->region
->name
, "*default*") == 0
2354 && lang_memory_region_list
!= NULL
2355 && (strcmp (lang_memory_region_list
->name
, "*default*") != 0
2356 || lang_memory_region_list
->next
!= NULL
))
2357 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2358 bfd_get_section_name (output_bfd
, os
->bfd_section
));
2360 dot
= os
->region
->current
;
2362 if (os
->section_alignment
== -1)
2367 dot
= align_power (dot
, os
->bfd_section
->alignment_power
);
2369 if (dot
!= olddot
&& config
.warn_section_align
)
2370 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2371 os
->name
, (unsigned int) (dot
- olddot
));
2378 r
= exp_fold_tree (os
->addr_tree
,
2380 lang_allocating_phase_enum
,
2382 if (r
.valid
== false)
2384 einfo (_("%F%S: non constant address expression for section %s\n"),
2387 dot
= r
.value
+ r
.section
->bfd_section
->vma
;
2390 /* The section starts here.
2391 First, align to what the section needs. */
2393 if (os
->section_alignment
!= -1)
2394 dot
= align_power (dot
, os
->section_alignment
);
2396 bfd_set_section_vma (0, os
->bfd_section
, dot
);
2398 os
->bfd_section
->output_offset
= 0;
2401 (void) lang_size_sections (os
->children
.head
, os
, &os
->children
.head
,
2402 os
->fill
, dot
, relax
);
2404 /* Ignore the size of the input sections, use the vma and size to
2407 after
= ALIGN_N (os
->bfd_section
->vma
+
2408 os
->bfd_section
->_raw_size
,
2409 /* The coercion here is important, see ld.h. */
2410 (bfd_vma
) os
->block_value
);
2412 if (bfd_is_abs_section (os
->bfd_section
))
2413 ASSERT (after
== os
->bfd_section
->vma
);
2415 os
->bfd_section
->_raw_size
= after
- os
->bfd_section
->vma
;
2416 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
2417 os
->processed
= true;
2419 /* Update dot in the region ?
2420 We only do this if the section is going to be allocated,
2421 since unallocated sections do not contribute to the region's
2422 overall size in memory. */
2423 if (os
->region
!= (lang_memory_region_type
*) NULL
2424 && bfd_get_section_flags (output_bfd
, os
->bfd_section
) & SEC_ALLOC
)
2426 os
->region
->current
= dot
;
2428 /* Make sure this isn't silly. */
2429 if (os
->region
->current
< os
->region
->origin
2430 || (os
->region
->current
- os
->region
->origin
2431 > os
->region
->length
))
2433 if (os
->addr_tree
!= (etree_type
*) NULL
)
2435 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2436 os
->region
->current
,
2437 os
->bfd_section
->owner
,
2438 os
->bfd_section
->name
,
2443 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2445 os
->bfd_section
->owner
,
2446 os
->bfd_section
->name
);
2448 /* Reset the region pointer. */
2449 os
->region
->current
= os
->region
->origin
;
2455 case lang_constructors_statement_enum
:
2456 dot
= lang_size_sections (constructor_list
.head
,
2457 output_section_statement
,
2458 &s
->wild_statement
.children
.head
,
2463 case lang_data_statement_enum
:
2465 unsigned int size
= 0;
2467 s
->data_statement
.output_vma
= dot
- output_section_statement
->bfd_section
->vma
;
2468 s
->data_statement
.output_section
=
2469 output_section_statement
->bfd_section
;
2471 switch (s
->data_statement
.type
)
2489 output_section_statement
->bfd_section
->_raw_size
+= size
;
2490 /* The output section gets contents, and then we inspect for
2491 any flags set in the input script which override any ALLOC. */
2492 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
2493 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
)) {
2494 output_section_statement
->bfd_section
->flags
|= SEC_ALLOC
| SEC_LOAD
;
2499 case lang_reloc_statement_enum
:
2503 s
->reloc_statement
.output_vma
=
2504 dot
- output_section_statement
->bfd_section
->vma
;
2505 s
->reloc_statement
.output_section
=
2506 output_section_statement
->bfd_section
;
2507 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
2509 output_section_statement
->bfd_section
->_raw_size
+= size
;
2513 case lang_wild_statement_enum
:
2515 dot
= lang_size_sections (s
->wild_statement
.children
.head
,
2516 output_section_statement
,
2517 &s
->wild_statement
.children
.head
,
2523 case lang_object_symbols_statement_enum
:
2524 link_info
.create_object_symbols_section
=
2525 output_section_statement
->bfd_section
;
2527 case lang_output_statement_enum
:
2528 case lang_target_statement_enum
:
2530 case lang_input_section_enum
:
2534 i
= (*prev
)->input_section
.section
;
2537 if (i
->_cooked_size
== 0)
2538 i
->_cooked_size
= i
->_raw_size
;
2544 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
2545 einfo (_("%P%F: can't relax section: %E\n"));
2549 dot
= size_input_section (prev
,
2550 output_section_statement
,
2551 output_section_statement
->fill
,
2555 case lang_input_statement_enum
:
2557 case lang_fill_statement_enum
:
2558 s
->fill_statement
.output_section
= output_section_statement
->bfd_section
;
2560 fill
= s
->fill_statement
.fill
;
2562 case lang_assignment_statement_enum
:
2564 bfd_vma newdot
= dot
;
2566 exp_fold_tree (s
->assignment_statement
.exp
,
2567 output_section_statement
,
2568 lang_allocating_phase_enum
,
2574 /* The assignment changed dot. Insert a pad. */
2575 if (output_section_statement
== abs_output_section
)
2577 /* If we don't have an output section, then just adjust
2578 the default memory address. */
2579 lang_memory_region_lookup ("*default*")->current
= newdot
;
2583 lang_statement_union_type
*new =
2584 ((lang_statement_union_type
*)
2585 stat_alloc (sizeof (lang_padding_statement_type
)));
2587 /* Link into existing chain. */
2588 new->header
.next
= *prev
;
2590 new->header
.type
= lang_padding_statement_enum
;
2591 new->padding_statement
.output_section
=
2592 output_section_statement
->bfd_section
;
2593 new->padding_statement
.output_offset
=
2594 dot
- output_section_statement
->bfd_section
->vma
;
2595 new->padding_statement
.fill
= fill
;
2596 new->padding_statement
.size
= newdot
- dot
;
2597 output_section_statement
->bfd_section
->_raw_size
+=
2598 new->padding_statement
.size
;
2606 case lang_padding_statement_enum
:
2607 /* If we are relaxing, and this is not the first pass, some
2608 padding statements may have been inserted during previous
2609 passes. We may have to move the padding statement to a new
2610 location if dot has a different value at this point in this
2611 pass than it did at this point in the previous pass. */
2612 s
->padding_statement
.output_offset
=
2613 dot
- output_section_statement
->bfd_section
->vma
;
2614 dot
+= s
->padding_statement
.size
;
2615 output_section_statement
->bfd_section
->_raw_size
+=
2616 s
->padding_statement
.size
;
2619 case lang_group_statement_enum
:
2620 dot
= lang_size_sections (s
->group_statement
.children
.head
,
2621 output_section_statement
,
2622 &s
->group_statement
.children
.head
,
2630 /* This can only get here when relaxing is turned on. */
2632 case lang_address_statement_enum
:
2635 prev
= &s
->header
.next
;
2641 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
2642 lang_statement_union_type
* s
;
2643 lang_output_section_statement_type
* output_section_statement
;
2647 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
2649 switch (s
->header
.type
)
2651 case lang_constructors_statement_enum
:
2652 dot
= lang_do_assignments (constructor_list
.head
,
2653 output_section_statement
,
2658 case lang_output_section_statement_enum
:
2660 lang_output_section_statement_type
*os
=
2661 &(s
->output_section_statement
);
2663 if (os
->bfd_section
!= NULL
)
2665 dot
= os
->bfd_section
->vma
;
2666 (void) lang_do_assignments (os
->children
.head
, os
,
2668 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
2672 /* If nothing has been placed into the output section then
2673 it won't have a bfd_section. */
2674 if (os
->bfd_section
)
2676 os
->bfd_section
->lma
2677 = exp_get_abs_int(os
->load_base
, 0,"load base", lang_final_phase_enum
);
2682 case lang_wild_statement_enum
:
2684 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
2685 output_section_statement
,
2690 case lang_object_symbols_statement_enum
:
2691 case lang_output_statement_enum
:
2692 case lang_target_statement_enum
:
2694 case lang_common_statement_enum
:
2697 case lang_data_statement_enum
:
2699 etree_value_type value
;
2701 value
= exp_fold_tree (s
->data_statement
.exp
,
2703 lang_final_phase_enum
, dot
, &dot
);
2704 s
->data_statement
.value
= value
.value
;
2705 if (value
.valid
== false)
2706 einfo (_("%F%P: invalid data statement\n"));
2708 switch (s
->data_statement
.type
)
2726 case lang_reloc_statement_enum
:
2728 etree_value_type value
;
2730 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
2732 lang_final_phase_enum
, dot
, &dot
);
2733 s
->reloc_statement
.addend_value
= value
.value
;
2734 if (value
.valid
== false)
2735 einfo (_("%F%P: invalid reloc statement\n"));
2737 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
);
2740 case lang_input_section_enum
:
2742 asection
*in
= s
->input_section
.section
;
2744 if (in
->_cooked_size
!= 0)
2745 dot
+= in
->_cooked_size
;
2747 dot
+= in
->_raw_size
;
2751 case lang_input_statement_enum
:
2753 case lang_fill_statement_enum
:
2754 fill
= s
->fill_statement
.fill
;
2756 case lang_assignment_statement_enum
:
2758 exp_fold_tree (s
->assignment_statement
.exp
,
2759 output_section_statement
,
2760 lang_final_phase_enum
,
2766 case lang_padding_statement_enum
:
2767 dot
+= s
->padding_statement
.size
;
2770 case lang_group_statement_enum
:
2771 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
2772 output_section_statement
,
2780 case lang_address_statement_enum
:
2788 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
2789 operator .startof. (section_name), it produces an undefined symbol
2790 .startof.section_name. Similarly, when it sees
2791 .sizeof. (section_name), it produces an undefined symbol
2792 .sizeof.section_name. For all the output sections, we look for
2793 such symbols, and set them to the correct value. */
2800 if (link_info
.relocateable
)
2803 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2805 const char *secname
;
2807 struct bfd_link_hash_entry
*h
;
2809 secname
= bfd_get_section_name (output_bfd
, s
);
2810 buf
= xmalloc (10 + strlen (secname
));
2812 sprintf (buf
, ".startof.%s", secname
);
2813 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
2814 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
2816 h
->type
= bfd_link_hash_defined
;
2817 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
2818 h
->u
.def
.section
= bfd_abs_section_ptr
;
2821 sprintf (buf
, ".sizeof.%s", secname
);
2822 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
2823 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
2825 h
->type
= bfd_link_hash_defined
;
2826 if (s
->_cooked_size
!= 0)
2827 h
->u
.def
.value
= s
->_cooked_size
;
2829 h
->u
.def
.value
= s
->_raw_size
;
2830 h
->u
.def
.section
= bfd_abs_section_ptr
;
2840 struct bfd_link_hash_entry
*h
;
2843 if (link_info
.relocateable
|| link_info
.shared
)
2848 if (entry_symbol
== (char *) NULL
)
2850 /* No entry has been specified. Look for start, but don't warn
2851 if we don't find it. */
2852 entry_symbol
= "start";
2856 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
2857 if (h
!= (struct bfd_link_hash_entry
*) NULL
2858 && (h
->type
== bfd_link_hash_defined
2859 || h
->type
== bfd_link_hash_defweak
)
2860 && h
->u
.def
.section
->output_section
!= NULL
)
2864 val
= (h
->u
.def
.value
2865 + bfd_get_section_vma (output_bfd
,
2866 h
->u
.def
.section
->output_section
)
2867 + h
->u
.def
.section
->output_offset
);
2868 if (! bfd_set_start_address (output_bfd
, val
))
2869 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol
);
2876 /* We couldn't find the entry symbol. Try parsing it as a
2878 val
= bfd_scan_vma (entry_symbol
, &send
, 0);
2881 if (! bfd_set_start_address (output_bfd
, val
))
2882 einfo (_("%P%F: can't set start address\n"));
2888 /* Can't find the entry symbol, and it's not a number. Use
2889 the first address in the text section. */
2890 ts
= bfd_get_section_by_name (output_bfd
, ".text");
2891 if (ts
!= (asection
*) NULL
)
2894 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
2895 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
2896 if (! bfd_set_start_address (output_bfd
,
2897 bfd_get_section_vma (output_bfd
,
2899 einfo (_("%P%F: can't set start address\n"));
2904 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
2911 /* This is a small function used when we want to ignore errors from
2915 #ifdef ANSI_PROTOTYPES
2916 ignore_bfd_errors (const char *s
, ...)
2918 ignore_bfd_errors (s
)
2922 /* Don't do anything. */
2925 /* Check that the architecture of all the input files is compatible
2926 with the output file. Also call the backend to let it do any
2927 other checking that is needed. */
2932 lang_statement_union_type
*file
;
2934 CONST bfd_arch_info_type
*compatible
;
2936 for (file
= file_chain
.head
;
2937 file
!= (lang_statement_union_type
*) NULL
;
2938 file
= file
->input_statement
.next
)
2940 input_bfd
= file
->input_statement
.the_bfd
;
2941 compatible
= bfd_arch_get_compatible (input_bfd
,
2943 if (compatible
== NULL
)
2945 if (command_line
.warn_mismatch
)
2946 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
2947 bfd_printable_name (input_bfd
), input_bfd
,
2948 bfd_printable_name (output_bfd
));
2952 bfd_error_handler_type pfn
= NULL
;
2954 /* If we aren't supposed to warn about mismatched input
2955 files, temporarily set the BFD error handler to a
2956 function which will do nothing. We still want to call
2957 bfd_merge_private_bfd_data, since it may set up
2958 information which is needed in the output file. */
2959 if (! command_line
.warn_mismatch
)
2960 pfn
= bfd_set_error_handler (ignore_bfd_errors
);
2961 if (! bfd_merge_private_bfd_data (input_bfd
, output_bfd
))
2963 if (command_line
.warn_mismatch
)
2964 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
2967 if (! command_line
.warn_mismatch
)
2968 bfd_set_error_handler (pfn
);
2973 /* Look through all the global common symbols and attach them to the
2974 correct section. The -sort-common command line switch may be used
2975 to roughly sort the entries by size. */
2980 if (link_info
.relocateable
2981 && ! command_line
.force_common_definition
)
2984 if (! config
.sort_common
)
2985 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
2990 for (power
= 4; power
>= 0; power
--)
2991 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
2996 /* Place one common symbol in the correct section. */
2999 lang_one_common (h
, info
)
3000 struct bfd_link_hash_entry
*h
;
3003 unsigned int power_of_two
;
3007 if (h
->type
!= bfd_link_hash_common
)
3011 power_of_two
= h
->u
.c
.p
->alignment_power
;
3013 if (config
.sort_common
3014 && power_of_two
< (unsigned int) *(int *) info
)
3017 section
= h
->u
.c
.p
->section
;
3019 /* Increase the size of the section. */
3020 section
->_cooked_size
= ALIGN_N (section
->_cooked_size
,
3021 (bfd_size_type
) (1 << power_of_two
));
3023 /* Adjust the alignment if necessary. */
3024 if (power_of_two
> section
->alignment_power
)
3025 section
->alignment_power
= power_of_two
;
3027 /* Change the symbol from common to defined. */
3028 h
->type
= bfd_link_hash_defined
;
3029 h
->u
.def
.section
= section
;
3030 h
->u
.def
.value
= section
->_cooked_size
;
3032 /* Increase the size of the section. */
3033 section
->_cooked_size
+= size
;
3035 /* Make sure the section is allocated in memory, and make sure that
3036 it is no longer a common section. */
3037 section
->flags
|= SEC_ALLOC
;
3038 section
->flags
&= ~ SEC_IS_COMMON
;
3040 if (config
.map_file
!= NULL
)
3042 static boolean header_printed
;
3047 if (! header_printed
)
3049 minfo (_("\nAllocating common symbols\n"));
3050 minfo (_("Common symbol size file\n\n"));
3051 header_printed
= true;
3054 name
= demangle (h
->root
.string
);
3056 len
= strlen (name
);
3071 if (size
<= 0xffffffff)
3072 sprintf (buf
, "%lx", (unsigned long) size
);
3074 sprintf_vma (buf
, size
);
3084 minfo ("%B\n", section
->owner
);
3091 run through the input files and ensure that every input
3092 section has somewhere to go. If one is found without
3093 a destination then create an input request and place it
3094 into the statement tree.
3098 lang_place_orphans ()
3100 lang_input_statement_type
*file
;
3102 for (file
= (lang_input_statement_type
*) file_chain
.head
;
3103 file
!= (lang_input_statement_type
*) NULL
;
3104 file
= (lang_input_statement_type
*) file
->next
)
3108 for (s
= file
->the_bfd
->sections
;
3109 s
!= (asection
*) NULL
;
3112 if (s
->output_section
== (asection
*) NULL
)
3114 /* This section of the file is not attatched, root
3115 around for a sensible place for it to go */
3117 if (file
->just_syms_flag
)
3119 /* We are only retrieving symbol values from this
3120 file. We want the symbols to act as though the
3121 values in the file are absolute. */
3122 s
->output_section
= bfd_abs_section_ptr
;
3123 s
->output_offset
= s
->vma
;
3125 else if (strcmp (s
->name
, "COMMON") == 0)
3127 /* This is a lonely common section which must have
3128 come from an archive. We attach to the section
3129 with the wildcard. */
3130 if (! link_info
.relocateable
3131 || command_line
.force_common_definition
)
3133 if (default_common_section
== NULL
)
3136 /* This message happens when using the
3137 svr3.ifile linker script, so I have
3139 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3141 default_common_section
=
3142 lang_output_section_statement_lookup (".bss");
3145 wild_doit (&default_common_section
->children
, s
,
3146 default_common_section
, file
);
3149 else if (ldemul_place_orphan (file
, s
))
3153 lang_output_section_statement_type
*os
=
3154 lang_output_section_statement_lookup (s
->name
);
3156 wild_doit (&os
->children
, s
, os
, file
);
3165 lang_set_flags (ptr
, flags
)
3166 lang_memory_region_type
*ptr
;
3169 flagword
*ptr_flags
= &ptr
->flags
;
3171 ptr
->flags
= ptr
->not_flags
= 0;
3177 ptr_flags
= (ptr_flags
== &ptr
->flags
) ? &ptr
->not_flags
: &ptr
->flags
;
3181 *ptr_flags
|= SEC_ALLOC
;
3185 *ptr_flags
|= SEC_READONLY
;
3189 *ptr_flags
|= SEC_DATA
;
3193 *ptr_flags
|= SEC_CODE
;
3198 *ptr_flags
|= SEC_LOAD
;
3202 einfo (_("%P%F: invalid syntax in flags\n"));
3209 /* Call a function on each input file. This function will be called
3210 on an archive, but not on the elements. */
3213 lang_for_each_input_file (func
)
3214 void (*func
) PARAMS ((lang_input_statement_type
*));
3216 lang_input_statement_type
*f
;
3218 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
3220 f
= (lang_input_statement_type
*) f
->next_real_file
)
3224 /* Call a function on each file. The function will be called on all
3225 the elements of an archive which are included in the link, but will
3226 not be called on the archive file itself. */
3229 lang_for_each_file (func
)
3230 void (*func
) PARAMS ((lang_input_statement_type
*));
3232 lang_input_statement_type
*f
;
3234 for (f
= (lang_input_statement_type
*) file_chain
.head
;
3235 f
!= (lang_input_statement_type
*) NULL
;
3236 f
= (lang_input_statement_type
*) f
->next
)
3247 lang_for_each_input_section (func
)
3248 void (*func
) PARAMS ((bfd
* ab
, asection
* as
));
3250 lang_input_statement_type
*f
;
3252 for (f
= (lang_input_statement_type
*) file_chain
.head
;
3253 f
!= (lang_input_statement_type
*) NULL
;
3254 f
= (lang_input_statement_type
*) f
->next
)
3258 for (s
= f
->the_bfd
->sections
;
3259 s
!= (asection
*) NULL
;
3262 func (f
->the_bfd
, s
);
3270 ldlang_add_file (entry
)
3271 lang_input_statement_type
* entry
;
3275 lang_statement_append (&file_chain
,
3276 (lang_statement_union_type
*) entry
,
3279 /* The BFD linker needs to have a list of all input BFDs involved in
3281 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
3282 ASSERT (entry
->the_bfd
!= output_bfd
);
3283 for (pp
= &link_info
.input_bfds
;
3284 *pp
!= (bfd
*) NULL
;
3285 pp
= &(*pp
)->link_next
)
3287 *pp
= entry
->the_bfd
;
3288 entry
->the_bfd
->usrdata
= (PTR
) entry
;
3289 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
3291 /* Look through the sections and check for any which should not be
3292 included in the link. We need to do this now, so that we can
3293 notice when the backend linker tries to report multiple
3294 definition errors for symbols which are in sections we aren't
3295 going to link. FIXME: It might be better to entirely ignore
3296 symbols which are defined in sections which are going to be
3297 discarded. This would require modifying the backend linker for
3298 each backend which might set the SEC_LINK_ONCE flag. If we do
3299 this, we should probably handle SEC_EXCLUDE in the same way. */
3301 bfd_map_over_sections (entry
->the_bfd
, section_already_linked
, (PTR
) entry
);
3305 lang_add_output (name
, from_script
)
3309 /* Make -o on command line override OUTPUT in script. */
3310 if (had_output_filename
== false || !from_script
)
3312 output_filename
= name
;
3313 had_output_filename
= true;
3318 static lang_output_section_statement_type
*current_section
;
3330 for (l
= 0; l
< 32; l
++)
3332 if (i
>= (unsigned int) x
)
3341 lang_enter_output_section_statement (output_section_statement_name
,
3342 address_exp
, sectype
, block_value
,
3343 align
, subalign
, ebase
)
3344 const char *output_section_statement_name
;
3345 etree_type
* address_exp
;
3346 enum section_type sectype
;
3347 bfd_vma block_value
;
3349 etree_type
*subalign
;
3352 lang_output_section_statement_type
*os
;
3356 lang_output_section_statement_lookup (output_section_statement_name
);
3360 /* Add this statement to tree */
3361 /* add_statement(lang_output_section_statement_enum,
3362 output_section_statement);*/
3363 /* Make next things chain into subchain of this */
3365 if (os
->addr_tree
==
3366 (etree_type
*) NULL
)
3371 os
->sectype
= sectype
;
3372 if (sectype
!= noload_section
)
3373 os
->flags
= SEC_NO_FLAGS
;
3375 os
->flags
= SEC_NEVER_LOAD
;
3376 os
->block_value
= block_value
? block_value
: 1;
3377 stat_ptr
= &os
->children
;
3379 os
->subsection_alignment
= topower(
3380 exp_get_value_int(subalign
, -1,
3381 "subsection alignment",
3383 os
->section_alignment
= topower(
3384 exp_get_value_int(align
, -1,
3385 "section alignment", 0));
3387 os
->load_base
= ebase
;
3394 lang_output_statement_type
*new =
3395 new_stat (lang_output_statement
, stat_ptr
);
3397 new->name
= output_filename
;
3400 /* Reset the current counters in the regions */
3402 reset_memory_regions ()
3404 lang_memory_region_type
*p
= lang_memory_region_list
;
3406 for (p
= lang_memory_region_list
;
3407 p
!= (lang_memory_region_type
*) NULL
;
3410 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
3411 p
->current
= p
->origin
;
3415 /* ??? At some point this traversal for GC should share code with the
3416 traversal for manipulating the output file. */
3418 /* Expand a wild statement for a particular FILE, marking its sections KEEP
3419 as needed. SECTION may be NULL, in which case it is a wild card. */
3422 lang_gc_wild_section (ptr
, section
, file
)
3423 lang_wild_statement_type
*ptr
;
3424 const char *section
;
3425 lang_input_statement_type
*file
;
3427 if (file
->just_syms_flag
== false)
3429 register asection
*s
;
3432 if (section
== NULL
)
3435 wildcard
= wildcardp (section
);
3437 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3441 if (section
== NULL
)
3447 name
= bfd_get_section_name (file
->the_bfd
, s
);
3449 match
= fnmatch (section
, name
, 0) == 0 ? true : false;
3451 match
= strcmp (section
, name
) == 0 ? true : false;
3456 /* If the wild pattern was marked KEEP, the member sections
3457 should be as well. */
3458 if (ptr
->keep_sections
)
3459 s
->flags
|= SEC_KEEP
;
3465 /* Handle a wild statement for a single file F. */
3468 lang_gc_wild_file (s
, section
, f
)
3469 lang_wild_statement_type
*s
;
3470 const char *section
;
3471 lang_input_statement_type
*f
;
3473 if (f
->the_bfd
== NULL
3474 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
3475 lang_gc_wild_section (s
, section
, f
);
3480 /* This is an archive file. We must map each member of the
3481 archive separately. */
3482 member
= bfd_openr_next_archived_file (f
->the_bfd
, (bfd
*) NULL
);
3483 while (member
!= NULL
)
3485 /* When lookup_name is called, it will call the add_symbols
3486 entry point for the archive. For each element of the
3487 archive which is included, BFD will call ldlang_add_file,
3488 which will set the usrdata field of the member to the
3489 lang_input_statement. */
3490 if (member
->usrdata
!= NULL
)
3492 lang_gc_wild_section (s
, section
,
3493 (lang_input_statement_type
*) member
->usrdata
);
3496 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
3501 /* Handle a wild statement, marking it against GC. SECTION or FILE or both
3502 may be NULL, indicating that it is a wildcard. */
3505 lang_gc_wild (s
, section
, file
)
3506 lang_wild_statement_type
*s
;
3507 const char *section
;
3510 lang_input_statement_type
*f
;
3512 if (file
== (char *) NULL
)
3514 /* Perform the iteration over all files in the list */
3515 for (f
= (lang_input_statement_type
*) file_chain
.head
;
3516 f
!= (lang_input_statement_type
*) NULL
;
3517 f
= (lang_input_statement_type
*) f
->next
)
3519 lang_gc_wild_file (s
, section
, f
);
3522 else if (wildcardp (file
))
3524 for (f
= (lang_input_statement_type
*) file_chain
.head
;
3525 f
!= (lang_input_statement_type
*) NULL
;
3526 f
= (lang_input_statement_type
*) f
->next
)
3528 if (fnmatch (file
, f
->filename
, FNM_FILE_NAME
) == 0)
3529 lang_gc_wild_file (s
, section
, f
);
3534 /* Perform the iteration over a single file */
3535 f
= lookup_name (file
);
3536 lang_gc_wild_file (s
, section
, f
);
3540 /* Iterate over sections marking them against GC. */
3543 lang_gc_sections_1 (s
)
3544 lang_statement_union_type
* s
;
3546 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
3548 switch (s
->header
.type
)
3550 case lang_wild_statement_enum
:
3551 lang_gc_wild (&s
->wild_statement
,
3552 s
->wild_statement
.section_name
,
3553 s
->wild_statement
.filename
);
3555 case lang_constructors_statement_enum
:
3556 lang_gc_sections_1 (constructor_list
.head
);
3558 case lang_output_section_statement_enum
:
3559 lang_gc_sections_1 (s
->output_section_statement
.children
.head
);
3561 case lang_group_statement_enum
:
3562 lang_gc_sections_1 (s
->group_statement
.children
.head
);
3573 struct bfd_link_hash_entry
*h
;
3574 ldlang_undef_chain_list_type
*ulist
, fake_list_start
;
3576 /* Keep all sections so marked in the link script. */
3578 lang_gc_sections_1 (statement_list
.head
);
3580 /* Keep all sections containing symbols undefined on the command-line.
3581 Handle the entry symbol at the same time. */
3583 fake_list_start
.next
= ldlang_undef_chain_list_head
;
3584 fake_list_start
.name
= (char *) entry_symbol
;
3586 for (ulist
= &fake_list_start
; ulist
; ulist
= ulist
->next
)
3588 h
= bfd_link_hash_lookup (link_info
.hash
, ulist
->name
,
3589 false, false, false);
3591 if (h
!= (struct bfd_link_hash_entry
*) NULL
3592 && (h
->type
== bfd_link_hash_defined
3593 || h
->type
== bfd_link_hash_defweak
)
3594 && ! bfd_is_abs_section (h
->u
.def
.section
))
3596 h
->u
.def
.section
->flags
|= SEC_KEEP
;
3600 bfd_gc_sections (output_bfd
, &link_info
);
3606 lang_reasonable_defaults ();
3607 current_target
= default_target
;
3609 lang_for_each_statement (ldlang_open_output
); /* Open the output file */
3611 ldemul_create_output_section_statements ();
3613 /* Add to the hash table all undefineds on the command line */
3614 lang_place_undefineds ();
3616 /* Create a bfd for each input file */
3617 current_target
= default_target
;
3618 open_input_bfds (statement_list
.head
, false);
3620 ldemul_after_open ();
3622 /* Make sure that we're not mixing architectures. We call this
3623 after all the input files have been opened, but before we do any
3624 other processing, so that any operations merge_private_bfd_data
3625 does on the output file will be known during the rest of the
3629 /* Handle .exports instead of a version script if we're told to do so. */
3630 if (command_line
.version_exports_section
)
3631 lang_do_version_exports_section ();
3633 /* Build all sets based on the information gathered from the input
3635 ldctor_build_sets ();
3637 /* Remove unreferenced sections if asked to. */
3638 if (command_line
.gc_sections
)
3639 lang_gc_sections ();
3641 /* Size up the common data */
3644 /* Run through the contours of the script and attach input sections
3645 to the correct output sections
3647 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
3648 (lang_output_section_statement_type
*) NULL
);
3651 /* Find any sections not attached explicitly and handle them */
3652 lang_place_orphans ();
3654 ldemul_before_allocation ();
3656 /* We must record the program headers before we try to fix the
3657 section positions, since they will affect SIZEOF_HEADERS. */
3658 lang_record_phdrs ();
3660 /* Now run around and relax if we can */
3661 if (command_line
.relax
)
3663 /* First time round is a trial run to get the 'worst case'
3664 addresses of the objects if there was no relaxing. */
3665 lang_size_sections (statement_list
.head
,
3667 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
3669 /* Keep relaxing until bfd_relax_section gives up. */
3672 reset_memory_regions ();
3674 relax_again
= false;
3676 /* Note: pe-dll.c does something like this also. If you find
3677 you need to change this code, you probably need to change
3678 pe-dll.c also. DJ */
3680 /* Do all the assignments with our current guesses as to
3682 lang_do_assignments (statement_list
.head
,
3684 (fill_type
) 0, (bfd_vma
) 0);
3686 /* Perform another relax pass - this time we know where the
3687 globals are, so can make better guess. */
3688 lang_size_sections (statement_list
.head
,
3690 &(statement_list
.head
), 0, (bfd_vma
) 0, true);
3692 while (relax_again
);
3696 /* Size up the sections. */
3697 lang_size_sections (statement_list
.head
,
3699 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
3702 /* See if anything special should be done now we know how big
3704 ldemul_after_allocation ();
3706 /* Fix any .startof. or .sizeof. symbols. */
3707 lang_set_startof ();
3709 /* Do all the assignments, now that we know the final restingplaces
3710 of all the symbols */
3712 lang_do_assignments (statement_list
.head
,
3714 (fill_type
) 0, (bfd_vma
) 0);
3722 /* EXPORTED TO YACC */
3725 lang_add_wild (section_name
, sections_sorted
, filename
, filenames_sorted
,
3727 const char *const section_name
;
3728 boolean sections_sorted
;
3729 const char *const filename
;
3730 boolean filenames_sorted
;
3731 boolean keep_sections
;
3733 lang_wild_statement_type
*new = new_stat (lang_wild_statement
,
3736 if (section_name
!= (char *) NULL
&& strcmp (section_name
, "COMMON") == 0)
3738 placed_commons
= true;
3740 if (filename
!= NULL
&& ! wildcardp (filename
))
3742 lang_has_input_file
= true;
3744 new->section_name
= section_name
;
3745 new->sections_sorted
= sections_sorted
;
3746 new->filename
= filename
;
3747 new->filenames_sorted
= filenames_sorted
;
3748 new->keep_sections
= keep_sections
;
3749 lang_list_init (&new->children
);
3753 lang_section_start (name
, address
)
3755 etree_type
* address
;
3757 lang_address_statement_type
*ad
= new_stat (lang_address_statement
, stat_ptr
);
3759 ad
->section_name
= name
;
3760 ad
->address
= address
;
3763 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
3764 because of a -e argument on the command line, or zero if this is
3765 called by ENTRY in a linker script. Command line arguments take
3769 lang_add_entry (name
, cmdline
)
3773 if (entry_symbol
== NULL
3775 || ! entry_from_cmdline
)
3777 entry_symbol
= name
;
3778 entry_from_cmdline
= cmdline
;
3783 lang_add_target (name
)
3786 lang_target_statement_type
*new = new_stat (lang_target_statement
,
3802 map_option_f
= true;
3813 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
3820 lang_add_data (type
, exp
)
3822 union etree_union
*exp
;
3825 lang_data_statement_type
*new = new_stat (lang_data_statement
,
3833 /* Create a new reloc statement. RELOC is the BFD relocation type to
3834 generate. HOWTO is the corresponding howto structure (we could
3835 look this up, but the caller has already done so). SECTION is the
3836 section to generate a reloc against, or NAME is the name of the
3837 symbol to generate a reloc against. Exactly one of SECTION and
3838 NAME must be NULL. ADDEND is an expression for the addend. */
3841 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
3842 bfd_reloc_code_real_type reloc
;
3843 reloc_howto_type
*howto
;
3846 union etree_union
*addend
;
3848 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
3852 p
->section
= section
;
3854 p
->addend_exp
= addend
;
3856 p
->addend_value
= 0;
3857 p
->output_section
= NULL
;
3861 lang_assignment_statement_type
*
3862 lang_add_assignment (exp
)
3865 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
3873 lang_add_attribute (attribute
)
3874 enum statement_enum attribute
;
3876 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
3883 if (startup_file
!= (char *) NULL
)
3885 einfo (_("%P%Fmultiple STARTUP files\n"));
3887 first_file
->filename
= name
;
3888 first_file
->local_sym_name
= name
;
3889 first_file
->real
= true;
3891 startup_file
= name
;
3898 lang_float_flag
= maybe
;
3902 lang_leave_output_section_statement (fill
, memspec
, phdrs
)
3904 const char *memspec
;
3905 struct lang_output_section_phdr_list
*phdrs
;
3907 current_section
->fill
= fill
;
3908 current_section
->region
= lang_memory_region_lookup (memspec
);
3909 current_section
->phdrs
= phdrs
;
3910 stat_ptr
= &statement_list
;
3914 Create an absolute symbol with the given name with the value of the
3915 address of first byte of the section named.
3917 If the symbol already exists, then do nothing.
3920 lang_abs_symbol_at_beginning_of (secname
, name
)
3921 const char *secname
;
3924 struct bfd_link_hash_entry
*h
;
3926 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
3927 if (h
== (struct bfd_link_hash_entry
*) NULL
)
3928 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3930 if (h
->type
== bfd_link_hash_new
3931 || h
->type
== bfd_link_hash_undefined
)
3935 h
->type
= bfd_link_hash_defined
;
3937 sec
= bfd_get_section_by_name (output_bfd
, secname
);
3938 if (sec
== (asection
*) NULL
)
3941 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
3943 h
->u
.def
.section
= bfd_abs_section_ptr
;
3948 Create an absolute symbol with the given name with the value of the
3949 address of the first byte after the end of the section named.
3951 If the symbol already exists, then do nothing.
3954 lang_abs_symbol_at_end_of (secname
, name
)
3955 const char *secname
;
3958 struct bfd_link_hash_entry
*h
;
3960 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
3961 if (h
== (struct bfd_link_hash_entry
*) NULL
)
3962 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3964 if (h
->type
== bfd_link_hash_new
3965 || h
->type
== bfd_link_hash_undefined
)
3969 h
->type
= bfd_link_hash_defined
;
3971 sec
= bfd_get_section_by_name (output_bfd
, secname
);
3972 if (sec
== (asection
*) NULL
)
3975 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
3976 + bfd_section_size (output_bfd
, sec
));
3978 h
->u
.def
.section
= bfd_abs_section_ptr
;
3983 lang_statement_append (list
, element
, field
)
3984 lang_statement_list_type
* list
;
3985 lang_statement_union_type
* element
;
3986 lang_statement_union_type
** field
;
3988 *(list
->tail
) = element
;
3992 /* Set the output format type. -oformat overrides scripts. */
3995 lang_add_output_format (format
, big
, little
, from_script
)
4001 if (output_target
== NULL
|| !from_script
)
4003 if (command_line
.endian
== ENDIAN_BIG
4006 else if (command_line
.endian
== ENDIAN_LITTLE
4010 output_target
= format
;
4014 /* Enter a group. This creates a new lang_group_statement, and sets
4015 stat_ptr to build new statements within the group. */
4020 lang_group_statement_type
*g
;
4022 g
= new_stat (lang_group_statement
, stat_ptr
);
4023 lang_list_init (&g
->children
);
4024 stat_ptr
= &g
->children
;
4027 /* Leave a group. This just resets stat_ptr to start writing to the
4028 regular list of statements again. Note that this will not work if
4029 groups can occur inside anything else which can adjust stat_ptr,
4030 but currently they can't. */
4035 stat_ptr
= &statement_list
;
4038 /* Add a new program header. This is called for each entry in a PHDRS
4039 command in a linker script. */
4042 lang_new_phdr (name
, type
, filehdr
, phdrs
, at
, flags
)
4050 struct lang_phdr
*n
, **pp
;
4052 n
= (struct lang_phdr
*) stat_alloc (sizeof (struct lang_phdr
));
4055 n
->type
= exp_get_value_int (type
, 0, "program header type",
4056 lang_final_phase_enum
);
4057 n
->filehdr
= filehdr
;
4062 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4067 /* Record the program header information in the output BFD. FIXME: We
4068 should not be calling an ELF specific function here. */
4071 lang_record_phdrs ()
4075 struct lang_output_section_phdr_list
*last
;
4076 struct lang_phdr
*l
;
4077 lang_statement_union_type
*u
;
4080 secs
= (asection
**) xmalloc (alc
* sizeof (asection
*));
4082 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
4089 for (u
= lang_output_section_statement
.head
;
4091 u
= u
->output_section_statement
.next
)
4093 lang_output_section_statement_type
*os
;
4094 struct lang_output_section_phdr_list
*pl
;
4096 os
= &u
->output_section_statement
;
4103 if (os
->sectype
== noload_section
4104 || os
->bfd_section
== NULL
4105 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
4110 if (os
->bfd_section
== NULL
)
4113 for (; pl
!= NULL
; pl
= pl
->next
)
4115 if (strcmp (pl
->name
, l
->name
) == 0)
4120 secs
= ((asection
**)
4121 xrealloc (secs
, alc
* sizeof (asection
*)));
4123 secs
[c
] = os
->bfd_section
;
4130 if (l
->flags
== NULL
)
4133 flags
= exp_get_vma (l
->flags
, 0, "phdr flags",
4134 lang_final_phase_enum
);
4139 at
= exp_get_vma (l
->at
, 0, "phdr load address",
4140 lang_final_phase_enum
);
4142 if (! bfd_record_phdr (output_bfd
, l
->type
,
4143 l
->flags
== NULL
? false : true,
4145 l
->at
== NULL
? false : true,
4146 at
, l
->filehdr
, l
->phdrs
, c
, secs
))
4147 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4152 /* Make sure all the phdr assignments succeeded. */
4153 for (u
= lang_output_section_statement
.head
;
4155 u
= u
->output_section_statement
.next
)
4157 struct lang_output_section_phdr_list
*pl
;
4159 if (u
->output_section_statement
.bfd_section
== NULL
)
4162 for (pl
= u
->output_section_statement
.phdrs
;
4165 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
4166 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4167 u
->output_section_statement
.name
, pl
->name
);
4171 /* Record a list of sections which may not be cross referenced. */
4174 lang_add_nocrossref (l
)
4175 struct lang_nocrossref
*l
;
4177 struct lang_nocrossrefs
*n
;
4179 n
= (struct lang_nocrossrefs
*) xmalloc (sizeof *n
);
4180 n
->next
= nocrossref_list
;
4182 nocrossref_list
= n
;
4184 /* Set notice_all so that we get informed about all symbols. */
4185 link_info
.notice_all
= true;
4188 /* Overlay handling. We handle overlays with some static variables. */
4190 /* The overlay virtual address. */
4191 static etree_type
*overlay_vma
;
4193 /* The overlay load address. */
4194 static etree_type
*overlay_lma
;
4196 /* Whether nocrossrefs is set for this overlay. */
4197 static int overlay_nocrossrefs
;
4199 /* An expression for the maximum section size seen so far. */
4200 static etree_type
*overlay_max
;
4202 /* A list of all the sections in this overlay. */
4206 struct overlay_list
*next
;
4207 lang_output_section_statement_type
*os
;
4210 static struct overlay_list
*overlay_list
;
4212 /* Start handling an overlay. */
4215 lang_enter_overlay (vma_expr
, lma_expr
, nocrossrefs
)
4216 etree_type
*vma_expr
;
4217 etree_type
*lma_expr
;
4220 /* The grammar should prevent nested overlays from occurring. */
4221 ASSERT (overlay_vma
== NULL
4222 && overlay_lma
== NULL
4223 && overlay_list
== NULL
4224 && overlay_max
== NULL
);
4226 overlay_vma
= vma_expr
;
4227 overlay_lma
= lma_expr
;
4228 overlay_nocrossrefs
= nocrossrefs
;
4231 /* Start a section in an overlay. We handle this by calling
4232 lang_enter_output_section_statement with the correct VMA and LMA. */
4235 lang_enter_overlay_section (name
)
4238 struct overlay_list
*n
;
4241 lang_enter_output_section_statement (name
, overlay_vma
, normal_section
,
4242 0, 0, 0, overlay_lma
);
4244 /* If this is the first section, then base the VMA and LMA of future
4245 sections on this one. This will work correctly even if `.' is
4246 used in the addresses. */
4247 if (overlay_list
== NULL
)
4249 overlay_vma
= exp_nameop (ADDR
, name
);
4250 overlay_lma
= exp_nameop (LOADADDR
, name
);
4253 /* Remember the section. */
4254 n
= (struct overlay_list
*) xmalloc (sizeof *n
);
4255 n
->os
= current_section
;
4256 n
->next
= overlay_list
;
4259 size
= exp_nameop (SIZEOF
, name
);
4261 /* Adjust the LMA for the next section. */
4262 overlay_lma
= exp_binop ('+', overlay_lma
, size
);
4264 /* Arrange to work out the maximum section end address. */
4265 if (overlay_max
== NULL
)
4268 overlay_max
= exp_binop (MAX_K
, overlay_max
, size
);
4271 /* Finish a section in an overlay. There isn't any special to do
4275 lang_leave_overlay_section (fill
, phdrs
)
4277 struct lang_output_section_phdr_list
*phdrs
;
4284 name
= current_section
->name
;
4286 lang_leave_output_section_statement (fill
, "*default*", phdrs
);
4288 /* Define the magic symbols. */
4290 clean
= xmalloc (strlen (name
) + 1);
4292 for (s1
= name
; *s1
!= '\0'; s1
++)
4293 if (isalnum ((unsigned char) *s1
) || *s1
== '_')
4297 buf
= xmalloc (strlen (clean
) + sizeof "__load_start_");
4298 sprintf (buf
, "__load_start_%s", clean
);
4299 lang_add_assignment (exp_assop ('=', buf
,
4300 exp_nameop (LOADADDR
, name
)));
4302 buf
= xmalloc (strlen (clean
) + sizeof "__load_stop_");
4303 sprintf (buf
, "__load_stop_%s", clean
);
4304 lang_add_assignment (exp_assop ('=', buf
,
4306 exp_nameop (LOADADDR
, name
),
4307 exp_nameop (SIZEOF
, name
))));
4312 /* Finish an overlay. If there are any overlay wide settings, this
4313 looks through all the sections in the overlay and sets them. */
4316 lang_leave_overlay (fill
, memspec
, phdrs
)
4318 const char *memspec
;
4319 struct lang_output_section_phdr_list
*phdrs
;
4321 lang_memory_region_type
*region
;
4322 struct overlay_list
*l
;
4323 struct lang_nocrossref
*nocrossref
;
4325 if (memspec
== NULL
)
4328 region
= lang_memory_region_lookup (memspec
);
4335 struct overlay_list
*next
;
4337 if (fill
!= 0 && l
->os
->fill
== 0)
4339 if (region
!= NULL
&& l
->os
->region
== NULL
)
4340 l
->os
->region
= region
;
4341 if (phdrs
!= NULL
&& l
->os
->phdrs
== NULL
)
4342 l
->os
->phdrs
= phdrs
;
4344 if (overlay_nocrossrefs
)
4346 struct lang_nocrossref
*nc
;
4348 nc
= (struct lang_nocrossref
*) xmalloc (sizeof *nc
);
4349 nc
->name
= l
->os
->name
;
4350 nc
->next
= nocrossref
;
4359 if (nocrossref
!= NULL
)
4360 lang_add_nocrossref (nocrossref
);
4362 /* Update . for the end of the overlay. */
4363 lang_add_assignment (exp_assop ('=', ".",
4364 exp_binop ('+', overlay_vma
, overlay_max
)));
4368 overlay_nocrossrefs
= 0;
4369 overlay_list
= NULL
;
4373 /* Version handling. This is only useful for ELF. */
4375 /* This global variable holds the version tree that we build. */
4377 struct bfd_elf_version_tree
*lang_elf_version_info
;
4379 /* This is called for each variable name or match expression. */
4381 struct bfd_elf_version_expr
*
4382 lang_new_vers_regex (orig
, new)
4383 struct bfd_elf_version_expr
*orig
;
4386 struct bfd_elf_version_expr
*ret
;
4388 ret
= (struct bfd_elf_version_expr
*) xmalloc (sizeof *ret
);
4394 /* This is called for each set of variable names and match
4397 struct bfd_elf_version_tree
*
4398 lang_new_vers_node (globals
, locals
)
4399 struct bfd_elf_version_expr
*globals
;
4400 struct bfd_elf_version_expr
*locals
;
4402 struct bfd_elf_version_tree
*ret
;
4404 ret
= (struct bfd_elf_version_tree
*) xmalloc (sizeof *ret
);
4408 ret
->globals
= globals
;
4409 ret
->locals
= locals
;
4411 ret
->name_indx
= (unsigned int) -1;
4416 /* This static variable keeps track of version indices. */
4418 static int version_index
;
4420 /* This is called when we know the name and dependencies of the
4424 lang_register_vers_node (name
, version
, deps
)
4426 struct bfd_elf_version_tree
*version
;
4427 struct bfd_elf_version_deps
*deps
;
4429 struct bfd_elf_version_tree
*t
, **pp
;
4430 struct bfd_elf_version_expr
*e1
;
4432 /* Make sure this node has a unique name. */
4433 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4434 if (strcmp (t
->name
, name
) == 0)
4435 einfo (_("%X%P: duplicate version tag `%s'\n"), name
);
4437 /* Check the global and local match names, and make sure there
4438 aren't any duplicates. */
4440 for (e1
= version
->globals
; e1
!= NULL
; e1
= e1
->next
)
4442 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4444 struct bfd_elf_version_expr
*e2
;
4446 for (e2
= t
->locals
; e2
!= NULL
; e2
= e2
->next
)
4447 if (strcmp (e1
->match
, e2
->match
) == 0)
4448 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4453 for (e1
= version
->locals
; e1
!= NULL
; e1
= e1
->next
)
4455 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4457 struct bfd_elf_version_expr
*e2
;
4459 for (e2
= t
->globals
; e2
!= NULL
; e2
= e2
->next
)
4460 if (strcmp (e1
->match
, e2
->match
) == 0)
4461 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4466 version
->deps
= deps
;
4467 version
->name
= name
;
4469 version
->vernum
= version_index
;
4471 for (pp
= &lang_elf_version_info
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4476 /* This is called when we see a version dependency. */
4478 struct bfd_elf_version_deps
*
4479 lang_add_vers_depend (list
, name
)
4480 struct bfd_elf_version_deps
*list
;
4483 struct bfd_elf_version_deps
*ret
;
4484 struct bfd_elf_version_tree
*t
;
4486 ret
= (struct bfd_elf_version_deps
*) xmalloc (sizeof *ret
);
4489 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4491 if (strcmp (t
->name
, name
) == 0)
4493 ret
->version_needed
= t
;
4498 einfo (_("%X%P: unable to find version dependency `%s'\n"), name
);
4504 lang_do_version_exports_section ()
4506 struct bfd_elf_version_expr
*greg
= NULL
, *lreg
;
4508 LANG_FOR_EACH_INPUT_STATEMENT (is
)
4510 asection
*sec
= bfd_get_section_by_name (is
->the_bfd
, ".exports");
4517 len
= bfd_section_size (is
->the_bfd
, sec
);
4518 contents
= xmalloc (len
);
4519 if (!bfd_get_section_contents (is
->the_bfd
, sec
, contents
, 0, len
))
4520 einfo (_("%X%P: unable to read .exports section contents"), sec
);
4522 while (p
< contents
+len
)
4524 greg
= lang_new_vers_regex (greg
, p
);
4525 p
= strchr (p
, '\0') + 1;
4530 /* Do not include this section in the link. */
4531 bfd_set_section_flags (is
->the_bfd
, sec
,
4532 bfd_get_section_flags (is
->the_bfd
, sec
) | SEC_EXCLUDE
);
4535 lreg
= lang_new_vers_regex (NULL
, "*");
4536 lang_register_vers_node (command_line
.version_exports_section
,
4537 lang_new_vers_node (greg
, lreg
), NULL
);