1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94, 1995 Free Software Foundation, Inc.
4 This file is part of GLD, the Gnu Linker.
6 GLD is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 1, or (at your option)
11 GLD is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GLD; see the file COPYING. If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22 #include "libiberty.h"
37 static void print_statements
PARAMS ((void));
38 static void print_statement
PARAMS ((lang_statement_union_type
*,
39 lang_output_section_statement_type
*));
40 static lang_statement_union_type
*new_statement
PARAMS ((enum statement_enum
,
42 lang_statement_list_type
*));
46 static struct obstack stat_obstack
;
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50 static CONST
char *startup_file
;
51 static lang_statement_list_type input_file_chain
;
52 static boolean placed_commons
= false;
53 static lang_output_section_statement_type
*default_common_section
;
54 static boolean map_option_f
;
55 static bfd_vma print_dot
;
56 static lang_input_statement_type
*first_file
;
57 static lang_statement_list_type lang_output_section_statement
;
58 static CONST
char *current_target
;
59 static CONST
char *output_target
;
60 static int longest_section_name
= 8;
61 static lang_statement_list_type statement_list
;
62 static struct lang_phdr
*lang_phdr_list
;
64 static void print_size
PARAMS ((size_t value
));
65 static void print_alignment
PARAMS ((unsigned int value
));
66 static void print_fill
PARAMS ((fill_type value
));
67 static void print_section
PARAMS ((const char *name
));
68 static void lang_for_each_statement_worker
69 PARAMS ((void (*func
) (lang_statement_union_type
*),
70 lang_statement_union_type
*s
));
71 static lang_input_statement_type
*new_afile
72 PARAMS ((const char *name
, lang_input_file_enum_type file_type
,
73 const char *target
, boolean add_to_list
));
74 static void print_flags
PARAMS ((int *ignore_flags
));
75 static void init_os
PARAMS ((lang_output_section_statement_type
*s
));
76 static void wild_section
PARAMS ((lang_wild_statement_type
*ptr
,
78 lang_input_statement_type
*file
,
79 lang_output_section_statement_type
*output
));
80 static lang_input_statement_type
*lookup_name
PARAMS ((const char *name
));
81 static void load_symbols
PARAMS ((lang_input_statement_type
*entry
,
82 lang_statement_list_type
*));
83 static void wild
PARAMS ((lang_wild_statement_type
*s
,
84 const char *section
, const char *file
,
86 lang_output_section_statement_type
*output
));
87 static bfd
*open_output
PARAMS ((const char *name
));
88 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*statement
));
89 static void open_input_bfds
90 PARAMS ((lang_statement_union_type
*statement
, boolean
));
91 static void lang_reasonable_defaults
PARAMS ((void));
92 static void lang_place_undefineds
PARAMS ((void));
93 static void map_input_to_output_sections
94 PARAMS ((lang_statement_union_type
*s
,
96 lang_output_section_statement_type
*output_section_statement
));
97 static void print_output_section_statement
98 PARAMS ((lang_output_section_statement_type
*output_section_statement
));
99 static void print_assignment
100 PARAMS ((lang_assignment_statement_type
*assignment
,
101 lang_output_section_statement_type
*output_section
));
102 static void print_input_statement
PARAMS ((lang_input_statement_type
*statm
));
103 static void print_input_section
PARAMS ((lang_input_section_type
*in
));
104 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*fill
));
105 static void print_data_statement
PARAMS ((lang_data_statement_type
*data
));
106 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*reloc
));
107 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*s
));
108 static void print_wild_statement
109 PARAMS ((lang_wild_statement_type
*w
,
110 lang_output_section_statement_type
*os
));
111 static void print_group
112 PARAMS ((lang_group_statement_type
*, lang_output_section_statement_type
*));
113 static void print_statement
PARAMS ((lang_statement_union_type
*s
,
114 lang_output_section_statement_type
*os
));
115 static void print_statements
PARAMS ((void));
116 static bfd_vma insert_pad
PARAMS ((lang_statement_union_type
**this_ptr
,
117 fill_type fill
, unsigned int power
,
118 asection
*output_section_statement
,
120 static bfd_vma size_input_section
121 PARAMS ((lang_statement_union_type
**this_ptr
,
122 lang_output_section_statement_type
*output_section_statement
,
123 fill_type fill
, bfd_vma dot
, boolean relax
));
124 static void lang_finish
PARAMS ((void));
125 static void lang_check
PARAMS ((void));
126 static void lang_common
PARAMS ((void));
127 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
128 static void lang_place_orphans
PARAMS ((void));
129 static int topower
PARAMS ((int));
130 static void lang_set_startof
PARAMS ((void));
131 static void reset_memory_regions
PARAMS ((void));
132 static void lang_record_phdrs
PARAMS ((void));
135 lang_output_section_statement_type
*abs_output_section
;
136 lang_statement_list_type
*stat_ptr
= &statement_list
;
137 lang_statement_list_type file_chain
= { 0 };
138 const char *entry_symbol
= NULL
;
139 boolean entry_from_cmdline
;
140 boolean lang_has_input_file
= false;
141 boolean had_output_filename
= false;
142 boolean lang_float_flag
= false;
143 boolean delete_output_file_on_failure
= false;
145 etree_type
*base
; /* Relocation base - or null */
148 #if defined(__STDC__) || defined(ALMOST_STDC)
149 #define cat(a,b) a##b
151 #define cat(a,b) a/**/b
154 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
156 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
158 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
164 return obstack_alloc (&stat_obstack
, size
);
171 fprintf (config
.map_file
, "%5x", (unsigned) value
);
175 print_alignment (value
)
178 fprintf (config
.map_file
, "2**%1u", value
);
185 fprintf (config
.map_file
, "%04x", (unsigned) value
);
192 fprintf (config
.map_file
, "%*s", -longest_section_name
, name
);
195 /*----------------------------------------------------------------------
196 lang_for_each_statement walks the parse tree and calls the provided
197 function for each node
201 lang_for_each_statement_worker (func
, s
)
202 void (*func
) PARAMS ((lang_statement_union_type
*));
203 lang_statement_union_type
*s
;
205 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
209 switch (s
->header
.type
)
211 case lang_constructors_statement_enum
:
212 lang_for_each_statement_worker (func
, constructor_list
.head
);
214 case lang_output_section_statement_enum
:
215 lang_for_each_statement_worker
217 s
->output_section_statement
.children
.head
);
219 case lang_wild_statement_enum
:
220 lang_for_each_statement_worker
222 s
->wild_statement
.children
.head
);
224 case lang_group_statement_enum
:
225 lang_for_each_statement_worker (func
,
226 s
->group_statement
.children
.head
);
228 case lang_data_statement_enum
:
229 case lang_reloc_statement_enum
:
230 case lang_object_symbols_statement_enum
:
231 case lang_output_statement_enum
:
232 case lang_target_statement_enum
:
233 case lang_input_section_enum
:
234 case lang_input_statement_enum
:
235 case lang_assignment_statement_enum
:
236 case lang_padding_statement_enum
:
237 case lang_address_statement_enum
:
247 lang_for_each_statement (func
)
248 void (*func
) PARAMS ((lang_statement_union_type
*));
250 lang_for_each_statement_worker (func
,
251 statement_list
.head
);
254 /*----------------------------------------------------------------------*/
256 lang_list_init (list
)
257 lang_statement_list_type
*list
;
259 list
->head
= (lang_statement_union_type
*) NULL
;
260 list
->tail
= &list
->head
;
263 /*----------------------------------------------------------------------
265 build a new statement node for the parse tree
270 lang_statement_union_type
*
271 new_statement (type
, size
, list
)
272 enum statement_enum type
;
274 lang_statement_list_type
* list
;
276 lang_statement_union_type
*new = (lang_statement_union_type
*)
279 new->header
.type
= type
;
280 new->header
.next
= (lang_statement_union_type
*) NULL
;
281 lang_statement_append (list
, new, &new->header
.next
);
286 Build a new input file node for the language. There are several ways
287 in which we treat an input file, eg, we only look at symbols, or
288 prefix it with a -l etc.
290 We can be supplied with requests for input files more than once;
291 they may, for example be split over serveral lines like foo.o(.text)
292 foo.o(.data) etc, so when asked for a file we check that we havn't
293 got it already so we don't duplicate the bfd.
296 static lang_input_statement_type
*
297 new_afile (name
, file_type
, target
, add_to_list
)
299 lang_input_file_enum_type file_type
;
303 lang_input_statement_type
*p
;
306 p
= new_stat (lang_input_statement
, stat_ptr
);
309 p
= ((lang_input_statement_type
*)
310 stat_alloc (sizeof (lang_input_statement_type
)));
311 p
->header
.next
= NULL
;
314 lang_has_input_file
= true;
316 p
->complained
= false;
319 case lang_input_file_is_symbols_only_enum
:
321 p
->is_archive
= false;
323 p
->local_sym_name
= name
;
324 p
->just_syms_flag
= true;
325 p
->search_dirs_flag
= false;
327 case lang_input_file_is_fake_enum
:
329 p
->is_archive
= false;
331 p
->local_sym_name
= name
;
332 p
->just_syms_flag
= false;
333 p
->search_dirs_flag
= false;
335 case lang_input_file_is_l_enum
:
336 p
->is_archive
= true;
339 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
340 p
->just_syms_flag
= false;
341 p
->search_dirs_flag
= true;
343 case lang_input_file_is_marker_enum
:
345 p
->is_archive
= false;
347 p
->local_sym_name
= name
;
348 p
->just_syms_flag
= false;
349 p
->search_dirs_flag
= true;
351 case lang_input_file_is_search_file_enum
:
353 p
->is_archive
= false;
355 p
->local_sym_name
= name
;
356 p
->just_syms_flag
= false;
357 p
->search_dirs_flag
= true;
359 case lang_input_file_is_file_enum
:
361 p
->is_archive
= false;
363 p
->local_sym_name
= name
;
364 p
->just_syms_flag
= false;
365 p
->search_dirs_flag
= false;
370 p
->the_bfd
= (bfd
*) NULL
;
371 p
->asymbols
= (asymbol
**) NULL
;
372 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
373 p
->next
= (lang_statement_union_type
*) NULL
;
375 p
->common_output_section
= (asection
*) NULL
;
376 p
->dynamic
= config
.dynamic_link
;
378 lang_statement_append (&input_file_chain
,
379 (lang_statement_union_type
*) p
,
384 lang_input_statement_type
*
385 lang_add_input_file (name
, file_type
, target
)
387 lang_input_file_enum_type file_type
;
390 lang_has_input_file
= true;
391 return new_afile (name
, file_type
, target
, true);
394 /* Build enough state so that the parser can build its tree */
398 obstack_begin (&stat_obstack
, 1000);
400 stat_ptr
= &statement_list
;
402 lang_list_init (stat_ptr
);
404 lang_list_init (&input_file_chain
);
405 lang_list_init (&lang_output_section_statement
);
406 lang_list_init (&file_chain
);
407 first_file
= lang_add_input_file ((char *) NULL
,
408 lang_input_file_is_marker_enum
,
410 abs_output_section
= lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
412 abs_output_section
->bfd_section
= bfd_abs_section_ptr
;
416 /*----------------------------------------------------------------------
417 A region is an area of memory declared with the
418 MEMORY { name:org=exp, len=exp ... }
421 We maintain a list of all the regions here
423 If no regions are specified in the script, then the default is used
424 which is created when looked up to be the entire data space
427 static lang_memory_region_type
*lang_memory_region_list
;
428 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
430 lang_memory_region_type
*
431 lang_memory_region_lookup (name
)
432 CONST
char *CONST name
;
435 lang_memory_region_type
*p
= lang_memory_region_list
;
437 for (p
= lang_memory_region_list
;
438 p
!= (lang_memory_region_type
*) NULL
;
441 if (strcmp (p
->name
, name
) == 0)
448 /* This code used to always use the first region in the list as the
449 default region. I changed it to instead use a region
450 encompassing all of memory as the default region. This permits
451 NOLOAD sections to work reasonably without requiring a region.
452 People should specify what region they mean, if they really want
454 if (strcmp (name
, "*default*") == 0)
456 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
458 return lang_memory_region_list
;
464 lang_memory_region_type
*new =
465 (lang_memory_region_type
*) stat_alloc (sizeof (lang_memory_region_type
));
467 new->name
= buystring (name
);
468 new->next
= (lang_memory_region_type
*) NULL
;
470 *lang_memory_region_list_tail
= new;
471 lang_memory_region_list_tail
= &new->next
;
473 new->length
= ~(bfd_size_type
)0;
475 new->had_full_message
= false;
482 lang_output_section_statement_type
*
483 lang_output_section_find (name
)
484 CONST
char *CONST name
;
486 lang_statement_union_type
*u
;
487 lang_output_section_statement_type
*lookup
;
489 for (u
= lang_output_section_statement
.head
;
490 u
!= (lang_statement_union_type
*) NULL
;
493 lookup
= &u
->output_section_statement
;
494 if (strcmp (name
, lookup
->name
) == 0)
499 return (lang_output_section_statement_type
*) NULL
;
502 lang_output_section_statement_type
*
503 lang_output_section_statement_lookup (name
)
504 CONST
char *CONST name
;
506 lang_output_section_statement_type
*lookup
;
508 lookup
= lang_output_section_find (name
);
509 if (lookup
== (lang_output_section_statement_type
*) NULL
)
512 lookup
= (lang_output_section_statement_type
*)
513 new_stat (lang_output_section_statement
, stat_ptr
);
514 lookup
->region
= (lang_memory_region_type
*) NULL
;
516 lookup
->block_value
= 1;
519 lookup
->next
= (lang_statement_union_type
*) NULL
;
520 lookup
->bfd_section
= (asection
*) NULL
;
521 lookup
->processed
= false;
522 lookup
->loadable
= 1;
523 lookup
->addr_tree
= (etree_type
*) NULL
;
524 lang_list_init (&lookup
->children
);
526 lookup
->memspec
= (CONST
char *) NULL
;
528 lookup
->subsection_alignment
= -1;
529 lookup
->section_alignment
= -1;
530 lookup
->load_base
= (union etree_union
*) NULL
;
531 lookup
->phdrs
= NULL
;
533 lang_statement_append (&lang_output_section_statement
,
534 (lang_statement_union_type
*) lookup
,
542 print_flags (ignore_flags
)
545 fprintf (config
.map_file
, "(");
547 if (flags
->flag_read
)
548 fprintf (outfile
, "R");
549 if (flags
->flag_write
)
550 fprintf (outfile
, "W");
551 if (flags
->flag_executable
)
552 fprintf (outfile
, "X");
553 if (flags
->flag_loadable
)
554 fprintf (outfile
, "L");
556 fprintf (config
.map_file
, ")");
562 lang_memory_region_type
*m
;
564 fprintf (config
.map_file
, "**MEMORY CONFIGURATION**\n\n");
566 fprintf (config
.map_file
, "name\t\torigin\t\tlength\t\tattributes\n");
568 fprintf (config
.map_file
,
569 "name\t\torigin length r_size c_size is attributes\n");
572 for (m
= lang_memory_region_list
;
573 m
!= (lang_memory_region_type
*) NULL
;
576 fprintf (config
.map_file
, "%-16s", m
->name
);
577 print_address (m
->origin
);
579 print_address ((bfd_vma
)m
->length
);
581 print_address ((bfd_vma
)m
->old_length
);
583 print_address (m
->current
- m
->origin
);
586 fprintf (config
.map_file
, " %2d%% ",
587 (int) ((m
->current
- m
->origin
) * 100 / m
->old_length
));
588 print_flags (&m
->flags
);
589 fprintf (config
.map_file
, "\n");
591 fprintf (config
.map_file
, "\n\n**LINK EDITOR MEMORY MAP**\n\n");
592 fprintf (config
.map_file
, "output input virtual\n");
593 fprintf (config
.map_file
, "section section address tsize\n\n");
604 lang_output_section_statement_type
* s
;
606 /* asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
607 section_userdata_type
*new =
608 (section_userdata_type
*)
609 stat_alloc (sizeof (section_userdata_type
));
611 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
612 if (s
->bfd_section
== (asection
*) NULL
)
613 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
614 if (s
->bfd_section
== (asection
*) NULL
)
616 einfo ("%P%F: output format %s cannot represent section called %s\n",
617 output_bfd
->xvec
->name
, s
->name
);
619 s
->bfd_section
->output_section
= s
->bfd_section
;
621 /* We initialize an output sections output offset to minus its own */
622 /* vma to allow us to output a section through itself */
623 s
->bfd_section
->output_offset
= 0;
624 get_userdata (s
->bfd_section
) = (PTR
) new;
628 /***********************************************************************
631 These expand statements like *(.text) and foo.o to a list of
632 explicit actions, like foo.o(.text), bar.o(.text) and
635 The toplevel routine, wild, takes a statement, section, file and
636 target. If either the section or file is null it is taken to be the
637 wildcard. Seperate lang_input_section statements are created for
638 each part of the expanstion, and placed after the statement provided.
643 wild_doit (ptr
, section
, output
, file
)
644 lang_statement_list_type
* ptr
;
646 lang_output_section_statement_type
* output
;
647 lang_input_statement_type
* file
;
649 if (output
->bfd_section
== (asection
*) NULL
)
652 if (section
!= (asection
*) NULL
653 && section
->output_section
== (asection
*) NULL
)
655 /* Add a section reference to the list */
656 lang_input_section_type
*new = new_stat (lang_input_section
, ptr
);
658 new->section
= section
;
660 section
->output_section
= output
->bfd_section
;
662 /* We don't copy the SEC_NEVER_LOAD flag from an input section to
663 an output section, because we want to be able to include a
664 SEC_NEVER_LOAD section in the middle of an otherwise loaded
665 section (I don't know why we want to do this, but we do).
666 build_link_order in ldwrite.c handles this case by turning the
667 embedded SEC_NEVER_LOAD section into a fill. */
668 section
->output_section
->flags
|=
669 section
->flags
& (flagword
) (~ SEC_NEVER_LOAD
);
671 if (!output
->loadable
)
673 /* Turn off load flag */
674 output
->bfd_section
->flags
&= ~SEC_LOAD
;
675 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
677 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
679 output
->bfd_section
->alignment_power
= section
->alignment_power
;
681 /* If supplied an aligmnet, then force it */
682 if (output
->section_alignment
!= -1)
684 output
->bfd_section
->alignment_power
= output
->section_alignment
;
690 wild_section (ptr
, section
, file
, output
)
691 lang_wild_statement_type
*ptr
;
693 lang_input_statement_type
*file
;
694 lang_output_section_statement_type
*output
;
696 if (file
->just_syms_flag
== false)
698 register asection
*s
;
700 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
702 /* Attach all sections named SECTION. If SECTION is NULL,
703 then attach all sections.
705 Previously, if SECTION was NULL, this code did not call
706 wild_doit if the SEC_IS_COMMON flag was set for the
707 section. I did not understand that, and I took it out.
711 || strcmp (bfd_get_section_name (file
->the_bfd
, s
),
713 wild_doit (&ptr
->children
, s
, output
, file
);
718 /* passed a file name (which must have been seen already and added to
719 the statement tree. We will see if it has been opened already and
720 had its symbols read. If not then we'll read it.
722 Archives are pecuilar here. We may open them once, but if they do
723 not define anything we need at the time, they won't have all their
724 symbols read. If we need them later, we'll have to redo it. */
725 static lang_input_statement_type
*
729 lang_input_statement_type
*search
;
731 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
732 search
!= (lang_input_statement_type
*) NULL
;
733 search
= (lang_input_statement_type
*) search
->next_real_file
)
735 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
737 if (search
->filename
!= (char *) NULL
738 && name
!= (char *) NULL
739 && strcmp (search
->filename
, name
) == 0)
743 if (search
== (lang_input_statement_type
*) NULL
)
744 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
747 /* If we have already added this file, or this file is not real
748 (FIXME: can that ever actually happen?) or the name is NULL
749 (FIXME: can that ever actually happen?) don't add this file. */
752 || search
->filename
== (const char *) NULL
)
755 load_symbols (search
, (lang_statement_list_type
*) NULL
);
760 /* Get the symbols for an input file. */
763 load_symbols (entry
, place
)
764 lang_input_statement_type
*entry
;
765 lang_statement_list_type
*place
;
772 ldfile_open_file (entry
);
774 if (! bfd_check_format (entry
->the_bfd
, bfd_archive
)
775 && ! bfd_check_format_matches (entry
->the_bfd
, bfd_object
, &matching
))
778 lang_statement_list_type
*hold
;
780 err
= bfd_get_error ();
781 if (err
== bfd_error_file_ambiguously_recognized
)
785 einfo ("%B: file not recognized: %E\n", entry
->the_bfd
);
786 einfo ("%B: matching formats:", entry
->the_bfd
);
787 for (p
= matching
; *p
!= NULL
; p
++)
791 else if (err
!= bfd_error_file_not_recognized
793 einfo ("%F%B: file not recognized: %E\n", entry
->the_bfd
);
795 /* Try to interpret the file as a linker script. */
797 bfd_close (entry
->the_bfd
);
798 entry
->the_bfd
= NULL
;
800 ldfile_open_command_file (entry
->filename
);
805 ldfile_assumed_script
= true;
806 parser_input
= input_script
;
808 ldfile_assumed_script
= false;
815 /* We don't call ldlang_add_file for an archive. Instead, the
816 add_symbols entry point will call ldlang_add_file, via the
817 add_archive_element callback, for each element of the archive
819 switch (bfd_get_format (entry
->the_bfd
))
825 ldlang_add_file (entry
);
826 if (trace_files
|| trace_file_tries
)
827 info_msg ("%I\n", entry
);
833 bfd
*member
= bfd_openr_next_archived_file (entry
->the_bfd
,
835 while (member
!= NULL
)
837 if (! bfd_check_format (member
, bfd_object
))
838 einfo ("%F%B: object %B in archive is not object\n",
839 entry
->the_bfd
, member
);
840 if (! ((*link_info
.callbacks
->add_archive_element
)
841 (&link_info
, member
, "-whole-archive")))
843 if (! bfd_link_add_symbols (member
, &link_info
))
844 einfo ("%F%B: could not read symbols: %E\n", member
);
845 member
= bfd_openr_next_archived_file (entry
->the_bfd
,
849 entry
->loaded
= true;
855 if (! bfd_link_add_symbols (entry
->the_bfd
, &link_info
))
856 einfo ("%F%B: could not read symbols: %E\n", entry
->the_bfd
);
858 entry
->loaded
= true;
862 wild (s
, section
, file
, target
, output
)
863 lang_wild_statement_type
* s
;
867 lang_output_section_statement_type
* output
;
869 lang_input_statement_type
*f
;
871 if (file
== (char *) NULL
)
873 /* Perform the iteration over all files in the list */
874 for (f
= (lang_input_statement_type
*) file_chain
.head
;
875 f
!= (lang_input_statement_type
*) NULL
;
876 f
= (lang_input_statement_type
*) f
->next
)
878 wild_section (s
, section
, f
, output
);
883 /* Perform the iteration over a single file */
884 wild_section (s
, section
, lookup_name (file
), output
);
886 if (section
!= (char *) NULL
887 && strcmp (section
, "COMMON") == 0
888 && default_common_section
== (lang_output_section_statement_type
*) NULL
)
890 /* Remember the section that common is going to incase we later
891 get something which doesn't know where to put it */
892 default_common_section
= output
;
897 read in all the files
906 if (output_target
== (char *) NULL
)
908 if (current_target
!= (char *) NULL
)
909 output_target
= current_target
;
911 output_target
= default_target
;
913 output
= bfd_openw (name
, output_target
);
915 if (output
== (bfd
*) NULL
)
917 if (bfd_get_error () == bfd_error_invalid_target
)
919 einfo ("%P%F: target %s not found\n", output_target
);
921 einfo ("%P%F: cannot open output file %s: %E\n", name
);
924 delete_output_file_on_failure
= 1;
926 /* output->flags |= D_PAGED;*/
928 if (! bfd_set_format (output
, bfd_object
))
929 einfo ("%P%F:%s: can not make object file: %E\n", name
);
930 if (! bfd_set_arch_mach (output
,
931 ldfile_output_architecture
,
932 ldfile_output_machine
))
933 einfo ("%P%F:%s: can not set architecture: %E\n", name
);
935 link_info
.hash
= bfd_link_hash_table_create (output
);
936 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
937 einfo ("%P%F: can not create link hash table: %E\n");
939 bfd_set_gp_size (output
, g_switch_value
);
947 ldlang_open_output (statement
)
948 lang_statement_union_type
* statement
;
950 switch (statement
->header
.type
)
952 case lang_output_statement_enum
:
953 ASSERT (output_bfd
== (bfd
*) NULL
);
954 output_bfd
= open_output (statement
->output_statement
.name
);
955 ldemul_set_output_arch ();
956 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
957 output_bfd
->flags
|= D_PAGED
;
959 output_bfd
->flags
&= ~D_PAGED
;
960 if (config
.text_read_only
)
961 output_bfd
->flags
|= WP_TEXT
;
963 output_bfd
->flags
&= ~WP_TEXT
;
964 if (config
.traditional_format
)
965 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
967 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
970 case lang_target_statement_enum
:
971 current_target
= statement
->target_statement
.target
;
978 /* Open all the input files. */
981 open_input_bfds (s
, force
)
982 lang_statement_union_type
*s
;
985 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
987 switch (s
->header
.type
)
989 case lang_constructors_statement_enum
:
990 open_input_bfds (constructor_list
.head
, force
);
992 case lang_output_section_statement_enum
:
993 open_input_bfds (s
->output_section_statement
.children
.head
, force
);
995 case lang_wild_statement_enum
:
996 /* Maybe we should load the file's symbols */
997 if (s
->wild_statement
.filename
)
998 (void) lookup_name (s
->wild_statement
.filename
);
999 open_input_bfds (s
->wild_statement
.children
.head
, force
);
1001 case lang_group_statement_enum
:
1003 struct bfd_link_hash_entry
*undefs
;
1005 /* We must continually search the entries in the group
1006 until no new symbols are added to the list of undefined
1011 undefs
= link_info
.hash
->undefs_tail
;
1012 open_input_bfds (s
->group_statement
.children
.head
, true);
1014 while (undefs
!= link_info
.hash
->undefs_tail
);
1017 case lang_target_statement_enum
:
1018 current_target
= s
->target_statement
.target
;
1020 case lang_input_statement_enum
:
1021 if (s
->input_statement
.real
== true)
1023 lang_statement_list_type add
;
1025 s
->input_statement
.target
= current_target
;
1027 /* If we are being called from within a group, and this
1028 is an archive which has already been searched, then
1029 force it to be researched. */
1031 && s
->input_statement
.loaded
1032 && bfd_check_format (s
->input_statement
.the_bfd
,
1034 s
->input_statement
.loaded
= false;
1036 lang_list_init (&add
);
1038 load_symbols (&s
->input_statement
, &add
);
1040 if (add
.head
!= NULL
)
1042 *add
.tail
= s
->next
;
1053 /* If there are [COMMONS] statements, put a wild one into the bss section */
1056 lang_reasonable_defaults ()
1059 lang_output_section_statement_lookup (".text");
1060 lang_output_section_statement_lookup (".data");
1062 default_common_section
=
1063 lang_output_section_statement_lookup (".bss");
1066 if (placed_commons
== false)
1068 lang_wild_statement_type
*new =
1069 new_stat (lang_wild_statement
,
1070 &default_common_section
->children
);
1072 new->section_name
= "COMMON";
1073 new->filename
= (char *) NULL
;
1074 lang_list_init (&new->children
);
1081 Add the supplied name to the symbol table as an undefined reference.
1082 Remove items from the chain as we open input bfds
1084 typedef struct ldlang_undef_chain_list
1086 struct ldlang_undef_chain_list
*next
;
1088 } ldlang_undef_chain_list_type
;
1090 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
1093 ldlang_add_undef (name
)
1094 CONST
char *CONST name
;
1096 ldlang_undef_chain_list_type
*new =
1097 ((ldlang_undef_chain_list_type
*)
1098 stat_alloc (sizeof (ldlang_undef_chain_list_type
)));
1100 new->next
= ldlang_undef_chain_list_head
;
1101 ldlang_undef_chain_list_head
= new;
1103 new->name
= buystring (name
);
1106 /* Run through the list of undefineds created above and place them
1107 into the linker hash table as undefined symbols belonging to the
1111 lang_place_undefineds ()
1113 ldlang_undef_chain_list_type
*ptr
;
1115 for (ptr
= ldlang_undef_chain_list_head
;
1116 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
1119 struct bfd_link_hash_entry
*h
;
1121 h
= bfd_link_hash_lookup (link_info
.hash
, ptr
->name
, true, false, true);
1122 if (h
== (struct bfd_link_hash_entry
*) NULL
)
1123 einfo ("%P%F: bfd_link_hash_lookup failed: %E");
1124 if (h
->type
== bfd_link_hash_new
)
1126 h
->type
= bfd_link_hash_undefined
;
1127 h
->u
.undef
.abfd
= NULL
;
1128 bfd_link_add_undef (link_info
.hash
, h
);
1133 /* Open input files and attatch to output sections */
1135 map_input_to_output_sections (s
, target
, output_section_statement
)
1136 lang_statement_union_type
* s
;
1138 lang_output_section_statement_type
* output_section_statement
;
1140 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1142 switch (s
->header
.type
)
1146 case lang_wild_statement_enum
:
1147 wild (&s
->wild_statement
, s
->wild_statement
.section_name
,
1148 s
->wild_statement
.filename
, target
,
1149 output_section_statement
);
1152 case lang_constructors_statement_enum
:
1153 map_input_to_output_sections (constructor_list
.head
,
1155 output_section_statement
);
1157 case lang_output_section_statement_enum
:
1158 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
1160 &s
->output_section_statement
);
1162 case lang_output_statement_enum
:
1164 case lang_target_statement_enum
:
1165 target
= s
->target_statement
.target
;
1167 case lang_group_statement_enum
:
1168 map_input_to_output_sections (s
->group_statement
.children
.head
,
1170 output_section_statement
);
1172 case lang_fill_statement_enum
:
1173 case lang_input_section_enum
:
1174 case lang_object_symbols_statement_enum
:
1175 case lang_data_statement_enum
:
1176 case lang_reloc_statement_enum
:
1177 case lang_assignment_statement_enum
:
1178 case lang_padding_statement_enum
:
1179 case lang_input_statement_enum
:
1180 if (output_section_statement
!= NULL
1181 && output_section_statement
->bfd_section
== NULL
)
1182 init_os (output_section_statement
);
1184 case lang_afile_asection_pair_statement_enum
:
1187 case lang_address_statement_enum
:
1188 /* Mark the specified section with the supplied address */
1190 lang_output_section_statement_type
*os
=
1191 lang_output_section_statement_lookup
1192 (s
->address_statement
.section_name
);
1194 if (os
->bfd_section
== NULL
)
1196 os
->addr_tree
= s
->address_statement
.address
;
1204 print_output_section_statement (output_section_statement
)
1205 lang_output_section_statement_type
* output_section_statement
;
1207 asection
*section
= output_section_statement
->bfd_section
;
1210 print_section (output_section_statement
->name
);
1215 print_dot
= section
->vma
;
1219 print_address (section
->vma
);
1221 print_size (section
->_raw_size
);
1223 print_size(section
->_cooked_size
);
1225 print_alignment (section
->alignment_power
);
1228 fprintf (config
.map_file
, "%s flags", output_section_statement
->region
->name
);
1229 print_flags (stdout
, &output_section_statement
->flags
);
1231 if (section
->flags
& SEC_LOAD
)
1232 fprintf (config
.map_file
, "load ");
1233 if (section
->flags
& SEC_ALLOC
)
1234 fprintf (config
.map_file
, "alloc ");
1235 if (section
->flags
& SEC_RELOC
)
1236 fprintf (config
.map_file
, "reloc ");
1237 if (section
->flags
& SEC_HAS_CONTENTS
)
1238 fprintf (config
.map_file
, "contents ");
1243 fprintf (config
.map_file
, " (no attached output section)");
1246 if (output_section_statement
->load_base
)
1248 bfd_vma b
= exp_get_abs_int(output_section_statement
->load_base
,
1249 0, "output base", lang_final_phase_enum
);
1250 fprintf (config
.map_file
, "Output address ");
1251 fprintf_vma (config
.map_file
, b
);
1252 fprintf (config
.map_file
, "\n");
1254 if (output_section_statement
->section_alignment
>= 0
1255 || output_section_statement
->subsection_alignment
>= 0)
1257 fprintf (config
.map_file
, "\t\t\t\t\tforced alignment ");
1258 if (output_section_statement
->section_alignment
>= 0)
1260 fprintf (config
.map_file
, "section 2**%d ",output_section_statement
->section_alignment
);
1262 if ( output_section_statement
->subsection_alignment
>= 0)
1264 fprintf (config
.map_file
, "subsection 2**%d ",output_section_statement
->subsection_alignment
);
1269 print_statement (output_section_statement
->children
.head
,
1270 output_section_statement
);
1275 print_assignment (assignment
, output_section
)
1276 lang_assignment_statement_type
* assignment
;
1277 lang_output_section_statement_type
* output_section
;
1279 etree_value_type result
;
1285 print_address (print_dot
);
1287 result
= exp_fold_tree (assignment
->exp
->assign
.src
,
1289 lang_final_phase_enum
,
1295 print_address (result
.value
);
1299 fprintf (config
.map_file
, "*undefined*");
1302 exp_print_tree (assignment
->exp
);
1304 fprintf (config
.map_file
, "\n");
1308 print_input_statement (statm
)
1309 lang_input_statement_type
* statm
;
1311 if (statm
->filename
!= (char *) NULL
)
1313 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
1317 /* Print all the defined symbols for the abfd provided by in the supplied
1322 print_one_symbol (hash_entry
, ptr
)
1323 struct bfd_link_hash_entry
*hash_entry
;
1326 asection
* sec
= (asection
*)ptr
;
1328 if (hash_entry
->type
== bfd_link_hash_defined
1329 || hash_entry
->type
== bfd_link_hash_defweak
)
1331 if (sec
== hash_entry
->u
.def
.section
) {
1333 fprintf (config
.map_file
, " ");
1335 fprintf (config
.map_file
, " ");
1336 print_address (hash_entry
->u
.def
.value
+ outside_section_address (sec
));
1337 fprintf (config
.map_file
, " %s", hash_entry
->root
.string
);
1346 print_input_section (in
)
1347 lang_input_section_type
* in
;
1349 asection
*i
= in
->section
;
1350 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
1355 fprintf (config
.map_file
, " ");
1356 print_section (i
->name
);
1357 fprintf (config
.map_file
, " ");
1358 if (i
->output_section
)
1360 print_address (i
->output_section
->vma
+ i
->output_offset
);
1361 fprintf (config
.map_file
, " ");
1362 print_size (i
->_raw_size
);
1363 fprintf (config
.map_file
, " ");
1364 print_size(i
->_cooked_size
);
1365 fprintf (config
.map_file
, " ");
1366 print_alignment (i
->alignment_power
);
1367 fprintf (config
.map_file
, " ");
1371 bfd
*abfd
= in
->ifile
->the_bfd
;
1373 if (in
->ifile
->just_syms_flag
== true)
1375 fprintf (config
.map_file
, "symbols only ");
1378 fprintf (config
.map_file
, " %s ", abfd
->xvec
->name
);
1379 if (abfd
->my_archive
!= (bfd
*) NULL
)
1381 fprintf (config
.map_file
, "[%s]%s", abfd
->my_archive
->filename
,
1386 fprintf (config
.map_file
, "%s", abfd
->filename
);
1388 fprintf (config
.map_file
, "(overhead %d bytes)", (int) bfd_alloc_size (abfd
));
1391 /* Print all the symbols */
1392 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
1400 print_dot
= outside_section_address (i
) + size
;
1404 fprintf (config
.map_file
, "No output section allocated\n");
1410 print_fill_statement (fill
)
1411 lang_fill_statement_type
* fill
;
1413 fprintf (config
.map_file
, "FILL mask ");
1414 print_fill (fill
->fill
);
1418 print_data_statement (data
)
1419 lang_data_statement_type
* data
;
1421 /* bfd_vma value; */
1426 /* ASSERT(print_dot == data->output_vma);*/
1428 print_address (data
->output_vma
+ data
->output_section
->vma
);
1430 print_address (data
->value
);
1435 fprintf (config
.map_file
, "BYTE ");
1436 print_dot
+= BYTE_SIZE
;
1439 fprintf (config
.map_file
, "SHORT ");
1440 print_dot
+= SHORT_SIZE
;
1443 fprintf (config
.map_file
, "LONG ");
1444 print_dot
+= LONG_SIZE
;
1447 fprintf (config
.map_file
, "QUAD ");
1448 print_dot
+= QUAD_SIZE
;
1452 exp_print_tree (data
->exp
);
1454 fprintf (config
.map_file
, "\n");
1457 /* Print a reloc statement. */
1460 print_reloc_statement (reloc
)
1461 lang_reloc_statement_type
*reloc
;
1468 /* ASSERT(print_dot == data->output_vma);*/
1470 print_address (reloc
->output_vma
+ reloc
->output_section
->vma
);
1472 print_address (reloc
->addend_value
);
1475 fprintf (config
.map_file
, "RELOC %s ", reloc
->howto
->name
);
1477 print_dot
+= bfd_get_reloc_size (reloc
->howto
);
1479 exp_print_tree (reloc
->addend_exp
);
1481 fprintf (config
.map_file
, "\n");
1485 print_padding_statement (s
)
1486 lang_padding_statement_type
* s
;
1490 print_section ("*fill*");
1492 print_address (s
->output_offset
+ s
->output_section
->vma
);
1494 print_size (s
->size
);
1496 print_fill (s
->fill
);
1499 print_dot
= s
->output_offset
+ s
->output_section
->vma
+ s
->size
;
1504 print_wild_statement (w
, os
)
1505 lang_wild_statement_type
* w
;
1506 lang_output_section_statement_type
* os
;
1508 fprintf (config
.map_file
, " from ");
1509 if (w
->filename
!= (char *) NULL
)
1511 fprintf (config
.map_file
, "%s", w
->filename
);
1515 fprintf (config
.map_file
, "*");
1517 if (w
->section_name
!= (char *) NULL
)
1519 fprintf (config
.map_file
, "(%s)", w
->section_name
);
1523 fprintf (config
.map_file
, "(*)");
1526 print_statement (w
->children
.head
, os
);
1530 /* Print a group statement. */
1534 lang_group_statement_type
*s
;
1535 lang_output_section_statement_type
*os
;
1537 fprintf (config
.map_file
, "START GROUP\n");
1538 print_statement (s
->children
.head
, os
);
1539 fprintf (config
.map_file
, "END GROUP\n");
1543 print_statement (s
, os
)
1544 lang_statement_union_type
* s
;
1545 lang_output_section_statement_type
* os
;
1549 switch (s
->header
.type
)
1551 case lang_constructors_statement_enum
:
1552 fprintf (config
.map_file
, "constructors:\n");
1553 print_statement (constructor_list
.head
, os
);
1555 case lang_wild_statement_enum
:
1556 print_wild_statement (&s
->wild_statement
, os
);
1559 fprintf (config
.map_file
, "Fail with %d\n", s
->header
.type
);
1562 case lang_address_statement_enum
:
1563 fprintf (config
.map_file
, "address\n");
1565 case lang_object_symbols_statement_enum
:
1566 fprintf (config
.map_file
, "object symbols\n");
1568 case lang_fill_statement_enum
:
1569 print_fill_statement (&s
->fill_statement
);
1571 case lang_data_statement_enum
:
1572 print_data_statement (&s
->data_statement
);
1574 case lang_reloc_statement_enum
:
1575 print_reloc_statement (&s
->reloc_statement
);
1577 case lang_input_section_enum
:
1578 print_input_section (&s
->input_section
);
1580 case lang_padding_statement_enum
:
1581 print_padding_statement (&s
->padding_statement
);
1583 case lang_output_section_statement_enum
:
1584 print_output_section_statement (&s
->output_section_statement
);
1586 case lang_assignment_statement_enum
:
1587 print_assignment (&s
->assignment_statement
,
1590 case lang_target_statement_enum
:
1591 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
1593 case lang_output_statement_enum
:
1594 fprintf (config
.map_file
, "OUTPUT(%s %s)\n",
1595 s
->output_statement
.name
,
1596 output_target
? output_target
: "");
1598 case lang_input_statement_enum
:
1599 print_input_statement (&s
->input_statement
);
1601 case lang_group_statement_enum
:
1602 print_group (&s
->group_statement
, os
);
1604 case lang_afile_asection_pair_statement_enum
:
1616 print_statement (statement_list
.head
,
1617 abs_output_section
);
1622 insert_pad (this_ptr
, fill
, power
, output_section_statement
, dot
)
1623 lang_statement_union_type
** this_ptr
;
1626 asection
* output_section_statement
;
1629 /* Align this section first to the
1630 input sections requirement, then
1631 to the output section's requirement.
1632 If this alignment is > than any seen before,
1633 then record it too. Perform the alignment by
1634 inserting a magic 'padding' statement.
1637 unsigned int alignment_needed
= align_power (dot
, power
) - dot
;
1639 if (alignment_needed
!= 0)
1641 lang_statement_union_type
*new =
1642 ((lang_statement_union_type
*)
1643 stat_alloc (sizeof (lang_padding_statement_type
)));
1645 /* Link into existing chain */
1646 new->header
.next
= *this_ptr
;
1648 new->header
.type
= lang_padding_statement_enum
;
1649 new->padding_statement
.output_section
= output_section_statement
;
1650 new->padding_statement
.output_offset
=
1651 dot
- output_section_statement
->vma
;
1652 new->padding_statement
.fill
= fill
;
1653 new->padding_statement
.size
= alignment_needed
;
1657 /* Remember the most restrictive alignment */
1658 if (power
> output_section_statement
->alignment_power
)
1660 output_section_statement
->alignment_power
= power
;
1662 output_section_statement
->_raw_size
+= alignment_needed
;
1663 return alignment_needed
+ dot
;
1667 /* Work out how much this section will move the dot point */
1669 size_input_section (this_ptr
, output_section_statement
, fill
, dot
, relax
)
1670 lang_statement_union_type
** this_ptr
;
1671 lang_output_section_statement_type
* output_section_statement
;
1676 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
1677 asection
*i
= is
->section
;
1679 if (is
->ifile
->just_syms_flag
== false)
1681 if (output_section_statement
->subsection_alignment
!= -1)
1682 i
->alignment_power
=
1683 output_section_statement
->subsection_alignment
;
1685 dot
= insert_pad (this_ptr
, fill
, i
->alignment_power
,
1686 output_section_statement
->bfd_section
, dot
);
1688 /* Remember where in the output section this input section goes */
1690 i
->output_offset
= dot
- output_section_statement
->bfd_section
->vma
;
1692 /* Mark how big the output section must be to contain this now
1694 if (i
->_cooked_size
!= 0)
1695 dot
+= i
->_cooked_size
;
1697 dot
+= i
->_raw_size
;
1698 output_section_statement
->bfd_section
->_raw_size
= dot
- output_section_statement
->bfd_section
->vma
;
1702 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
1708 /* This variable indicates whether bfd_relax_section should be called
1711 static boolean relax_again
;
1713 /* Set the sizes for all the output sections. */
1716 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
1717 lang_statement_union_type
* s
;
1718 lang_output_section_statement_type
* output_section_statement
;
1719 lang_statement_union_type
** prev
;
1724 /* Size up the sections from their constituent parts */
1725 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1727 switch (s
->header
.type
)
1730 case lang_output_section_statement_enum
:
1733 lang_output_section_statement_type
*os
= &s
->output_section_statement
;
1735 if (os
->bfd_section
== NULL
)
1737 /* This section was never actually created. */
1741 /* If this is a COFF shared library section, use the size and
1742 address from the input section. FIXME: This is COFF
1743 specific; it would be cleaner if there were some other way
1744 to do this, but nothing simple comes to mind. */
1745 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
1749 if (os
->children
.head
== NULL
1750 || os
->children
.head
->next
!= NULL
1751 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
1752 einfo ("%P%X: Internal error on COFF shared library section %s",
1755 input
= os
->children
.head
->input_section
.section
;
1756 bfd_set_section_vma (os
->bfd_section
->owner
,
1758 bfd_section_vma (input
->owner
, input
));
1759 os
->bfd_section
->_raw_size
= input
->_raw_size
;
1763 if (bfd_is_abs_section (os
->bfd_section
))
1765 /* No matter what happens, an abs section starts at zero */
1766 ASSERT (os
->bfd_section
->vma
== 0);
1770 if (os
->addr_tree
== (etree_type
*) NULL
)
1772 /* No address specified for this section, get one
1773 from the region specification
1775 if (os
->region
== (lang_memory_region_type
*) NULL
)
1777 os
->region
= lang_memory_region_lookup ("*default*");
1779 dot
= os
->region
->current
;
1780 if (os
->section_alignment
== -1)
1781 dot
= align_power (dot
, os
->bfd_section
->alignment_power
);
1787 r
= exp_fold_tree (os
->addr_tree
,
1789 lang_allocating_phase_enum
,
1791 if (r
.valid
== false)
1793 einfo ("%F%S: non constant address expression for section %s\n",
1798 /* The section starts here */
1799 /* First, align to what the section needs */
1801 if (os
->section_alignment
!= -1)
1802 dot
= align_power (dot
, os
->section_alignment
);
1804 bfd_set_section_vma (0, os
->bfd_section
, dot
);
1806 os
->bfd_section
->output_offset
= 0;
1809 (void) lang_size_sections (os
->children
.head
, os
, &os
->children
.head
,
1810 os
->fill
, dot
, relax
);
1811 /* Ignore the size of the input sections, use the vma and size to */
1814 after
= ALIGN_N (os
->bfd_section
->vma
+
1815 os
->bfd_section
->_raw_size
,
1816 /* The coercion here is important, see ld.h. */
1817 (bfd_vma
) os
->block_value
);
1819 if (bfd_is_abs_section (os
->bfd_section
))
1820 ASSERT (after
== os
->bfd_section
->vma
);
1822 os
->bfd_section
->_raw_size
= after
- os
->bfd_section
->vma
;
1823 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
1824 os
->processed
= true;
1826 /* Replace into region ? */
1827 if (os
->region
!= (lang_memory_region_type
*) NULL
)
1829 os
->region
->current
= dot
;
1830 /* Make sure this isn't silly. */
1831 if ((os
->region
->current
< os
->region
->origin
)
1832 || (os
->region
->current
1833 > os
->region
->origin
+ os
->region
->length
))
1835 if (os
->addr_tree
!= (etree_type
*) NULL
)
1837 einfo ("%X%P: address 0x%v of %B section %s is not within region %s\n",
1838 os
->region
->current
,
1839 os
->bfd_section
->owner
,
1840 os
->bfd_section
->name
,
1845 einfo ("%X%P: region %s is full (%B section %s)\n",
1847 os
->bfd_section
->owner
,
1848 os
->bfd_section
->name
);
1850 /* Reset the region pointer. */
1851 os
->region
->current
= os
->region
->origin
;
1857 case lang_constructors_statement_enum
:
1858 dot
= lang_size_sections (constructor_list
.head
,
1859 output_section_statement
,
1860 &s
->wild_statement
.children
.head
,
1865 case lang_data_statement_enum
:
1867 unsigned int size
= 0;
1869 s
->data_statement
.output_vma
= dot
- output_section_statement
->bfd_section
->vma
;
1870 s
->data_statement
.output_section
=
1871 output_section_statement
->bfd_section
;
1873 switch (s
->data_statement
.type
)
1890 output_section_statement
->bfd_section
->_raw_size
+= size
;
1891 /* The output section gets contents, and then we inspect for
1892 any flags set in the input script which override any ALLOC */
1893 output_section_statement
->bfd_section
->flags
|= SEC_HAS_CONTENTS
;
1894 if (!(output_section_statement
->flags
& SEC_NEVER_LOAD
)) {
1895 output_section_statement
->bfd_section
->flags
|= SEC_ALLOC
| SEC_LOAD
;
1900 case lang_reloc_statement_enum
:
1904 s
->reloc_statement
.output_vma
=
1905 dot
- output_section_statement
->bfd_section
->vma
;
1906 s
->reloc_statement
.output_section
=
1907 output_section_statement
->bfd_section
;
1908 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
1910 output_section_statement
->bfd_section
->_raw_size
+= size
;
1914 case lang_wild_statement_enum
:
1916 dot
= lang_size_sections (s
->wild_statement
.children
.head
,
1917 output_section_statement
,
1918 &s
->wild_statement
.children
.head
,
1924 case lang_object_symbols_statement_enum
:
1925 link_info
.create_object_symbols_section
=
1926 output_section_statement
->bfd_section
;
1928 case lang_output_statement_enum
:
1929 case lang_target_statement_enum
:
1931 case lang_input_section_enum
:
1935 i
= (*prev
)->input_section
.section
;
1937 i
->_cooked_size
= i
->_raw_size
;
1942 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
1943 einfo ("%P%F: can't relax section: %E\n");
1947 dot
= size_input_section (prev
,
1948 output_section_statement
,
1949 output_section_statement
->fill
,
1953 case lang_input_statement_enum
:
1955 case lang_fill_statement_enum
:
1956 s
->fill_statement
.output_section
= output_section_statement
->bfd_section
;
1958 fill
= s
->fill_statement
.fill
;
1960 case lang_assignment_statement_enum
:
1962 bfd_vma newdot
= dot
;
1964 exp_fold_tree (s
->assignment_statement
.exp
,
1965 output_section_statement
,
1966 lang_allocating_phase_enum
,
1970 if (newdot
!= dot
&& !relax
)
1972 /* The assignment changed dot. Insert a pad. */
1973 if (output_section_statement
== abs_output_section
)
1975 /* If we don't have an output section, then just adjust
1976 the default memory address. */
1977 lang_memory_region_lookup ("*default*")->current
= newdot
;
1981 lang_statement_union_type
*new =
1982 ((lang_statement_union_type
*)
1983 stat_alloc (sizeof (lang_padding_statement_type
)));
1985 /* Link into existing chain */
1986 new->header
.next
= *prev
;
1988 new->header
.type
= lang_padding_statement_enum
;
1989 new->padding_statement
.output_section
=
1990 output_section_statement
->bfd_section
;
1991 new->padding_statement
.output_offset
=
1992 dot
- output_section_statement
->bfd_section
->vma
;
1993 new->padding_statement
.fill
= fill
;
1994 new->padding_statement
.size
= newdot
- dot
;
1995 output_section_statement
->bfd_section
->_raw_size
+=
1996 new->padding_statement
.size
;
2004 case lang_padding_statement_enum
:
2005 /* If we are relaxing, and this is not the first pass, some
2006 padding statements may have been inserted during previous
2007 passes. We may have to move the padding statement to a new
2008 location if dot has a different value at this point in this
2009 pass than it did at this point in the previous pass. */
2010 s
->padding_statement
.output_offset
=
2011 dot
- output_section_statement
->bfd_section
->vma
;
2012 dot
+= s
->padding_statement
.size
;
2015 case lang_group_statement_enum
:
2016 dot
= lang_size_sections (s
->group_statement
.children
.head
,
2017 output_section_statement
,
2018 &s
->group_statement
.children
.head
,
2026 /* This can only get here when relaxing is turned on */
2028 case lang_address_statement_enum
:
2031 prev
= &s
->header
.next
;
2037 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
2038 lang_statement_union_type
* s
;
2039 lang_output_section_statement_type
* output_section_statement
;
2043 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
2045 switch (s
->header
.type
)
2047 case lang_constructors_statement_enum
:
2048 dot
= lang_do_assignments (constructor_list
.head
,
2049 output_section_statement
,
2054 case lang_output_section_statement_enum
:
2056 lang_output_section_statement_type
*os
=
2057 &(s
->output_section_statement
);
2059 if (os
->bfd_section
!= NULL
)
2061 dot
= os
->bfd_section
->vma
;
2062 (void) lang_do_assignments (os
->children
.head
, os
,
2064 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
2068 /* If nothing has been placed into the output section then
2069 it won't have a bfd_section. */
2070 if (os
->bfd_section
)
2072 os
->bfd_section
->lma
2073 = exp_get_abs_int(os
->load_base
, 0,"load base", lang_final_phase_enum
);
2078 case lang_wild_statement_enum
:
2080 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
2081 output_section_statement
,
2086 case lang_object_symbols_statement_enum
:
2087 case lang_output_statement_enum
:
2088 case lang_target_statement_enum
:
2090 case lang_common_statement_enum
:
2093 case lang_data_statement_enum
:
2095 etree_value_type value
;
2097 value
= exp_fold_tree (s
->data_statement
.exp
,
2099 lang_final_phase_enum
, dot
, &dot
);
2100 s
->data_statement
.value
= value
.value
;
2101 if (value
.valid
== false)
2102 einfo ("%F%P: invalid data statement\n");
2104 switch (s
->data_statement
.type
)
2121 case lang_reloc_statement_enum
:
2123 etree_value_type value
;
2125 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
2127 lang_final_phase_enum
, dot
, &dot
);
2128 s
->reloc_statement
.addend_value
= value
.value
;
2129 if (value
.valid
== false)
2130 einfo ("%F%P: invalid reloc statement\n");
2132 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
);
2135 case lang_input_section_enum
:
2137 asection
*in
= s
->input_section
.section
;
2139 if (in
->_cooked_size
!= 0)
2140 dot
+= in
->_cooked_size
;
2142 dot
+= in
->_raw_size
;
2146 case lang_input_statement_enum
:
2148 case lang_fill_statement_enum
:
2149 fill
= s
->fill_statement
.fill
;
2151 case lang_assignment_statement_enum
:
2153 exp_fold_tree (s
->assignment_statement
.exp
,
2154 output_section_statement
,
2155 lang_final_phase_enum
,
2161 case lang_padding_statement_enum
:
2162 dot
+= s
->padding_statement
.size
;
2165 case lang_group_statement_enum
:
2166 dot
= lang_do_assignments (s
->group_statement
.children
.head
,
2167 output_section_statement
,
2175 case lang_address_statement_enum
:
2183 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
2184 operator .startof. (section_name), it produces an undefined symbol
2185 .startof.section_name. Similarly, when it sees
2186 .sizeof. (section_name), it produces an undefined symbol
2187 .sizeof.section_name. For all the output sections, we look for
2188 such symbols, and set them to the correct value. */
2195 for (s
= output_bfd
->sections
; s
!= NULL
; s
= s
->next
)
2197 const char *secname
;
2199 struct bfd_link_hash_entry
*h
;
2201 secname
= bfd_get_section_name (output_bfd
, s
);
2202 buf
= xmalloc (10 + strlen (secname
));
2204 sprintf (buf
, ".startof.%s", secname
);
2205 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
2206 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
2208 h
->type
= bfd_link_hash_defined
;
2209 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, s
);
2210 h
->u
.def
.section
= bfd_abs_section_ptr
;
2213 sprintf (buf
, ".sizeof.%s", secname
);
2214 h
= bfd_link_hash_lookup (link_info
.hash
, buf
, false, false, true);
2215 if (h
!= NULL
&& h
->type
== bfd_link_hash_undefined
)
2217 h
->type
= bfd_link_hash_defined
;
2218 if (s
->_cooked_size
!= 0)
2219 h
->u
.def
.value
= s
->_cooked_size
;
2221 h
->u
.def
.value
= s
->_raw_size
;
2222 h
->u
.def
.section
= bfd_abs_section_ptr
;
2232 struct bfd_link_hash_entry
*h
;
2235 if (link_info
.relocateable
|| link_info
.shared
)
2240 if (entry_symbol
== (char *) NULL
)
2242 /* No entry has been specified. Look for start, but don't warn
2243 if we don't find it. */
2244 entry_symbol
= "start";
2248 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
2249 if (h
!= (struct bfd_link_hash_entry
*) NULL
2250 && (h
->type
== bfd_link_hash_defined
2251 || h
->type
== bfd_link_hash_defweak
)
2252 && h
->u
.def
.section
->output_section
!= NULL
)
2256 val
= (h
->u
.def
.value
2257 + bfd_get_section_vma (output_bfd
,
2258 h
->u
.def
.section
->output_section
)
2259 + h
->u
.def
.section
->output_offset
);
2260 if (! bfd_set_start_address (output_bfd
, val
))
2261 einfo ("%P%F:%s: can't set start address\n", entry_symbol
);
2267 /* Can't find the entry symbol. Use the first address in the
2269 ts
= bfd_get_section_by_name (output_bfd
, ".text");
2270 if (ts
!= (asection
*) NULL
)
2273 einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n",
2274 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
2275 if (! bfd_set_start_address (output_bfd
,
2276 bfd_get_section_vma (output_bfd
, ts
)))
2277 einfo ("%P%F: can't set start address\n");
2282 einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n",
2288 /* Check that the architecture of all the input files is compatible
2289 with the output file. Also call the backend to let it do any
2290 other checking that is needed. */
2295 lang_statement_union_type
*file
;
2297 CONST bfd_arch_info_type
*compatible
;
2299 for (file
= file_chain
.head
;
2300 file
!= (lang_statement_union_type
*) NULL
;
2301 file
= file
->input_statement
.next
)
2303 input_bfd
= file
->input_statement
.the_bfd
;
2304 compatible
= bfd_arch_get_compatible (input_bfd
,
2306 if (compatible
== NULL
)
2307 einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n",
2308 bfd_printable_name (input_bfd
), input_bfd
,
2309 bfd_printable_name (output_bfd
));
2312 bfd_merge_private_bfd_data (input_bfd
, output_bfd
);
2316 /* Look through all the global common symbols and attach them to the
2317 correct section. The -sort-common command line switch may be used
2318 to roughly sort the entries by size. */
2323 if (link_info
.relocateable
2324 && ! command_line
.force_common_definition
)
2327 if (! config
.sort_common
)
2328 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
2333 for (power
= 4; power
>= 0; power
--)
2334 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
2339 /* Place one common symbol in the correct section. */
2342 lang_one_common (h
, info
)
2343 struct bfd_link_hash_entry
*h
;
2346 unsigned int power_of_two
;
2350 if (h
->type
!= bfd_link_hash_common
)
2354 power_of_two
= h
->u
.c
.p
->alignment_power
;
2356 if (config
.sort_common
2357 && power_of_two
< (unsigned int) *(int *) info
)
2360 section
= h
->u
.c
.p
->section
;
2362 /* Increase the size of the section. */
2363 section
->_raw_size
= ALIGN_N (section
->_raw_size
,
2364 (bfd_size_type
) (1 << power_of_two
));
2366 /* Adjust the alignment if necessary. */
2367 if (power_of_two
> section
->alignment_power
)
2368 section
->alignment_power
= power_of_two
;
2370 /* Change the symbol from common to defined. */
2371 h
->type
= bfd_link_hash_defined
;
2372 h
->u
.def
.section
= section
;
2373 h
->u
.def
.value
= section
->_raw_size
;
2375 /* Increase the size of the section. */
2376 section
->_raw_size
+= size
;
2378 /* Make sure the section is allocated in memory. */
2379 section
->flags
|= SEC_ALLOC
;
2381 if (config
.map_file
!= NULL
)
2382 fprintf (config
.map_file
, "Allocating common %s: %lx at %lx %s\n",
2383 h
->root
.string
, (unsigned long) size
,
2384 (unsigned long) h
->u
.def
.value
, section
->owner
->filename
);
2390 run through the input files and ensure that every input
2391 section has somewhere to go. If one is found without
2392 a destination then create an input request and place it
2393 into the statement tree.
2397 lang_place_orphans ()
2399 lang_input_statement_type
*file
;
2401 for (file
= (lang_input_statement_type
*) file_chain
.head
;
2402 file
!= (lang_input_statement_type
*) NULL
;
2403 file
= (lang_input_statement_type
*) file
->next
)
2407 for (s
= file
->the_bfd
->sections
;
2408 s
!= (asection
*) NULL
;
2411 if (s
->output_section
== (asection
*) NULL
)
2413 /* This section of the file is not attatched, root
2414 around for a sensible place for it to go */
2416 if (file
->just_syms_flag
)
2418 /* We are only retrieving symbol values from this
2419 file. We want the symbols to act as though the
2420 values in the file are absolute. */
2421 s
->output_section
= bfd_abs_section_ptr
;
2422 s
->output_offset
= s
->vma
;
2424 else if (file
->common_section
== s
)
2426 /* This is a lonely common section which must
2427 have come from an archive. We attatch to the
2428 section with the wildcard */
2429 if (! link_info
.relocateable
2430 && ! command_line
.force_common_definition
)
2432 if (default_common_section
==
2433 (lang_output_section_statement_type
*) NULL
)
2435 info_msg ("%P: no [COMMON] command, defaulting to .bss\n");
2437 default_common_section
=
2438 lang_output_section_statement_lookup (".bss");
2441 wild_doit (&default_common_section
->children
, s
,
2442 default_common_section
, file
);
2445 else if (ldemul_place_orphan (file
, s
))
2449 lang_output_section_statement_type
*os
=
2450 lang_output_section_statement_lookup (s
->name
);
2452 wild_doit (&os
->children
, s
, os
, file
);
2461 lang_set_flags (ptr
, flags
)
2465 boolean state
= false;
2480 /* ptr->flag_read = state; */
2483 /* ptr->flag_write = state; */
2486 /* ptr->flag_executable= state;*/
2490 /* ptr->flag_loadable= state;*/
2493 einfo ("%P%F: invalid syntax in flags\n");
2500 /* Call a function on each input file. This function will be called
2501 on an archive, but not on the elements. */
2504 lang_for_each_input_file (func
)
2505 void (*func
) PARAMS ((lang_input_statement_type
*));
2507 lang_input_statement_type
*f
;
2509 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
2511 f
= (lang_input_statement_type
*) f
->next_real_file
)
2515 /* Call a function on each file. The function will be called on all
2516 the elements of an archive which are included in the link, but will
2517 not be called on the archive file itself. */
2520 lang_for_each_file (func
)
2521 void (*func
) PARAMS ((lang_input_statement_type
*));
2523 lang_input_statement_type
*f
;
2525 for (f
= (lang_input_statement_type
*) file_chain
.head
;
2526 f
!= (lang_input_statement_type
*) NULL
;
2527 f
= (lang_input_statement_type
*) f
->next
)
2538 lang_for_each_input_section (func
)
2539 void (*func
) PARAMS ((bfd
* ab
, asection
* as
));
2541 lang_input_statement_type
*f
;
2543 for (f
= (lang_input_statement_type
*) file_chain
.head
;
2544 f
!= (lang_input_statement_type
*) NULL
;
2545 f
= (lang_input_statement_type
*) f
->next
)
2549 for (s
= f
->the_bfd
->sections
;
2550 s
!= (asection
*) NULL
;
2553 func (f
->the_bfd
, s
);
2561 ldlang_add_file (entry
)
2562 lang_input_statement_type
* entry
;
2566 lang_statement_append (&file_chain
,
2567 (lang_statement_union_type
*) entry
,
2570 /* The BFD linker needs to have a list of all input BFDs involved in
2572 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
2573 ASSERT (entry
->the_bfd
!= output_bfd
);
2574 for (pp
= &link_info
.input_bfds
;
2575 *pp
!= (bfd
*) NULL
;
2576 pp
= &(*pp
)->link_next
)
2578 *pp
= entry
->the_bfd
;
2579 entry
->the_bfd
->usrdata
= (PTR
) entry
;
2580 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
2584 lang_add_output (name
, from_script
)
2588 /* Make -o on command line override OUTPUT in script. */
2589 if (had_output_filename
== false || !from_script
)
2591 output_filename
= name
;
2592 had_output_filename
= true;
2597 static lang_output_section_statement_type
*current_section
;
2609 for (l
= 0; l
< 32; l
++)
2611 if (i
>= (unsigned int) x
)
2619 lang_enter_output_section_statement (output_section_statement_name
,
2620 address_exp
, flags
, block_value
,
2621 align
, subalign
, ebase
)
2622 const char *output_section_statement_name
;
2623 etree_type
* address_exp
;
2625 bfd_vma block_value
;
2627 etree_type
*subalign
;
2630 lang_output_section_statement_type
*os
;
2634 lang_output_section_statement_lookup (output_section_statement_name
);
2638 /* Add this statement to tree */
2639 /* add_statement(lang_output_section_statement_enum,
2640 output_section_statement);*/
2641 /* Make next things chain into subchain of this */
2643 if (os
->addr_tree
==
2644 (etree_type
*) NULL
)
2650 if (flags
& SEC_NEVER_LOAD
)
2654 os
->block_value
= block_value
? block_value
: 1;
2655 stat_ptr
= &os
->children
;
2657 os
->subsection_alignment
= topower(
2658 exp_get_value_int(subalign
, -1,
2659 "subsection alignment",
2661 os
->section_alignment
= topower(
2662 exp_get_value_int(align
, -1,
2663 "section alignment", 0));
2665 os
->load_base
= ebase
;
2672 lang_output_statement_type
*new =
2673 new_stat (lang_output_statement
, stat_ptr
);
2675 new->name
= output_filename
;
2678 /* Reset the current counters in the regions */
2680 reset_memory_regions ()
2682 lang_memory_region_type
*p
= lang_memory_region_list
;
2684 for (p
= lang_memory_region_list
;
2685 p
!= (lang_memory_region_type
*) NULL
;
2688 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
2689 p
->current
= p
->origin
;
2696 lang_reasonable_defaults ();
2697 current_target
= default_target
;
2699 lang_for_each_statement (ldlang_open_output
); /* Open the output file */
2701 ldemul_create_output_section_statements ();
2703 /* Add to the hash table all undefineds on the command line */
2704 lang_place_undefineds ();
2706 /* Create a bfd for each input file */
2707 current_target
= default_target
;
2708 open_input_bfds (statement_list
.head
, false);
2710 ldemul_after_open ();
2712 /* Build all sets based on the information gathered from the input
2714 ldctor_build_sets ();
2716 /* Size up the common data */
2719 /* Run through the contours of the script and attatch input sections
2720 to the correct output sections
2722 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
2723 (lang_output_section_statement_type
*) NULL
);
2726 /* Find any sections not attatched explicitly and handle them */
2727 lang_place_orphans ();
2729 ldemul_before_allocation ();
2731 /* We must record the program headers before we try to fix the
2732 section positions, since they will affect SIZEOF_HEADERS. */
2733 lang_record_phdrs ();
2735 /* Now run around and relax if we can */
2736 if (command_line
.relax
)
2738 /* First time round is a trial run to get the 'worst case'
2739 addresses of the objects if there was no relaxing. */
2740 lang_size_sections (statement_list
.head
,
2742 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
2744 /* Keep relaxing until bfd_relax_section gives up. */
2747 reset_memory_regions ();
2749 relax_again
= false;
2751 /* Do all the assignments with our current guesses as to
2753 lang_do_assignments (statement_list
.head
,
2755 (fill_type
) 0, (bfd_vma
) 0);
2757 /* Perform another relax pass - this time we know where the
2758 globals are, so can make better guess. */
2759 lang_size_sections (statement_list
.head
,
2761 &(statement_list
.head
), 0, (bfd_vma
) 0, true);
2763 while (relax_again
);
2767 /* Size up the sections. */
2768 lang_size_sections (statement_list
.head
,
2770 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
2773 /* See if anything special should be done now we know how big
2775 ldemul_after_allocation ();
2777 /* Fix any .startof. or .sizeof. symbols. */
2778 lang_set_startof ();
2780 /* Do all the assignments, now that we know the final restingplaces
2781 of all the symbols */
2783 lang_do_assignments (statement_list
.head
,
2785 (fill_type
) 0, (bfd_vma
) 0);
2787 /* Make sure that we're not mixing architectures */
2797 /* EXPORTED TO YACC */
2800 lang_add_wild (section_name
, filename
)
2801 CONST
char *CONST section_name
;
2802 CONST
char *CONST filename
;
2804 lang_wild_statement_type
*new = new_stat (lang_wild_statement
,
2807 if (section_name
!= (char *) NULL
&& strcmp (section_name
, "COMMON") == 0)
2809 placed_commons
= true;
2811 if (filename
!= (char *) NULL
)
2813 lang_has_input_file
= true;
2815 new->section_name
= section_name
;
2816 new->filename
= filename
;
2817 lang_list_init (&new->children
);
2821 lang_section_start (name
, address
)
2823 etree_type
* address
;
2825 lang_address_statement_type
*ad
= new_stat (lang_address_statement
, stat_ptr
);
2827 ad
->section_name
= name
;
2828 ad
->address
= address
;
2831 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
2832 because of a -e argument on the command line, or zero if this is
2833 called by ENTRY in a linker script. Command line arguments take
2836 /* WINDOWS_NT. When an entry point has been specified, we will also force
2837 this symbol to be defined by calling ldlang_add_undef (equivalent to
2838 having switch -u entry_name on the command line). The reason we do
2839 this is so that the user doesn't have to because they would have to use
2840 the -u switch if they were specifying an entry point other than
2841 _mainCRTStartup. Specifically, if creating a windows application, entry
2842 point _WinMainCRTStartup must be specified.
2843 What I have found for non console applications (entry not _mainCRTStartup)
2844 is that the .obj that contains mainCRTStartup is brought in since it is
2845 the first encountered in libc.lib and it has other symbols in it which will
2846 be pulled in by the link process. To avoid this, adding -u with the entry
2847 point name specified forces the correct .obj to be used. We can avoid
2848 making the user do this by always adding the entry point name as an
2849 undefined symbol. */
2852 lang_add_entry (name
, cmdline
)
2856 if (entry_symbol
== NULL
2858 || ! entry_from_cmdline
)
2860 entry_symbol
= name
;
2861 entry_from_cmdline
= cmdline
;
2864 /* don't do this yet. It seems to work (the executables run), but the
2865 image created is very different from what I was getting before indicating
2866 that something else is being pulled in. When everything else is working,
2867 then try to put this back in to see if it will do the right thing for
2868 other more complicated applications */
2869 ldlang_add_undef (name
);
2874 lang_add_target (name
)
2877 lang_target_statement_type
*new = new_stat (lang_target_statement
,
2893 map_option_f
= true;
2904 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
2911 lang_add_data (type
, exp
)
2913 union etree_union
*exp
;
2916 lang_data_statement_type
*new = new_stat (lang_data_statement
,
2924 /* Create a new reloc statement. RELOC is the BFD relocation type to
2925 generate. HOWTO is the corresponding howto structure (we could
2926 look this up, but the caller has already done so). SECTION is the
2927 section to generate a reloc against, or NAME is the name of the
2928 symbol to generate a reloc against. Exactly one of SECTION and
2929 NAME must be NULL. ADDEND is an expression for the addend. */
2932 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
2933 bfd_reloc_code_real_type reloc
;
2934 reloc_howto_type
*howto
;
2937 union etree_union
*addend
;
2939 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
2943 p
->section
= section
;
2945 p
->addend_exp
= addend
;
2947 p
->addend_value
= 0;
2948 p
->output_section
= NULL
;
2953 lang_add_assignment (exp
)
2956 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
2963 lang_add_attribute (attribute
)
2964 enum statement_enum attribute
;
2966 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
2973 if (startup_file
!= (char *) NULL
)
2975 einfo ("%P%Fmultiple STARTUP files\n");
2977 first_file
->filename
= name
;
2978 first_file
->local_sym_name
= name
;
2979 first_file
->real
= true;
2981 startup_file
= name
;
2988 lang_float_flag
= maybe
;
2992 lang_leave_output_section_statement (fill
, memspec
)
2994 CONST
char *memspec
;
2996 current_section
->fill
= fill
;
2997 current_section
->region
= lang_memory_region_lookup (memspec
);
2998 stat_ptr
= &statement_list
;
3002 Create an absolute symbol with the given name with the value of the
3003 address of first byte of the section named.
3005 If the symbol already exists, then do nothing.
3008 lang_abs_symbol_at_beginning_of (secname
, name
)
3009 const char *secname
;
3012 struct bfd_link_hash_entry
*h
;
3014 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
3015 if (h
== (struct bfd_link_hash_entry
*) NULL
)
3016 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
3018 if (h
->type
== bfd_link_hash_new
3019 || h
->type
== bfd_link_hash_undefined
)
3023 h
->type
= bfd_link_hash_defined
;
3025 sec
= bfd_get_section_by_name (output_bfd
, secname
);
3026 if (sec
== (asection
*) NULL
)
3029 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
3031 h
->u
.def
.section
= bfd_abs_section_ptr
;
3036 Create an absolute symbol with the given name with the value of the
3037 address of the first byte after the end of the section named.
3039 If the symbol already exists, then do nothing.
3042 lang_abs_symbol_at_end_of (secname
, name
)
3043 const char *secname
;
3046 struct bfd_link_hash_entry
*h
;
3048 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
3049 if (h
== (struct bfd_link_hash_entry
*) NULL
)
3050 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
3052 if (h
->type
== bfd_link_hash_new
3053 || h
->type
== bfd_link_hash_undefined
)
3057 h
->type
= bfd_link_hash_defined
;
3059 sec
= bfd_get_section_by_name (output_bfd
, secname
);
3060 if (sec
== (asection
*) NULL
)
3063 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
3064 + bfd_section_size (output_bfd
, sec
));
3066 h
->u
.def
.section
= bfd_abs_section_ptr
;
3071 lang_statement_append (list
, element
, field
)
3072 lang_statement_list_type
* list
;
3073 lang_statement_union_type
* element
;
3074 lang_statement_union_type
** field
;
3076 *(list
->tail
) = element
;
3080 /* Set the output format type. -oformat overrides scripts. */
3083 lang_add_output_format (format
, big
, little
, from_script
)
3089 if (output_target
== NULL
|| !from_script
)
3091 if (command_line
.endian
== ENDIAN_BIG
3094 else if (command_line
.endian
== ENDIAN_LITTLE
3098 output_target
= format
;
3102 /* Enter a group. This creates a new lang_group_statement, and sets
3103 stat_ptr to build new statements within the group. */
3108 lang_group_statement_type
*g
;
3110 g
= new_stat (lang_group_statement
, stat_ptr
);
3111 lang_list_init (&g
->children
);
3112 stat_ptr
= &g
->children
;
3115 /* Leave a group. This just resets stat_ptr to start writing to the
3116 regular list of statements again. Note that this will not work if
3117 groups can occur inside anything else which can adjust stat_ptr,
3118 but currently they can't. */
3123 stat_ptr
= &statement_list
;
3126 /* Add a new program header. This is called for each entry in a PHDRS
3127 command in a linker script. */
3130 lang_new_phdr (name
, type
, hdrs
, at
)
3136 struct lang_phdr
*n
, **pp
;
3138 n
= (struct lang_phdr
*) stat_alloc (sizeof (struct lang_phdr
));
3141 n
->type
= exp_get_value_int (type
, 0, "program header type",
3142 lang_final_phase_enum
);
3146 for (pp
= &lang_phdr_list
; *pp
!= NULL
; pp
= &(*pp
)->next
)
3151 /* Record that a section should be placed in a phdr. */
3154 lang_section_in_phdr (name
)
3157 struct lang_output_section_phdr_list
*n
;
3159 n
= ((struct lang_output_section_phdr_list
*)
3160 stat_alloc (sizeof (struct lang_output_section_phdr_list
)));
3163 n
->next
= current_section
->phdrs
;
3164 current_section
->phdrs
= n
;
3167 /* Record the program header information in the output BFD. FIXME: We
3168 should not be calling an ELF specific function here. */
3171 lang_record_phdrs ()
3175 struct lang_output_section_phdr_list
*last
;
3176 struct lang_phdr
*l
;
3177 lang_statement_union_type
*u
;
3180 secs
= xmalloc (alc
* sizeof (asection
*));
3182 for (l
= lang_phdr_list
; l
!= NULL
; l
= l
->next
)
3188 for (u
= lang_output_section_statement
.head
;
3190 u
= u
->output_section_statement
.next
)
3192 lang_output_section_statement_type
*os
;
3193 struct lang_output_section_phdr_list
*pl
;
3195 os
= &u
->output_section_statement
;
3203 || os
->bfd_section
== NULL
3204 || (os
->bfd_section
->flags
& SEC_ALLOC
) == 0)
3209 if (os
->bfd_section
== NULL
)
3212 for (; pl
!= NULL
; pl
= pl
->next
)
3214 if (strcmp (pl
->name
, l
->name
) == 0)
3219 secs
= xrealloc (secs
, alc
* sizeof (asection
*));
3221 secs
[c
] = os
->bfd_section
;
3231 at
= exp_get_vma (l
->at
, 0, "phdr load address",
3232 lang_final_phase_enum
);
3233 if (! bfd_record_phdr (output_bfd
, l
->type
, false, 0,
3234 l
->at
== NULL
? false : true,
3236 (l
->hdrs
& LANG_PHDR_FILEHDR
) ? true : false,
3237 (l
->hdrs
& LANG_PHDR_PHDRS
) ? true : false,
3239 einfo ("%F%P: bfd_record_phdr failed: %E\n");
3244 /* Make sure all the phdr assignments succeeded. */
3245 for (u
= lang_output_section_statement
.head
;
3247 u
= u
->output_section_statement
.next
)
3249 struct lang_output_section_phdr_list
*pl
;
3251 if (u
->output_section_statement
.bfd_section
== NULL
)
3254 for (pl
= u
->output_section_statement
.phdrs
;
3257 if (! pl
->used
&& strcmp (pl
->name
, "NONE") != 0)
3258 einfo ("%X%P: section `%s' assigned to non-existent phdr `%s'\n",
3259 u
->output_section_statement
.name
, pl
->name
);