1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94 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, 675 Mass Ave, Cambridge, MA 02139, 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
;
53 /* Points to the last statement in the .data section, so we can add
54 stuff to the data section without pain */
55 static lang_statement_list_type end_of_data_section_statement_list
;
57 static boolean placed_commons
= false;
58 static lang_output_section_statement_type
*default_common_section
;
59 static boolean map_option_f
;
60 static bfd_vma print_dot
;
61 static lang_input_statement_type
*first_file
;
62 static lang_statement_list_type lang_output_section_statement
;
63 static CONST
char *current_target
;
64 static CONST
char *output_target
;
65 static int longest_section_name
= 8;
66 static lang_statement_list_type statement_list
;
68 static void print_size
PARAMS ((size_t value
));
69 static void print_alignment
PARAMS ((unsigned int value
));
70 static void print_fill
PARAMS ((fill_type value
));
71 static void print_section
PARAMS ((const char *name
));
72 static void lang_for_each_statement_worker
73 PARAMS ((void (*func
) (lang_statement_union_type
*),
74 lang_statement_union_type
*s
));
75 static lang_input_statement_type
*new_afile
76 PARAMS ((const char *name
, lang_input_file_enum_type file_type
,
77 const char *target
, boolean add_to_list
));
78 static void print_flags
PARAMS ((int *ignore_flags
));
79 static void init_os
PARAMS ((lang_output_section_statement_type
*s
));
80 static void wild_doit
PARAMS ((lang_statement_list_type
*ptr
,
82 lang_output_section_statement_type
*output
,
83 lang_input_statement_type
*file
));
84 static void wild_section
PARAMS ((lang_wild_statement_type
*ptr
,
86 lang_input_statement_type
*file
,
87 lang_output_section_statement_type
*output
));
88 static lang_input_statement_type
*lookup_name
PARAMS ((const char *name
));
89 static void load_symbols
PARAMS ((lang_input_statement_type
*entry
));
90 static void wild
PARAMS ((lang_wild_statement_type
*s
,
91 const char *section
, const char *file
,
93 lang_output_section_statement_type
*output
));
94 static bfd
*open_output
PARAMS ((const char *name
));
95 static void ldlang_open_output
PARAMS ((lang_statement_union_type
*statement
));
96 static void open_input_bfds
PARAMS ((lang_statement_union_type
*statement
));
97 static void lang_reasonable_defaults
PARAMS ((void));
98 static void lang_place_undefineds
PARAMS ((void));
99 static void map_input_to_output_sections
100 PARAMS ((lang_statement_union_type
*s
,
102 lang_output_section_statement_type
*output_section_statement
));
103 static void print_output_section_statement
104 PARAMS ((lang_output_section_statement_type
*output_section_statement
));
105 static void print_assignment
106 PARAMS ((lang_assignment_statement_type
*assignment
,
107 lang_output_section_statement_type
*output_section
));
108 static void print_input_statement
PARAMS ((lang_input_statement_type
*statm
));
109 static void print_input_section
PARAMS ((lang_input_section_type
*in
));
110 static void print_fill_statement
PARAMS ((lang_fill_statement_type
*fill
));
111 static void print_data_statement
PARAMS ((lang_data_statement_type
*data
));
112 static void print_reloc_statement
PARAMS ((lang_reloc_statement_type
*reloc
));
113 static void print_padding_statement
PARAMS ((lang_padding_statement_type
*s
));
114 static void print_wild_statement
115 PARAMS ((lang_wild_statement_type
*w
,
116 lang_output_section_statement_type
*os
));
117 static void print_statement
PARAMS ((lang_statement_union_type
*s
,
118 lang_output_section_statement_type
*os
));
119 static void print_statements
PARAMS ((void));
120 static bfd_vma insert_pad
PARAMS ((lang_statement_union_type
**this_ptr
,
121 fill_type fill
, unsigned int power
,
122 asection
*output_section_statement
,
124 static bfd_vma size_input_section
125 PARAMS ((lang_statement_union_type
**this_ptr
,
126 lang_output_section_statement_type
*output_section_statement
,
127 fill_type fill
, bfd_vma dot
, boolean relax
));
128 static bfd_vma lang_do_assignments
129 PARAMS ((lang_statement_union_type
* s
,
130 lang_output_section_statement_type
*output_section_statement
,
133 static void lang_finish
PARAMS ((void));
134 static void lang_check
PARAMS ((void));
135 static void lang_common
PARAMS ((void));
136 static boolean lang_one_common
PARAMS ((struct bfd_link_hash_entry
*, PTR
));
137 static void lang_place_orphans
PARAMS ((void));
138 static int topower
PARAMS ((int));
139 static void reset_memory_regions
PARAMS ((void));
142 lang_output_section_statement_type
*abs_output_section
;
143 lang_statement_list_type
*stat_ptr
= &statement_list
;
144 lang_statement_list_type file_chain
= { 0 };
145 static const char *entry_symbol
= 0;
146 boolean lang_has_input_file
= false;
147 boolean had_output_filename
= false;
148 boolean lang_float_flag
= false;
149 boolean delete_output_file_on_failure
= false;
151 etree_type
*base
; /* Relocation base - or null */
154 #if defined(__STDC__) || defined(ALMOST_STDC)
155 #define cat(a,b) a##b
157 #define cat(a,b) a/**/b
160 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
162 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
164 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
170 return obstack_alloc (&stat_obstack
, size
);
177 fprintf (config
.map_file
, "%5x", (unsigned) value
);
181 print_alignment (value
)
184 fprintf (config
.map_file
, "2**%1u", value
);
191 fprintf (config
.map_file
, "%04x", (unsigned) value
);
198 fprintf (config
.map_file
, "%*s", -longest_section_name
, name
);
201 /*----------------------------------------------------------------------
202 lang_for_each_statement walks the parse tree and calls the provided
203 function for each node
207 lang_for_each_statement_worker (func
, s
)
208 void (*func
) PARAMS ((lang_statement_union_type
*));
209 lang_statement_union_type
*s
;
211 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
215 switch (s
->header
.type
)
217 case lang_constructors_statement_enum
:
218 lang_for_each_statement_worker (func
, constructor_list
.head
);
220 case lang_output_section_statement_enum
:
221 lang_for_each_statement_worker
223 s
->output_section_statement
.children
.head
);
225 case lang_wild_statement_enum
:
226 lang_for_each_statement_worker
228 s
->wild_statement
.children
.head
);
230 case lang_data_statement_enum
:
231 case lang_reloc_statement_enum
:
232 case lang_object_symbols_statement_enum
:
233 case lang_output_statement_enum
:
234 case lang_target_statement_enum
:
235 case lang_input_section_enum
:
236 case lang_input_statement_enum
:
237 case lang_assignment_statement_enum
:
238 case lang_padding_statement_enum
:
239 case lang_address_statement_enum
:
249 lang_for_each_statement (func
)
250 void (*func
) PARAMS ((lang_statement_union_type
*));
252 lang_for_each_statement_worker (func
,
253 statement_list
.head
);
256 /*----------------------------------------------------------------------*/
258 lang_list_init (list
)
259 lang_statement_list_type
*list
;
261 list
->head
= (lang_statement_union_type
*) NULL
;
262 list
->tail
= &list
->head
;
265 /*----------------------------------------------------------------------
267 build a new statement node for the parse tree
272 lang_statement_union_type
*
273 new_statement (type
, size
, list
)
274 enum statement_enum type
;
276 lang_statement_list_type
* list
;
278 lang_statement_union_type
*new = (lang_statement_union_type
*)
281 new->header
.type
= type
;
282 new->header
.next
= (lang_statement_union_type
*) NULL
;
283 lang_statement_append (list
, new, &new->header
.next
);
288 Build a new input file node for the language. There are several ways
289 in which we treat an input file, eg, we only look at symbols, or
290 prefix it with a -l etc.
292 We can be supplied with requests for input files more than once;
293 they may, for example be split over serveral lines like foo.o(.text)
294 foo.o(.data) etc, so when asked for a file we check that we havn't
295 got it already so we don't duplicate the bfd.
298 static lang_input_statement_type
*
299 new_afile (name
, file_type
, target
, add_to_list
)
301 lang_input_file_enum_type file_type
;
305 lang_input_statement_type
*p
;
308 p
= new_stat (lang_input_statement
, stat_ptr
);
311 p
= ((lang_input_statement_type
*)
312 stat_alloc (sizeof (lang_input_statement_type
)));
313 p
->header
.next
= NULL
;
316 lang_has_input_file
= true;
318 p
->complained
= false;
321 case lang_input_file_is_symbols_only_enum
:
323 p
->is_archive
= false;
325 p
->local_sym_name
= name
;
326 p
->just_syms_flag
= true;
327 p
->search_dirs_flag
= false;
329 case lang_input_file_is_fake_enum
:
331 p
->is_archive
= false;
333 p
->local_sym_name
= name
;
334 p
->just_syms_flag
= false;
335 p
->search_dirs_flag
= false;
337 case lang_input_file_is_l_enum
:
338 p
->is_archive
= true;
341 p
->local_sym_name
= concat ("-l", name
, (const char *) NULL
);
342 p
->just_syms_flag
= false;
343 p
->search_dirs_flag
= true;
345 case lang_input_file_is_marker_enum
:
347 p
->is_archive
= false;
349 p
->local_sym_name
= name
;
350 p
->just_syms_flag
= false;
351 p
->search_dirs_flag
= true;
353 case lang_input_file_is_search_file_enum
:
355 p
->is_archive
= false;
357 p
->local_sym_name
= name
;
358 p
->just_syms_flag
= false;
359 p
->search_dirs_flag
= true;
361 case lang_input_file_is_file_enum
:
363 p
->is_archive
= false;
365 p
->local_sym_name
= name
;
366 p
->just_syms_flag
= false;
367 p
->search_dirs_flag
= false;
372 p
->the_bfd
= (bfd
*) NULL
;
373 p
->asymbols
= (asymbol
**) NULL
;
374 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
375 p
->next
= (lang_statement_union_type
*) NULL
;
377 p
->common_output_section
= (asection
*) NULL
;
379 lang_statement_append (&input_file_chain
,
380 (lang_statement_union_type
*) p
,
385 lang_input_statement_type
*
386 lang_add_input_file (name
, file_type
, target
)
388 lang_input_file_enum_type file_type
;
391 lang_has_input_file
= true;
392 return new_afile (name
, file_type
, target
, true);
395 /* Build enough state so that the parser can build its tree */
399 obstack_begin (&stat_obstack
, 1000);
401 stat_ptr
= &statement_list
;
403 lang_list_init (stat_ptr
);
405 lang_list_init (&input_file_chain
);
406 lang_list_init (&lang_output_section_statement
);
407 lang_list_init (&file_chain
);
408 first_file
= lang_add_input_file ((char *) NULL
,
409 lang_input_file_is_marker_enum
,
411 abs_output_section
= lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
413 abs_output_section
->bfd_section
= &bfd_abs_section
;
417 /*----------------------------------------------------------------------
418 A region is an area of memory declared with the
419 MEMORY { name:org=exp, len=exp ... }
422 We maintain a list of all the regions here
424 If no regions are specified in the script, then the default is used
425 which is created when looked up to be the entire data space
428 static lang_memory_region_type
*lang_memory_region_list
;
429 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
431 lang_memory_region_type
*
432 lang_memory_region_lookup (name
)
433 CONST
char *CONST name
;
436 lang_memory_region_type
*p
= lang_memory_region_list
;
438 for (p
= lang_memory_region_list
;
439 p
!= (lang_memory_region_type
*) NULL
;
442 if (strcmp (p
->name
, name
) == 0)
447 if (strcmp (name
, "*default*") == 0)
449 /* This is the default region, dig out first one on the list */
450 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
452 return lang_memory_region_list
;
456 lang_memory_region_type
*new =
457 (lang_memory_region_type
*) stat_alloc ((bfd_size_type
) (sizeof (lang_memory_region_type
)));
459 new->name
= buystring (name
);
460 new->next
= (lang_memory_region_type
*) NULL
;
462 *lang_memory_region_list_tail
= new;
463 lang_memory_region_list_tail
= &new->next
;
465 new->length
= ~(bfd_size_type
)0;
467 new->had_full_message
= false;
474 lang_output_section_statement_type
*
475 lang_output_section_find (name
)
476 CONST
char *CONST name
;
478 lang_statement_union_type
*u
;
479 lang_output_section_statement_type
*lookup
;
481 for (u
= lang_output_section_statement
.head
;
482 u
!= (lang_statement_union_type
*) NULL
;
485 lookup
= &u
->output_section_statement
;
486 if (strcmp (name
, lookup
->name
) == 0)
491 return (lang_output_section_statement_type
*) NULL
;
494 lang_output_section_statement_type
*
495 lang_output_section_statement_lookup (name
)
496 CONST
char *CONST name
;
498 lang_output_section_statement_type
*lookup
;
500 lookup
= lang_output_section_find (name
);
501 if (lookup
== (lang_output_section_statement_type
*) NULL
)
504 lookup
= (lang_output_section_statement_type
*)
505 new_stat (lang_output_section_statement
, stat_ptr
);
506 lookup
->region
= (lang_memory_region_type
*) NULL
;
508 lookup
->block_value
= 1;
511 lookup
->next
= (lang_statement_union_type
*) NULL
;
512 lookup
->bfd_section
= (asection
*) NULL
;
513 lookup
->processed
= false;
514 lookup
->loadable
= 1;
515 lookup
->addr_tree
= (etree_type
*) NULL
;
516 lang_list_init (&lookup
->children
);
518 lookup
->memspec
= (CONST
char *) NULL
;
520 lookup
->subsection_alignment
= -1;
521 lookup
->section_alignment
= -1;
522 lookup
->load_base
= (union etree_union
*) NULL
;
524 lang_statement_append (&lang_output_section_statement
,
525 (lang_statement_union_type
*) lookup
,
533 print_flags (ignore_flags
)
536 fprintf (config
.map_file
, "(");
538 if (flags
->flag_read
)
539 fprintf (outfile
, "R");
540 if (flags
->flag_write
)
541 fprintf (outfile
, "W");
542 if (flags
->flag_executable
)
543 fprintf (outfile
, "X");
544 if (flags
->flag_loadable
)
545 fprintf (outfile
, "L");
547 fprintf (config
.map_file
, ")");
553 lang_memory_region_type
*m
;
555 fprintf (config
.map_file
, "**MEMORY CONFIGURATION**\n\n");
557 fprintf (config
.map_file
, "name\t\torigin\t\tlength\t\tattributes\n");
559 fprintf (config
.map_file
,
560 "name\t\torigin length r_size c_size is attributes\n");
563 for (m
= lang_memory_region_list
;
564 m
!= (lang_memory_region_type
*) NULL
;
567 fprintf (config
.map_file
, "%-16s", m
->name
);
568 print_address (m
->origin
);
570 print_address ((bfd_vma
)m
->length
);
572 print_address ((bfd_vma
)m
->old_length
);
574 print_address (m
->current
- m
->origin
);
577 fprintf (config
.map_file
, " %2d%% ",
578 (int) ((m
->current
- m
->origin
) * 100 / m
->old_length
));
579 print_flags (&m
->flags
);
580 fprintf (config
.map_file
, "\n");
582 fprintf (config
.map_file
, "\n\n**LINK EDITOR MEMORY MAP**\n\n");
583 fprintf (config
.map_file
, "output input virtual\n");
584 fprintf (config
.map_file
, "section section address tsize\n\n");
595 lang_output_section_statement_type
* s
;
597 /* asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
598 section_userdata_type
*new =
599 (section_userdata_type
*)
600 stat_alloc ((bfd_size_type
) (sizeof (section_userdata_type
)));
602 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
603 if (s
->bfd_section
== (asection
*) NULL
)
604 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
605 if (s
->bfd_section
== (asection
*) NULL
)
607 einfo ("%P%F: output format %s cannot represent section called %s\n",
608 output_bfd
->xvec
->name
, s
->name
);
610 s
->bfd_section
->output_section
= s
->bfd_section
;
611 /* s->bfd_section->flags = s->flags;*/
613 /* We initialize an output sections output offset to minus its own */
614 /* vma to allow us to output a section through itself */
615 s
->bfd_section
->output_offset
= 0;
616 get_userdata (s
->bfd_section
) = (PTR
) new;
620 /***********************************************************************
623 These expand statements like *(.text) and foo.o to a list of
624 explicit actions, like foo.o(.text), bar.o(.text) and
627 The toplevel routine, wild, takes a statement, section, file and
628 target. If either the section or file is null it is taken to be the
629 wildcard. Seperate lang_input_section statements are created for
630 each part of the expanstion, and placed after the statement provided.
635 wild_doit (ptr
, section
, output
, file
)
636 lang_statement_list_type
* ptr
;
638 lang_output_section_statement_type
* output
;
639 lang_input_statement_type
* file
;
641 if (output
->bfd_section
== (asection
*) NULL
)
644 if (section
!= (asection
*) NULL
645 && section
->output_section
== (asection
*) NULL
)
647 /* Add a section reference to the list */
648 lang_input_section_type
*new = new_stat (lang_input_section
, ptr
);
650 new->section
= section
;
652 section
->output_section
= output
->bfd_section
;
654 /* We don't copy the SEC_NEVER_LOAD flag from an input section to
655 an output section, because we want to be able to include a
656 SEC_NEVER_LOAD section in the middle of an otherwise loaded
657 section (I don't know why we want to do this, but we do).
658 build_link_order in ldwrite.c handles this case by turning the
659 embedded SEC_NEVER_LOAD section into a fill. */
660 section
->output_section
->flags
|=
661 section
->flags
& (flagword
) (~ SEC_NEVER_LOAD
);
663 if (!output
->loadable
)
665 /* Turn off load flag */
666 output
->bfd_section
->flags
&= ~SEC_LOAD
;
667 output
->bfd_section
->flags
|= SEC_NEVER_LOAD
;
669 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
671 output
->bfd_section
->alignment_power
= section
->alignment_power
;
673 /* If supplied an aligmnet, then force it */
674 if (output
->section_alignment
!= -1)
676 output
->bfd_section
->alignment_power
= output
->section_alignment
;
682 wild_section (ptr
, section
, file
, output
)
683 lang_wild_statement_type
* ptr
;
685 lang_input_statement_type
* file
;
686 lang_output_section_statement_type
* output
;
690 if (file
->just_syms_flag
== false)
692 if (section
== (char *) NULL
)
694 /* Do the creation to all sections in the file */
695 for (s
= file
->the_bfd
->sections
; s
!= NULL
; s
= s
->next
)
698 if ((s
->flags
& SEC_IS_COMMON
) == 0)
700 wild_doit (&ptr
->children
, s
, output
, file
);
706 /* Do the creation to the named section only */
707 s
= bfd_get_section_by_name (file
->the_bfd
, section
);
709 wild_doit (&ptr
->children
, s
, output
, file
);
714 /* passed a file name (which must have been seen already and added to
715 the statement tree. We will see if it has been opened already and
716 had its symbols read. If not then we'll read it.
718 Archives are pecuilar here. We may open them once, but if they do
719 not define anything we need at the time, they won't have all their
720 symbols read. If we need them later, we'll have to redo it.
722 static lang_input_statement_type
*
726 lang_input_statement_type
*search
;
728 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
729 search
!= (lang_input_statement_type
*) NULL
;
730 search
= (lang_input_statement_type
*) search
->next_real_file
)
732 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
734 if (search
->filename
!= (char *) NULL
735 && name
!= (char *) NULL
736 && strcmp (search
->filename
, name
) == 0)
740 if (search
== (lang_input_statement_type
*) NULL
)
741 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
,
744 /* If we have already added this file, or this file is not real
745 (FIXME: can that ever actually happen?) or the name is NULL
746 (FIXME: can that ever actually happen?) don't add this file. */
749 || search
->filename
== (const char *) NULL
)
752 load_symbols (search
);
757 /* Get the symbols for an input file. */
761 lang_input_statement_type
*entry
;
766 ldfile_open_file (entry
);
768 if (bfd_check_format (entry
->the_bfd
, bfd_object
))
770 ldlang_add_file (entry
);
771 if (trace_files
|| trace_file_tries
)
772 info_msg ("%I\n", entry
);
774 else if (bfd_check_format (entry
->the_bfd
, bfd_archive
))
776 /* There is nothing to do here; the add_symbols routine will
777 call ldlang_add_file (via the add_archive_element callback)
778 for each element of the archive which is used. */
781 einfo ("%F%B: file not recognized: %E\n", entry
->the_bfd
);
783 if (bfd_link_add_symbols (entry
->the_bfd
, &link_info
) == false)
784 einfo ("%F%B: could not read symbols: %E\n", entry
->the_bfd
);
786 entry
->loaded
= true;
790 wild (s
, section
, file
, target
, output
)
791 lang_wild_statement_type
* s
;
795 lang_output_section_statement_type
* output
;
797 lang_input_statement_type
*f
;
799 if (file
== (char *) NULL
)
801 /* Perform the iteration over all files in the list */
802 for (f
= (lang_input_statement_type
*) file_chain
.head
;
803 f
!= (lang_input_statement_type
*) NULL
;
804 f
= (lang_input_statement_type
*) f
->next
)
806 wild_section (s
, section
, f
, output
);
811 /* Perform the iteration over a single file */
812 wild_section (s
, section
, lookup_name (file
), output
);
814 if (section
!= (char *) NULL
815 && strcmp (section
, "COMMON") == 0
816 && default_common_section
== (lang_output_section_statement_type
*) NULL
)
818 /* Remember the section that common is going to incase we later
819 get something which doesn't know where to put it */
820 default_common_section
= output
;
825 read in all the files
834 if (output_target
== (char *) NULL
)
836 if (current_target
!= (char *) NULL
)
837 output_target
= current_target
;
839 output_target
= default_target
;
841 output
= bfd_openw (name
, output_target
);
843 if (output
== (bfd
*) NULL
)
845 if (bfd_get_error () == bfd_error_invalid_target
)
847 einfo ("%P%F: target %s not found\n", output_target
);
849 einfo ("%P%F: cannot open output file %s: %E\n", name
);
852 delete_output_file_on_failure
= 1;
854 /* output->flags |= D_PAGED;*/
856 if (! bfd_set_format (output
, bfd_object
))
857 einfo ("%P%F:%s: can not make object file: %E\n", name
);
858 if (! bfd_set_arch_mach (output
,
859 ldfile_output_architecture
,
860 ldfile_output_machine
))
861 einfo ("%P%F:%s: can not set architecture: %E\n", name
);
863 link_info
.hash
= bfd_link_hash_table_create (output
);
864 if (link_info
.hash
== (struct bfd_link_hash_table
*) NULL
)
865 einfo ("%P%F: can not create link hash table: %E\n");
867 bfd_set_gp_size (output
, g_switch_value
);
875 ldlang_open_output (statement
)
876 lang_statement_union_type
* statement
;
878 switch (statement
->header
.type
)
880 case lang_output_statement_enum
:
881 ASSERT (output_bfd
== (bfd
*) NULL
);
882 output_bfd
= open_output (statement
->output_statement
.name
);
883 ldemul_set_output_arch ();
884 if (config
.magic_demand_paged
&& !link_info
.relocateable
)
885 output_bfd
->flags
|= D_PAGED
;
887 output_bfd
->flags
&= ~D_PAGED
;
888 if (config
.text_read_only
)
889 output_bfd
->flags
|= WP_TEXT
;
891 output_bfd
->flags
&= ~WP_TEXT
;
892 if (config
.traditional_format
)
893 output_bfd
->flags
|= BFD_TRADITIONAL_FORMAT
;
895 output_bfd
->flags
&= ~BFD_TRADITIONAL_FORMAT
;
898 case lang_target_statement_enum
:
899 current_target
= statement
->target_statement
.target
;
907 open_input_bfds (statement
)
908 lang_statement_union_type
* statement
;
910 switch (statement
->header
.type
)
912 case lang_target_statement_enum
:
913 current_target
= statement
->target_statement
.target
;
915 case lang_wild_statement_enum
:
916 /* Maybe we should load the file's symbols */
917 if (statement
->wild_statement
.filename
)
919 (void) lookup_name (statement
->wild_statement
.filename
);
922 case lang_input_statement_enum
:
923 if (statement
->input_statement
.real
== true)
925 statement
->input_statement
.target
= current_target
;
926 load_symbols (&statement
->input_statement
);
934 /* If there are [COMMONS] statements, put a wild one into the bss section */
937 lang_reasonable_defaults ()
940 lang_output_section_statement_lookup (".text");
941 lang_output_section_statement_lookup (".data");
943 default_common_section
=
944 lang_output_section_statement_lookup (".bss");
947 if (placed_commons
== false)
949 lang_wild_statement_type
*new =
950 new_stat (lang_wild_statement
,
951 &default_common_section
->children
);
953 new->section_name
= "COMMON";
954 new->filename
= (char *) NULL
;
955 lang_list_init (&new->children
);
962 Add the supplied name to the symbol table as an undefined reference.
963 Remove items from the chain as we open input bfds
965 typedef struct ldlang_undef_chain_list
967 struct ldlang_undef_chain_list
*next
;
969 } ldlang_undef_chain_list_type
;
971 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
974 ldlang_add_undef (name
)
975 CONST
char *CONST name
;
977 ldlang_undef_chain_list_type
*new =
978 (ldlang_undef_chain_list_type
979 *) stat_alloc ((bfd_size_type
) (sizeof (ldlang_undef_chain_list_type
)));
981 new->next
= ldlang_undef_chain_list_head
;
982 ldlang_undef_chain_list_head
= new;
984 new->name
= buystring (name
);
987 /* Run through the list of undefineds created above and place them
988 into the linker hash table as undefined symbols belonging to the
992 lang_place_undefineds ()
994 ldlang_undef_chain_list_type
*ptr
;
996 for (ptr
= ldlang_undef_chain_list_head
;
997 ptr
!= (ldlang_undef_chain_list_type
*) NULL
;
1000 struct bfd_link_hash_entry
*h
;
1002 h
= bfd_link_hash_lookup (link_info
.hash
, ptr
->name
, true, false, true);
1003 if (h
== (struct bfd_link_hash_entry
*) NULL
)
1004 einfo ("%P%F: bfd_link_hash_lookup failed: %E");
1005 if (h
->type
== bfd_link_hash_new
)
1007 h
->type
= bfd_link_hash_undefined
;
1008 h
->u
.undef
.abfd
= NULL
;
1009 bfd_link_add_undef (link_info
.hash
, h
);
1014 /* Open input files and attatch to output sections */
1016 map_input_to_output_sections (s
, target
, output_section_statement
)
1017 lang_statement_union_type
* s
;
1019 lang_output_section_statement_type
* output_section_statement
;
1021 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1023 switch (s
->header
.type
)
1027 case lang_wild_statement_enum
:
1028 wild (&s
->wild_statement
, s
->wild_statement
.section_name
,
1029 s
->wild_statement
.filename
, target
,
1030 output_section_statement
);
1033 case lang_constructors_statement_enum
:
1034 map_input_to_output_sections (constructor_list
.head
,
1036 output_section_statement
);
1038 case lang_output_section_statement_enum
:
1039 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
1041 &s
->output_section_statement
);
1043 case lang_output_statement_enum
:
1045 case lang_target_statement_enum
:
1046 target
= s
->target_statement
.target
;
1048 case lang_fill_statement_enum
:
1049 case lang_input_section_enum
:
1050 case lang_object_symbols_statement_enum
:
1051 case lang_data_statement_enum
:
1052 case lang_reloc_statement_enum
:
1053 case lang_assignment_statement_enum
:
1054 case lang_padding_statement_enum
:
1055 case lang_input_statement_enum
:
1056 if (output_section_statement
!= NULL
1057 && output_section_statement
->bfd_section
== NULL
)
1058 init_os (output_section_statement
);
1060 case lang_afile_asection_pair_statement_enum
:
1063 case lang_address_statement_enum
:
1064 /* Mark the specified section with the supplied address */
1066 lang_output_section_statement_type
*os
=
1067 lang_output_section_statement_lookup
1068 (s
->address_statement
.section_name
);
1070 if (os
->bfd_section
== NULL
)
1072 os
->addr_tree
= s
->address_statement
.address
;
1080 print_output_section_statement (output_section_statement
)
1081 lang_output_section_statement_type
* output_section_statement
;
1083 asection
*section
= output_section_statement
->bfd_section
;
1086 print_section (output_section_statement
->name
);
1091 print_dot
= section
->vma
;
1095 print_address (section
->vma
);
1097 print_size (section
->_raw_size
);
1099 print_size(section
->_cooked_size
);
1101 print_alignment (section
->alignment_power
);
1104 fprintf (config
.map_file
, "%s flags", output_section_statement
->region
->name
);
1105 print_flags (stdout
, &output_section_statement
->flags
);
1107 if (section
->flags
& SEC_LOAD
)
1108 fprintf (config
.map_file
, "load ");
1109 if (section
->flags
& SEC_ALLOC
)
1110 fprintf (config
.map_file
, "alloc ");
1111 if (section
->flags
& SEC_RELOC
)
1112 fprintf (config
.map_file
, "reloc ");
1113 if (section
->flags
& SEC_HAS_CONTENTS
)
1114 fprintf (config
.map_file
, "contents ");
1119 fprintf (config
.map_file
, " (no attached output section)");
1122 if (output_section_statement
->load_base
)
1124 int b
= exp_get_value_int(output_section_statement
->load_base
,
1125 0, "output base", lang_final_phase_enum
);
1126 printf("Output address %08x\n", b
);
1128 if (output_section_statement
->section_alignment
>= 0
1129 || output_section_statement
->section_alignment
>= 0)
1131 printf("\t\t\t\t\tforced alignment ");
1132 if ( output_section_statement
->section_alignment
>= 0)
1134 printf("section 2**%d ",output_section_statement
->section_alignment
);
1136 if ( output_section_statement
->subsection_alignment
>= 0)
1138 printf("subsection 2**%d ",output_section_statement
->subsection_alignment
);
1143 print_statement (output_section_statement
->children
.head
,
1144 output_section_statement
);
1149 print_assignment (assignment
, output_section
)
1150 lang_assignment_statement_type
* assignment
;
1151 lang_output_section_statement_type
* output_section
;
1153 etree_value_type result
;
1159 print_address (print_dot
);
1161 result
= exp_fold_tree (assignment
->exp
->assign
.src
,
1163 lang_final_phase_enum
,
1169 print_address (result
.value
);
1173 fprintf (config
.map_file
, "*undefined*");
1176 exp_print_tree (assignment
->exp
);
1178 fprintf (config
.map_file
, "\n");
1182 print_input_statement (statm
)
1183 lang_input_statement_type
* statm
;
1185 if (statm
->filename
!= (char *) NULL
)
1187 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
1191 /* Print all the defined symbols for the abfd provided by in the supplied
1196 print_one_symbol (hash_entry
, ptr
)
1197 struct bfd_link_hash_entry
*hash_entry
;
1200 asection
* sec
= (asection
*)ptr
;
1202 if (hash_entry
->type
== bfd_link_hash_defined
)
1204 if (sec
== hash_entry
->u
.def
.section
) {
1206 fprintf (config
.map_file
, " ");
1208 fprintf (config
.map_file
, " ");
1209 print_address (hash_entry
->u
.def
.value
+ outside_section_address (sec
));
1210 fprintf (config
.map_file
, " %s", hash_entry
->root
.string
);
1219 print_input_section (in
)
1220 lang_input_section_type
* in
;
1222 asection
*i
= in
->section
;
1223 bfd_size_type size
= i
->_cooked_size
!= 0 ? i
->_cooked_size
: i
->_raw_size
;
1228 fprintf (config
.map_file
, " ");
1229 print_section (i
->name
);
1230 fprintf (config
.map_file
, " ");
1231 if (i
->output_section
)
1233 print_address (i
->output_section
->vma
+ i
->output_offset
);
1234 fprintf (config
.map_file
, " ");
1235 print_size (i
->_raw_size
);
1236 fprintf (config
.map_file
, " ");
1237 print_size(i
->_cooked_size
);
1238 fprintf (config
.map_file
, " ");
1239 print_alignment (i
->alignment_power
);
1240 fprintf (config
.map_file
, " ");
1244 bfd
*abfd
= in
->ifile
->the_bfd
;
1246 if (in
->ifile
->just_syms_flag
== true)
1248 fprintf (config
.map_file
, "symbols only ");
1251 fprintf (config
.map_file
, " %s ", abfd
->xvec
->name
);
1252 if (abfd
->my_archive
!= (bfd
*) NULL
)
1254 fprintf (config
.map_file
, "[%s]%s", abfd
->my_archive
->filename
,
1259 fprintf (config
.map_file
, "%s", abfd
->filename
);
1261 fprintf (config
.map_file
, "(overhead %d bytes)", (int) bfd_alloc_size (abfd
));
1264 /* Print all the symbols */
1265 bfd_link_hash_traverse (link_info
.hash
, print_one_symbol
, (PTR
) i
);
1273 print_dot
= outside_section_address (i
) + size
;
1277 fprintf (config
.map_file
, "No output section allocated\n");
1283 print_fill_statement (fill
)
1284 lang_fill_statement_type
* fill
;
1286 fprintf (config
.map_file
, "FILL mask ");
1287 print_fill (fill
->fill
);
1291 print_data_statement (data
)
1292 lang_data_statement_type
* data
;
1294 /* bfd_vma value; */
1299 /* ASSERT(print_dot == data->output_vma);*/
1301 print_address (data
->output_vma
+ data
->output_section
->vma
);
1303 print_address (data
->value
);
1308 fprintf (config
.map_file
, "BYTE ");
1309 print_dot
+= BYTE_SIZE
;
1312 fprintf (config
.map_file
, "SHORT ");
1313 print_dot
+= SHORT_SIZE
;
1316 fprintf (config
.map_file
, "LONG ");
1317 print_dot
+= LONG_SIZE
;
1320 fprintf (config
.map_file
, "QUAD ");
1321 print_dot
+= QUAD_SIZE
;
1325 exp_print_tree (data
->exp
);
1327 fprintf (config
.map_file
, "\n");
1330 /* Print a reloc statement. */
1333 print_reloc_statement (reloc
)
1334 lang_reloc_statement_type
*reloc
;
1341 /* ASSERT(print_dot == data->output_vma);*/
1343 print_address (reloc
->output_vma
+ reloc
->output_section
->vma
);
1345 print_address (reloc
->addend_value
);
1348 fprintf (config
.map_file
, "RELOC %s ", reloc
->howto
->name
);
1350 print_dot
+= bfd_get_reloc_size (reloc
->howto
);
1352 exp_print_tree (reloc
->addend_exp
);
1354 fprintf (config
.map_file
, "\n");
1358 print_padding_statement (s
)
1359 lang_padding_statement_type
* s
;
1363 print_section ("*fill*");
1365 print_address (s
->output_offset
+ s
->output_section
->vma
);
1367 print_size (s
->size
);
1369 print_fill (s
->fill
);
1372 print_dot
= s
->output_offset
+ s
->output_section
->vma
+ s
->size
;
1377 print_wild_statement (w
, os
)
1378 lang_wild_statement_type
* w
;
1379 lang_output_section_statement_type
* os
;
1381 fprintf (config
.map_file
, " from ");
1382 if (w
->filename
!= (char *) NULL
)
1384 fprintf (config
.map_file
, "%s", w
->filename
);
1388 fprintf (config
.map_file
, "*");
1390 if (w
->section_name
!= (char *) NULL
)
1392 fprintf (config
.map_file
, "(%s)", w
->section_name
);
1396 fprintf (config
.map_file
, "(*)");
1399 print_statement (w
->children
.head
, os
);
1403 print_statement (s
, os
)
1404 lang_statement_union_type
* s
;
1405 lang_output_section_statement_type
* os
;
1409 switch (s
->header
.type
)
1411 case lang_constructors_statement_enum
:
1412 fprintf (config
.map_file
, "constructors:\n");
1413 print_statement (constructor_list
.head
, os
);
1415 case lang_wild_statement_enum
:
1416 print_wild_statement (&s
->wild_statement
, os
);
1419 fprintf (config
.map_file
, "Fail with %d\n", s
->header
.type
);
1422 case lang_address_statement_enum
:
1423 fprintf (config
.map_file
, "address\n");
1425 case lang_object_symbols_statement_enum
:
1426 fprintf (config
.map_file
, "object symbols\n");
1428 case lang_fill_statement_enum
:
1429 print_fill_statement (&s
->fill_statement
);
1431 case lang_data_statement_enum
:
1432 print_data_statement (&s
->data_statement
);
1434 case lang_reloc_statement_enum
:
1435 print_reloc_statement (&s
->reloc_statement
);
1437 case lang_input_section_enum
:
1438 print_input_section (&s
->input_section
);
1440 case lang_padding_statement_enum
:
1441 print_padding_statement (&s
->padding_statement
);
1443 case lang_output_section_statement_enum
:
1444 print_output_section_statement (&s
->output_section_statement
);
1446 case lang_assignment_statement_enum
:
1447 print_assignment (&s
->assignment_statement
,
1450 case lang_target_statement_enum
:
1451 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
1453 case lang_output_statement_enum
:
1454 fprintf (config
.map_file
, "OUTPUT(%s %s)\n",
1455 s
->output_statement
.name
,
1456 output_target
? output_target
: "");
1458 case lang_input_statement_enum
:
1459 print_input_statement (&s
->input_statement
);
1461 case lang_afile_asection_pair_statement_enum
:
1473 print_statement (statement_list
.head
,
1474 abs_output_section
);
1479 insert_pad (this_ptr
, fill
, power
, output_section_statement
, dot
)
1480 lang_statement_union_type
** this_ptr
;
1483 asection
* output_section_statement
;
1486 /* Align this section first to the
1487 input sections requirement, then
1488 to the output section's requirement.
1489 If this alignment is > than any seen before,
1490 then record it too. Perform the alignment by
1491 inserting a magic 'padding' statement.
1494 unsigned int alignment_needed
= align_power (dot
, power
) - dot
;
1496 if (alignment_needed
!= 0)
1498 lang_statement_union_type
*new =
1499 (lang_statement_union_type
*)
1500 stat_alloc ((bfd_size_type
) (sizeof (lang_padding_statement_type
)));
1502 /* Link into existing chain */
1503 new->header
.next
= *this_ptr
;
1505 new->header
.type
= lang_padding_statement_enum
;
1506 new->padding_statement
.output_section
= output_section_statement
;
1507 new->padding_statement
.output_offset
=
1508 dot
- output_section_statement
->vma
;
1509 new->padding_statement
.fill
= fill
;
1510 new->padding_statement
.size
= alignment_needed
;
1514 /* Remember the most restrictive alignment */
1515 if (power
> output_section_statement
->alignment_power
)
1517 output_section_statement
->alignment_power
= power
;
1519 output_section_statement
->_raw_size
+= alignment_needed
;
1520 return alignment_needed
+ dot
;
1524 /* Work out how much this section will move the dot point */
1526 size_input_section (this_ptr
, output_section_statement
, fill
, dot
, relax
)
1527 lang_statement_union_type
** this_ptr
;
1528 lang_output_section_statement_type
* output_section_statement
;
1533 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
1534 asection
*i
= is
->section
;
1536 if (is
->ifile
->just_syms_flag
== false)
1538 if (output_section_statement
->subsection_alignment
!= -1)
1539 i
->alignment_power
=
1540 output_section_statement
->subsection_alignment
;
1542 dot
= insert_pad (this_ptr
, fill
, i
->alignment_power
,
1543 output_section_statement
->bfd_section
, dot
);
1545 /* Remember where in the output section this input section goes */
1547 i
->output_offset
= dot
- output_section_statement
->bfd_section
->vma
;
1549 /* Mark how big the output section must be to contain this now
1551 if (i
->_cooked_size
!= 0)
1552 dot
+= i
->_cooked_size
;
1554 dot
+= i
->_raw_size
;
1555 output_section_statement
->bfd_section
->_raw_size
= dot
- output_section_statement
->bfd_section
->vma
;
1559 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
1565 /* This variable indicates whether bfd_relax_section should be called
1568 static boolean relax_again
;
1570 /* Set the sizes for all the output sections. */
1573 lang_size_sections (s
, output_section_statement
, prev
, fill
, dot
, relax
)
1574 lang_statement_union_type
* s
;
1575 lang_output_section_statement_type
* output_section_statement
;
1576 lang_statement_union_type
** prev
;
1581 /* Size up the sections from their constituent parts */
1582 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1584 switch (s
->header
.type
)
1587 case lang_output_section_statement_enum
:
1590 lang_output_section_statement_type
*os
= &s
->output_section_statement
;
1592 if (os
->bfd_section
== NULL
)
1594 /* This section was never actually created. */
1598 /* If this is a COFF shared library section, use the size and
1599 address from the input section. FIXME: This is COFF
1600 specific; it would be cleaner if there were some other way
1601 to do this, but nothing simple comes to mind. */
1602 if ((os
->bfd_section
->flags
& SEC_COFF_SHARED_LIBRARY
) != 0)
1606 if (os
->children
.head
== NULL
1607 || os
->children
.head
->next
!= NULL
1608 || os
->children
.head
->header
.type
!= lang_input_section_enum
)
1609 einfo ("%P%X: Internal error on COFF shared library section %s",
1612 input
= os
->children
.head
->input_section
.section
;
1613 bfd_set_section_vma (os
->bfd_section
->owner
,
1615 bfd_section_vma (input
->owner
, input
));
1616 os
->bfd_section
->_raw_size
= input
->_raw_size
;
1620 if (os
->bfd_section
== &bfd_abs_section
)
1622 /* No matter what happens, an abs section starts at zero */
1623 bfd_set_section_vma (0, os
->bfd_section
, 0);
1627 if (os
->addr_tree
== (etree_type
*) NULL
)
1629 /* No address specified for this section, get one
1630 from the region specification
1632 if (os
->region
== (lang_memory_region_type
*) NULL
)
1634 os
->region
= lang_memory_region_lookup ("*default*");
1636 dot
= os
->region
->current
;
1637 if (os
->section_alignment
== -1)
1638 dot
= align_power (dot
, os
->bfd_section
->alignment_power
);
1644 r
= exp_fold_tree (os
->addr_tree
,
1646 lang_allocating_phase_enum
,
1648 if (r
.valid
== false)
1650 einfo ("%F%S: non constant address expression for section %s\n",
1655 /* The section starts here */
1656 /* First, align to what the section needs */
1658 if (os
->section_alignment
!= -1)
1659 dot
= align_power (dot
, os
->section_alignment
);
1661 bfd_set_section_vma (0, os
->bfd_section
, dot
);
1663 if (os
->load_base
) {
1664 os
->bfd_section
->lma
1665 = exp_get_value_int(os
->load_base
, 0,"load base", lang_final_phase_enum
);
1670 os
->bfd_section
->output_offset
= 0;
1672 (void) lang_size_sections (os
->children
.head
, os
, &os
->children
.head
,
1673 os
->fill
, dot
, relax
);
1674 /* Ignore the size of the input sections, use the vma and size to */
1677 after
= ALIGN_N (os
->bfd_section
->vma
+
1678 os
->bfd_section
->_raw_size
,
1679 /* The coercion here is important, see ld.h. */
1680 (bfd_vma
) os
->block_value
);
1682 os
->bfd_section
->_raw_size
= after
- os
->bfd_section
->vma
;
1683 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
1684 os
->processed
= true;
1686 /* Replace into region ? */
1687 if (os
->addr_tree
== (etree_type
*) NULL
1688 && os
->region
!= (lang_memory_region_type
*) NULL
)
1690 os
->region
->current
= dot
;
1691 /* Make sure this isn't silly */
1692 if (( os
->region
->current
1693 > os
->region
->origin
+ os
->region
->length
)
1694 || ( os
->region
->origin
> os
->region
->current
))
1696 einfo ("%X%P: region %s is full (%B section %s)\n",
1698 os
->bfd_section
->owner
,
1699 os
->bfd_section
->name
);
1700 /* Reset the region pointer */
1701 os
->region
->current
= 0;
1709 case lang_constructors_statement_enum
:
1710 dot
= lang_size_sections (constructor_list
.head
,
1711 output_section_statement
,
1712 &s
->wild_statement
.children
.head
,
1717 case lang_data_statement_enum
:
1719 unsigned int size
= 0;
1721 s
->data_statement
.output_vma
= dot
- output_section_statement
->bfd_section
->vma
;
1722 s
->data_statement
.output_section
=
1723 output_section_statement
->bfd_section
;
1725 switch (s
->data_statement
.type
)
1742 output_section_statement
->bfd_section
->_raw_size
+= size
;
1746 case lang_reloc_statement_enum
:
1750 s
->reloc_statement
.output_vma
=
1751 dot
- output_section_statement
->bfd_section
->vma
;
1752 s
->reloc_statement
.output_section
=
1753 output_section_statement
->bfd_section
;
1754 size
= bfd_get_reloc_size (s
->reloc_statement
.howto
);
1756 output_section_statement
->bfd_section
->_raw_size
+= size
;
1760 case lang_wild_statement_enum
:
1762 dot
= lang_size_sections (s
->wild_statement
.children
.head
,
1763 output_section_statement
,
1764 &s
->wild_statement
.children
.head
,
1770 case lang_object_symbols_statement_enum
:
1771 link_info
.create_object_symbols_section
=
1772 output_section_statement
->bfd_section
;
1774 case lang_output_statement_enum
:
1775 case lang_target_statement_enum
:
1777 case lang_input_section_enum
:
1781 i
= (*prev
)->input_section
.section
;
1783 i
->_cooked_size
= i
->_raw_size
;
1788 if (! bfd_relax_section (i
->owner
, i
, &link_info
, &again
))
1789 einfo ("%P%F: can't relax section: %E\n");
1793 dot
= size_input_section (prev
,
1794 output_section_statement
,
1795 output_section_statement
->fill
,
1799 case lang_input_statement_enum
:
1801 case lang_fill_statement_enum
:
1802 s
->fill_statement
.output_section
= output_section_statement
->bfd_section
;
1804 fill
= s
->fill_statement
.fill
;
1806 case lang_assignment_statement_enum
:
1808 bfd_vma newdot
= dot
;
1810 exp_fold_tree (s
->assignment_statement
.exp
,
1811 output_section_statement
,
1812 lang_allocating_phase_enum
,
1816 if (newdot
!= dot
&& !relax
)
1818 /* The assignment changed dot. Insert a pad. */
1819 if (output_section_statement
== abs_output_section
)
1821 /* If we don't have an output section, then just adjust
1822 the default memory address. */
1823 lang_memory_region_lookup ("*default*")->current
= newdot
;
1827 lang_statement_union_type
*new =
1828 ((lang_statement_union_type
*)
1829 stat_alloc (sizeof (lang_padding_statement_type
)));
1831 /* Link into existing chain */
1832 new->header
.next
= *prev
;
1834 new->header
.type
= lang_padding_statement_enum
;
1835 new->padding_statement
.output_section
=
1836 output_section_statement
->bfd_section
;
1837 new->padding_statement
.output_offset
=
1838 dot
- output_section_statement
->bfd_section
->vma
;
1839 new->padding_statement
.fill
= fill
;
1840 new->padding_statement
.size
= newdot
- dot
;
1841 output_section_statement
->bfd_section
->_raw_size
+=
1842 new->padding_statement
.size
;
1850 case lang_padding_statement_enum
:
1851 /* If we are relaxing, and this is not the first pass, some
1852 padding statements may have been inserted during previous
1853 passes. We may have to move the padding statement to a new
1854 location if dot has a different value at this point in this
1855 pass than it did at this point in the previous pass. */
1856 s
->padding_statement
.output_offset
=
1857 dot
- output_section_statement
->bfd_section
->vma
;
1858 dot
+= s
->padding_statement
.size
;
1865 /* This can only get here when relaxing is turned on */
1867 case lang_address_statement_enum
:
1870 prev
= &s
->header
.next
;
1876 lang_do_assignments (s
, output_section_statement
, fill
, dot
)
1877 lang_statement_union_type
* s
;
1878 lang_output_section_statement_type
* output_section_statement
;
1882 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1884 switch (s
->header
.type
)
1886 case lang_constructors_statement_enum
:
1887 dot
= lang_do_assignments (constructor_list
.head
,
1888 output_section_statement
,
1893 case lang_output_section_statement_enum
:
1895 lang_output_section_statement_type
*os
=
1896 &(s
->output_section_statement
);
1898 if (os
->bfd_section
!= NULL
)
1900 dot
= os
->bfd_section
->vma
;
1901 (void) lang_do_assignments (os
->children
.head
, os
,
1903 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
1907 case lang_wild_statement_enum
:
1909 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
1910 output_section_statement
,
1915 case lang_object_symbols_statement_enum
:
1916 case lang_output_statement_enum
:
1917 case lang_target_statement_enum
:
1919 case lang_common_statement_enum
:
1922 case lang_data_statement_enum
:
1924 etree_value_type value
;
1926 value
= exp_fold_tree (s
->data_statement
.exp
,
1928 lang_final_phase_enum
, dot
, &dot
);
1929 s
->data_statement
.value
= value
.value
;
1930 if (value
.valid
== false)
1931 einfo ("%F%P: invalid data statement\n");
1933 switch (s
->data_statement
.type
)
1950 case lang_reloc_statement_enum
:
1952 etree_value_type value
;
1954 value
= exp_fold_tree (s
->reloc_statement
.addend_exp
,
1956 lang_final_phase_enum
, dot
, &dot
);
1957 s
->reloc_statement
.addend_value
= value
.value
;
1958 if (value
.valid
== false)
1959 einfo ("%F%P: invalid reloc statement\n");
1961 dot
+= bfd_get_reloc_size (s
->reloc_statement
.howto
);
1964 case lang_input_section_enum
:
1966 asection
*in
= s
->input_section
.section
;
1968 if (in
->_cooked_size
!= 0)
1969 dot
+= in
->_cooked_size
;
1971 dot
+= in
->_raw_size
;
1975 case lang_input_statement_enum
:
1977 case lang_fill_statement_enum
:
1978 fill
= s
->fill_statement
.fill
;
1980 case lang_assignment_statement_enum
:
1982 exp_fold_tree (s
->assignment_statement
.exp
,
1983 output_section_statement
,
1984 lang_final_phase_enum
,
1990 case lang_padding_statement_enum
:
1991 dot
+= s
->padding_statement
.size
;
1996 case lang_address_statement_enum
:
2007 struct bfd_link_hash_entry
*h
;
2008 boolean warn
= link_info
.relocateable
? false : true;
2010 if (entry_symbol
== (char *) NULL
)
2012 /* No entry has been specified. Look for start, but don't warn
2013 if we don't find it. */
2014 entry_symbol
= "start";
2018 h
= bfd_link_hash_lookup (link_info
.hash
, entry_symbol
, false, false, true);
2019 if (h
!= (struct bfd_link_hash_entry
*) NULL
2020 && h
->type
== bfd_link_hash_defined
)
2024 val
= (h
->u
.def
.value
2025 + bfd_get_section_vma (output_bfd
,
2026 h
->u
.def
.section
->output_section
)
2027 + h
->u
.def
.section
->output_offset
);
2028 if (! bfd_set_start_address (output_bfd
, val
))
2029 einfo ("%P%F:%s: can't set start address\n", entry_symbol
);
2035 /* Can't find the entry symbol. Use the first address in the
2037 ts
= bfd_get_section_by_name (output_bfd
, ".text");
2038 if (ts
!= (asection
*) NULL
)
2041 einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n",
2042 entry_symbol
, bfd_get_section_vma (output_bfd
, ts
));
2043 if (! bfd_set_start_address (output_bfd
,
2044 bfd_get_section_vma (output_bfd
, ts
)))
2045 einfo ("%P%F: can't set start address\n");
2050 einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n",
2056 /* By now we know the target architecture, and we may have an */
2057 /* ldfile_output_machine_name */
2061 lang_statement_union_type
*file
;
2063 unsigned long input_machine
;
2064 enum bfd_architecture input_architecture
;
2065 CONST bfd_arch_info_type
*compatible
;
2067 for (file
= file_chain
.head
;
2068 file
!= (lang_statement_union_type
*) NULL
;
2069 file
= file
->input_statement
.next
)
2071 input_bfd
= file
->input_statement
.the_bfd
;
2073 input_machine
= bfd_get_mach (input_bfd
);
2074 input_architecture
= bfd_get_arch (input_bfd
);
2077 /* Inspect the architecture and ensure we're linking like with
2080 compatible
= bfd_arch_get_compatible (input_bfd
,
2085 ldfile_output_machine
= compatible
->mach
;
2086 ldfile_output_architecture
= compatible
->arch
;
2091 einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n",
2092 bfd_printable_name (input_bfd
), input_bfd
,
2093 bfd_printable_name (output_bfd
));
2095 if (! bfd_set_arch_mach (output_bfd
,
2098 einfo ("%P%F:%s: can't set architecture: %E\n",
2099 bfd_get_filename (output_bfd
));
2105 /* Look through all the global common symbols and attach them to the
2106 correct section. The -sort-common command line switch may be used
2107 to roughly sort the entries by size. */
2112 if (link_info
.relocateable
2113 && ! command_line
.force_common_definition
)
2116 if (! config
.sort_common
)
2117 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
, (PTR
) NULL
);
2122 for (power
= 1; power
<= 16; power
<<= 1)
2123 bfd_link_hash_traverse (link_info
.hash
, lang_one_common
,
2128 /* Place one common symbol in the correct section. */
2131 lang_one_common (h
, info
)
2132 struct bfd_link_hash_entry
*h
;
2135 unsigned int power_of_two
;
2140 if (h
->type
!= bfd_link_hash_common
)
2173 if (config
.sort_common
&& align
!= *(unsigned int *) info
)
2176 section
= h
->u
.c
.section
;
2178 /* Increase the size of the section. */
2179 section
->_raw_size
= ALIGN_N (section
->_raw_size
, align
);
2181 /* Adjust the alignment if necessary. */
2182 if (power_of_two
> section
->alignment_power
)
2183 section
->alignment_power
= power_of_two
;
2185 /* Change the symbol from common to defined. */
2186 h
->type
= bfd_link_hash_defined
;
2187 h
->u
.def
.section
= section
;
2188 h
->u
.def
.value
= section
->_raw_size
;
2190 /* Increase the size of the section. */
2191 section
->_raw_size
+= size
;
2193 if (config
.map_file
!= NULL
)
2194 fprintf (config
.map_file
, "Allocating common %s: %lx at %lx %s\n",
2195 h
->root
.string
, (unsigned long) size
,
2196 (unsigned long) h
->u
.def
.value
, section
->owner
->filename
);
2202 run through the input files and ensure that every input
2203 section has somewhere to go. If one is found without
2204 a destination then create an input request and place it
2205 into the statement tree.
2209 lang_place_orphans ()
2211 lang_input_statement_type
*file
;
2213 for (file
= (lang_input_statement_type
*) file_chain
.head
;
2214 file
!= (lang_input_statement_type
*) NULL
;
2215 file
= (lang_input_statement_type
*) file
->next
)
2219 if (file
->just_syms_flag
)
2222 for (s
= file
->the_bfd
->sections
;
2223 s
!= (asection
*) NULL
;
2226 if (s
->output_section
== (asection
*) NULL
)
2228 /* This section of the file is not attatched, root
2229 around for a sensible place for it to go */
2231 if (file
->common_section
== s
)
2233 /* This is a lonely common section which must
2234 have come from an archive. We attatch to the
2235 section with the wildcard */
2236 if (! link_info
.relocateable
2237 && ! command_line
.force_common_definition
)
2239 if (default_common_section
==
2240 (lang_output_section_statement_type
*) NULL
)
2242 info_msg ("%P: no [COMMON] command, defaulting to .bss\n");
2244 default_common_section
=
2245 lang_output_section_statement_lookup (".bss");
2248 wild_doit (&default_common_section
->children
, s
,
2249 default_common_section
, file
);
2254 lang_output_section_statement_type
*os
=
2255 lang_output_section_statement_lookup (s
->name
);
2257 wild_doit (&os
->children
, s
, os
, file
);
2266 lang_set_flags (ptr
, flags
)
2270 boolean state
= false;
2285 /* ptr->flag_read = state; */
2288 /* ptr->flag_write = state; */
2291 /* ptr->flag_executable= state;*/
2295 /* ptr->flag_loadable= state;*/
2298 einfo ("%P%F: invalid syntax in flags\n");
2305 /* Call a function on each input file. This function will be called
2306 on an archive, but not on the elements. */
2309 lang_for_each_input_file (func
)
2310 void (*func
) PARAMS ((lang_input_statement_type
*));
2312 lang_input_statement_type
*f
;
2314 for (f
= (lang_input_statement_type
*) input_file_chain
.head
;
2316 f
= (lang_input_statement_type
*) f
->next_real_file
)
2320 /* Call a function on each file. The function will be called on all
2321 the elements of an archive which are included in the link, but will
2322 not be called on the archive file itself. */
2325 lang_for_each_file (func
)
2326 void (*func
) PARAMS ((lang_input_statement_type
*));
2328 lang_input_statement_type
*f
;
2330 for (f
= (lang_input_statement_type
*) file_chain
.head
;
2331 f
!= (lang_input_statement_type
*) NULL
;
2332 f
= (lang_input_statement_type
*) f
->next
)
2343 lang_for_each_input_section (func
)
2344 void (*func
) PARAMS ((bfd
* ab
, asection
* as
));
2346 lang_input_statement_type
*f
;
2348 for (f
= (lang_input_statement_type
*) file_chain
.head
;
2349 f
!= (lang_input_statement_type
*) NULL
;
2350 f
= (lang_input_statement_type
*) f
->next
)
2354 for (s
= f
->the_bfd
->sections
;
2355 s
!= (asection
*) NULL
;
2358 func (f
->the_bfd
, s
);
2366 ldlang_add_file (entry
)
2367 lang_input_statement_type
* entry
;
2371 lang_statement_append (&file_chain
,
2372 (lang_statement_union_type
*) entry
,
2375 /* The BFD linker needs to have a list of all input BFDs involved in
2377 ASSERT (entry
->the_bfd
->link_next
== (bfd
*) NULL
);
2378 ASSERT (entry
->the_bfd
!= output_bfd
);
2379 for (pp
= &link_info
.input_bfds
;
2380 *pp
!= (bfd
*) NULL
;
2381 pp
= &(*pp
)->link_next
)
2383 *pp
= entry
->the_bfd
;
2384 entry
->the_bfd
->usrdata
= (PTR
) entry
;
2385 bfd_set_gp_size (entry
->the_bfd
, g_switch_value
);
2389 lang_add_output (name
, from_script
)
2393 /* Make -o on command line override OUTPUT in script. */
2394 if (had_output_filename
== false || !from_script
)
2396 output_filename
= name
;
2397 had_output_filename
= true;
2402 static lang_output_section_statement_type
*current_section
;
2404 static int topower(x
)
2409 if (x
< 0) return -1;
2410 for (l
= 0; l
< 32; l
++)
2412 if (i
>= x
) return l
;
2418 lang_enter_output_section_statement (output_section_statement_name
,
2419 address_exp
, flags
, block_value
,
2420 align
, subalign
, ebase
)
2421 const char *output_section_statement_name
;
2422 etree_type
* address_exp
;
2424 bfd_vma block_value
;
2426 etree_type
*subalign
;
2429 lang_output_section_statement_type
*os
;
2433 lang_output_section_statement_lookup (output_section_statement_name
);
2437 /* Add this statement to tree */
2438 /* add_statement(lang_output_section_statement_enum,
2439 output_section_statement);*/
2440 /* Make next things chain into subchain of this */
2442 if (os
->addr_tree
==
2443 (etree_type
*) NULL
)
2449 if (flags
& SEC_NEVER_LOAD
)
2453 os
->block_value
= block_value
? block_value
: 1;
2454 stat_ptr
= &os
->children
;
2456 os
->subsection_alignment
= topower(
2457 exp_get_value_int(subalign
, -1,
2458 "subsection alignment",
2460 os
->section_alignment
= topower(
2461 exp_get_value_int(align
, -1,
2462 "section alignment", 0));
2464 os
->load_base
= ebase
;
2471 lang_output_statement_type
*new =
2472 new_stat (lang_output_statement
, stat_ptr
);
2474 new->name
= output_filename
;
2477 /* Reset the current counters in the regions */
2479 reset_memory_regions ()
2481 lang_memory_region_type
*p
= lang_memory_region_list
;
2483 for (p
= lang_memory_region_list
;
2484 p
!= (lang_memory_region_type
*) NULL
;
2487 p
->old_length
= (bfd_size_type
) (p
->current
- p
->origin
);
2488 p
->current
= p
->origin
;
2495 lang_reasonable_defaults ();
2496 current_target
= default_target
;
2498 lang_for_each_statement (ldlang_open_output
); /* Open the output file */
2500 ldemul_create_output_section_statements ();
2502 /* Add to the hash table all undefineds on the command line */
2503 lang_place_undefineds ();
2505 /* Create a bfd for each input file */
2506 current_target
= default_target
;
2507 lang_for_each_statement (open_input_bfds
);
2509 /* Build all sets based on the information gathered from the input
2511 ldctor_build_sets ();
2513 /* Size up the common data */
2516 /* Run through the contours of the script and attatch input sections
2517 to the correct output sections
2519 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
2520 (lang_output_section_statement_type
*) NULL
);
2523 /* Find any sections not attatched explicitly and handle them */
2524 lang_place_orphans ();
2526 ldemul_before_allocation ();
2528 /* Now run around and relax if we can */
2529 if (command_line
.relax
)
2531 /* First time round is a trial run to get the 'worst case'
2532 addresses of the objects if there was no relaxing. */
2533 lang_size_sections (statement_list
.head
,
2535 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
2538 reset_memory_regions ();
2540 /* Keep relaxing until bfd_relax_section gives up. */
2543 relax_again
= false;
2545 /* Do all the assignments with our current guesses as to
2547 lang_do_assignments (statement_list
.head
,
2549 (fill_type
) 0, (bfd_vma
) 0);
2551 /* Perform another relax pass - this time we know where the
2552 globals are, so can make better guess. */
2553 lang_size_sections (statement_list
.head
,
2555 &(statement_list
.head
), 0, (bfd_vma
) 0, true);
2557 while (relax_again
);
2561 /* Size up the sections. */
2562 lang_size_sections (statement_list
.head
,
2564 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
2567 /* See if anything special should be done now we know how big
2569 ldemul_after_allocation ();
2571 /* Do all the assignments, now that we know the final restingplaces
2572 of all the symbols */
2574 lang_do_assignments (statement_list
.head
,
2576 (fill_type
) 0, (bfd_vma
) 0);
2578 /* Make sure that we're not mixing architectures */
2588 /* EXPORTED TO YACC */
2591 lang_add_wild (section_name
, filename
)
2592 CONST
char *CONST section_name
;
2593 CONST
char *CONST filename
;
2595 lang_wild_statement_type
*new = new_stat (lang_wild_statement
,
2598 if (section_name
!= (char *) NULL
&& strcmp (section_name
, "COMMON") == 0)
2600 placed_commons
= true;
2602 if (filename
!= (char *) NULL
)
2604 lang_has_input_file
= true;
2606 new->section_name
= section_name
;
2607 new->filename
= filename
;
2608 lang_list_init (&new->children
);
2612 lang_section_start (name
, address
)
2614 etree_type
* address
;
2616 lang_address_statement_type
*ad
= new_stat (lang_address_statement
, stat_ptr
);
2618 ad
->section_name
= name
;
2619 ad
->address
= address
;
2622 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
2623 because of a -e argument on the command line, or zero if this is
2624 called by ENTRY in a linker script. Command line arguments take
2628 lang_add_entry (name
, cmdline
)
2632 static int from_cmdline
;
2634 if (entry_symbol
== NULL
2638 entry_symbol
= name
;
2639 from_cmdline
= cmdline
;
2644 lang_add_target (name
)
2647 lang_target_statement_type
*new = new_stat (lang_target_statement
,
2663 map_option_f
= true;
2674 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
2681 lang_add_data (type
, exp
)
2683 union etree_union
*exp
;
2686 lang_data_statement_type
*new = new_stat (lang_data_statement
,
2694 /* Create a new reloc statement. RELOC is the BFD relocation type to
2695 generate. HOWTO is the corresponding howto structure (we could
2696 look this up, but the caller has already done so). SECTION is the
2697 section to generate a reloc against, or NAME is the name of the
2698 symbol to generate a reloc against. Exactly one of SECTION and
2699 NAME must be NULL. ADDEND is an expression for the addend. */
2702 lang_add_reloc (reloc
, howto
, section
, name
, addend
)
2703 bfd_reloc_code_real_type reloc
;
2704 const reloc_howto_type
*howto
;
2707 union etree_union
*addend
;
2709 lang_reloc_statement_type
*p
= new_stat (lang_reloc_statement
, stat_ptr
);
2713 p
->section
= section
;
2715 p
->addend_exp
= addend
;
2717 p
->addend_value
= 0;
2718 p
->output_section
= NULL
;
2723 lang_add_assignment (exp
)
2726 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
2733 lang_add_attribute (attribute
)
2734 enum statement_enum attribute
;
2736 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
2743 if (startup_file
!= (char *) NULL
)
2745 einfo ("%P%Fmultiple STARTUP files\n");
2747 first_file
->filename
= name
;
2748 first_file
->local_sym_name
= name
;
2749 first_file
->real
= true;
2751 startup_file
= name
;
2758 lang_float_flag
= maybe
;
2762 lang_leave_output_section_statement (fill
, memspec
)
2764 CONST
char *memspec
;
2766 current_section
->fill
= fill
;
2767 current_section
->region
= lang_memory_region_lookup (memspec
);
2768 stat_ptr
= &statement_list
;
2770 /* We remember if we are closing a .data section, since we use it to
2771 store constructors in */
2772 if (strcmp (current_section
->name
, ".data") == 0)
2774 end_of_data_section_statement_list
= statement_list
;
2780 Create an absolute symbol with the given name with the value of the
2781 address of first byte of the section named.
2783 If the symbol already exists, then do nothing.
2786 lang_abs_symbol_at_beginning_of (secname
, name
)
2787 const char *secname
;
2790 struct bfd_link_hash_entry
*h
;
2792 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
2793 if (h
== (struct bfd_link_hash_entry
*) NULL
)
2794 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
2796 if (h
->type
== bfd_link_hash_new
2797 || h
->type
== bfd_link_hash_undefined
)
2801 h
->type
= bfd_link_hash_defined
;
2803 sec
= bfd_get_section_by_name (output_bfd
, secname
);
2804 if (sec
== (asection
*) NULL
)
2807 h
->u
.def
.value
= bfd_get_section_vma (output_bfd
, sec
);
2809 h
->u
.def
.section
= &bfd_abs_section
;
2814 Create an absolute symbol with the given name with the value of the
2815 address of the first byte after the end of the section named.
2817 If the symbol already exists, then do nothing.
2820 lang_abs_symbol_at_end_of (secname
, name
)
2821 const char *secname
;
2824 struct bfd_link_hash_entry
*h
;
2826 h
= bfd_link_hash_lookup (link_info
.hash
, name
, true, true, true);
2827 if (h
== (struct bfd_link_hash_entry
*) NULL
)
2828 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
2830 if (h
->type
== bfd_link_hash_new
2831 || h
->type
== bfd_link_hash_undefined
)
2835 h
->type
= bfd_link_hash_defined
;
2837 sec
= bfd_get_section_by_name (output_bfd
, secname
);
2838 if (sec
== (asection
*) NULL
)
2841 h
->u
.def
.value
= (bfd_get_section_vma (output_bfd
, sec
)
2842 + bfd_section_size (output_bfd
, sec
));
2844 h
->u
.def
.section
= &bfd_abs_section
;
2849 lang_statement_append (list
, element
, field
)
2850 lang_statement_list_type
* list
;
2851 lang_statement_union_type
* element
;
2852 lang_statement_union_type
** field
;
2854 *(list
->tail
) = element
;
2858 /* Set the output format type. -oformat overrides scripts. */
2860 lang_add_output_format (format
, from_script
)
2864 if (output_target
== NULL
|| !from_script
)
2865 output_target
= format
;