1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000
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"
44 static lang_statement_union_type
*new_statement
PARAMS ((enum statement_enum
,
46 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 const char *current_target
;
61 static const char *output_target
;
62 static lang_statement_list_type statement_list
;
63 static struct lang_phdr
*lang_phdr_list
;
65 static void lang_for_each_statement_worker
66 PARAMS ((void (*) (lang_statement_union_type
*),
67 lang_statement_union_type
*));
68 static lang_input_statement_type
*new_afile
69 PARAMS ((const char *, lang_input_file_enum_type
, const char *, boolean
));
70 static lang_memory_region_type
*lang_memory_default
PARAMS ((asection
*));
71 static void lang_map_flags
PARAMS ((flagword
));
72 static void init_os
PARAMS ((lang_output_section_statement_type
*));
73 static void exp_init_os
PARAMS ((etree_type
*));
74 static void section_already_linked
PARAMS ((bfd
*, asection
*, PTR
));
75 static struct bfd_hash_entry
*already_linked_newfunc
76 PARAMS ((struct bfd_hash_entry
*, struct bfd_hash_table
*, const char *));
77 static void already_linked_table_init
PARAMS ((void));
78 static void already_linked_table_free
PARAMS ((void));
79 static boolean wildcardp
PARAMS ((const char *));
80 static lang_statement_union_type
*wild_sort
81 PARAMS ((lang_wild_statement_type
*, lang_input_statement_type
*,
83 static void output_section_callback
84 PARAMS ((lang_wild_statement_type
*, asection
*,
85 lang_input_statement_type
*, PTR
));
86 static lang_input_statement_type
*lookup_name
PARAMS ((const char *));
87 static void load_symbols
88 PARAMS ((lang_input_statement_type
*, lang_statement_list_type
*));
90 PARAMS ((lang_wild_statement_type
*, const char *, const char *,
91 const char *, lang_output_section_statement_type
*));
92 static bfd
*open_output
PARAMS ((const char *));
93 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*));
94 static void open_input_bfds
PARAMS ((lang_statement_union_type
*, boolean
));
95 static void lang_reasonable_defaults
PARAMS ((void));
96 static void lang_place_undefineds
PARAMS ((void));
97 static void map_input_to_output_sections
98 PARAMS ((lang_statement_union_type
*, const char *,
99 lang_output_section_statement_type
*));
100 static void print_output_section_statement
101 PARAMS ((lang_output_section_statement_type
*));
102 static void print_assignment
103 PARAMS ((lang_assignment_statement_type
*,
104 lang_output_section_statement_type
*));
105 static void print_input_statement
PARAMS ((lang_input_statement_type
*));
106 static boolean print_one_symbol
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
107 static void print_input_section
PARAMS ((lang_input_section_type
*));
108 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*));
109 static void print_data_statement
PARAMS ((lang_data_statement_type
*));
110 static void print_address_statement
PARAMS ((lang_address_statement_type
*));
111 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*));
112 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*));
113 static void print_wild_statement
114 PARAMS ((lang_wild_statement_type
*, lang_output_section_statement_type
*));
115 static void print_group
116 PARAMS ((lang_group_statement_type
*, lang_output_section_statement_type
*));
117 static void print_statement
118 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
119 static void print_statement_list
120 PARAMS ((lang_statement_union_type
*, lang_output_section_statement_type
*));
121 static void print_statements
PARAMS ((void));
122 static bfd_vma insert_pad
123 PARAMS ((lang_statement_union_type
**this_ptr
, fill_type fill
,
124 unsigned int power
, asection
*output_section_statement
,
126 static bfd_vma size_input_section
127 PARAMS ((lang_statement_union_type
**this_ptr
,
128 lang_output_section_statement_type
*output_section_statement
,
129 fill_type fill
, bfd_vma dot
, boolean relax
));
130 static void lang_finish
PARAMS ((void));
131 static void ignore_bfd_errors
PARAMS ((const char *, ...));
132 static void lang_check
PARAMS ((void));
133 static void lang_common
PARAMS ((void));
134 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
135 static void lang_place_orphans
PARAMS ((void));
136 static int topower
PARAMS ((int));
137 static void lang_set_startof
PARAMS ((void));
138 static void reset_memory_regions
PARAMS ((void));
139 static void gc_section_callback
140 PARAMS ((lang_wild_statement_type
*, asection
*,
141 lang_input_statement_type
*, PTR
));
142 static void lang_record_phdrs
PARAMS ((void));
143 static void lang_gc_wild
144 PARAMS ((lang_wild_statement_type
*, const char *, const char *));
145 static void lang_gc_sections_1
PARAMS ((lang_statement_union_type
*));
146 static void lang_gc_sections
PARAMS ((void));
147 static int lang_vers_match_lang_c
148 PARAMS ((struct bfd_elf_version_expr
*, const char *));
149 static int lang_vers_match_lang_cplusplus
150 PARAMS ((struct bfd_elf_version_expr
*, const char *));
151 static int lang_vers_match_lang_java
152 PARAMS ((struct bfd_elf_version_expr
*, const char *));
153 static void lang_do_version_exports_section
PARAMS ((void));
154 static void lang_check_section_addresses
PARAMS ((void));
155 static void os_region_check
156 PARAMS ((lang_output_section_statement_type
*,
157 struct memory_region_struct
*, etree_type
*, bfd_vma
));
159 typedef void (*callback_t
) PARAMS ((lang_wild_statement_type
*,
160 asection
*, lang_input_statement_type
*,
162 static void walk_wild
163 PARAMS ((lang_wild_statement_type
*, const char *, const char *,
165 static void walk_wild_section
166 PARAMS ((lang_wild_statement_type
*, const char *,
167 lang_input_statement_type
*, callback_t
, PTR
));
168 static void walk_wild_file
169 PARAMS ((lang_wild_statement_type
*, const char *,
170 lang_input_statement_type
*, callback_t
, PTR
));
172 static int get_target
PARAMS ((const bfd_target
*, PTR
));
173 static void stricpy
PARAMS ((char *, char *));
174 static void strcut
PARAMS ((char *, char *));
175 static int name_compare
PARAMS ((char *, char *));
176 static int closest_target_match
PARAMS ((const bfd_target
*, PTR
));
177 static char * get_first_input_target
PARAMS ((void));
180 lang_output_section_statement_type
*abs_output_section
;
181 lang_statement_list_type lang_output_section_statement
;
182 lang_statement_list_type
*stat_ptr
= &statement_list
;
183 lang_statement_list_type file_chain
= { NULL
, NULL
};
184 const char *entry_symbol
= NULL
;
185 boolean entry_from_cmdline
;
186 boolean lang_has_input_file
= false;
187 boolean had_output_filename
= false;
188 boolean lang_float_flag
= false;
189 boolean delete_output_file_on_failure
= false;
190 struct lang_nocrossrefs
*nocrossref_list
;
192 etree_type
*base
; /* Relocation base - or null */
194 #if defined(__STDC__) || defined(ALMOST_STDC)
195 #define cat(a,b) a##b
197 #define cat(a,b) a/**/b
200 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
202 #define outside_section_address(q) ((q)->output_offset + (q)->output_section->vma)
204 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
206 #define SECTION_NAME_MAP_LENGTH (16)
212 return obstack_alloc (&stat_obstack
, size
);
215 /* Generic traversal routines for finding matching sections. */
218 walk_wild_section (ptr
, section
, file
, callback
, data
)
219 lang_wild_statement_type
*ptr
;
221 lang_input_statement_type
*file
;
225 /* Don't process sections from files which were excluded. */
226 if (ptr
->exclude_filename_list
!= NULL
)
228 struct name_list
*list_tmp
;
229 for (list_tmp
= ptr
->exclude_filename_list
; list_tmp
; list_tmp
= list_tmp
->next
)
233 if (wildcardp (list_tmp
->name
))
234 match
= fnmatch (list_tmp
->name
, file
->filename
, 0) == 0 ? true : false;
236 match
= strcmp (list_tmp
->name
, file
->filename
) == 0 ? true : false;
243 if (file
->just_syms_flag
== false)
245 register asection
*s
;
251 wildcard
= wildcardp (section
);
253 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
263 name
= bfd_get_section_name (file
->the_bfd
, s
);
265 match
= fnmatch (section
, name
, 0) == 0 ? true : false;
267 match
= strcmp (section
, name
) == 0 ? true : false;
271 (*callback
) (ptr
, s
, file
, data
);
276 /* Handle a wild statement for a single file F. */
279 walk_wild_file (s
, section
, f
, callback
, data
)
280 lang_wild_statement_type
*s
;
282 lang_input_statement_type
*f
;
286 if (f
->the_bfd
== NULL
287 || ! bfd_check_format (f
->the_bfd
, bfd_archive
))
288 walk_wild_section (s
, section
, f
, callback
, data
);
293 /* This is an archive file. We must map each member of the
294 archive separately. */
295 member
= bfd_openr_next_archived_file (f
->the_bfd
, (bfd
*) NULL
);
296 while (member
!= NULL
)
298 /* When lookup_name is called, it will call the add_symbols
299 entry point for the archive. For each element of the
300 archive which is included, BFD will call ldlang_add_file,
301 which will set the usrdata field of the member to the
302 lang_input_statement. */
303 if (member
->usrdata
!= NULL
)
305 walk_wild_section (s
, section
,
306 (lang_input_statement_type
*) member
->usrdata
,
310 member
= bfd_openr_next_archived_file (f
->the_bfd
, member
);
316 walk_wild (s
, section
, file
, callback
, data
)
317 lang_wild_statement_type
*s
;
323 if (file
== (char *) NULL
)
325 /* Perform the iteration over all files in the list. */
326 LANG_FOR_EACH_INPUT_STATEMENT (f
)
328 walk_wild_file (s
, section
, f
, callback
, data
);
331 else if (wildcardp (file
))
333 LANG_FOR_EACH_INPUT_STATEMENT (f
)
335 if (fnmatch (file
, f
->filename
, FNM_FILE_NAME
) == 0)
336 walk_wild_file (s
, section
, f
, callback
, data
);
341 lang_input_statement_type
*f
;
343 /* Perform the iteration over a single file. */
344 f
= lookup_name (file
);
345 walk_wild_file (s
, section
, f
, callback
, data
);
349 /* lang_for_each_statement walks the parse tree and calls the provided
350 function for each node. */
353 lang_for_each_statement_worker (func
, s
)
354 void (*func
) PARAMS ((lang_statement_union_type
*));
355 lang_statement_union_type
*s
;
357 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
361 switch (s
->header
.type
)
363 case lang_constructors_statement_enum
:
364 lang_for_each_statement_worker (func
, constructor_list
.head
);
366 case lang_output_section_statement_enum
:
367 lang_for_each_statement_worker
369 s
->output_section_statement
.children
.head
);
371 case lang_wild_statement_enum
:
372 lang_for_each_statement_worker
374 s
->wild_statement
.children
.head
);
376 case lang_group_statement_enum
:
377 lang_for_each_statement_worker (func
,
378 s
->group_statement
.children
.head
);
380 case lang_data_statement_enum
:
381 case lang_reloc_statement_enum
:
382 case lang_object_symbols_statement_enum
:
383 case lang_output_statement_enum
:
384 case lang_target_statement_enum
:
385 case lang_input_section_enum
:
386 case lang_input_statement_enum
:
387 case lang_assignment_statement_enum
:
388 case lang_padding_statement_enum
:
389 case lang_address_statement_enum
:
390 case lang_fill_statement_enum
:
400 lang_for_each_statement (func
)
401 void (*func
) PARAMS ((lang_statement_union_type
*));
403 lang_for_each_statement_worker (func
, statement_list
.head
);
406 /*----------------------------------------------------------------------*/
409 lang_list_init (list
)
410 lang_statement_list_type
*list
;
412 list
->head
= (lang_statement_union_type
*) NULL
;
413 list
->tail
= &list
->head
;
416 /* Build a new statement node for the parse tree. */
418 static lang_statement_union_type
*
419 new_statement (type
, size
, list
)
420 enum statement_enum type
;
422 lang_statement_list_type
*list
;
424 lang_statement_union_type
*new = (lang_statement_union_type
*)
427 new->header
.type
= type
;
428 new->header
.next
= (lang_statement_union_type
*) NULL
;
429 lang_statement_append (list
, new, &new->header
.next
);
433 /* Build a new input file node for the language. There are several
434 ways in which we treat an input file, eg, we only look at symbols,
435 or prefix it with a -l etc.
437 We can be supplied with requests for input files more than once;
438 they may, for example be split over serveral lines like foo.o(.text)
439 foo.o(.data) etc, so when asked for a file we check that we havn't
440 got it already so we don't duplicate the bfd. */
442 static lang_input_statement_type
*
443 new_afile (name
, file_type
, target
, add_to_list
)
445 lang_input_file_enum_type file_type
;
449 lang_input_statement_type
*p
;
452 p
= new_stat (lang_input_statement
, stat_ptr
);
455 p
= ((lang_input_statement_type
*)
456 stat_alloc (sizeof (lang_input_statement_type
)));
457 p
->header
.next
= NULL
;
460 lang_has_input_file
= true;
464 case lang_input_file_is_symbols_only_enum
:
466 p
->is_archive
= false;
468 p
->local_sym_name
= name
;
469 p
->just_syms_flag
= true;
470 p
->search_dirs_flag
= false;
472 case lang_input_file_is_fake_enum
:
474 p
->is_archive
= false;
476 p
->local_sym_name
= name
;
477 p
->just_syms_flag
= false;
478 p
->search_dirs_flag
= false;
480 case lang_input_file_is_l_enum
:
481 p
->is_archive
= true;
484 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
485 p
->just_syms_flag
= false;
486 p
->search_dirs_flag
= true;
488 case lang_input_file_is_marker_enum
:
490 p
->is_archive
= false;
492 p
->local_sym_name
= name
;
493 p
->just_syms_flag
= false;
494 p
->search_dirs_flag
= true;
496 case lang_input_file_is_search_file_enum
:
498 p
->is_archive
= false;
500 p
->local_sym_name
= name
;
501 p
->just_syms_flag
= false;
502 p
->search_dirs_flag
= true;
504 case lang_input_file_is_file_enum
:
506 p
->is_archive
= false;
508 p
->local_sym_name
= name
;
509 p
->just_syms_flag
= false;
510 p
->search_dirs_flag
= false;
515 p
->the_bfd
= (bfd
*) NULL
;
516 p
->asymbols
= (asymbol
**) NULL
;
517 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
518 p
->next
= (lang_statement_union_type
*) NULL
;
520 p
->dynamic
= config
.dynamic_link
;
521 p
->whole_archive
= whole_archive
;
523 lang_statement_append (&input_file_chain
,
524 (lang_statement_union_type
*) p
,
529 lang_input_statement_type
*
530 lang_add_input_file (name
, file_type
, target
)
532 lang_input_file_enum_type file_type
;
535 lang_has_input_file
= true;
536 return new_afile (name
, file_type
, target
, true);
539 /* Build enough state so that the parser can build its tree. */
544 obstack_begin (&stat_obstack
, 1000);
546 stat_ptr
= &statement_list
;
548 lang_list_init (stat_ptr
);
550 lang_list_init (&input_file_chain
);
551 lang_list_init (&lang_output_section_statement
);
552 lang_list_init (&file_chain
);
553 first_file
= lang_add_input_file ((char *) NULL
,
554 lang_input_file_is_marker_enum
,
557 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
559 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
563 /*----------------------------------------------------------------------
564 A region is an area of memory declared with the
565 MEMORY { name:org=exp, len=exp ... }
568 We maintain a list of all the regions here.
570 If no regions are specified in the script, then the default is used
571 which is created when looked up to be the entire data space. */
573 static lang_memory_region_type
*lang_memory_region_list
;
574 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
576 lang_memory_region_type
*
577 lang_memory_region_lookup (name
)
578 const char *const name
;
580 lang_memory_region_type
*p
;
582 for (p
= lang_memory_region_list
;
583 p
!= (lang_memory_region_type
*) NULL
;
586 if (strcmp (p
->name
, name
) == 0)
593 /* This code used to always use the first region in the list as the
594 default region. I changed it to instead use a region
595 encompassing all of memory as the default region. This permits
596 NOLOAD sections to work reasonably without requiring a region.
597 People should specify what region they mean, if they really want
599 if (strcmp (name
, "*default*") == 0)
601 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
603 return lang_memory_region_list
;
609 lang_memory_region_type
*new =
610 (lang_memory_region_type
*) stat_alloc (sizeof (lang_memory_region_type
));
612 new->name
= buystring (name
);
613 new->next
= (lang_memory_region_type
*) NULL
;
615 *lang_memory_region_list_tail
= new;
616 lang_memory_region_list_tail
= &new->next
;
620 new->length
= ~(bfd_size_type
) 0;
622 new->had_full_message
= false;
628 static lang_memory_region_type
*
629 lang_memory_default (section
)
632 lang_memory_region_type
*p
;
634 flagword sec_flags
= section
->flags
;
636 /* Override SEC_DATA to mean a writable section. */
637 if ((sec_flags
& (SEC_ALLOC
| SEC_READONLY
| SEC_CODE
)) == SEC_ALLOC
)
638 sec_flags
|= SEC_DATA
;
640 for (p
= lang_memory_region_list
;
641 p
!= (lang_memory_region_type
*) NULL
;
644 if ((p
->flags
& sec_flags
) != 0
645 && (p
->not_flags
& sec_flags
) == 0)
650 return lang_memory_region_lookup ("*default*");
653 lang_output_section_statement_type
*
654 lang_output_section_find (name
)
655 const char *const name
;
657 lang_statement_union_type
*u
;
658 lang_output_section_statement_type
*lookup
;
660 for (u
= lang_output_section_statement
.head
;
661 u
!= (lang_statement_union_type
*) NULL
;
664 lookup
= &u
->output_section_statement
;
665 if (strcmp (name
, lookup
->name
) == 0)
670 return (lang_output_section_statement_type
*) NULL
;
673 lang_output_section_statement_type
*
674 lang_output_section_statement_lookup (name
)
675 const char *const name
;
677 lang_output_section_statement_type
*lookup
;
679 lookup
= lang_output_section_find (name
);
680 if (lookup
== (lang_output_section_statement_type
*) NULL
)
683 lookup
= (lang_output_section_statement_type
*)
684 new_stat (lang_output_section_statement
, stat_ptr
);
685 lookup
->region
= (lang_memory_region_type
*) NULL
;
686 lookup
->lma_region
= (lang_memory_region_type
*) NULL
;
688 lookup
->block_value
= 1;
691 lookup
->next
= (lang_statement_union_type
*) NULL
;
692 lookup
->bfd_section
= (asection
*) NULL
;
693 lookup
->processed
= false;
694 lookup
->sectype
= normal_section
;
695 lookup
->addr_tree
= (etree_type
*) NULL
;
696 lang_list_init (&lookup
->children
);
698 lookup
->memspec
= (const char *) NULL
;
700 lookup
->subsection_alignment
= -1;
701 lookup
->section_alignment
= -1;
702 lookup
->load_base
= (union etree_union
*) NULL
;
703 lookup
->phdrs
= NULL
;
705 lang_statement_append (&lang_output_section_statement
,
706 (lang_statement_union_type
*) lookup
,
713 lang_map_flags (flag
)
716 if (flag
& SEC_ALLOC
)
722 if (flag
& SEC_READONLY
)
735 lang_memory_region_type
*m
;
737 minfo (_("\nMemory Configuration\n\n"));
738 fprintf (config
.map_file
, "%-16s %-18s %-18s %s\n",
739 _("Name"), _("Origin"), _("Length"), _("Attributes"));
741 for (m
= lang_memory_region_list
;
742 m
!= (lang_memory_region_type
*) NULL
;
748 fprintf (config
.map_file
, "%-16s ", m
->name
);
750 sprintf_vma (buf
, m
->origin
);
751 minfo ("0x%s ", buf
);
759 minfo ("0x%V", m
->length
);
760 if (m
->flags
|| m
->not_flags
)
768 lang_map_flags (m
->flags
);
774 lang_map_flags (m
->not_flags
);
781 fprintf (config
.map_file
, _("\nLinker script and memory map\n\n"));
786 /* Initialize an output section. */
790 lang_output_section_statement_type
*s
;
792 section_userdata_type
*new;
794 if (s
->bfd_section
!= NULL
)
797 if (strcmp (s
->name
, DISCARD_SECTION_NAME
) == 0)
798 einfo (_("%P%F: Illegal use of `%s' section"), DISCARD_SECTION_NAME
);
800 new = ((section_userdata_type
*)
801 stat_alloc (sizeof (section_userdata_type
)));
803 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
804 if (s
->bfd_section
== (asection
*) NULL
)
805 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
806 if (s
->bfd_section
== (asection
*) NULL
)
808 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
809 output_bfd
->xvec
->name
, s
->name
);
811 s
->bfd_section
->output_section
= s
->bfd_section
;
813 /* We initialize an output sections output offset to minus its own
814 vma to allow us to output a section through itself. */
815 s
->bfd_section
->output_offset
= 0;
816 get_userdata (s
->bfd_section
) = (PTR
) new;
818 /* If there is a base address, make sure that any sections it might
819 mention are initialized. */
820 if (s
->addr_tree
!= NULL
)
821 exp_init_os (s
->addr_tree
);
824 /* Make sure that all output sections mentioned in an expression are
831 switch (exp
->type
.node_class
)
834 exp_init_os (exp
->assign
.src
);
838 exp_init_os (exp
->binary
.lhs
);
839 exp_init_os (exp
->binary
.rhs
);
843 exp_init_os (exp
->trinary
.cond
);
844 exp_init_os (exp
->trinary
.lhs
);
845 exp_init_os (exp
->trinary
.rhs
);
849 exp_init_os (exp
->unary
.child
);
853 switch (exp
->type
.node_code
)
859 lang_output_section_statement_type
*os
;
861 os
= lang_output_section_find (exp
->name
.name
);
862 if (os
!= NULL
&& os
->bfd_section
== NULL
)
873 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
874 once into the output. This routine checks each section, and
875 arrange to discard it if a section of the same name has already
876 been linked. If the section has COMDAT information, then it uses
877 that to decide whether the section should be included. This code
878 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
879 that is, it does not depend solely upon the section name.
880 section_already_linked is called via bfd_map_over_sections. */
882 /* This is the shape of the elements inside the already_linked hash
883 table. It maps a name onto a list of already_linked elements with
884 the same name. It's possible to get more than one element in a
885 list if the COMDAT sections have different names. */
887 struct already_linked_hash_entry
889 struct bfd_hash_entry root
;
890 struct already_linked
*entry
;
893 struct already_linked
895 struct already_linked
*next
;
899 /* The hash table. */
901 static struct bfd_hash_table already_linked_table
;
904 section_already_linked (abfd
, sec
, data
)
909 lang_input_statement_type
*entry
= (lang_input_statement_type
*) data
;
912 struct already_linked
*l
;
913 struct already_linked_hash_entry
*already_linked_list
;
915 /* If we are only reading symbols from this object, then we want to
916 discard all sections. */
917 if (entry
->just_syms_flag
)
919 sec
->output_section
= bfd_abs_section_ptr
;
920 sec
->output_offset
= sec
->vma
;
924 flags
= bfd_get_section_flags (abfd
, sec
);
926 if ((flags
& SEC_LINK_ONCE
) == 0)
929 /* FIXME: When doing a relocateable link, we may have trouble
930 copying relocations in other sections that refer to local symbols
931 in the section being discarded. Those relocations will have to
932 be converted somehow; as of this writing I'm not sure that any of
933 the backends handle that correctly.
935 It is tempting to instead not discard link once sections when
936 doing a relocateable link (technically, they should be discarded
937 whenever we are building constructors). However, that fails,
938 because the linker winds up combining all the link once sections
939 into a single large link once section, which defeats the purpose
940 of having link once sections in the first place.
942 Also, not merging link once sections in a relocateable link
943 causes trouble for MIPS ELF, which relies in link once semantics
944 to handle the .reginfo section correctly. */
946 name
= bfd_get_section_name (abfd
, sec
);
948 already_linked_list
=
949 ((struct already_linked_hash_entry
*)
950 bfd_hash_lookup (&already_linked_table
, name
, true, false));
952 for (l
= already_linked_list
->entry
; l
!= NULL
; l
= l
->next
)
954 if (sec
->comdat
== NULL
955 || l
->sec
->comdat
== NULL
956 || strcmp (sec
->comdat
->name
, l
->sec
->comdat
->name
) == 0)
958 /* The section has already been linked. See if we should
960 switch (flags
& SEC_LINK_DUPLICATES
)
965 case SEC_LINK_DUPLICATES_DISCARD
:
968 case SEC_LINK_DUPLICATES_ONE_ONLY
:
969 if (sec
->comdat
== NULL
)
970 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
973 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
974 abfd
, name
, sec
->comdat
->name
);
977 case SEC_LINK_DUPLICATES_SAME_CONTENTS
:
978 /* FIXME: We should really dig out the contents of both
979 sections and memcmp them. The COFF/PE spec says that
980 the Microsoft linker does not implement this
981 correctly, so I'm not going to bother doing it
984 case SEC_LINK_DUPLICATES_SAME_SIZE
:
985 if (bfd_section_size (abfd
, sec
)
986 != bfd_section_size (l
->sec
->owner
, l
->sec
))
987 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
992 /* Set the output_section field so that wild_doit does not
993 create a lang_input_section structure for this section.
994 Since there might be a symbol in the section being
995 discarded, we must retain a pointer to the section which
996 we are really going to use. */
997 sec
->output_section
= bfd_abs_section_ptr
;
998 sec
->kept_section
= l
->sec
;
1004 /* This is the first section with this name. Record it. Allocate
1005 the memory from the same obstack as the hash table is kept in. */
1007 l
= ((struct already_linked
*)
1008 bfd_hash_allocate (&already_linked_table
, sizeof *l
));
1011 l
->next
= already_linked_list
->entry
;
1012 already_linked_list
->entry
= l
;
1015 /* Support routines for the hash table used by section_already_linked,
1016 initialize the table, fill in an entry and remove the table. */
1018 static struct bfd_hash_entry
*
1019 already_linked_newfunc (entry
, table
, string
)
1020 struct bfd_hash_entry
*entry ATTRIBUTE_UNUSED
;
1021 struct bfd_hash_table
*table
;
1022 const char *string ATTRIBUTE_UNUSED
;
1024 struct already_linked_hash_entry
*ret
=
1025 bfd_hash_allocate (table
, sizeof (struct already_linked_hash_entry
));
1029 return (struct bfd_hash_entry
*) ret
;
1033 already_linked_table_init ()
1035 if (! bfd_hash_table_init_n (&already_linked_table
,
1036 already_linked_newfunc
,
1038 einfo (_("%P%F: Failed to create hash table\n"));
1042 already_linked_table_free ()
1044 bfd_hash_table_free (&already_linked_table
);
1047 /* The wild routines.
1049 These expand statements like *(.text) and foo.o to a list of
1050 explicit actions, like foo.o(.text), bar.o(.text) and
1051 foo.o(.text, .data). */
1053 /* Return true if the PATTERN argument is a wildcard pattern.
1054 Although backslashes are treated specially if a pattern contains
1055 wildcards, we do not consider the mere presence of a backslash to
1056 be enough to cause the the pattern to be treated as a wildcard.
1057 That lets us handle DOS filenames more naturally. */
1061 const char *pattern
;
1065 for (s
= pattern
; *s
!= '\0'; ++s
)
1073 /* Add SECTION to the output section OUTPUT. Do this by creating a
1074 lang_input_section statement which is placed at PTR. FILE is the
1075 input file which holds SECTION. */
1078 wild_doit (ptr
, section
, output
, file
)
1079 lang_statement_list_type
*ptr
;
1081 lang_output_section_statement_type
*output
;
1082 lang_input_statement_type
*file
;
1087 flags
= bfd_get_section_flags (section
->owner
, section
);
1091 /* If we are doing a final link, discard sections marked with
1093 if (! link_info
.relocateable
1094 && (flags
& SEC_EXCLUDE
) != 0)
1097 /* Discard input sections which are assigned to a section named
1098 DISCARD_SECTION_NAME. */
1099 if (strcmp (output
->name
, DISCARD_SECTION_NAME
) == 0)
1102 /* Discard debugging sections if we are stripping debugging
1104 if ((link_info
.strip
== strip_debugger
|| link_info
.strip
== strip_all
)
1105 && (flags
& SEC_DEBUGGING
) != 0)
1110 if (section
->output_section
== NULL
)
1112 /* This prevents future calls from assigning this section. */
1113 section
->output_section
= bfd_abs_section_ptr
;
1118 if (section
->output_section
== NULL
)
1121 lang_input_section_type
*new;
1124 if (output
->bfd_section
== NULL
)
1132 /* Add a section reference to the list. */
1133 new = new_stat (lang_input_section
, ptr
);
1135 new->section
= section
;
1137 section
->output_section
= output
->bfd_section
;
1139 flags
= section
->flags
;
1141 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1142 to an output section, because we want to be able to include a
1143 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1144 section (I don't know why we want to do this, but we do).
1145 build_link_order in ldwrite.c handles this case by turning
1146 the embedded SEC_NEVER_LOAD section into a fill. */
1148 flags
&= ~ SEC_NEVER_LOAD
;
1150 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1151 already been processed. One reason to do this is that on pe
1152 format targets, .text$foo sections go into .text and it's odd
1153 to see .text with SEC_LINK_ONCE set. */
1155 if (! link_info
.relocateable
)
1156 flags
&= ~ (SEC_LINK_ONCE
| SEC_LINK_DUPLICATES
);
1158 /* If this is not the first input section, and the SEC_READONLY
1159 flag is not currently set, then don't set it just because the
1160 input section has it set. */
1162 if (! first
&& (section
->output_section
->flags
& SEC_READONLY
) == 0)
1163 flags
&= ~ SEC_READONLY
;
1165 section
->output_section
->flags
|= flags
;
1167 /* If SEC_READONLY is not set in the input section, then clear
1168 it from the output section. */
1169 if ((section
->flags
& SEC_READONLY
) == 0)
1170 section
->output_section
->flags
&= ~SEC_READONLY
;
1172 switch (output
->sectype
)
1174 case normal_section
:
1179 case overlay_section
:
1180 output
->bfd_section
->flags
&= ~SEC_ALLOC
;
1182 case noload_section
:
1183 output
->bfd_section
->flags
&= ~SEC_LOAD
;
1184 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
1188 /* Copy over SEC_SMALL_DATA. */
1189 if (section
->flags
& SEC_SMALL_DATA
)
1190 section
->output_section
->flags
|= SEC_SMALL_DATA
;
1192 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
1193 output
->bfd_section
->alignment_power
= section
->alignment_power
;
1195 /* If supplied an aligment, then force it. */
1196 if (output
->section_alignment
!= -1)
1197 output
->bfd_section
->alignment_power
= output
->section_alignment
;
1199 if (section
->flags
& SEC_BLOCK
)
1201 section
->output_section
->flags
|= SEC_BLOCK
;
1202 /* FIXME: This value should really be obtained from the bfd... */
1203 output
->block_value
= 128;
1208 /* Handle wildcard sorting. This returns the lang_input_section which
1209 should follow the one we are going to create for SECTION and FILE,
1210 based on the sorting requirements of WILD. It returns NULL if the
1211 new section should just go at the end of the current list. */
1213 static lang_statement_union_type
*
1214 wild_sort (wild
, file
, section
)
1215 lang_wild_statement_type
*wild
;
1216 lang_input_statement_type
*file
;
1219 const char *section_name
;
1220 lang_statement_union_type
*l
;
1222 if (! wild
->filenames_sorted
&& ! wild
->sections_sorted
)
1225 section_name
= bfd_get_section_name (file
->the_bfd
, section
);
1226 for (l
= wild
->children
.head
; l
!= NULL
; l
= l
->next
)
1228 lang_input_section_type
*ls
;
1230 if (l
->header
.type
!= lang_input_section_enum
)
1232 ls
= &l
->input_section
;
1234 /* Sorting by filename takes precedence over sorting by section
1237 if (wild
->filenames_sorted
)
1239 const char *fn
, *ln
;
1243 /* The PE support for the .idata section as generated by
1244 dlltool assumes that files will be sorted by the name of
1245 the archive and then the name of the file within the
1248 if (file
->the_bfd
!= NULL
1249 && bfd_my_archive (file
->the_bfd
) != NULL
)
1251 fn
= bfd_get_filename (bfd_my_archive (file
->the_bfd
));
1256 fn
= file
->filename
;
1260 if (ls
->ifile
->the_bfd
!= NULL
1261 && bfd_my_archive (ls
->ifile
->the_bfd
) != NULL
)
1263 ln
= bfd_get_filename (bfd_my_archive (ls
->ifile
->the_bfd
));
1268 ln
= ls
->ifile
->filename
;
1272 i
= strcmp (fn
, ln
);
1281 fn
= file
->filename
;
1283 ln
= ls
->ifile
->filename
;
1285 i
= strcmp (fn
, ln
);
1293 /* Here either the files are not sorted by name, or we are
1294 looking at the sections for this file. */
1296 if (wild
->sections_sorted
)
1298 if (strcmp (section_name
,
1299 bfd_get_section_name (ls
->ifile
->the_bfd
,
1309 /* Expand a wild statement for a particular FILE. SECTION may be
1310 NULL, in which case it is a wild card. */
1313 output_section_callback (ptr
, section
, file
, output
)
1314 lang_wild_statement_type
*ptr
;
1316 lang_input_statement_type
*file
;
1319 lang_statement_union_type
*before
;
1321 /* If the wild pattern was marked KEEP, the member sections
1322 should be as well. */
1323 if (ptr
->keep_sections
)
1324 section
->flags
|= SEC_KEEP
;
1326 before
= wild_sort (ptr
, file
, section
);
1328 /* Here BEFORE points to the lang_input_section which
1329 should follow the one we are about to add. If BEFORE
1330 is NULL, then the section should just go at the end
1331 of the current list. */
1334 wild_doit (&ptr
->children
, section
,
1335 (lang_output_section_statement_type
*) output
,
1339 lang_statement_list_type list
;
1340 lang_statement_union_type
**pp
;
1342 lang_list_init (&list
);
1343 wild_doit (&list
, section
,
1344 (lang_output_section_statement_type
*) output
,
1347 /* If we are discarding the section, LIST.HEAD will
1349 if (list
.head
!= NULL
)
1351 ASSERT (list
.head
->next
== NULL
);
1353 for (pp
= &ptr
->children
.head
;
1356 ASSERT (*pp
!= NULL
);
1358 list
.head
->next
= *pp
;
1364 /* This is passed a file name which must have been seen already and
1365 added to the statement tree. We will see if it has been opened
1366 already and had its symbols read. If not then we'll read it. */
1368 static lang_input_statement_type
*
1372 lang_input_statement_type
*search
;
1374 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
1375 search
!= (lang_input_statement_type
*) NULL
;
1376 search
= (lang_input_statement_type
*) search
->next_real_file
)
1378 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
1380 if (search
->filename
!= (char *) NULL
1381 && name
!= (char *) NULL
1382 && strcmp (search
->filename
, name
) == 0)
1386 if (search
== (lang_input_statement_type
*) NULL
)
1387 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
1390 /* If we have already added this file, or this file is not real
1391 (FIXME: can that ever actually happen?) or the name is NULL
1392 (FIXME: can that ever actually happen?) don't add this file. */
1395 || search
->filename
== (const char *) NULL
)
1398 load_symbols (search
, (lang_statement_list_type
*) NULL
);
1403 /* Get the symbols for an input file. */
1406 load_symbols (entry
, place
)
1407 lang_input_statement_type
*entry
;
1408 lang_statement_list_type
*place
;
1415 ldfile_open_file (entry
);
1417 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
1418 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
1421 lang_statement_list_type
*hold
;
1423 err
= bfd_get_error ();
1424 if (err
== bfd_error_file_ambiguously_recognized
)
1428 einfo (_("%B: file not recognized: %E\n"), entry
->the_bfd
);
1429 einfo (_("%B: matching formats:"), entry
->the_bfd
);
1430 for (p
= matching
; *p
!= NULL
; p
++)
1434 else if (err
!= bfd_error_file_not_recognized
1436 einfo (_("%F%B: file not recognized: %E\n"), entry
->the_bfd
);
1438 bfd_close (entry
->the_bfd
);
1439 entry
->the_bfd
= NULL
;
1441 /* See if the emulation has some special knowledge. */
1443 if (ldemul_unrecognized_file (entry
))
1446 /* Try to interpret the file as a linker script. */
1448 ldfile_open_command_file (entry
->filename
);
1453 ldfile_assumed_script
= true;
1454 parser_input
= input_script
;
1456 ldfile_assumed_script
= false;
1463 if (ldemul_recognized_file (entry
))
1466 /* We don't call ldlang_add_file for an archive. Instead, the
1467 add_symbols entry point will call ldlang_add_file, via the
1468 add_archive_element callback, for each element of the archive
1470 switch (bfd_get_format (entry
->the_bfd
))
1476 ldlang_add_file (entry
);
1477 if (trace_files
|| trace_file_tries
)
1478 info_msg ("%I\n", entry
);
1482 if (entry
->whole_archive
)
1484 bfd
*member
= bfd_openr_next_archived_file (entry
->the_bfd
,
1486 while (member
!= NULL
)
1488 if (! bfd_check_format (member
, bfd_object
))
1489 einfo (_("%F%B: object %B in archive is not object\n"),
1490 entry
->the_bfd
, member
);
1491 if (! ((*link_info
.callbacks
->add_archive_element
)
1492 (&link_info
, member
, "--whole-archive")))
1494 if (! bfd_link_add_symbols (member
, &link_info
))
1495 einfo (_("%F%B: could not read symbols: %E\n"), member
);
1496 member
= bfd_openr_next_archived_file (entry
->the_bfd
,
1500 entry
->loaded
= true;
1506 if (! bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
1507 einfo (_("%F%B: could not read symbols: %E\n"), entry
->the_bfd
);
1509 entry
->loaded
= true;
1512 /* Handle a wild statement. SECTION or FILE or both may be NULL,
1513 indicating that it is a wildcard. Separate lang_input_section
1514 statements are created for each part of the expansion; they are
1515 added after the wild statement S. OUTPUT is the output section. */
1518 wild (s
, section
, file
, target
, output
)
1519 lang_wild_statement_type
*s
;
1520 const char *section
;
1522 const char *target ATTRIBUTE_UNUSED
;
1523 lang_output_section_statement_type
*output
;
1525 walk_wild (s
, section
, file
, output_section_callback
, (PTR
) output
);
1527 if (section
!= (char *) NULL
1528 && strcmp (section
, "COMMON") == 0
1529 && default_common_section
== NULL
)
1531 /* Remember the section that common is going to in case we later
1532 get something which doesn't know where to put it. */
1533 default_common_section
= output
;
1537 /* Return true iff target is the sought target. */
1540 get_target (target
, data
)
1541 const bfd_target
*target
;
1544 const char *sought
= (const char *) data
;
1546 return strcmp (target
->name
, sought
) == 0;
1549 /* Like strcpy() but convert to lower case as well. */
1558 while ((c
= *src
++) != 0)
1560 if (isupper ((unsigned char) c
))
1569 /* Remove the first occurance of needle (if any) in haystack
1573 strcut (haystack
, needle
)
1577 haystack
= strstr (haystack
, needle
);
1583 for (src
= haystack
+ strlen (needle
); *src
;)
1584 *haystack
++ = *src
++;
1590 /* Compare two target format name strings.
1591 Return a value indicating how "similar" they are. */
1594 name_compare (first
, second
)
1602 copy1
= xmalloc (strlen (first
) + 1);
1603 copy2
= xmalloc (strlen (second
) + 1);
1605 /* Convert the names to lower case. */
1606 stricpy (copy1
, first
);
1607 stricpy (copy2
, second
);
1609 /* Remove and endian strings from the name. */
1610 strcut (copy1
, "big");
1611 strcut (copy1
, "little");
1612 strcut (copy2
, "big");
1613 strcut (copy2
, "little");
1615 /* Return a value based on how many characters match,
1616 starting from the beginning. If both strings are
1617 the same then return 10 * their length. */
1618 for (result
= 0; copy1
[result
] == copy2
[result
]; result
++)
1619 if (copy1
[result
] == 0)
1631 /* Set by closest_target_match() below. */
1632 static const bfd_target
*winner
;
1634 /* Scan all the valid bfd targets looking for one that has the endianness
1635 requirement that was specified on the command line, and is the nearest
1636 match to the original output target. */
1639 closest_target_match (target
, data
)
1640 const bfd_target
*target
;
1643 const bfd_target
*original
= (const bfd_target
*) data
;
1645 if (command_line
.endian
== ENDIAN_BIG
1646 && target
->byteorder
!= BFD_ENDIAN_BIG
)
1649 if (command_line
.endian
== ENDIAN_LITTLE
1650 && target
->byteorder
!= BFD_ENDIAN_LITTLE
)
1653 /* Must be the same flavour. */
1654 if (target
->flavour
!= original
->flavour
)
1657 /* If we have not found a potential winner yet, then record this one. */
1664 /* Oh dear, we now have two potential candidates for a successful match.
1665 Compare their names and choose the better one. */
1666 if (name_compare (target
->name
, original
->name
) > name_compare (winner
->name
, original
->name
))
1669 /* Keep on searching until wqe have checked them all. */
1673 /* Return the BFD target format of the first input file. */
1676 get_first_input_target ()
1678 char *target
= NULL
;
1680 LANG_FOR_EACH_INPUT_STATEMENT (s
)
1682 if (s
->header
.type
== lang_input_statement_enum
1685 ldfile_open_file (s
);
1687 if (s
->the_bfd
!= NULL
1688 && bfd_check_format (s
->the_bfd
, bfd_object
))
1690 target
= bfd_get_target (s
->the_bfd
);
1701 /* Open the output file. */
1709 /* Has the user told us which output format to use? */
1710 if (output_target
== (char *) NULL
)
1712 /* No - has the current target been set to something other than
1714 if (current_target
!= default_target
)
1715 output_target
= current_target
;
1717 /* No - can we determine the format of the first input file? */
1720 output_target
= get_first_input_target ();
1722 /* Failed - use the default output target. */
1723 if (output_target
== NULL
)
1724 output_target
= default_target
;
1728 /* Has the user requested a particular endianness on the command
1730 if (command_line
.endian
!= ENDIAN_UNSET
)
1732 const bfd_target
*target
;
1733 enum bfd_endian desired_endian
;
1735 /* Get the chosen target. */
1736 target
= bfd_search_for_target (get_target
, (PTR
) output_target
);
1738 /* If the target is not supported, we cannot do anything. */
1741 if (command_line
.endian
== ENDIAN_BIG
)
1742 desired_endian
= BFD_ENDIAN_BIG
;
1744 desired_endian
= BFD_ENDIAN_LITTLE
;
1746 /* See if the target has the wrong endianness. This should
1747 not happen if the linker script has provided big and
1748 little endian alternatives, but some scrips don't do
1750 if (target
->byteorder
!= desired_endian
)
1752 /* If it does, then see if the target provides
1753 an alternative with the correct endianness. */
1754 if (target
->alternative_target
!= NULL
1755 && (target
->alternative_target
->byteorder
== desired_endian
))
1756 output_target
= target
->alternative_target
->name
;
1759 /* Try to find a target as similar as possible to
1760 the default target, but which has the desired
1761 endian characteristic. */
1762 (void) bfd_search_for_target (closest_target_match
, (PTR
) target
);
1764 /* Oh dear - we could not find any targets that
1765 satisfy our requirements. */
1767 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1769 output_target
= winner
->name
;
1775 output
= bfd_openw (name
, output_target
);
1777 if (output
== (bfd
*) NULL
)
1779 if (bfd_get_error () == bfd_error_invalid_target
)
1780 einfo (_("%P%F: target %s not found\n"), output_target
);
1782 einfo (_("%P%F: cannot open output file %s: %E\n"), name
);
1785 delete_output_file_on_failure
= true;
1788 output
->flags
|= D_PAGED
;
1791 if (! bfd_set_format (output
, bfd_object
))
1792 einfo (_("%P%F:%s: can not make object file: %E\n"), name
);
1793 if (! bfd_set_arch_mach (output
,
1794 ldfile_output_architecture
,
1795 ldfile_output_machine
))
1796 einfo (_("%P%F:%s: can not set architecture: %E\n"), name
);
1798 link_info
.hash
= bfd_link_hash_table_create (output
);
1799 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
1800 einfo (_("%P%F: can not create link hash table: %E\n"));
1802 bfd_set_gp_size (output
, g_switch_value
);
1807 ldlang_open_output (statement
)
1808 lang_statement_union_type
*statement
;
1810 switch (statement
->header
.type
)
1812 case lang_output_statement_enum
:
1813 ASSERT (output_bfd
== (bfd
*) NULL
);
1814 output_bfd
= open_output (statement
->output_statement
.name
);
1815 ldemul_set_output_arch ();
1816 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
1817 output_bfd
->flags
|= D_PAGED
;
1819 output_bfd
->flags
&= ~D_PAGED
;
1820 if (config
.text_read_only
)
1821 output_bfd
->flags
|= WP_TEXT
;
1823 output_bfd
->flags
&= ~WP_TEXT
;
1824 if (link_info
.traditional_format
)
1825 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
1827 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
1830 case lang_target_statement_enum
:
1831 current_target
= statement
->target_statement
.target
;
1838 /* Open all the input files. */
1841 open_input_bfds (s
, force
)
1842 lang_statement_union_type
*s
;
1845 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1847 switch (s
->header
.type
)
1849 case lang_constructors_statement_enum
:
1850 open_input_bfds (constructor_list
.head
, force
);
1852 case lang_output_section_statement_enum
:
1853 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
1855 case lang_wild_statement_enum
:
1856 /* Maybe we should load the file's symbols. */
1857 if (s
->wild_statement
.filename
1858 && ! wildcardp (s
->wild_statement
.filename
))
1859 (void) lookup_name (s
->wild_statement
.filename
);
1860 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1862 case lang_group_statement_enum
:
1864 struct bfd_link_hash_entry
*undefs
;
1866 /* We must continually search the entries in the group
1867 until no new symbols are added to the list of undefined
1872 undefs
= link_info
.hash
->undefs_tail
;
1873 open_input_bfds (s
->group_statement
.children
.head
, true);
1875 while (undefs
!= link_info
.hash
->undefs_tail
);
1878 case lang_target_statement_enum
:
1879 current_target
= s
->target_statement
.target
;
1881 case lang_input_statement_enum
:
1882 if (s
->input_statement
.real
)
1884 lang_statement_list_type add
;
1886 s
->input_statement
.target
= current_target
;
1888 /* If we are being called from within a group, and this
1889 is an archive which has already been searched, then
1890 force it to be researched unless the whole archive
1891 has been loaded already. */
1893 && !s
->input_statement
.whole_archive
1894 && s
->input_statement
.loaded
1895 && bfd_check_format (s
->input_statement
.the_bfd
,
1897 s
->input_statement
.loaded
= false;
1899 lang_list_init (&add
);
1901 load_symbols (&s
->input_statement
, &add
);
1903 if (add
.head
!= NULL
)
1905 *add
.tail
= s
->next
;
1916 /* If there are [COMMONS] statements, put a wild one into the bss
1920 lang_reasonable_defaults ()
1923 lang_output_section_statement_lookup (".text");
1924 lang_output_section_statement_lookup (".data");
1926 default_common_section
= lang_output_section_statement_lookup (".bss");
1928 if (placed_commons
== false)
1930 lang_wild_statement_type
*new =
1931 new_stat (lang_wild_statement
,
1932 &default_common_section
->children
);
1934 new->section_name
= "COMMON";
1935 new->filename
= (char *) NULL
;
1936 lang_list_init (&new->children
);
1941 /* Add the supplied name to the symbol table as an undefined reference.
1942 Remove items from the chain as we open input bfds. */
1943 typedef struct ldlang_undef_chain_list
1945 struct ldlang_undef_chain_list
*next
;
1947 } ldlang_undef_chain_list_type
;
1949 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
1952 ldlang_add_undef (name
)
1953 const char *const name
;
1955 ldlang_undef_chain_list_type
*new =
1956 ((ldlang_undef_chain_list_type
*)
1957 stat_alloc (sizeof (ldlang_undef_chain_list_type
)));
1959 new->next
= ldlang_undef_chain_list_head
;
1960 ldlang_undef_chain_list_head
= new;
1962 new->name
= buystring (name
);
1965 /* Run through the list of undefineds created above and place them
1966 into the linker hash table as undefined symbols belonging to the
1970 lang_place_undefineds ()
1972 ldlang_undef_chain_list_type
*ptr
;
1974 for (ptr
= ldlang_undef_chain_list_head
;
1975 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
1978 struct bfd_link_hash_entry
*h
;
1980 h
= bfd_link_hash_lookup (link_info
.hash
, ptr
->name
, true, false, true);
1981 if (h
== (struct bfd_link_hash_entry
*) NULL
)
1982 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1983 if (h
->type
== bfd_link_hash_new
)
1985 h
->type
= bfd_link_hash_undefined
;
1986 h
->u
.undef
.abfd
= NULL
;
1987 bfd_link_add_undef (link_info
.hash
, h
);
1992 /* Open input files and attatch to output sections. */
1995 map_input_to_output_sections (s
, target
, output_section_statement
)
1996 lang_statement_union_type
*s
;
1998 lang_output_section_statement_type
*output_section_statement
;
2000 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
2002 switch (s
->header
.type
)
2005 case lang_wild_statement_enum
:
2006 wild (&s
->wild_statement
, s
->wild_statement
.section_name
,
2007 s
->wild_statement
.filename
, target
,
2008 output_section_statement
);
2011 case lang_constructors_statement_enum
:
2012 map_input_to_output_sections (constructor_list
.head
,
2014 output_section_statement
);
2016 case lang_output_section_statement_enum
:
2017 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
2019 &s
->output_section_statement
);
2021 case lang_output_statement_enum
:
2023 case lang_target_statement_enum
:
2024 target
= s
->target_statement
.target
;
2026 case lang_group_statement_enum
:
2027 map_input_to_output_sections (s
->group_statement
.children
.head
,
2029 output_section_statement
);
2031 case lang_fill_statement_enum
:
2032 case lang_input_section_enum
:
2033 case lang_object_symbols_statement_enum
:
2034 case lang_data_statement_enum
:
2035 case lang_reloc_statement_enum
:
2036 case lang_padding_statement_enum
:
2037 case lang_input_statement_enum
:
2038 if (output_section_statement
!= NULL
2039 && output_section_statement
->bfd_section
== NULL
)
2040 init_os (output_section_statement
);
2042 case lang_assignment_statement_enum
:
2043 if (output_section_statement
!= NULL
2044 && output_section_statement
->bfd_section
== NULL
)
2045 init_os (output_section_statement
);
2047 /* Make sure that any sections mentioned in the assignment
2049 exp_init_os (s
->assignment_statement
.exp
);
2051 case lang_afile_asection_pair_statement_enum
:
2054 case lang_address_statement_enum
:
2055 /* Mark the specified section with the supplied address. */
2057 lang_output_section_statement_type
*os
=
2058 lang_output_section_statement_lookup
2059 (s
->address_statement
.section_name
);
2061 if (os
->bfd_section
== NULL
)
2063 os
->addr_tree
= s
->address_statement
.address
;
2071 print_output_section_statement (output_section_statement
)
2072 lang_output_section_statement_type
*output_section_statement
;
2074 asection
*section
= output_section_statement
->bfd_section
;
2077 if (output_section_statement
!= abs_output_section
)
2079 minfo ("\n%s", output_section_statement
->name
);
2081 if (section
!= NULL
)
2083 print_dot
= section
->vma
;
2085 len
= strlen (output_section_statement
->name
);
2086 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2091 while (len
< SECTION_NAME_MAP_LENGTH
)
2097 minfo ("0x%V %W", section
->vma
, section
->_raw_size
);
2099 if (output_section_statement
->load_base
!= NULL
)
2103 addr
= exp_get_abs_int (output_section_statement
->load_base
, 0,
2104 "load base", lang_final_phase_enum
);
2105 minfo (_(" load address 0x%V"), addr
);
2112 print_statement_list (output_section_statement
->children
.head
,
2113 output_section_statement
);
2117 print_assignment (assignment
, output_section
)
2118 lang_assignment_statement_type
*assignment
;
2119 lang_output_section_statement_type
*output_section
;
2122 etree_value_type result
;
2124 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2127 result
= exp_fold_tree (assignment
->exp
->assign
.src
, output_section
,
2128 lang_final_phase_enum
, print_dot
, &print_dot
);
2130 minfo ("0x%V", result
.value
+ result
.section
->bfd_section
->vma
);
2141 exp_print_tree (assignment
->exp
);
2147 print_input_statement (statm
)
2148 lang_input_statement_type
*statm
;
2150 if (statm
->filename
!= (char *) NULL
)
2152 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
2156 /* Print all symbols defined in a particular section. This is called
2157 via bfd_link_hash_traverse. */
2160 print_one_symbol (hash_entry
, ptr
)
2161 struct bfd_link_hash_entry
*hash_entry
;
2164 asection
*sec
= (asection
*) ptr
;
2166 if ((hash_entry
->type
== bfd_link_hash_defined
2167 || hash_entry
->type
== bfd_link_hash_defweak
)
2168 && sec
== hash_entry
->u
.def
.section
)
2172 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2175 (hash_entry
->u
.def
.value
2176 + hash_entry
->u
.def
.section
->output_offset
2177 + hash_entry
->u
.def
.section
->output_section
->vma
));
2179 minfo (" %T\n", hash_entry
->root
.string
);
2185 /* Print information about an input section to the map file. */
2188 print_input_section (in
)
2189 lang_input_section_type
*in
;
2191 asection
*i
= in
->section
;
2192 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
2193 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2194 ldfile_output_machine
);
2199 minfo ("%s", i
->name
);
2201 if (i
->output_section
!= NULL
)
2205 len
= 1 + strlen (i
->name
);
2206 if (len
>= SECTION_NAME_MAP_LENGTH
- 1)
2211 while (len
< SECTION_NAME_MAP_LENGTH
)
2217 minfo ("0x%V %W %B\n",
2218 i
->output_section
->vma
+ i
->output_offset
, size
/ opb
,
2221 if (i
->_cooked_size
!= 0 && i
->_cooked_size
!= i
->_raw_size
)
2223 len
= SECTION_NAME_MAP_LENGTH
+ 3;
2235 minfo (_("%W (size before relaxing)\n"), i
->_raw_size
);
2238 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
2240 print_dot
= i
->output_section
->vma
+ i
->output_offset
+ size
/ opb
;
2246 print_fill_statement (fill
)
2247 lang_fill_statement_type
*fill
;
2249 fprintf (config
.map_file
, " FILL mask 0x%x\n", fill
->fill
);
2253 print_data_statement (data
)
2254 lang_data_statement_type
*data
;
2260 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2261 ldfile_output_machine
);
2263 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2266 addr
= data
->output_vma
;
2267 if (data
->output_section
!= NULL
)
2268 addr
+= data
->output_section
->vma
;
2296 minfo ("0x%V %W %s 0x%v", addr
, size
, name
, data
->value
);
2298 if (data
->exp
->type
.node_class
!= etree_value
)
2301 exp_print_tree (data
->exp
);
2306 print_dot
= addr
+ size
/ opb
;
2310 /* Print an address statement. These are generated by options like
2314 print_address_statement (address
)
2315 lang_address_statement_type
*address
;
2317 minfo (_("Address of section %s set to "), address
->section_name
);
2318 exp_print_tree (address
->address
);
2322 /* Print a reloc statement. */
2325 print_reloc_statement (reloc
)
2326 lang_reloc_statement_type
*reloc
;
2331 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2332 ldfile_output_machine
);
2334 for (i
= 0; i
< SECTION_NAME_MAP_LENGTH
; i
++)
2337 addr
= reloc
->output_vma
;
2338 if (reloc
->output_section
!= NULL
)
2339 addr
+= reloc
->output_section
->vma
;
2341 size
= bfd_get_reloc_size (reloc
->howto
);
2343 minfo ("0x%V %W RELOC %s ", addr
, size
, reloc
->howto
->name
);
2345 if (reloc
->name
!= NULL
)
2346 minfo ("%s+", reloc
->name
);
2348 minfo ("%s+", reloc
->section
->name
);
2350 exp_print_tree (reloc
->addend_exp
);
2354 print_dot
= addr
+ size
/ opb
;
2358 print_padding_statement (s
)
2359 lang_padding_statement_type
*s
;
2363 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2364 ldfile_output_machine
);
2368 len
= sizeof " *fill*" - 1;
2369 while (len
< SECTION_NAME_MAP_LENGTH
)
2375 addr
= s
->output_offset
;
2376 if (s
->output_section
!= NULL
)
2377 addr
+= s
->output_section
->vma
;
2378 minfo ("0x%V %W", addr
, s
->size
);
2381 minfo (" %u", s
->fill
);
2385 print_dot
= addr
+ s
->size
/ opb
;
2389 print_wild_statement (w
, os
)
2390 lang_wild_statement_type
*w
;
2391 lang_output_section_statement_type
*os
;
2395 if (w
->filenames_sorted
)
2397 if (w
->exclude_filename_list
!= NULL
)
2400 minfo ("EXCLUDE_FILE ( %s", w
->exclude_filename_list
->name
);
2401 for (tmp
= w
->exclude_filename_list
->next
; tmp
; tmp
= tmp
->next
)
2402 minfo (", %s", tmp
->name
);
2405 if (w
->filename
!= NULL
)
2406 minfo ("%s", w
->filename
);
2409 if (w
->filenames_sorted
)
2413 if (w
->sections_sorted
)
2415 if (w
->section_name
!= NULL
)
2416 minfo ("%s", w
->section_name
);
2419 if (w
->sections_sorted
)
2425 print_statement_list (w
->children
.head
, os
);
2428 /* Print a group statement. */
2432 lang_group_statement_type
*s
;
2433 lang_output_section_statement_type
*os
;
2435 fprintf (config
.map_file
, "START GROUP\n");
2436 print_statement_list (s
->children
.head
, os
);
2437 fprintf (config
.map_file
, "END GROUP\n");
2440 /* Print the list of statements in S.
2441 This can be called for any statement type. */
2444 print_statement_list (s
, os
)
2445 lang_statement_union_type
*s
;
2446 lang_output_section_statement_type
*os
;
2450 print_statement (s
, os
);
2455 /* Print the first statement in statement list S.
2456 This can be called for any statement type. */
2459 print_statement (s
, os
)
2460 lang_statement_union_type
*s
;
2461 lang_output_section_statement_type
*os
;
2463 switch (s
->header
.type
)
2466 fprintf (config
.map_file
, _("Fail with %d\n"), s
->header
.type
);
2469 case lang_constructors_statement_enum
:
2470 if (constructor_list
.head
!= NULL
)
2472 if (constructors_sorted
)
2473 minfo (" SORT (CONSTRUCTORS)\n");
2475 minfo (" CONSTRUCTORS\n");
2476 print_statement_list (constructor_list
.head
, os
);
2479 case lang_wild_statement_enum
:
2480 print_wild_statement (&s
->wild_statement
, os
);
2482 case lang_address_statement_enum
:
2483 print_address_statement (&s
->address_statement
);
2485 case lang_object_symbols_statement_enum
:
2486 minfo (" CREATE_OBJECT_SYMBOLS\n");
2488 case lang_fill_statement_enum
:
2489 print_fill_statement (&s
->fill_statement
);
2491 case lang_data_statement_enum
:
2492 print_data_statement (&s
->data_statement
);
2494 case lang_reloc_statement_enum
:
2495 print_reloc_statement (&s
->reloc_statement
);
2497 case lang_input_section_enum
:
2498 print_input_section (&s
->input_section
);
2500 case lang_padding_statement_enum
:
2501 print_padding_statement (&s
->padding_statement
);
2503 case lang_output_section_statement_enum
:
2504 print_output_section_statement (&s
->output_section_statement
);
2506 case lang_assignment_statement_enum
:
2507 print_assignment (&s
->assignment_statement
, os
);
2509 case lang_target_statement_enum
:
2510 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
2512 case lang_output_statement_enum
:
2513 minfo ("OUTPUT(%s", s
->output_statement
.name
);
2514 if (output_target
!= NULL
)
2515 minfo (" %s", output_target
);
2518 case lang_input_statement_enum
:
2519 print_input_statement (&s
->input_statement
);
2521 case lang_group_statement_enum
:
2522 print_group (&s
->group_statement
, os
);
2524 case lang_afile_asection_pair_statement_enum
:
2533 print_statement_list (statement_list
.head
, abs_output_section
);
2536 /* Print the first N statements in statement list S to STDERR.
2537 If N == 0, nothing is printed.
2538 If N < 0, the entire list is printed.
2539 Intended to be called from GDB. */
2542 dprint_statement (s
, n
)
2543 lang_statement_union_type
*s
;
2546 FILE *map_save
= config
.map_file
;
2548 config
.map_file
= stderr
;
2551 print_statement_list (s
, abs_output_section
);
2554 while (s
&& --n
>= 0)
2556 print_statement (s
, abs_output_section
);
2561 config
.map_file
= map_save
;
2565 insert_pad (this_ptr
, fill
, power
, output_section_statement
, dot
)
2566 lang_statement_union_type
**this_ptr
;
2569 asection
*output_section_statement
;
2572 /* Align this section first to the
2573 input sections requirement, then
2574 to the output section's requirement.
2575 If this alignment is > than any seen before,
2576 then record it too. Perform the alignment by
2577 inserting a magic 'padding' statement. */
2579 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2580 ldfile_output_machine
);
2581 unsigned int alignment_needed
= align_power (dot
, power
) - dot
;
2583 if (alignment_needed
!= 0)
2585 lang_statement_union_type
*new =
2586 ((lang_statement_union_type
*)
2587 stat_alloc (sizeof (lang_padding_statement_type
)));
2589 /* Link into existing chain. */
2590 new->header
.next
= *this_ptr
;
2592 new->header
.type
= lang_padding_statement_enum
;
2593 new->padding_statement
.output_section
= output_section_statement
;
2594 new->padding_statement
.output_offset
=
2595 dot
- output_section_statement
->vma
;
2596 new->padding_statement
.fill
= fill
;
2597 new->padding_statement
.size
= alignment_needed
* opb
;
2600 /* Remember the most restrictive alignment. */
2601 if (power
> output_section_statement
->alignment_power
)
2603 output_section_statement
->alignment_power
= power
;
2605 output_section_statement
->_raw_size
+= alignment_needed
* opb
;
2607 return dot
+ alignment_needed
;
2610 /* Work out how much this section will move the dot point. */
2613 size_input_section (this_ptr
, output_section_statement
, fill
, dot
, relax
)
2614 lang_statement_union_type
**this_ptr
;
2615 lang_output_section_statement_type
*output_section_statement
;
2618 boolean relax ATTRIBUTE_UNUSED
;
2620 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
2621 asection
*i
= is
->section
;
2622 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2623 ldfile_output_machine
);
2625 if (is
->ifile
->just_syms_flag
== false)
2627 if (output_section_statement
->subsection_alignment
!= -1)
2628 i
->alignment_power
=
2629 output_section_statement
->subsection_alignment
;
2631 dot
= insert_pad (this_ptr
, fill
, i
->alignment_power
,
2632 output_section_statement
->bfd_section
, dot
);
2634 /* Remember where in the output section this input section goes. */
2636 i
->output_offset
= dot
- output_section_statement
->bfd_section
->vma
;
2638 /* Mark how big the output section must be to contain this now. */
2639 if (i
->_cooked_size
!= 0)
2640 dot
+= i
->_cooked_size
/ opb
;
2642 dot
+= i
->_raw_size
/ opb
;
2643 output_section_statement
->bfd_section
->_raw_size
=
2644 (dot
- output_section_statement
->bfd_section
->vma
) * opb
;
2648 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
2654 #define IGNORE_SECTION(bfd, s) \
2655 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) != (SEC_ALLOC | SEC_LOAD)) \
2656 || bfd_section_size (bfd, s) == 0)
2658 /* Check to see if any allocated sections overlap with other allocated
2659 sections. This can happen when the linker script specifically specifies
2660 the output section addresses of the two sections. */
2663 lang_check_section_addresses ()
2666 unsigned opb
= bfd_octets_per_byte (output_bfd
);
2668 /* Scan all sections in the output list. */
2669 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2673 /* Ignore sections which are not loaded or which have no contents. */
2674 if (IGNORE_SECTION (output_bfd
, s
))
2677 /* Once we reach section 's' stop our seach. This prevents two
2678 warning messages from being produced, one for 'section A overlaps
2679 section B' and one for 'section B overlaps section A'. */
2680 for (os
= output_bfd
->sections
; os
!= s
; os
= os
->next
)
2687 /* Only consider loadable sections with real contents. */
2688 if (IGNORE_SECTION (output_bfd
, os
))
2691 /* We must check the sections' LMA addresses not their
2692 VMA addresses because overlay sections can have
2693 overlapping VMAs but they must have distinct LMAs. */
2694 s_start
= bfd_section_lma (output_bfd
, s
);
2695 os_start
= bfd_section_lma (output_bfd
, os
);
2696 s_end
= s_start
+ bfd_section_size (output_bfd
, s
) / opb
- 1;
2697 os_end
= os_start
+ bfd_section_size (output_bfd
, os
) / opb
- 1;
2699 /* Look for an overlap. */
2700 if ((s_end
< os_start
) || (s_start
> os_end
))
2704 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2705 s
->name
, s_start
, s_end
, os
->name
, os_start
, os_end
);
2707 /* Once we have found one overlap for this section,
2708 stop looking for others. */
2714 /* This variable indicates whether bfd_relax_section should be called
2717 static boolean relax_again
;
2719 /* Make sure the new address is within the region. We explicitly permit the
2720 current address to be at the exact end of the region when the address is
2721 non-zero, in case the region is at the end of addressable memory and the
2722 calculation wraps around. */
2725 os_region_check (os
, region
, tree
, base
)
2726 lang_output_section_statement_type
*os
;
2727 struct memory_region_struct
*region
;
2731 if ((region
->current
< region
->origin
2732 || (region
->current
- region
->origin
> region
->length
))
2733 && ((region
->current
!= region
->origin
+ region
->length
)
2736 if (tree
!= (etree_type
*) NULL
)
2738 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2740 os
->bfd_section
->owner
,
2741 os
->bfd_section
->name
,
2746 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2748 os
->bfd_section
->owner
,
2749 os
->bfd_section
->name
);
2751 /* Reset the region pointer. */
2752 region
->current
= region
->origin
;
2756 /* Set the sizes for all the output sections. */
2759 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
2760 lang_statement_union_type
*s
;
2761 lang_output_section_statement_type
*output_section_statement
;
2762 lang_statement_union_type
**prev
;
2767 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
2768 ldfile_output_machine
);
2770 /* Size up the sections from their constituent parts. */
2771 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
2773 switch (s
->header
.type
)
2775 case lang_output_section_statement_enum
:
2778 lang_output_section_statement_type
*os
= &s
->output_section_statement
;
2780 if (os
->bfd_section
== NULL
)
2781 /* This section was never actually created. */
2784 /* If this is a COFF shared library section, use the size and
2785 address from the input section. FIXME: This is COFF
2786 specific; it would be cleaner if there were some other way
2787 to do this, but nothing simple comes to mind. */
2788 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
2792 if (os
->children
.head
== NULL
2793 || os
->children
.head
->next
!= NULL
2794 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
2795 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2798 input
= os
->children
.head
->input_section
.section
;
2799 bfd_set_section_vma (os
->bfd_section
->owner
,
2801 bfd_section_vma (input
->owner
, input
));
2802 os
->bfd_section
->_raw_size
= input
->_raw_size
;
2806 if (bfd_is_abs_section (os
->bfd_section
))
2808 /* No matter what happens, an abs section starts at zero. */
2809 ASSERT (os
->bfd_section
->vma
== 0);
2813 if (os
->addr_tree
== (etree_type
*) NULL
)
2815 /* No address specified for this section, get one
2816 from the region specification. */
2817 if (os
->region
== (lang_memory_region_type
*) NULL
2818 || (((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2819 & (SEC_ALLOC
| SEC_LOAD
)) != 0)
2820 && os
->region
->name
[0] == '*'
2821 && strcmp (os
->region
->name
, "*default*") == 0))
2823 os
->region
= lang_memory_default (os
->bfd_section
);
2826 /* If a loadable section is using the default memory
2827 region, and some non default memory regions were
2828 defined, issue a warning. */
2829 if ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2830 & (SEC_ALLOC
| SEC_LOAD
)) != 0
2831 && ! link_info
.relocateable
2832 && strcmp (os
->region
->name
, "*default*") == 0
2833 && lang_memory_region_list
!= NULL
2834 && (strcmp (lang_memory_region_list
->name
, "*default*") != 0
2835 || lang_memory_region_list
->next
!= NULL
))
2836 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2837 bfd_get_section_name (output_bfd
, os
->bfd_section
));
2839 dot
= os
->region
->current
;
2841 if (os
->section_alignment
== -1)
2846 dot
= align_power (dot
, os
->bfd_section
->alignment_power
);
2848 if (dot
!= olddot
&& config
.warn_section_align
)
2849 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2850 os
->name
, (unsigned int) (dot
- olddot
));
2857 r
= exp_fold_tree (os
->addr_tree
,
2859 lang_allocating_phase_enum
,
2861 if (r
.valid_p
== false)
2863 einfo (_("%F%S: non constant address expression for section %s\n"),
2866 dot
= r
.value
+ r
.section
->bfd_section
->vma
;
2869 /* The section starts here.
2870 First, align to what the section needs. */
2872 if (os
->section_alignment
!= -1)
2873 dot
= align_power (dot
, os
->section_alignment
);
2875 bfd_set_section_vma (0, os
->bfd_section
, dot
);
2877 os
->bfd_section
->output_offset
= 0;
2880 (void) lang_size_sections (os
->children
.head
, os
,
2882 os
->fill
, dot
, relax
);
2884 /* Put the section within the requested block size, or
2885 align at the block boundary. */
2886 after
= ALIGN_N (os
->bfd_section
->vma
2887 + os
->bfd_section
->_raw_size
/ opb
,
2888 /* The coercion here is important, see ld.h. */
2889 (bfd_vma
) os
->block_value
);
2891 if (bfd_is_abs_section (os
->bfd_section
))
2892 ASSERT (after
== os
->bfd_section
->vma
);
2894 os
->bfd_section
->_raw_size
=
2895 (after
- os
->bfd_section
->vma
) * opb
;
2896 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
2897 os
->processed
= true;
2899 /* Update dot in the region ?
2900 We only do this if the section is going to be allocated,
2901 since unallocated sections do not contribute to the region's
2902 overall size in memory.
2904 If the SEC_NEVER_LOAD bit is not set, it will affect the
2905 addresses of sections after it. We have to update
2907 if (os
->region
!= (lang_memory_region_type
*) NULL
2908 && ((bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2909 & SEC_NEVER_LOAD
) == 0
2910 || (bfd_get_section_flags (output_bfd
, os
->bfd_section
)
2911 & (SEC_ALLOC
| SEC_LOAD
))))
2913 os
->region
->current
= dot
;
2915 /* Make sure the new address is within the region. */
2916 os_region_check (os
, os
->region
, os
->addr_tree
,
2917 os
->bfd_section
->vma
);
2919 /* If there's no load address specified, use the run
2920 region as the load region. */
2921 if (os
->lma_region
== NULL
&& os
->load_base
== NULL
)
2922 os
->lma_region
= os
->region
;
2924 if (os
->lma_region
!= NULL
)
2926 if (os
->load_base
!= NULL
)
2928 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
2932 /* Don't allocate twice. */
2933 if (os
->lma_region
!= os
->region
)
2935 /* Set load_base, which will be handled later. */
2937 exp_intop (os
->lma_region
->current
);
2938 os
->lma_region
->current
+=
2939 os
->bfd_section
->_raw_size
/ opb
;
2940 os_region_check (os
, os
->lma_region
, NULL
,
2941 os
->bfd_section
->lma
);
2949 case lang_constructors_statement_enum
:
2950 dot
= lang_size_sections (constructor_list
.head
,
2951 output_section_statement
,
2952 &s
->wild_statement
.children
.head
,
2957 case lang_data_statement_enum
:
2959 unsigned int size
= 0;
2961 s
->data_statement
.output_vma
=
2962 dot
- output_section_statement
->bfd_section
->vma
;
2963 s
->data_statement
.output_section
=
2964 output_section_statement
->bfd_section
;
2966 switch (s
->data_statement
.type
)
2987 output_section_statement
->bfd_section
->_raw_size
+= size
;
2988 /* The output section gets contents, and then we inspect for
2989 any flags set in the input script which override any ALLOC. */
2990 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
2991 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
))
2993 output_section_statement
->bfd_section
->flags
|=
2994 SEC_ALLOC
| SEC_LOAD
;
2999 case lang_reloc_statement_enum
:
3003 s
->reloc_statement
.output_vma
=
3004 dot
- output_section_statement
->bfd_section
->vma
;
3005 s
->reloc_statement
.output_section
=
3006 output_section_statement
->bfd_section
;
3007 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
3009 output_section_statement
->bfd_section
->_raw_size
+= size
;
3013 case lang_wild_statement_enum
:
3015 dot
= lang_size_sections (s
->wild_statement
.children
.head
,
3016 output_section_statement
,
3017 &s
->wild_statement
.children
.head
,
3022 case lang_object_symbols_statement_enum
:
3023 link_info
.create_object_symbols_section
=
3024 output_section_statement
->bfd_section
;
3026 case lang_output_statement_enum
:
3027 case lang_target_statement_enum
:
3029 case lang_input_section_enum
:
3033 i
= (*prev
)->input_section
.section
;
3036 if (i
->_cooked_size
== 0)
3037 i
->_cooked_size
= i
->_raw_size
;
3043 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
3044 einfo (_("%P%F: can't relax section: %E\n"));
3048 dot
= size_input_section (prev
,
3049 output_section_statement
,
3050 output_section_statement
->fill
,
3054 case lang_input_statement_enum
:
3056 case lang_fill_statement_enum
:
3057 s
->fill_statement
.output_section
=
3058 output_section_statement
->bfd_section
;
3060 fill
= s
->fill_statement
.fill
;
3062 case lang_assignment_statement_enum
:
3064 bfd_vma newdot
= dot
;
3066 exp_fold_tree (s
->assignment_statement
.exp
,
3067 output_section_statement
,
3068 lang_allocating_phase_enum
,
3074 /* The assignment changed dot. Insert a pad. */
3075 if (output_section_statement
== abs_output_section
)
3077 /* If we don't have an output section, then just adjust
3078 the default memory address. */
3079 lang_memory_region_lookup ("*default*")->current
= newdot
;
3083 lang_statement_union_type
*new =
3084 ((lang_statement_union_type
*)
3085 stat_alloc (sizeof (lang_padding_statement_type
)));
3087 /* Link into existing chain. */
3088 new->header
.next
= *prev
;
3090 new->header
.type
= lang_padding_statement_enum
;
3091 new->padding_statement
.output_section
=
3092 output_section_statement
->bfd_section
;
3093 new->padding_statement
.output_offset
=
3094 dot
- output_section_statement
->bfd_section
->vma
;
3095 new->padding_statement
.fill
= fill
;
3096 new->padding_statement
.size
= (newdot
- dot
) * opb
;
3097 output_section_statement
->bfd_section
->_raw_size
+=
3098 new->padding_statement
.size
;
3106 case lang_padding_statement_enum
:
3107 /* If we are relaxing, and this is not the first pass, some
3108 padding statements may have been inserted during previous
3109 passes. We may have to move the padding statement to a new
3110 location if dot has a different value at this point in this
3111 pass than it did at this point in the previous pass. */
3112 s
->padding_statement
.output_offset
=
3113 dot
- output_section_statement
->bfd_section
->vma
;
3114 dot
+= s
->padding_statement
.size
/ opb
;
3115 output_section_statement
->bfd_section
->_raw_size
+=
3116 s
->padding_statement
.size
;
3119 case lang_group_statement_enum
:
3120 dot
= lang_size_sections (s
->group_statement
.children
.head
,
3121 output_section_statement
,
3122 &s
->group_statement
.children
.head
,
3130 /* This can only get here when relaxing is turned on. */
3132 case lang_address_statement_enum
:
3135 prev
= &s
->header
.next
;
3141 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
3142 lang_statement_union_type
*s
;
3143 lang_output_section_statement_type
*output_section_statement
;
3147 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3148 ldfile_output_machine
);
3150 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
3152 switch (s
->header
.type
)
3154 case lang_constructors_statement_enum
:
3155 dot
= lang_do_assignments (constructor_list
.head
,
3156 output_section_statement
,
3161 case lang_output_section_statement_enum
:
3163 lang_output_section_statement_type
*os
=
3164 &(s
->output_section_statement
);
3166 if (os
->bfd_section
!= NULL
)
3168 dot
= os
->bfd_section
->vma
;
3169 (void) lang_do_assignments (os
->children
.head
, os
,
3171 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
/ opb
;
3176 /* If nothing has been placed into the output section then
3177 it won't have a bfd_section. */
3178 if (os
->bfd_section
)
3180 os
->bfd_section
->lma
3181 = exp_get_abs_int (os
->load_base
, 0, "load base",
3182 lang_final_phase_enum
);
3187 case lang_wild_statement_enum
:
3189 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
3190 output_section_statement
,
3195 case lang_object_symbols_statement_enum
:
3196 case lang_output_statement_enum
:
3197 case lang_target_statement_enum
:
3199 case lang_common_statement_enum
:
3202 case lang_data_statement_enum
:
3204 etree_value_type value
;
3206 value
= exp_fold_tree (s
->data_statement
.exp
,
3208 lang_final_phase_enum
, dot
, &dot
);
3209 s
->data_statement
.value
= value
.value
;
3210 if (value
.valid_p
== false)
3211 einfo (_("%F%P: invalid data statement\n"));
3215 switch (s
->data_statement
.type
)
3239 case lang_reloc_statement_enum
:
3241 etree_value_type value
;
3243 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
3245 lang_final_phase_enum
, dot
, &dot
);
3246 s
->reloc_statement
.addend_value
= value
.value
;
3247 if (value
.valid_p
== false)
3248 einfo (_("%F%P: invalid reloc statement\n"));
3250 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
) / opb
;
3253 case lang_input_section_enum
:
3255 asection
*in
= s
->input_section
.section
;
3257 if (in
->_cooked_size
!= 0)
3258 dot
+= in
->_cooked_size
/ opb
;
3260 dot
+= in
->_raw_size
/ opb
;
3264 case lang_input_statement_enum
:
3266 case lang_fill_statement_enum
:
3267 fill
= s
->fill_statement
.fill
;
3269 case lang_assignment_statement_enum
:
3271 exp_fold_tree (s
->assignment_statement
.exp
,
3272 output_section_statement
,
3273 lang_final_phase_enum
,
3279 case lang_padding_statement_enum
:
3280 dot
+= s
->padding_statement
.size
/ opb
;
3283 case lang_group_statement_enum
:
3284 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
3285 output_section_statement
,
3293 case lang_address_statement_enum
:
3301 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3302 operator .startof. (section_name), it produces an undefined symbol
3303 .startof.section_name. Similarly, when it sees
3304 .sizeof. (section_name), it produces an undefined symbol
3305 .sizeof.section_name. For all the output sections, we look for
3306 such symbols, and set them to the correct value. */
3313 if (link_info
.relocateable
)
3316 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
3318 const char *secname
;
3320 struct bfd_link_hash_entry
*h
;
3322 secname
= bfd_get_section_name (output_bfd
, s
);
3323 buf
= xmalloc (10 + strlen (secname
));
3325 sprintf (buf
, ".startof.%s", secname
);
3326 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3327 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3329 h
->type
= bfd_link_hash_defined
;
3330 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
3331 h
->u
.def
.section
= bfd_abs_section_ptr
;
3334 sprintf (buf
, ".sizeof.%s", secname
);
3335 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
3336 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
3338 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3339 ldfile_output_machine
);
3340 h
->type
= bfd_link_hash_defined
;
3341 if (s
->_cooked_size
!= 0)
3342 h
->u
.def
.value
= s
->_cooked_size
/ opb
;
3344 h
->u
.def
.value
= s
->_raw_size
/ opb
;
3345 h
->u
.def
.section
= bfd_abs_section_ptr
;
3355 struct bfd_link_hash_entry
*h
;
3358 if (link_info
.relocateable
|| link_info
.shared
)
3363 if (entry_symbol
== (char *) NULL
)
3365 /* No entry has been specified. Look for start, but don't warn
3366 if we don't find it. */
3367 entry_symbol
= "start";
3371 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
3372 if (h
!= (struct bfd_link_hash_entry
*) NULL
3373 && (h
->type
== bfd_link_hash_defined
3374 || h
->type
== bfd_link_hash_defweak
)
3375 && h
->u
.def
.section
->output_section
!= NULL
)
3379 val
= (h
->u
.def
.value
3380 + bfd_get_section_vma (output_bfd
,
3381 h
->u
.def
.section
->output_section
)
3382 + h
->u
.def
.section
->output_offset
);
3383 if (! bfd_set_start_address (output_bfd
, val
))
3384 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol
);
3391 /* We couldn't find the entry symbol. Try parsing it as a
3393 val
= bfd_scan_vma (entry_symbol
, &send
, 0);
3396 if (! bfd_set_start_address (output_bfd
, val
))
3397 einfo (_("%P%F: can't set start address\n"));
3403 /* Can't find the entry symbol, and it's not a number. Use
3404 the first address in the text section. */
3405 ts
= bfd_get_section_by_name (output_bfd
, ".text");
3406 if (ts
!= (asection
*) NULL
)
3409 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3410 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
3411 if (! bfd_set_start_address (output_bfd
,
3412 bfd_get_section_vma (output_bfd
,
3414 einfo (_("%P%F: can't set start address\n"));
3419 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3426 /* This is a small function used when we want to ignore errors from
3430 #ifdef ANSI_PROTOTYPES
3431 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED
, ...)
3433 ignore_bfd_errors (s
)
3434 const char *s ATTRIBUTE_UNUSED
;
3437 /* Don't do anything. */
3440 /* Check that the architecture of all the input files is compatible
3441 with the output file. Also call the backend to let it do any
3442 other checking that is needed. */
3447 lang_statement_union_type
*file
;
3449 const bfd_arch_info_type
*compatible
;
3451 for (file
= file_chain
.head
;
3452 file
!= (lang_statement_union_type
*) NULL
;
3453 file
= file
->input_statement
.next
)
3455 input_bfd
= file
->input_statement
.the_bfd
;
3456 compatible
= bfd_arch_get_compatible (input_bfd
,
3458 if (compatible
== NULL
)
3460 if (command_line
.warn_mismatch
)
3461 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3462 bfd_printable_name (input_bfd
), input_bfd
,
3463 bfd_printable_name (output_bfd
));
3467 bfd_error_handler_type pfn
= NULL
;
3469 /* If we aren't supposed to warn about mismatched input
3470 files, temporarily set the BFD error handler to a
3471 function which will do nothing. We still want to call
3472 bfd_merge_private_bfd_data, since it may set up
3473 information which is needed in the output file. */
3474 if (! command_line
.warn_mismatch
)
3475 pfn
= bfd_set_error_handler (ignore_bfd_errors
);
3476 if (! bfd_merge_private_bfd_data (input_bfd
, output_bfd
))
3478 if (command_line
.warn_mismatch
)
3479 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3482 if (! command_line
.warn_mismatch
)
3483 bfd_set_error_handler (pfn
);
3488 /* Look through all the global common symbols and attach them to the
3489 correct section. The -sort-common command line switch may be used
3490 to roughly sort the entries by size. */
3495 if (link_info
.relocateable
3496 && ! command_line
.force_common_definition
)
3499 if (! config
.sort_common
)
3500 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
3505 for (power
= 4; power
>= 0; power
--)
3506 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
3511 /* Place one common symbol in the correct section. */
3514 lang_one_common (h
, info
)
3515 struct bfd_link_hash_entry
*h
;
3518 unsigned int power_of_two
;
3521 unsigned opb
= bfd_arch_mach_octets_per_byte (ldfile_output_architecture
,
3522 ldfile_output_machine
);
3524 if (h
->type
!= bfd_link_hash_common
)
3528 power_of_two
= h
->u
.c
.p
->alignment_power
;
3530 if (config
.sort_common
3531 && power_of_two
< (unsigned int) *(int *) info
)
3534 section
= h
->u
.c
.p
->section
;
3536 /* Increase the size of the section. */
3537 section
->_cooked_size
= ALIGN_N ((section
->_cooked_size
+ opb
- 1) / opb
,
3538 (bfd_size_type
) (1 << power_of_two
)) * opb
;
3540 /* Adjust the alignment if necessary. */
3541 if (power_of_two
> section
->alignment_power
)
3542 section
->alignment_power
= power_of_two
;
3544 /* Change the symbol from common to defined. */
3545 h
->type
= bfd_link_hash_defined
;
3546 h
->u
.def
.section
= section
;
3547 h
->u
.def
.value
= section
->_cooked_size
;
3549 /* Increase the size of the section. */
3550 section
->_cooked_size
+= size
;
3552 /* Make sure the section is allocated in memory, and make sure that
3553 it is no longer a common section. */
3554 section
->flags
|= SEC_ALLOC
;
3555 section
->flags
&= ~SEC_IS_COMMON
;
3557 if (config
.map_file
!= NULL
)
3559 static boolean header_printed
;
3564 if (! header_printed
)
3566 minfo (_("\nAllocating common symbols\n"));
3567 minfo (_("Common symbol size file\n\n"));
3568 header_printed
= true;
3571 name
= demangle (h
->root
.string
);
3573 len
= strlen (name
);
3588 if (size
<= 0xffffffff)
3589 sprintf (buf
, "%lx", (unsigned long) size
);
3591 sprintf_vma (buf
, size
);
3601 minfo ("%B\n", section
->owner
);
3607 /* Run through the input files and ensure that every input section has
3608 somewhere to go. If one is found without a destination then create
3609 an input request and place it into the statement tree. */
3612 lang_place_orphans ()
3614 LANG_FOR_EACH_INPUT_STATEMENT (file
)
3618 for (s
= file
->the_bfd
->sections
;
3619 s
!= (asection
*) NULL
;
3622 if (s
->output_section
== (asection
*) NULL
)
3624 /* This section of the file is not attatched, root
3625 around for a sensible place for it to go. */
3627 if (file
->just_syms_flag
)
3629 /* We are only retrieving symbol values from this
3630 file. We want the symbols to act as though the
3631 values in the file are absolute. */
3632 s
->output_section
= bfd_abs_section_ptr
;
3633 s
->output_offset
= s
->vma
;
3635 else if (strcmp (s
->name
, "COMMON") == 0)
3637 /* This is a lonely common section which must have
3638 come from an archive. We attach to the section
3639 with the wildcard. */
3640 if (! link_info
.relocateable
3641 || command_line
.force_common_definition
)
3643 if (default_common_section
== NULL
)
3646 /* This message happens when using the
3647 svr3.ifile linker script, so I have
3649 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3651 default_common_section
=
3652 lang_output_section_statement_lookup (".bss");
3655 wild_doit (&default_common_section
->children
, s
,
3656 default_common_section
, file
);
3659 else if (ldemul_place_orphan (file
, s
))
3663 lang_output_section_statement_type
*os
=
3664 lang_output_section_statement_lookup (s
->name
);
3666 wild_doit (&os
->children
, s
, os
, file
);
3674 lang_set_flags (ptr
, flags
, invert
)
3675 lang_memory_region_type
*ptr
;
3679 flagword
*ptr_flags
;
3681 ptr_flags
= invert
? &ptr
->not_flags
: &ptr
->flags
;
3687 *ptr_flags
|= SEC_ALLOC
;
3691 *ptr_flags
|= SEC_READONLY
;
3695 *ptr_flags
|= SEC_DATA
;
3699 *ptr_flags
|= SEC_CODE
;
3704 *ptr_flags
|= SEC_LOAD
;
3708 einfo (_("%P%F: invalid syntax in flags\n"));
3715 /* Call a function on each input file. This function will be called
3716 on an archive, but not on the elements. */
3719 lang_for_each_input_file (func
)
3720 void (*func
) PARAMS ((lang_input_statement_type
*));
3722 lang_input_statement_type
*f
;
3724 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
3726 f
= (lang_input_statement_type
*) f
->next_real_file
)
3730 /* Call a function on each file. The function will be called on all
3731 the elements of an archive which are included in the link, but will
3732 not be called on the archive file itself. */
3735 lang_for_each_file (func
)
3736 void (*func
) PARAMS ((lang_input_statement_type
*));
3738 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3749 lang_for_each_input_section (func
)
3750 void (*func
) PARAMS ((bfd
*ab
, asection
*as
));
3752 LANG_FOR_EACH_INPUT_STATEMENT (f
)
3756 for (s
= f
->the_bfd
->sections
;
3757 s
!= (asection
*) NULL
;
3760 func (f
->the_bfd
, s
);
3768 ldlang_add_file (entry
)
3769 lang_input_statement_type
*entry
;
3773 lang_statement_append (&file_chain
,
3774 (lang_statement_union_type
*) entry
,
3777 /* The BFD linker needs to have a list of all input BFDs involved in
3779 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
3780 ASSERT (entry
->the_bfd
!= output_bfd
);
3781 for (pp
= &link_info
.input_bfds
;
3782 *pp
!= (bfd
*) NULL
;
3783 pp
= &(*pp
)->link_next
)
3785 *pp
= entry
->the_bfd
;
3786 entry
->the_bfd
->usrdata
= (PTR
) entry
;
3787 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
3789 /* Look through the sections and check for any which should not be
3790 included in the link. We need to do this now, so that we can
3791 notice when the backend linker tries to report multiple
3792 definition errors for symbols which are in sections we aren't
3793 going to link. FIXME: It might be better to entirely ignore
3794 symbols which are defined in sections which are going to be
3795 discarded. This would require modifying the backend linker for
3796 each backend which might set the SEC_LINK_ONCE flag. If we do
3797 this, we should probably handle SEC_EXCLUDE in the same way. */
3799 bfd_map_over_sections (entry
->the_bfd
, section_already_linked
, (PTR
) entry
);
3803 lang_add_output (name
, from_script
)
3807 /* Make -o on command line override OUTPUT in script. */
3808 if (had_output_filename
== false || !from_script
)
3810 output_filename
= name
;
3811 had_output_filename
= true;
3815 static lang_output_section_statement_type
*current_section
;
3827 for (l
= 0; l
< 32; l
++)
3829 if (i
>= (unsigned int) x
)
3837 lang_output_section_statement_type
*
3838 lang_enter_output_section_statement (output_section_statement_name
,
3839 address_exp
, sectype
, block_value
,
3840 align
, subalign
, ebase
)
3841 const char *output_section_statement_name
;
3842 etree_type
*address_exp
;
3843 enum section_type sectype
;
3844 bfd_vma block_value
;
3846 etree_type
*subalign
;
3849 lang_output_section_statement_type
*os
;
3853 lang_output_section_statement_lookup (output_section_statement_name
);
3855 /* Add this statement to tree. */
3857 add_statement (lang_output_section_statement_enum
,
3858 output_section_statement
);
3860 /* Make next things chain into subchain of this. */
3862 if (os
->addr_tree
== (etree_type
*) NULL
)
3864 os
->addr_tree
= address_exp
;
3866 os
->sectype
= sectype
;
3867 if (sectype
!= noload_section
)
3868 os
->flags
= SEC_NO_FLAGS
;
3870 os
->flags
= SEC_NEVER_LOAD
;
3871 os
->block_value
= block_value
? block_value
: 1;
3872 stat_ptr
= &os
->children
;
3874 os
->subsection_alignment
=
3875 topower (exp_get_value_int (subalign
, -1, "subsection alignment", 0));
3876 os
->section_alignment
=
3877 topower (exp_get_value_int (align
, -1, "section alignment", 0));
3879 os
->load_base
= ebase
;
3886 lang_output_statement_type
*new =
3887 new_stat (lang_output_statement
, stat_ptr
);
3889 new->name
= output_filename
;
3892 /* Reset the current counters in the regions. */
3895 reset_memory_regions ()
3897 lang_memory_region_type
*p
= lang_memory_region_list
;
3899 for (p
= lang_memory_region_list
;
3900 p
!= (lang_memory_region_type
*) NULL
;
3903 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
3904 p
->current
= p
->origin
;
3908 /* Expand a wild statement for a particular FILE, marking its sections KEEP
3909 as needed. SECTION may be NULL, in which case it is a wild card. */
3912 gc_section_callback (ptr
, section
, file
, data
)
3913 lang_wild_statement_type
*ptr
;
3915 lang_input_statement_type
*file ATTRIBUTE_UNUSED
;
3916 PTR data ATTRIBUTE_UNUSED
;
3918 /* If the wild pattern was marked KEEP, the member sections
3919 should be as well. */
3920 if (ptr
->keep_sections
)
3921 section
->flags
|= SEC_KEEP
;
3924 /* Handle a wild statement, marking it against GC. SECTION or FILE or both
3925 may be NULL, indicating that it is a wildcard. */
3928 lang_gc_wild (s
, section
, file
)
3929 lang_wild_statement_type
*s
;
3930 const char *section
;
3933 walk_wild (s
, section
, file
, gc_section_callback
, NULL
);
3936 /* Iterate over sections marking them against GC. */
3939 lang_gc_sections_1 (s
)
3940 lang_statement_union_type
*s
;
3942 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
3944 switch (s
->header
.type
)
3946 case lang_wild_statement_enum
:
3947 lang_gc_wild (&s
->wild_statement
,
3948 s
->wild_statement
.section_name
,
3949 s
->wild_statement
.filename
);
3951 case lang_constructors_statement_enum
:
3952 lang_gc_sections_1 (constructor_list
.head
);
3954 case lang_output_section_statement_enum
:
3955 lang_gc_sections_1 (s
->output_section_statement
.children
.head
);
3957 case lang_group_statement_enum
:
3958 lang_gc_sections_1 (s
->group_statement
.children
.head
);
3969 struct bfd_link_hash_entry
*h
;
3970 ldlang_undef_chain_list_type
*ulist
, fake_list_start
;
3972 /* Keep all sections so marked in the link script. */
3974 lang_gc_sections_1 (statement_list
.head
);
3976 /* Keep all sections containing symbols undefined on the command-line.
3977 Handle the entry symbol at the same time. */
3979 if (entry_symbol
!= NULL
)
3981 fake_list_start
.next
= ldlang_undef_chain_list_head
;
3982 fake_list_start
.name
= (char *) entry_symbol
;
3983 ulist
= &fake_list_start
;
3986 ulist
= ldlang_undef_chain_list_head
;
3988 for (; ulist
; ulist
= ulist
->next
)
3990 h
= bfd_link_hash_lookup (link_info
.hash
, ulist
->name
,
3991 false, false, false);
3993 if (h
!= (struct bfd_link_hash_entry
*) NULL
3994 && (h
->type
== bfd_link_hash_defined
3995 || h
->type
== bfd_link_hash_defweak
)
3996 && ! bfd_is_abs_section (h
->u
.def
.section
))
3998 h
->u
.def
.section
->flags
|= SEC_KEEP
;
4002 bfd_gc_sections (output_bfd
, &link_info
);
4008 lang_reasonable_defaults ();
4009 current_target
= default_target
;
4011 /* Open the output file. */
4012 lang_for_each_statement (ldlang_open_output
);
4014 ldemul_create_output_section_statements ();
4016 /* Add to the hash table all undefineds on the command line. */
4017 lang_place_undefineds ();
4019 already_linked_table_init ();
4021 /* Create a bfd for each input file. */
4022 current_target
= default_target
;
4023 open_input_bfds (statement_list
.head
, false);
4025 ldemul_after_open ();
4027 already_linked_table_free ();
4029 /* Make sure that we're not mixing architectures. We call this
4030 after all the input files have been opened, but before we do any
4031 other processing, so that any operations merge_private_bfd_data
4032 does on the output file will be known during the rest of the
4036 /* Handle .exports instead of a version script if we're told to do so. */
4037 if (command_line
.version_exports_section
)
4038 lang_do_version_exports_section ();
4040 /* Build all sets based on the information gathered from the input
4042 ldctor_build_sets ();
4044 /* Remove unreferenced sections if asked to. */
4045 if (command_line
.gc_sections
)
4046 lang_gc_sections ();
4048 /* Size up the common data. */
4051 /* Run through the contours of the script and attach input sections
4052 to the correct output sections. */
4053 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
4054 (lang_output_section_statement_type
*) NULL
);
4056 /* Find any sections not attached explicitly and handle them. */
4057 lang_place_orphans ();
4059 ldemul_before_allocation ();
4061 /* We must record the program headers before we try to fix the
4062 section positions, since they will affect SIZEOF_HEADERS. */
4063 lang_record_phdrs ();
4065 /* Now run around and relax if we can. */
4066 if (command_line
.relax
)
4068 /* First time round is a trial run to get the 'worst case'
4069 addresses of the objects if there was no relaxing. */
4070 lang_size_sections (statement_list
.head
,
4072 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
4074 /* Keep relaxing until bfd_relax_section gives up. */
4077 reset_memory_regions ();
4079 relax_again
= false;
4081 /* Note: pe-dll.c does something like this also. If you find
4082 you need to change this code, you probably need to change
4083 pe-dll.c also. DJ */
4085 /* Do all the assignments with our current guesses as to
4087 lang_do_assignments (statement_list
.head
,
4089 (fill_type
) 0, (bfd_vma
) 0);
4091 /* Perform another relax pass - this time we know where the
4092 globals are, so can make better guess. */
4093 lang_size_sections (statement_list
.head
,
4095 &(statement_list
.head
), 0, (bfd_vma
) 0, true);
4097 while (relax_again
);
4101 /* Size up the sections. */
4102 lang_size_sections (statement_list
.head
,
4104 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
4107 /* See if anything special should be done now we know how big
4109 ldemul_after_allocation ();
4111 /* Fix any .startof. or .sizeof. symbols. */
4112 lang_set_startof ();
4114 /* Do all the assignments, now that we know the final resting places
4115 of all the symbols. */
4117 lang_do_assignments (statement_list
.head
,
4119 (fill_type
) 0, (bfd_vma
) 0);
4121 /* Make sure that the section addresses make sense. */
4122 if (! link_info
.relocateable
4123 && command_line
.check_section_addresses
)
4124 lang_check_section_addresses ();
4132 /* EXPORTED TO YACC */
4135 lang_add_wild (section_name
, sections_sorted
, filename
, filenames_sorted
,
4136 keep_sections
, exclude_filename_list
)
4137 const char *const section_name
;
4138 boolean sections_sorted
;
4139 const char *const filename
;
4140 boolean filenames_sorted
;
4141 boolean keep_sections
;
4142 struct name_list
*exclude_filename_list
;
4144 lang_wild_statement_type
*new = new_stat (lang_wild_statement
,
4147 if (section_name
!= (char *) NULL
&& strcmp (section_name
, "COMMON") == 0)
4149 placed_commons
= true;
4151 if (filename
!= NULL
&& ! wildcardp (filename
))
4153 lang_has_input_file
= true;
4155 new->section_name
= section_name
;
4156 new->sections_sorted
= sections_sorted
;
4157 new->filename
= filename
;
4158 new->filenames_sorted
= filenames_sorted
;
4159 new->keep_sections
= keep_sections
;
4160 new->exclude_filename_list
= exclude_filename_list
;
4161 lang_list_init (&new->children
);
4165 lang_section_start (name
, address
)
4167 etree_type
*address
;
4169 lang_address_statement_type
*ad
= new_stat (lang_address_statement
, stat_ptr
);
4171 ad
->section_name
= name
;
4172 ad
->address
= address
;
4175 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4176 because of a -e argument on the command line, or zero if this is
4177 called by ENTRY in a linker script. Command line arguments take
4181 lang_add_entry (name
, cmdline
)
4185 if (entry_symbol
== NULL
4187 || ! entry_from_cmdline
)
4189 entry_symbol
= name
;
4190 entry_from_cmdline
= cmdline
;
4195 lang_add_target (name
)
4198 lang_target_statement_type
*new = new_stat (lang_target_statement
,
4214 map_option_f
= true;
4225 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
4232 lang_add_data (type
, exp
)
4234 union etree_union
*exp
;
4237 lang_data_statement_type
*new = new_stat (lang_data_statement
,
4245 /* Create a new reloc statement. RELOC is the BFD relocation type to
4246 generate. HOWTO is the corresponding howto structure (we could
4247 look this up, but the caller has already done so). SECTION is the
4248 section to generate a reloc against, or NAME is the name of the
4249 symbol to generate a reloc against. Exactly one of SECTION and
4250 NAME must be NULL. ADDEND is an expression for the addend. */
4253 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
4254 bfd_reloc_code_real_type reloc
;
4255 reloc_howto_type
*howto
;
4258 union etree_union
*addend
;
4260 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
4264 p
->section
= section
;
4266 p
->addend_exp
= addend
;
4268 p
->addend_value
= 0;
4269 p
->output_section
= NULL
;
4273 lang_assignment_statement_type
*
4274 lang_add_assignment (exp
)
4277 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
4285 lang_add_attribute (attribute
)
4286 enum statement_enum attribute
;
4288 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
4295 if (startup_file
!= (char *) NULL
)
4297 einfo (_("%P%Fmultiple STARTUP files\n"));
4299 first_file
->filename
= name
;
4300 first_file
->local_sym_name
= name
;
4301 first_file
->real
= true;
4303 startup_file
= name
;
4310 lang_float_flag
= maybe
;
4314 lang_leave_output_section_statement (fill
, memspec
, phdrs
, lma_memspec
)
4316 const char *memspec
;
4317 struct lang_output_section_phdr_list
*phdrs
;
4318 const char *lma_memspec
;
4320 current_section
->fill
= fill
;
4321 current_section
->region
= lang_memory_region_lookup (memspec
);
4322 if (strcmp (lma_memspec
, "*default*") != 0)
4324 current_section
->lma_region
= lang_memory_region_lookup (lma_memspec
);
4325 /* If no runtime region has been given, but the load region has
4326 been, use the load region. */
4327 if (strcmp (memspec
, "*default*") == 0)
4328 current_section
->region
= lang_memory_region_lookup (lma_memspec
);
4330 current_section
->phdrs
= phdrs
;
4331 stat_ptr
= &statement_list
;
4334 /* Create an absolute symbol with the given name with the value of the
4335 address of first byte of the section named.
4337 If the symbol already exists, then do nothing. */
4340 lang_abs_symbol_at_beginning_of (secname
, name
)
4341 const char *secname
;
4344 struct bfd_link_hash_entry
*h
;
4346 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4347 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4348 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4350 if (h
->type
== bfd_link_hash_new
4351 || h
->type
== bfd_link_hash_undefined
)
4355 h
->type
= bfd_link_hash_defined
;
4357 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4358 if (sec
== (asection
*) NULL
)
4361 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
4363 h
->u
.def
.section
= bfd_abs_section_ptr
;
4367 /* Create an absolute symbol with the given name with the value of the
4368 address of the first byte after the end of the section named.
4370 If the symbol already exists, then do nothing. */
4373 lang_abs_symbol_at_end_of (secname
, name
)
4374 const char *secname
;
4377 struct bfd_link_hash_entry
*h
;
4379 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
4380 if (h
== (struct bfd_link_hash_entry
*) NULL
)
4381 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4383 if (h
->type
== bfd_link_hash_new
4384 || h
->type
== bfd_link_hash_undefined
)
4388 h
->type
= bfd_link_hash_defined
;
4390 sec
= bfd_get_section_by_name (output_bfd
, secname
);
4391 if (sec
== (asection
*) NULL
)
4394 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
4395 + bfd_section_size (output_bfd
, sec
) /
4396 bfd_octets_per_byte (output_bfd
));
4398 h
->u
.def
.section
= bfd_abs_section_ptr
;
4403 lang_statement_append (list
, element
, field
)
4404 lang_statement_list_type
*list
;
4405 lang_statement_union_type
*element
;
4406 lang_statement_union_type
**field
;
4408 *(list
->tail
) = element
;
4412 /* Set the output format type. -oformat overrides scripts. */
4415 lang_add_output_format (format
, big
, little
, from_script
)
4421 if (output_target
== NULL
|| !from_script
)
4423 if (command_line
.endian
== ENDIAN_BIG
4426 else if (command_line
.endian
== ENDIAN_LITTLE
4430 output_target
= format
;
4434 /* Enter a group. This creates a new lang_group_statement, and sets
4435 stat_ptr to build new statements within the group. */
4440 lang_group_statement_type
*g
;
4442 g
= new_stat (lang_group_statement
, stat_ptr
);
4443 lang_list_init (&g
->children
);
4444 stat_ptr
= &g
->children
;
4447 /* Leave a group. This just resets stat_ptr to start writing to the
4448 regular list of statements again. Note that this will not work if
4449 groups can occur inside anything else which can adjust stat_ptr,
4450 but currently they can't. */
4455 stat_ptr
= &statement_list
;
4458 /* Add a new program header. This is called for each entry in a PHDRS
4459 command in a linker script. */
4462 lang_new_phdr (name
, type
, filehdr
, phdrs
, at
, flags
)
4470 struct lang_phdr
*n
, **pp
;
4472 n
= (struct lang_phdr
*) stat_alloc (sizeof (struct lang_phdr
));
4475 n
->type
= exp_get_value_int (type
, 0, "program header type",
4476 lang_final_phase_enum
);
4477 n
->filehdr
= filehdr
;
4482 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4487 /* Record the program header information in the output BFD. FIXME: We
4488 should not be calling an ELF specific function here. */
4491 lang_record_phdrs ()
4495 struct lang_output_section_phdr_list
*last
;
4496 struct lang_phdr
*l
;
4497 lang_statement_union_type
*u
;
4500 secs
= (asection
**) xmalloc (alc
* sizeof (asection
*));
4502 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
4509 for (u
= lang_output_section_statement
.head
;
4511 u
= u
->output_section_statement
.next
)
4513 lang_output_section_statement_type
*os
;
4514 struct lang_output_section_phdr_list
*pl
;
4516 os
= &u
->output_section_statement
;
4523 if (os
->sectype
== noload_section
4524 || os
->bfd_section
== NULL
4525 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
4530 if (os
->bfd_section
== NULL
)
4533 for (; pl
!= NULL
; pl
= pl
->next
)
4535 if (strcmp (pl
->name
, l
->name
) == 0)
4540 secs
= ((asection
**)
4541 xrealloc (secs
, alc
* sizeof (asection
*)));
4543 secs
[c
] = os
->bfd_section
;
4550 if (l
->flags
== NULL
)
4553 flags
= exp_get_vma (l
->flags
, 0, "phdr flags",
4554 lang_final_phase_enum
);
4559 at
= exp_get_vma (l
->at
, 0, "phdr load address",
4560 lang_final_phase_enum
);
4562 if (! bfd_record_phdr (output_bfd
, l
->type
,
4563 l
->flags
== NULL
? false : true,
4565 l
->at
== NULL
? false : true,
4566 at
, l
->filehdr
, l
->phdrs
, c
, secs
))
4567 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4572 /* Make sure all the phdr assignments succeeded. */
4573 for (u
= lang_output_section_statement
.head
;
4575 u
= u
->output_section_statement
.next
)
4577 struct lang_output_section_phdr_list
*pl
;
4579 if (u
->output_section_statement
.bfd_section
== NULL
)
4582 for (pl
= u
->output_section_statement
.phdrs
;
4585 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
4586 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4587 u
->output_section_statement
.name
, pl
->name
);
4591 /* Record a list of sections which may not be cross referenced. */
4594 lang_add_nocrossref (l
)
4595 struct lang_nocrossref
*l
;
4597 struct lang_nocrossrefs
*n
;
4599 n
= (struct lang_nocrossrefs
*) xmalloc (sizeof *n
);
4600 n
->next
= nocrossref_list
;
4602 nocrossref_list
= n
;
4604 /* Set notice_all so that we get informed about all symbols. */
4605 link_info
.notice_all
= true;
4608 /* Overlay handling. We handle overlays with some static variables. */
4610 /* The overlay virtual address. */
4611 static etree_type
*overlay_vma
;
4613 /* The overlay load address. */
4614 static etree_type
*overlay_lma
;
4616 /* Whether nocrossrefs is set for this overlay. */
4617 static int overlay_nocrossrefs
;
4619 /* An expression for the maximum section size seen so far. */
4620 static etree_type
*overlay_max
;
4622 /* A list of all the sections in this overlay. */
4624 struct overlay_list
{
4625 struct overlay_list
*next
;
4626 lang_output_section_statement_type
*os
;
4629 static struct overlay_list
*overlay_list
;
4631 /* Start handling an overlay. */
4634 lang_enter_overlay (vma_expr
, lma_expr
, nocrossrefs
)
4635 etree_type
*vma_expr
;
4636 etree_type
*lma_expr
;
4639 /* The grammar should prevent nested overlays from occurring. */
4640 ASSERT (overlay_vma
== NULL
4641 && overlay_lma
== NULL
4642 && overlay_list
== NULL
4643 && overlay_max
== NULL
);
4645 overlay_vma
= vma_expr
;
4646 overlay_lma
= lma_expr
;
4647 overlay_nocrossrefs
= nocrossrefs
;
4650 /* Start a section in an overlay. We handle this by calling
4651 lang_enter_output_section_statement with the correct VMA and LMA. */
4654 lang_enter_overlay_section (name
)
4657 struct overlay_list
*n
;
4660 lang_enter_output_section_statement (name
, overlay_vma
, normal_section
,
4661 0, 0, 0, overlay_lma
);
4663 /* If this is the first section, then base the VMA and LMA of future
4664 sections on this one. This will work correctly even if `.' is
4665 used in the addresses. */
4666 if (overlay_list
== NULL
)
4668 overlay_vma
= exp_nameop (ADDR
, name
);
4669 overlay_lma
= exp_nameop (LOADADDR
, name
);
4672 /* Remember the section. */
4673 n
= (struct overlay_list
*) xmalloc (sizeof *n
);
4674 n
->os
= current_section
;
4675 n
->next
= overlay_list
;
4678 size
= exp_nameop (SIZEOF
, name
);
4680 /* Adjust the LMA for the next section. */
4681 overlay_lma
= exp_binop ('+', overlay_lma
, size
);
4683 /* Arrange to work out the maximum section end address. */
4684 if (overlay_max
== NULL
)
4687 overlay_max
= exp_binop (MAX_K
, overlay_max
, size
);
4690 /* Finish a section in an overlay. There isn't any special to do
4694 lang_leave_overlay_section (fill
, phdrs
)
4696 struct lang_output_section_phdr_list
*phdrs
;
4703 name
= current_section
->name
;
4705 lang_leave_output_section_statement (fill
, "*default*",
4706 phdrs
, "*default*");
4708 /* Define the magic symbols. */
4710 clean
= xmalloc (strlen (name
) + 1);
4712 for (s1
= name
; *s1
!= '\0'; s1
++)
4713 if (isalnum ((unsigned char) *s1
) || *s1
== '_')
4717 buf
= xmalloc (strlen (clean
) + sizeof "__load_start_");
4718 sprintf (buf
, "__load_start_%s", clean
);
4719 lang_add_assignment (exp_assop ('=', buf
,
4720 exp_nameop (LOADADDR
, name
)));
4722 buf
= xmalloc (strlen (clean
) + sizeof "__load_stop_");
4723 sprintf (buf
, "__load_stop_%s", clean
);
4724 lang_add_assignment (exp_assop ('=', buf
,
4726 exp_nameop (LOADADDR
, name
),
4727 exp_nameop (SIZEOF
, name
))));
4732 /* Finish an overlay. If there are any overlay wide settings, this
4733 looks through all the sections in the overlay and sets them. */
4736 lang_leave_overlay (fill
, memspec
, phdrs
, lma_memspec
)
4738 const char *memspec
;
4739 struct lang_output_section_phdr_list
*phdrs
;
4740 const char *lma_memspec
;
4742 lang_memory_region_type
*region
;
4743 lang_memory_region_type
*lma_region
;
4744 struct overlay_list
*l
;
4745 struct lang_nocrossref
*nocrossref
;
4747 if (memspec
== NULL
)
4750 region
= lang_memory_region_lookup (memspec
);
4752 if (lma_memspec
== NULL
)
4755 lma_region
= lang_memory_region_lookup (lma_memspec
);
4762 struct overlay_list
*next
;
4764 if (fill
!= 0 && l
->os
->fill
== 0)
4766 if (region
!= NULL
&& l
->os
->region
== NULL
)
4767 l
->os
->region
= region
;
4768 if (lma_region
!= NULL
&& l
->os
->lma_region
== NULL
)
4769 l
->os
->lma_region
= lma_region
;
4770 if (phdrs
!= NULL
&& l
->os
->phdrs
== NULL
)
4771 l
->os
->phdrs
= phdrs
;
4773 if (overlay_nocrossrefs
)
4775 struct lang_nocrossref
*nc
;
4777 nc
= (struct lang_nocrossref
*) xmalloc (sizeof *nc
);
4778 nc
->name
= l
->os
->name
;
4779 nc
->next
= nocrossref
;
4788 if (nocrossref
!= NULL
)
4789 lang_add_nocrossref (nocrossref
);
4791 /* Update . for the end of the overlay. */
4792 lang_add_assignment (exp_assop ('=', ".",
4793 exp_binop ('+', overlay_vma
, overlay_max
)));
4797 overlay_nocrossrefs
= 0;
4798 overlay_list
= NULL
;
4802 /* Version handling. This is only useful for ELF. */
4804 /* This global variable holds the version tree that we build. */
4806 struct bfd_elf_version_tree
*lang_elf_version_info
;
4809 lang_vers_match_lang_c (expr
, sym
)
4810 struct bfd_elf_version_expr
*expr
;
4813 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4815 return fnmatch (expr
->pattern
, sym
, 0) == 0;
4819 lang_vers_match_lang_cplusplus (expr
, sym
)
4820 struct bfd_elf_version_expr
*expr
;
4826 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4829 alt_sym
= cplus_demangle (sym
, /* DMGL_NO_TPARAMS */ 0);
4832 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
4833 Should we early out false in this case? */
4834 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
4838 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
4846 lang_vers_match_lang_java (expr
, sym
)
4847 struct bfd_elf_version_expr
*expr
;
4853 if (expr
->pattern
[0] == '*' && expr
->pattern
[1] == '\0')
4856 alt_sym
= cplus_demangle (sym
, DMGL_JAVA
);
4859 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
4860 Should we early out false in this case? */
4861 result
= fnmatch (expr
->pattern
, sym
, 0) == 0;
4865 result
= fnmatch (expr
->pattern
, alt_sym
, 0) == 0;
4872 /* This is called for each variable name or match expression. */
4874 struct bfd_elf_version_expr
*
4875 lang_new_vers_regex (orig
, new, lang
)
4876 struct bfd_elf_version_expr
*orig
;
4880 struct bfd_elf_version_expr
*ret
;
4882 ret
= (struct bfd_elf_version_expr
*) xmalloc (sizeof *ret
);
4886 if (lang
== NULL
|| strcasecmp (lang
, "C") == 0)
4887 ret
->match
= lang_vers_match_lang_c
;
4888 else if (strcasecmp (lang
, "C++") == 0)
4889 ret
->match
= lang_vers_match_lang_cplusplus
;
4890 else if (strcasecmp (lang
, "Java") == 0)
4891 ret
->match
= lang_vers_match_lang_java
;
4894 einfo (_("%X%P: unknown language `%s' in version information\n"),
4896 ret
->match
= lang_vers_match_lang_c
;
4902 /* This is called for each set of variable names and match
4905 struct bfd_elf_version_tree
*
4906 lang_new_vers_node (globals
, locals
)
4907 struct bfd_elf_version_expr
*globals
;
4908 struct bfd_elf_version_expr
*locals
;
4910 struct bfd_elf_version_tree
*ret
;
4912 ret
= (struct bfd_elf_version_tree
*) xmalloc (sizeof *ret
);
4916 ret
->globals
= globals
;
4917 ret
->locals
= locals
;
4919 ret
->name_indx
= (unsigned int) -1;
4924 /* This static variable keeps track of version indices. */
4926 static int version_index
;
4928 /* This is called when we know the name and dependencies of the
4932 lang_register_vers_node (name
, version
, deps
)
4934 struct bfd_elf_version_tree
*version
;
4935 struct bfd_elf_version_deps
*deps
;
4937 struct bfd_elf_version_tree
*t
, **pp
;
4938 struct bfd_elf_version_expr
*e1
;
4940 /* Make sure this node has a unique name. */
4941 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4942 if (strcmp (t
->name
, name
) == 0)
4943 einfo (_("%X%P: duplicate version tag `%s'\n"), name
);
4945 /* Check the global and local match names, and make sure there
4946 aren't any duplicates. */
4948 for (e1
= version
->globals
; e1
!= NULL
; e1
= e1
->next
)
4950 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4952 struct bfd_elf_version_expr
*e2
;
4954 for (e2
= t
->locals
; e2
!= NULL
; e2
= e2
->next
)
4955 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
4956 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4961 for (e1
= version
->locals
; e1
!= NULL
; e1
= e1
->next
)
4963 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4965 struct bfd_elf_version_expr
*e2
;
4967 for (e2
= t
->globals
; e2
!= NULL
; e2
= e2
->next
)
4968 if (strcmp (e1
->pattern
, e2
->pattern
) == 0)
4969 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4974 version
->deps
= deps
;
4975 version
->name
= name
;
4977 version
->vernum
= version_index
;
4979 for (pp
= &lang_elf_version_info
; *pp
!= NULL
; pp
= &(*pp
)->next
)
4984 /* This is called when we see a version dependency. */
4986 struct bfd_elf_version_deps
*
4987 lang_add_vers_depend (list
, name
)
4988 struct bfd_elf_version_deps
*list
;
4991 struct bfd_elf_version_deps
*ret
;
4992 struct bfd_elf_version_tree
*t
;
4994 ret
= (struct bfd_elf_version_deps
*) xmalloc (sizeof *ret
);
4997 for (t
= lang_elf_version_info
; t
!= NULL
; t
= t
->next
)
4999 if (strcmp (t
->name
, name
) == 0)
5001 ret
->version_needed
= t
;
5006 einfo (_("%X%P: unable to find version dependency `%s'\n"), name
);
5012 lang_do_version_exports_section ()
5014 struct bfd_elf_version_expr
*greg
= NULL
, *lreg
;
5016 LANG_FOR_EACH_INPUT_STATEMENT (is
)
5018 asection
*sec
= bfd_get_section_by_name (is
->the_bfd
, ".exports");
5025 len
= bfd_section_size (is
->the_bfd
, sec
);
5026 contents
= xmalloc (len
);
5027 if (!bfd_get_section_contents (is
->the_bfd
, sec
, contents
, 0, len
))
5028 einfo (_("%X%P: unable to read .exports section contents"), sec
);
5031 while (p
< contents
+ len
)
5033 greg
= lang_new_vers_regex (greg
, p
, NULL
);
5034 p
= strchr (p
, '\0') + 1;
5037 /* Do not free the contents, as we used them creating the regex. */
5039 /* Do not include this section in the link. */
5040 bfd_set_section_flags (is
->the_bfd
, sec
,
5041 bfd_get_section_flags (is
->the_bfd
, sec
) | SEC_EXCLUDE
);
5044 lreg
= lang_new_vers_regex (NULL
, "*", NULL
);
5045 lang_register_vers_node (command_line
.version_exports_section
,
5046 lang_new_vers_node (greg
, lreg
), NULL
);