1 /* Copyright (C) 1991 Free Software Foundation, Inc.
3 This file is part of GLD, the Gnu Linker.
5 GLD is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 1, or (at your option)
10 GLD is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GLD; see the file COPYING. If not, write to
17 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
39 PROTO (static void, print_statements
, (void));
40 PROTO (static void, print_statement
, (lang_statement_union_type
*,
41 lang_output_section_statement_type
*));
44 static struct obstack stat_obstack
;
46 #define obstack_chunk_alloc ldmalloc
47 #define obstack_chunk_free free
48 static CONST
char *startup_file
;
49 static lang_statement_list_type input_file_chain
;
51 /* Points to the last statement in the .data section, so we can add
52 stuff to the data section without pain */
53 static lang_statement_list_type end_of_data_section_statement_list
;
55 /* List of statements needed to handle constructors */
56 extern lang_statement_list_type constructor_list
;
58 static boolean placed_commons
= false;
59 static lang_output_section_statement_type
*default_common_section
;
60 static boolean map_option_f
;
61 static bfd_vma print_dot
;
62 static lang_input_statement_type
*first_file
;
63 static lang_statement_list_type lang_output_section_statement
;
64 static CONST
char *current_target
;
65 static CONST
char *output_target
;
66 static size_t longest_section_name
= 8;
67 static asection common_section
;
68 static section_userdata_type common_section_userdata
;
69 static lang_statement_list_type statement_list
;
73 lang_output_section_statement_type
*abs_output_section
;
74 lang_statement_list_type
*stat_ptr
= &statement_list
;
75 lang_input_statement_type
*script_file
= 0;
76 boolean option_longmap
= false;
77 lang_statement_list_type file_chain
=
79 CONST
char *entry_symbol
= 0;
80 bfd_size_type largest_section
= 0;
81 boolean lang_has_input_file
= false;
82 lang_output_section_statement_type
*create_object_symbols
= 0;
83 boolean had_output_filename
= false;
84 boolean lang_float_flag
= false;
87 extern char *default_target
;
89 extern unsigned int undefined_global_sym_count
;
90 extern char *current_file
;
91 extern bfd
*output_bfd
;
92 extern enum bfd_architecture ldfile_output_architecture
;
93 extern unsigned long ldfile_output_machine
;
94 extern char *ldfile_output_machine_name
;
95 extern ldsym_type
*symbol_head
;
96 extern unsigned int commons_pending
;
97 extern args_type command_line
;
98 extern ld_config_type config
;
99 extern boolean had_script
;
100 extern boolean write_map
;
103 #define cat(a,b) a##b
105 #define cat(a,b) a/**/b
108 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
110 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
112 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
114 void EXFUN (lang_add_data
, (int type
, union etree_union
* exp
));
117 DEFUN (stat_alloc
, (size
),
120 return obstack_alloc (&stat_obstack
, size
);
123 DEFUN (print_size
, (value
),
126 fprintf (config
.map_file
, "%5x", (unsigned) value
);
129 DEFUN (print_alignment
, (value
),
132 fprintf (config
.map_file
, "2**%1u", value
);
135 DEFUN (print_fill
, (value
),
138 fprintf (config
.map_file
, "%04x", (unsigned) value
);
143 DEFUN (print_section
, (name
),
144 CONST
char *CONST name
)
146 fprintf (config
.map_file
, "%*s", -longest_section_name
, name
);
149 /*----------------------------------------------------------------------
150 lang_for_each_statement walks the parse tree and calls the provided
151 function for each node
155 DEFUN (lang_for_each_statement_worker
, (func
, s
),
157 lang_statement_union_type
* s
)
159 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
163 switch (s
->header
.type
)
165 case lang_constructors_statement_enum
:
166 lang_for_each_statement_worker (func
, constructor_list
.head
);
168 case lang_output_section_statement_enum
:
169 lang_for_each_statement_worker
171 s
->output_section_statement
.children
.head
);
173 case lang_wild_statement_enum
:
174 lang_for_each_statement_worker
176 s
->wild_statement
.children
.head
);
178 case lang_data_statement_enum
:
179 case lang_object_symbols_statement_enum
:
180 case lang_output_statement_enum
:
181 case lang_target_statement_enum
:
182 case lang_input_section_enum
:
183 case lang_input_statement_enum
:
184 case lang_assignment_statement_enum
:
185 case lang_padding_statement_enum
:
186 case lang_address_statement_enum
:
196 DEFUN (lang_for_each_statement
, (func
),
199 lang_for_each_statement_worker (func
,
200 statement_list
.head
);
203 /*----------------------------------------------------------------------*/
205 DEFUN (lang_list_init
, (list
),
206 lang_statement_list_type
* list
)
208 list
->head
= (lang_statement_union_type
*) NULL
;
209 list
->tail
= &list
->head
;
212 /*----------------------------------------------------------------------
214 build a new statement node for the parse tree
219 lang_statement_union_type
*
220 DEFUN (new_statement
, (type
, size
, list
),
221 enum statement_enum type AND
222 bfd_size_type size AND
223 lang_statement_list_type
* list
)
225 lang_statement_union_type
*new = (lang_statement_union_type
*)
228 new->header
.type
= type
;
229 new->header
.next
= (lang_statement_union_type
*) NULL
;
230 lang_statement_append (list
, new, &new->header
.next
);
235 Build a new input file node for the language. There are several ways
236 in which we treat an input file, eg, we only look at symbols, or
237 prefix it with a -l etc.
239 We can be supplied with requests for input files more than once;
240 they may, for example be split over serveral lines like foo.o(.text)
241 foo.o(.data) etc, so when asked for a file we check that we havn't
242 got it already so we don't duplicate the bfd.
245 static lang_input_statement_type
*
246 DEFUN (new_afile
, (name
, file_type
, target
),
247 CONST
char *CONST name AND
248 CONST lang_input_file_enum_type file_type AND
249 CONST
char *CONST target
)
252 lang_input_statement_type
*p
= new_stat (lang_input_statement
,
255 lang_has_input_file
= true;
257 p
->complained
= false;
260 case lang_input_file_is_symbols_only_enum
:
262 p
->is_archive
= false;
264 p
->local_sym_name
= name
;
265 p
->just_syms_flag
= true;
266 p
->search_dirs_flag
= false;
268 case lang_input_file_is_fake_enum
:
270 p
->is_archive
= false;
272 p
->local_sym_name
= name
;
273 p
->just_syms_flag
= false;
274 p
->search_dirs_flag
= false;
276 case lang_input_file_is_l_enum
:
277 p
->is_archive
= true;
280 p
->local_sym_name
= concat ("-l", name
, "");
281 p
->just_syms_flag
= false;
282 p
->search_dirs_flag
= true;
284 case lang_input_file_is_search_file_enum
:
285 case lang_input_file_is_marker_enum
:
287 p
->is_archive
= false;
289 p
->local_sym_name
= name
;
290 p
->just_syms_flag
= false;
291 p
->search_dirs_flag
= true;
293 case lang_input_file_is_file_enum
:
295 p
->is_archive
= false;
297 p
->local_sym_name
= name
;
298 p
->just_syms_flag
= false;
299 p
->search_dirs_flag
= false;
304 p
->asymbols
= (asymbol
**) NULL
;
305 p
->superfile
= (lang_input_statement_type
*) NULL
;
306 p
->next_real_file
= (lang_statement_union_type
*) NULL
;
307 p
->next
= (lang_statement_union_type
*) NULL
;
309 p
->common_output_section
= (asection
*) NULL
;
310 lang_statement_append (&input_file_chain
,
311 (lang_statement_union_type
*) p
,
316 lang_input_statement_type
*
317 DEFUN (lang_add_input_file
, (name
, file_type
, target
),
319 lang_input_file_enum_type file_type AND
322 /* Look it up or build a new one */
323 lang_has_input_file
= true;
325 lang_input_statement_type
*p
;
327 for (p
= (lang_input_statement_type
*) input_file_chain
.head
;
328 p
!= (lang_input_statement_type
*) NULL
;
329 p
= (lang_input_statement_type
*) (p
->next_real_file
))
331 /* Sometimes we have incomplete entries in here */
332 if (p
->filename
!= (char *) NULL
)
334 if (strcmp (name
, p
->filename
) == 0)
340 return new_afile (name
, file_type
, target
);
343 /* Build enough state so that the parser can build its tree */
345 DEFUN_VOID (lang_init
)
347 obstack_begin (&stat_obstack
, 1000);
349 stat_ptr
= &statement_list
;
351 lang_list_init (stat_ptr
);
353 lang_list_init (&input_file_chain
);
354 lang_list_init (&lang_output_section_statement
);
355 lang_list_init (&file_chain
);
356 first_file
= lang_add_input_file ((char *) NULL
,
357 lang_input_file_is_marker_enum
,
359 abs_output_section
= lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
361 abs_output_section
->bfd_section
= &bfd_abs_section
;
365 /*----------------------------------------------------------------------
366 A region is an area of memory declared with the
367 MEMORY { name:org=exp, len=exp ... }
370 We maintain a list of all the regions here
372 If no regions are specified in the script, then the default is used
373 which is created when looked up to be the entire data space
376 static lang_memory_region_type
*lang_memory_region_list
;
377 static lang_memory_region_type
**lang_memory_region_list_tail
= &lang_memory_region_list
;
379 lang_memory_region_type
*
380 DEFUN (lang_memory_region_lookup
, (name
),
381 CONST
char *CONST name
)
384 lang_memory_region_type
*p
= lang_memory_region_list
;
386 for (p
= lang_memory_region_list
;
387 p
!= (lang_memory_region_type
*) NULL
;
390 if (strcmp (p
->name
, name
) == 0)
395 if (strcmp (name
, "*default*") == 0)
397 /* This is the default region, dig out first one on the list */
398 if (lang_memory_region_list
!= (lang_memory_region_type
*) NULL
)
400 return lang_memory_region_list
;
404 lang_memory_region_type
*new =
405 (lang_memory_region_type
*) stat_alloc ((bfd_size_type
) (sizeof (lang_memory_region_type
)));
407 new->name
= buystring (name
);
408 new->next
= (lang_memory_region_type
*) NULL
;
410 *lang_memory_region_list_tail
= new;
411 lang_memory_region_list_tail
= &new->next
;
415 new->had_full_message
= false;
422 lang_output_section_statement_type
*
423 DEFUN (lang_output_section_find
, (name
),
424 CONST
char *CONST name
)
426 lang_statement_union_type
*u
;
427 lang_output_section_statement_type
*lookup
;
429 for (u
= lang_output_section_statement
.head
;
430 u
!= (lang_statement_union_type
*) NULL
;
433 lookup
= &u
->output_section_statement
;
434 if (strcmp (name
, lookup
->name
) == 0)
439 return (lang_output_section_statement_type
*) NULL
;
442 lang_output_section_statement_type
*
443 DEFUN (lang_output_section_statement_lookup
, (name
),
444 CONST
char *CONST name
)
446 lang_output_section_statement_type
*lookup
;
448 lookup
= lang_output_section_find (name
);
449 if (lookup
== (lang_output_section_statement_type
*) NULL
)
452 lookup
= (lang_output_section_statement_type
*)
453 new_stat (lang_output_section_statement
, stat_ptr
);
454 lookup
->region
= (lang_memory_region_type
*) NULL
;
456 lookup
->block_value
= 1;
459 lookup
->next
= (lang_statement_union_type
*) NULL
;
460 lookup
->bfd_section
= (asection
*) NULL
;
461 lookup
->processed
= false;
462 lookup
->addr_tree
= (etree_type
*) NULL
;
463 lang_list_init (&lookup
->children
);
465 lang_statement_append (&lang_output_section_statement
,
466 (lang_statement_union_type
*) lookup
,
474 DEFUN (print_flags
, (ignore_flags
),
477 fprintf (config
.map_file
, "(");
479 if (flags
->flag_read
)
480 fprintf (outfile
, "R");
481 if (flags
->flag_write
)
482 fprintf (outfile
, "W");
483 if (flags
->flag_executable
)
484 fprintf (outfile
, "X");
485 if (flags
->flag_loadable
)
486 fprintf (outfile
, "L");
488 fprintf (config
.map_file
, ")");
492 DEFUN_VOID (lang_map
)
494 lang_memory_region_type
*m
;
496 fprintf (config
.map_file
, "**MEMORY CONFIGURATION**\n\n");
498 fprintf (config
.map_file
, "name\t\torigin\t\tlength\t\tattributes\n");
500 fprintf (config
.map_file
, "name\t\torigin length\t\tattributes\n");
502 for (m
= lang_memory_region_list
;
503 m
!= (lang_memory_region_type
*) NULL
;
506 fprintf (config
.map_file
, "%-16s", m
->name
);
507 print_address (m
->origin
);
509 print_address (m
->length
);
511 print_flags (&m
->flags
);
512 fprintf (config
.map_file
, "\n");
514 fprintf (config
.map_file
, "\n\n**LINK EDITOR MEMORY MAP**\n\n");
515 fprintf (config
.map_file
, "output input virtual\n");
516 fprintf (config
.map_file
, "section section address tsize\n\n");
527 lang_output_section_statement_type
* s
)
529 /* asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
530 section_userdata_type
*new =
531 (section_userdata_type
*)
532 stat_alloc ((bfd_size_type
) (sizeof (section_userdata_type
)));
534 s
->bfd_section
= bfd_get_section_by_name (output_bfd
, s
->name
);
535 if (s
->bfd_section
== (asection
*) NULL
)
536 s
->bfd_section
= bfd_make_section (output_bfd
, s
->name
);
537 if (s
->bfd_section
== (asection
*) NULL
)
539 einfo ("%P%F output format %s cannot represent section called %s\n",
540 output_bfd
->xvec
->name
, s
->name
);
542 s
->bfd_section
->output_section
= s
->bfd_section
;
543 /* s->bfd_section->flags = s->flags;*/
545 /* We initialize an output sections output offset to minus its own */
546 /* vma to allow us to output a section through itself */
547 s
->bfd_section
->output_offset
= 0;
548 get_userdata (s
->bfd_section
) = (PTR
) new;
552 /***********************************************************************
555 These expand statements like *(.text) and foo.o to a list of
556 explicit actions, like foo.o(.text), bar.o(.text) and
559 The toplevel routine, wild, takes a statement, section, file and
560 target. If either the section or file is null it is taken to be the
561 wildcard. Seperate lang_input_section statements are created for
562 each part of the expanstion, and placed after the statement provided.
567 DEFUN (wild_doit
, (ptr
, section
, output
, file
),
568 lang_statement_list_type
* ptr AND
569 asection
* section AND
570 lang_output_section_statement_type
* output AND
571 lang_input_statement_type
* file
)
573 if (output
->bfd_section
== (asection
*) NULL
)
578 if (section
!= (asection
*) NULL
579 && section
->output_section
== (asection
*) NULL
)
581 /* Add a section reference to the list */
582 lang_input_section_type
*new = new_stat (lang_input_section
, ptr
);
584 new->section
= section
;
586 section
->output_section
= output
->bfd_section
;
587 section
->output_section
->flags
|= section
->flags
;
588 if (section
->alignment_power
> output
->bfd_section
->alignment_power
)
590 output
->bfd_section
->alignment_power
= section
->alignment_power
;
596 DEFUN (our_bfd_get_section_by_name
, (abfd
, section
),
600 return bfd_get_section_by_name (abfd
, section
);
604 DEFUN (wild_section
, (ptr
, section
, file
, output
),
605 lang_wild_statement_type
* ptr AND
606 CONST
char *section AND
607 lang_input_statement_type
* file AND
608 lang_output_section_statement_type
* output
)
612 if (file
->just_syms_flag
== false)
614 if (section
== (char *) NULL
)
616 /* Do the creation to all sections in the file */
617 for (s
= file
->the_bfd
->sections
; s
!= (asection
*) NULL
; s
= s
->next
)
619 wild_doit (&ptr
->children
, s
, output
, file
);
624 /* Do the creation to the named section only */
625 wild_doit (&ptr
->children
,
626 our_bfd_get_section_by_name (file
->the_bfd
, section
),
632 /* passed a file name (which must have been seen already and added to
633 the statement tree. We will see if it has been opened already and
634 had its symbols read. If not then we'll read it.
636 Archives are pecuilar here. We may open them once, but if they do
637 not define anything we need at the time, they won't have all their
638 symbols read. If we need them later, we'll have to redo it.
641 lang_input_statement_type
*
642 DEFUN (lookup_name
, (name
),
643 CONST
char *CONST name
)
645 lang_input_statement_type
*search
;
647 for (search
= (lang_input_statement_type
*) input_file_chain
.head
;
648 search
!= (lang_input_statement_type
*) NULL
;
649 search
= (lang_input_statement_type
*) search
->next_real_file
)
651 if (search
->filename
== (char *) NULL
&& name
== (char *) NULL
)
655 if (search
->filename
!= (char *) NULL
&& name
!= (char *) NULL
)
657 if (strcmp (search
->filename
, name
) == 0)
659 ldmain_open_file_read_symbol (search
);
665 /* There isn't an afile entry for this file yet, this must be
666 because the name has only appeared inside a load script and not
667 on the command line */
668 search
= new_afile (name
, lang_input_file_is_file_enum
, default_target
);
669 ldmain_open_file_read_symbol (search
);
676 DEFUN (wild
, (s
, section
, file
, target
, output
),
677 lang_wild_statement_type
* s AND
678 CONST
char *CONST section AND
679 CONST
char *CONST file AND
680 CONST
char *CONST target AND
681 lang_output_section_statement_type
* output
)
683 lang_input_statement_type
*f
;
685 if (file
== (char *) NULL
)
687 /* Perform the iteration over all files in the list */
688 for (f
= (lang_input_statement_type
*) file_chain
.head
;
689 f
!= (lang_input_statement_type
*) NULL
;
690 f
= (lang_input_statement_type
*) f
->next
)
692 wild_section (s
, section
, f
, output
);
697 /* Perform the iteration over a single file */
698 wild_section (s
, section
, lookup_name (file
), output
);
700 if (section
!= (char *) NULL
701 && strcmp (section
, "COMMON") == 0
702 && default_common_section
== (lang_output_section_statement_type
*) NULL
)
704 /* Remember the section that common is going to incase we later
705 get something which doesn't know where to put it */
706 default_common_section
= output
;
711 read in all the files
714 DEFUN (open_output
, (name
),
715 CONST
char *CONST name
)
717 extern unsigned long ldfile_output_machine
;
718 extern enum bfd_architecture ldfile_output_architecture
;
720 extern CONST
char *output_filename
;
723 if (output_target
== (char *) NULL
)
725 if (current_target
!= (char *) NULL
)
726 output_target
= current_target
;
728 output_target
= default_target
;
730 output
= bfd_openw (name
, output_target
);
731 output_filename
= name
;
733 if (output
== (bfd
*) NULL
)
735 if (bfd_error
== invalid_target
)
737 einfo ("%P%F target %s not found\n", output_target
);
739 einfo ("%P%F problem opening output file %s, %E", name
);
742 /* output->flags |= D_PAGED;*/
744 bfd_set_format (output
, bfd_object
);
745 bfd_set_arch_mach(output
,
746 ldfile_output_architecture
,
747 ldfile_output_machine
);
755 DEFUN (ldlang_open_output
, (statement
),
756 lang_statement_union_type
* statement
)
758 switch (statement
->header
.type
)
760 case lang_output_statement_enum
:
761 output_bfd
= open_output (statement
->output_statement
.name
);
762 ldemul_set_output_arch ();
763 if (config
.magic_demand_paged
&& !config
.relocateable_output
)
764 output_bfd
->flags
|= D_PAGED
;
766 output_bfd
->flags
&= ~D_PAGED
;
767 if (config
.text_read_only
)
768 output_bfd
->flags
|= WP_TEXT
;
770 output_bfd
->flags
&= ~WP_TEXT
;
773 case lang_target_statement_enum
:
774 current_target
= statement
->target_statement
.target
;
782 DEFUN (open_input_bfds
, (statement
),
783 lang_statement_union_type
* statement
)
785 switch (statement
->header
.type
)
787 case lang_target_statement_enum
:
788 current_target
= statement
->target_statement
.target
;
790 case lang_wild_statement_enum
:
791 /* Maybe we should load the file's symbols */
792 if (statement
->wild_statement
.filename
)
794 (void) lookup_name (statement
->wild_statement
.filename
);
797 case lang_input_statement_enum
:
798 if (statement
->input_statement
.real
== true)
800 statement
->input_statement
.target
= current_target
;
801 lookup_name (statement
->input_statement
.filename
);
809 /* If there are [COMMONS] statements, put a wild one into the bss section */
812 lang_reasonable_defaults ()
818 lang_output_section_statement_lookup (".text");
819 lang_output_section_statement_lookup (".data");
821 default_common_section
=
822 lang_output_section_statement_lookup (".bss");
825 if (placed_commons
== false)
827 lang_wild_statement_type
*new =
828 new_stat (lang_wild_statement
,
829 &default_common_section
->children
);
831 new->section_name
= "COMMON";
832 new->filename
= (char *) NULL
;
833 lang_list_init (&new->children
);
840 Add the supplied name to the symbol table as an undefined reference.
841 Remove items from the chain as we open input bfds
843 typedef struct ldlang_undef_chain_list
845 struct ldlang_undef_chain_list
*next
;
847 } ldlang_undef_chain_list_type
;
849 static ldlang_undef_chain_list_type
*ldlang_undef_chain_list_head
;
852 DEFUN (ldlang_add_undef
, (name
),
853 CONST
char *CONST name
)
855 ldlang_undef_chain_list_type
*new =
856 (ldlang_undef_chain_list_type
857 *) stat_alloc ((bfd_size_type
) (sizeof (ldlang_undef_chain_list_type
)));
859 new->next
= ldlang_undef_chain_list_head
;
860 ldlang_undef_chain_list_head
= new;
862 new->name
= buystring (name
);
865 /* Run through the list of undefineds created above and place them
866 into the linker hash table as undefined symbols belonging to the
870 DEFUN_VOID (lang_place_undefineds
)
872 ldlang_undef_chain_list_type
*ptr
= ldlang_undef_chain_list_head
;
874 while (ptr
!= (ldlang_undef_chain_list_type
*) NULL
)
877 asymbol
**def_ptr
= (asymbol
**) stat_alloc ((bfd_size_type
) (sizeof (asymbol
**)));
879 def
= (asymbol
*) bfd_make_empty_symbol (script_file
->the_bfd
);
881 def
->name
= ptr
->name
;
882 def
->section
= &bfd_und_section
;
883 Q_enter_global_ref (def_ptr
, ptr
->name
);
888 /* Copy important data from out internal form to the bfd way. Also
889 create a section for the dummy file
893 DEFUN_VOID (lang_create_output_section_statements
)
895 lang_statement_union_type
*os
;
897 for (os
= lang_output_section_statement
.head
;
898 os
!= (lang_statement_union_type
*) NULL
;
899 os
= os
->output_section_statement
.next
)
901 lang_output_section_statement_type
*s
=
902 &os
->output_section_statement
;
910 DEFUN_VOID (lang_init_script_file
)
912 script_file
= lang_add_input_file ("script file",
913 lang_input_file_is_fake_enum
,
915 script_file
->the_bfd
= bfd_create ("script file", output_bfd
);
916 script_file
->symbol_count
= 0;
917 script_file
->the_bfd
->sections
= output_bfd
->sections
;
918 abs_output_section
= lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME
);
920 abs_output_section
->bfd_section
= &bfd_abs_section
;
924 /* Open input files and attatch to output sections */
926 DEFUN (map_input_to_output_sections
, (s
, target
, output_section_statement
),
927 lang_statement_union_type
* s AND
928 CONST
char *target AND
929 lang_output_section_statement_type
* output_section_statement
)
931 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
933 switch (s
->header
.type
)
937 case lang_wild_statement_enum
:
938 wild (&s
->wild_statement
, s
->wild_statement
.section_name
,
939 s
->wild_statement
.filename
, target
,
940 output_section_statement
);
943 case lang_constructors_statement_enum
:
944 map_input_to_output_sections (constructor_list
.head
,
946 output_section_statement
);
948 case lang_output_section_statement_enum
:
949 map_input_to_output_sections (s
->output_section_statement
.children
.head
,
951 &s
->output_section_statement
);
953 case lang_output_statement_enum
:
955 case lang_target_statement_enum
:
956 target
= s
->target_statement
.target
;
958 case lang_fill_statement_enum
:
959 case lang_input_section_enum
:
960 case lang_object_symbols_statement_enum
:
961 case lang_data_statement_enum
:
962 case lang_assignment_statement_enum
:
963 case lang_padding_statement_enum
:
965 case lang_afile_asection_pair_statement_enum
:
968 case lang_address_statement_enum
:
969 /* Mark the specified section with the supplied address */
971 lang_output_section_statement_type
*os
=
972 lang_output_section_statement_lookup
973 (s
->address_statement
.section_name
);
975 os
->addr_tree
= s
->address_statement
.address
;
976 if (os
->bfd_section
== (asection
*) NULL
)
978 einfo ("%P%F can't set the address of undefined section %s\n",
979 s
->address_statement
.section_name
);
983 case lang_input_statement_enum
:
984 /* A standard input statement, has no wildcards */
985 /* ldmain_open_file_read_symbol(&s->input_statement);*/
996 DEFUN (print_output_section_statement
, (output_section_statement
),
997 lang_output_section_statement_type
* output_section_statement
)
999 asection
*section
= output_section_statement
->bfd_section
;
1002 print_section (output_section_statement
->name
);
1006 print_dot
= section
->vma
;
1010 print_address (section
->vma
);
1012 print_size (bfd_get_section_size_before_reloc (section
));
1014 print_alignment (section
->alignment_power
);
1017 fprintf (config
.map_file
, "%s flags", output_section_statement
->region
->name
);
1018 print_flags (stdout
, &output_section_statement
->flags
);
1020 if (section
->flags
& SEC_LOAD
)
1021 fprintf (config
.map_file
, "load ");
1022 if (section
->flags
& SEC_ALLOC
)
1023 fprintf (config
.map_file
, "alloc ");
1024 if (section
->flags
& SEC_RELOC
)
1025 fprintf (config
.map_file
, "reloc ");
1026 if (section
->flags
& SEC_HAS_CONTENTS
)
1027 fprintf (config
.map_file
, "contents ");
1032 fprintf (config
.map_file
, "No attached output section");
1035 print_statement (output_section_statement
->children
.head
,
1036 output_section_statement
);
1041 DEFUN (print_assignment
, (assignment
, output_section
),
1042 lang_assignment_statement_type
* assignment AND
1043 lang_output_section_statement_type
* output_section
)
1045 etree_value_type result
;
1051 print_address (print_dot
);
1053 result
= exp_fold_tree (assignment
->exp
->assign
.src
,
1055 lang_final_phase_enum
,
1061 print_address (result
.value
);
1065 fprintf (config
.map_file
, "*undefined*");
1068 exp_print_tree (assignment
->exp
);
1070 fprintf (config
.map_file
, "\n");
1074 DEFUN (print_input_statement
, (statm
),
1075 lang_input_statement_type
* statm
)
1077 if (statm
->filename
!= (char *) NULL
)
1079 fprintf (config
.map_file
, "LOAD %s\n", statm
->filename
);
1084 DEFUN (print_symbol
, (q
),
1088 fprintf (config
.map_file
, " ");
1090 fprintf (config
.map_file
, " ");
1091 print_address (outside_symbol_address (q
));
1092 fprintf (config
.map_file
, " %s", q
->name
? q
->name
: " ");
1097 DEFUN (print_input_section
, (in
),
1098 lang_input_section_type
* in
)
1100 asection
*i
= in
->section
;
1101 int size
= i
->reloc_done
?
1102 bfd_get_section_size_after_reloc (i
) :
1103 bfd_get_section_size_before_reloc (i
);
1108 fprintf (config
.map_file
, " ");
1109 print_section (i
->name
);
1110 fprintf (config
.map_file
, " ");
1111 if (i
->output_section
)
1113 print_address (i
->output_section
->vma
+ i
->output_offset
);
1114 fprintf (config
.map_file
, " ");
1116 fprintf (config
.map_file
, " ");
1117 print_alignment (i
->alignment_power
);
1118 fprintf (config
.map_file
, " ");
1122 bfd
*abfd
= in
->ifile
->the_bfd
;
1124 if (in
->ifile
->just_syms_flag
== true)
1126 fprintf (config
.map_file
, "symbols only ");
1129 fprintf (config
.map_file
, " %s ", abfd
->xvec
->name
);
1130 if (abfd
->my_archive
!= (bfd
*) NULL
)
1132 fprintf (config
.map_file
, "[%s]%s", abfd
->my_archive
->filename
,
1137 fprintf (config
.map_file
, "%s", abfd
->filename
);
1139 fprintf (config
.map_file
, "(overhead %d bytes)", (int) bfd_alloc_size (abfd
));
1142 /* Find all the symbols in this file defined in this section */
1144 if (in
->ifile
->symbol_count
)
1148 for (p
= in
->ifile
->asymbols
; *p
; p
++)
1152 if (bfd_get_section (q
) == i
&& q
->flags
& BSF_GLOBAL
)
1165 print_dot
= outside_section_address (i
) + size
;
1169 fprintf (config
.map_file
, "No output section allocated\n");
1175 DEFUN (print_fill_statement
, (fill
),
1176 lang_fill_statement_type
* fill
)
1178 fprintf (config
.map_file
, "FILL mask ");
1179 print_fill (fill
->fill
);
1183 DEFUN (print_data_statement
, (data
),
1184 lang_data_statement_type
* data
)
1186 /* bfd_vma value; */
1191 /* ASSERT(print_dot == data->output_vma);*/
1193 print_address (data
->output_vma
+ data
->output_section
->vma
);
1195 print_address (data
->value
);
1200 fprintf (config
.map_file
, "BYTE ");
1201 print_dot
+= BYTE_SIZE
;
1204 fprintf (config
.map_file
, "SHORT ");
1205 print_dot
+= SHORT_SIZE
;
1208 fprintf (config
.map_file
, "LONG ");
1209 print_dot
+= LONG_SIZE
;
1213 exp_print_tree (data
->exp
);
1215 fprintf (config
.map_file
, "\n");
1220 DEFUN (print_padding_statement
, (s
),
1221 lang_padding_statement_type
* s
)
1225 print_section ("*fill*");
1227 print_address (s
->output_offset
+ s
->output_section
->vma
);
1229 print_size (s
->size
);
1231 print_fill (s
->fill
);
1234 print_dot
= s
->output_offset
+ s
->output_section
->vma
+ s
->size
;
1239 DEFUN (print_wild_statement
, (w
, os
),
1240 lang_wild_statement_type
* w AND
1241 lang_output_section_statement_type
* os
)
1243 fprintf (config
.map_file
, " from ");
1244 if (w
->filename
!= (char *) NULL
)
1246 fprintf (config
.map_file
, "%s", w
->filename
);
1250 fprintf (config
.map_file
, "*");
1252 if (w
->section_name
!= (char *) NULL
)
1254 fprintf (config
.map_file
, "(%s)", w
->section_name
);
1258 fprintf (config
.map_file
, "(*)");
1261 print_statement (w
->children
.head
, os
);
1265 DEFUN (print_statement
, (s
, os
),
1266 lang_statement_union_type
* s AND
1267 lang_output_section_statement_type
* os
)
1271 switch (s
->header
.type
)
1273 case lang_constructors_statement_enum
:
1274 fprintf (config
.map_file
, "constructors:\n");
1275 print_statement (constructor_list
.head
, os
);
1277 case lang_wild_statement_enum
:
1278 print_wild_statement (&s
->wild_statement
, os
);
1281 fprintf (config
.map_file
, "Fail with %d\n", s
->header
.type
);
1284 case lang_address_statement_enum
:
1285 fprintf (config
.map_file
, "address\n");
1287 case lang_object_symbols_statement_enum
:
1288 fprintf (config
.map_file
, "object symbols\n");
1290 case lang_fill_statement_enum
:
1291 print_fill_statement (&s
->fill_statement
);
1293 case lang_data_statement_enum
:
1294 print_data_statement (&s
->data_statement
);
1296 case lang_input_section_enum
:
1297 print_input_section (&s
->input_section
);
1299 case lang_padding_statement_enum
:
1300 print_padding_statement (&s
->padding_statement
);
1302 case lang_output_section_statement_enum
:
1303 print_output_section_statement (&s
->output_section_statement
);
1305 case lang_assignment_statement_enum
:
1306 print_assignment (&s
->assignment_statement
,
1309 case lang_target_statement_enum
:
1310 fprintf (config
.map_file
, "TARGET(%s)\n", s
->target_statement
.target
);
1312 case lang_output_statement_enum
:
1313 fprintf (config
.map_file
, "OUTPUT(%s %s)\n",
1314 s
->output_statement
.name
,
1317 case lang_input_statement_enum
:
1318 print_input_statement (&s
->input_statement
);
1320 case lang_afile_asection_pair_statement_enum
:
1330 DEFUN_VOID (print_statements
)
1332 print_statement (statement_list
.head
,
1333 abs_output_section
);
1338 DEFUN (insert_pad
, (this_ptr
, fill
, power
, output_section_statement
, dot
),
1339 lang_statement_union_type
** this_ptr AND
1341 unsigned int power AND
1342 asection
* output_section_statement AND
1345 /* Align this section first to the
1346 input sections requirement, then
1347 to the output section's requirement.
1348 If this alignment is > than any seen before,
1349 then record it too. Perform the alignment by
1350 inserting a magic 'padding' statement.
1353 unsigned int alignment_needed
= align_power (dot
, power
) - dot
;
1355 if (alignment_needed
!= 0)
1357 lang_statement_union_type
*new =
1358 (lang_statement_union_type
*)
1359 stat_alloc ((bfd_size_type
) (sizeof (lang_padding_statement_type
)));
1361 /* Link into existing chain */
1362 new->header
.next
= *this_ptr
;
1364 new->header
.type
= lang_padding_statement_enum
;
1365 new->padding_statement
.output_section
= output_section_statement
;
1366 new->padding_statement
.output_offset
=
1367 dot
- output_section_statement
->vma
;
1368 new->padding_statement
.fill
= fill
;
1369 new->padding_statement
.size
= alignment_needed
;
1373 /* Remember the most restrictive alignment */
1374 if (power
> output_section_statement
->alignment_power
)
1376 output_section_statement
->alignment_power
= power
;
1378 output_section_statement
->_raw_size
+= alignment_needed
;
1379 return alignment_needed
+ dot
;
1383 /* Work out how much this section will move the dot point */
1385 DEFUN (size_input_section
, (this_ptr
, output_section_statement
, fill
, dot
),
1386 lang_statement_union_type
** this_ptr AND
1387 lang_output_section_statement_type
* output_section_statement AND
1388 unsigned short fill AND
1391 lang_input_section_type
*is
= &((*this_ptr
)->input_section
);
1392 asection
*i
= is
->section
;
1394 if (is
->ifile
->just_syms_flag
== false)
1396 dot
= insert_pad (this_ptr
, fill
, i
->alignment_power
,
1397 output_section_statement
->bfd_section
, dot
);
1399 /* remember the largest size so we can malloc the largest area
1400 needed for the output stage. Only remember the size of sections
1401 which we will actually allocate */
1403 (SEC_HAS_CONTENTS
| SEC_LOAD
)) == (SEC_HAS_CONTENTS
| SEC_LOAD
))
1404 && (bfd_get_section_size_before_reloc (i
) > largest_section
))
1406 largest_section
= bfd_get_section_size_before_reloc (i
);
1409 /* Remember where in the output section this input section goes */
1411 i
->output_offset
= dot
- output_section_statement
->bfd_section
->vma
;
1413 /* Mark how big the output section must be to contain this now */
1414 dot
+= bfd_get_section_size_before_reloc (i
);
1415 output_section_statement
->bfd_section
->_raw_size
=
1416 dot
- output_section_statement
->bfd_section
->vma
;
1420 i
->output_offset
= i
->vma
- output_section_statement
->bfd_section
->vma
;
1426 /* Sizing happens in two passes, first pass we allocate worst case
1427 stuff. The second pass (if relaxing), we use what we learnt to
1428 change the size of some relocs from worst case to better
1430 static boolean had_relax
;
1433 DEFUN (lang_size_sections
, (s
, output_section_statement
, prev
, fill
,
1435 lang_statement_union_type
* s AND
1436 lang_output_section_statement_type
* output_section_statement AND
1437 lang_statement_union_type
** prev AND
1438 unsigned short fill AND
1442 /* Size up the sections from their constituent parts */
1443 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1445 switch (s
->header
.type
)
1448 case lang_output_section_statement_enum
:
1451 lang_output_section_statement_type
*os
= &s
->output_section_statement
;
1453 if (os
->bfd_section
== &bfd_abs_section
)
1455 /* No matter what happens, an abs section starts at zero */
1456 bfd_set_section_vma (0, os
->bfd_section
, 0);
1460 if (os
->addr_tree
== (etree_type
*) NULL
)
1462 /* No address specified for this section, get one
1463 from the region specification
1465 if (os
->region
== (lang_memory_region_type
*) NULL
)
1467 os
->region
= lang_memory_region_lookup ("*default*");
1469 dot
= os
->region
->current
;
1475 r
= exp_fold_tree (os
->addr_tree
,
1477 lang_allocating_phase_enum
,
1479 if (r
.valid
== false)
1481 einfo ("%F%S: non constant address expression for section %s\n",
1486 /* The section starts here */
1487 /* First, align to what the section needs */
1490 dot
= align_power (dot
, os
->bfd_section
->alignment_power
);
1491 bfd_set_section_vma (0, os
->bfd_section
, dot
);
1495 os
->bfd_section
->output_offset
= 0;
1497 (void) lang_size_sections (os
->children
.head
, os
, &os
->children
.head
,
1498 os
->fill
, dot
, relax
);
1499 /* Ignore the size of the input sections, use the vma and size to */
1503 after
= ALIGN (os
->bfd_section
->vma
+
1504 os
->bfd_section
->_raw_size
,
1508 os
->bfd_section
->_raw_size
= after
- os
->bfd_section
->vma
;
1509 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
1510 os
->processed
= true;
1512 /* Replace into region ? */
1513 if (os
->addr_tree
== (etree_type
*) NULL
1514 && os
->region
!= (lang_memory_region_type
*) NULL
)
1516 os
->region
->current
= dot
;
1517 /* Make sure this isn't silly */
1518 if (os
->region
->current
>
1519 os
->region
->origin
+
1522 einfo ("%X%P: Region %s is full (%B section %s)\n",
1524 os
->bfd_section
->owner
,
1525 os
->bfd_section
->name
);
1526 /* Reset the region pointer */
1527 os
->region
->current
= 0;
1535 case lang_constructors_statement_enum
:
1536 dot
= lang_size_sections (constructor_list
.head
,
1537 output_section_statement
,
1538 &s
->wild_statement
.children
.head
,
1543 case lang_data_statement_enum
:
1545 unsigned int size
= 0;
1547 s
->data_statement
.output_vma
= dot
- output_section_statement
->bfd_section
->vma
;
1548 s
->data_statement
.output_section
=
1549 output_section_statement
->bfd_section
;
1551 switch (s
->data_statement
.type
)
1565 output_section_statement
->bfd_section
->_raw_size
+= size
;
1569 case lang_wild_statement_enum
:
1571 dot
= lang_size_sections (s
->wild_statement
.children
.head
,
1572 output_section_statement
,
1573 &s
->wild_statement
.children
.head
,
1579 case lang_object_symbols_statement_enum
:
1580 create_object_symbols
= output_section_statement
;
1582 case lang_output_statement_enum
:
1583 case lang_target_statement_enum
:
1585 case lang_input_section_enum
:
1590 had_relax
= had_relax
|| relax_section (prev
);
1595 dot
= size_input_section (prev
,
1596 output_section_statement
,
1597 output_section_statement
->fill
, dot
);
1599 case lang_input_statement_enum
:
1601 case lang_fill_statement_enum
:
1602 s
->fill_statement
.output_section
= output_section_statement
->bfd_section
;
1604 fill
= s
->fill_statement
.fill
;
1606 case lang_assignment_statement_enum
:
1608 bfd_vma newdot
= dot
;
1610 exp_fold_tree (s
->assignment_statement
.exp
,
1611 output_section_statement
,
1612 lang_allocating_phase_enum
,
1616 if (newdot
!= dot
&& !relax
)
1617 /* We've been moved ! so insert a pad */
1619 lang_statement_union_type
*new =
1620 (lang_statement_union_type
*)
1621 stat_alloc ((bfd_size_type
) (sizeof (lang_padding_statement_type
)));
1623 /* Link into existing chain */
1624 new->header
.next
= *prev
;
1626 new->header
.type
= lang_padding_statement_enum
;
1627 new->padding_statement
.output_section
=
1628 output_section_statement
->bfd_section
;
1629 new->padding_statement
.output_offset
=
1630 dot
- output_section_statement
->bfd_section
->vma
;
1631 new->padding_statement
.fill
= fill
;
1632 new->padding_statement
.size
= newdot
- dot
;
1633 output_section_statement
->bfd_section
->_raw_size
+=
1634 new->padding_statement
.size
;
1643 /* This can only get here when relaxing is turned on */
1644 case lang_padding_statement_enum
:
1646 case lang_address_statement_enum
:
1649 prev
= &s
->header
.next
;
1655 DEFUN (lang_do_assignments
, (s
, output_section_statement
, fill
, dot
),
1656 lang_statement_union_type
* s AND
1657 lang_output_section_statement_type
* output_section_statement AND
1658 unsigned short fill AND
1662 for (; s
!= (lang_statement_union_type
*) NULL
; s
= s
->next
)
1664 switch (s
->header
.type
)
1666 case lang_constructors_statement_enum
:
1667 dot
= lang_do_assignments (constructor_list
.head
,
1668 output_section_statement
,
1673 case lang_output_section_statement_enum
:
1675 lang_output_section_statement_type
*os
=
1676 &(s
->output_section_statement
);
1678 dot
= os
->bfd_section
->vma
;
1679 (void) lang_do_assignments (os
->children
.head
, os
, os
->fill
, dot
);
1680 dot
= os
->bfd_section
->vma
+ os
->bfd_section
->_raw_size
;
1683 case lang_wild_statement_enum
:
1685 dot
= lang_do_assignments (s
->wild_statement
.children
.head
,
1686 output_section_statement
,
1691 case lang_object_symbols_statement_enum
:
1692 case lang_output_statement_enum
:
1693 case lang_target_statement_enum
:
1695 case lang_common_statement_enum
:
1698 case lang_data_statement_enum
:
1700 etree_value_type value
;
1702 value
= exp_fold_tree (s
->data_statement
.exp
,
1704 lang_final_phase_enum
, dot
, &dot
);
1705 s
->data_statement
.value
= value
.value
;
1706 if (value
.valid
== false)
1707 einfo ("%F%P: Invalid data statement\n");
1709 switch (s
->data_statement
.type
)
1722 case lang_input_section_enum
:
1724 asection
*in
= s
->input_section
.section
;
1726 dot
+= bfd_get_section_size_before_reloc (in
);
1730 case lang_input_statement_enum
:
1732 case lang_fill_statement_enum
:
1733 fill
= s
->fill_statement
.fill
;
1735 case lang_assignment_statement_enum
:
1737 exp_fold_tree (s
->assignment_statement
.exp
,
1738 output_section_statement
,
1739 lang_final_phase_enum
,
1745 case lang_padding_statement_enum
:
1746 dot
+= s
->padding_statement
.size
;
1751 case lang_address_statement_enum
:
1762 DEFUN_VOID (lang_relocate_globals
)
1766 Each ldsym_type maintains a chain of pointers to asymbols which
1767 references the definition. Replace each pointer to the referenence
1768 with a pointer to only one place, preferably the definition. If
1769 the defintion isn't available then the common symbol, and if
1770 there isn't one of them then choose one reference.
1773 FOR_EACH_LDSYM (lgs
)
1777 if (lgs
->sdefs_chain
)
1779 it
= *(lgs
->sdefs_chain
);
1781 else if (lgs
->scoms_chain
!= (asymbol
**) NULL
)
1783 it
= *(lgs
->scoms_chain
);
1785 else if (lgs
->srefs_chain
!= (asymbol
**) NULL
)
1787 it
= *(lgs
->srefs_chain
);
1791 /* This can happen when the command line asked for a symbol to
1793 it
= (asymbol
*) NULL
;
1795 if (it
!= (asymbol
*) NULL
)
1797 asymbol
**ptr
= lgs
->srefs_chain
;;
1798 if (lgs
->flags
& SYM_WARNING
)
1800 produce_warnings (lgs
, it
);
1803 while (ptr
!= (asymbol
**) NULL
)
1805 asymbol
*ref
= *ptr
;
1808 ptr
= (asymbol
**) (ref
->udata
);
1817 DEFUN_VOID (lang_finish
)
1821 if (entry_symbol
== (char *) NULL
)
1823 /* No entry has been specified, look for start */
1824 entry_symbol
= "start";
1826 lgs
= ldsym_get_soft (entry_symbol
);
1827 if (lgs
&& lgs
->sdefs_chain
)
1829 asymbol
*sy
= *(lgs
->sdefs_chain
);
1831 /* We can set the entry address*/
1832 bfd_set_start_address (output_bfd
,
1833 outside_symbol_address (sy
));
1838 /* Can't find anything reasonable,
1839 use the first address in the text section
1841 asection
*ts
= bfd_get_section_by_name (output_bfd
, ".text");
1845 bfd_set_start_address (output_bfd
, ts
->vma
);
1850 /* By now we know the target architecture, and we may have an */
1851 /* ldfile_output_machine_name */
1853 DEFUN_VOID (lang_check
)
1855 lang_statement_union_type
*file
;
1857 unsigned long input_machine
;
1858 enum bfd_architecture input_architecture
;
1859 CONST bfd_arch_info_type
*compatible
;
1861 for (file
= file_chain
.head
;
1862 file
!= (lang_statement_union_type
*) NULL
;
1863 file
= file
->input_statement
.next
)
1865 unsigned long ldfile_new_output_machine
= 0;
1866 enum bfd_architecture ldfile_new_output_architecture
= bfd_arch_unknown
;
1868 input_bfd
= file
->input_statement
.the_bfd
;
1870 input_machine
= bfd_get_mach (input_bfd
);
1871 input_architecture
= bfd_get_arch (input_bfd
);
1874 /* Inspect the architecture and ensure we're linking like with
1877 compatible
= bfd_arch_get_compatible (input_bfd
,
1882 ldfile_output_machine
= compatible
->mach
;
1883 ldfile_output_architecture
= compatible
->arch
;
1888 info ("%P: warning, %s architecture of input file `%B' incompatible with %s output\n",
1889 bfd_printable_name (input_bfd
), input_bfd
,
1890 bfd_printable_name (output_bfd
));
1892 bfd_set_arch_mach (output_bfd
,
1893 ldfile_new_output_architecture
,
1894 ldfile_new_output_machine
);
1901 * run through all the global common symbols and tie them
1902 * to the output section requested.
1904 As an experiment we do this 4 times, once for all the byte sizes,
1905 then all the two bytes, all the four bytes and then everything else
1909 DEFUN_VOID (lang_common
)
1914 if (config
.relocateable_output
== false ||
1915 command_line
.force_common_definition
== true)
1917 for (power
= 1; (config
.sort_common
== true && power
== 1) || (power
<= 16); power
<<= 1)
1919 for (lgs
= symbol_head
;
1920 lgs
!= (ldsym_type
*) NULL
;
1924 unsigned int power_of_two
;
1928 if (lgs
->scoms_chain
!= (asymbol
**) NULL
)
1930 com
= *(lgs
->scoms_chain
);
1960 if (config
.sort_common
== false || align
== power
)
1962 /* Change from a common symbol into a definition of
1964 lgs
->sdefs_chain
= lgs
->scoms_chain
;
1965 lgs
->scoms_chain
= (asymbol
**) NULL
;
1967 /* Point to the correct common section */
1969 ((lang_input_statement_type
*)
1970 (com
->the_bfd
->usrdata
))->common_section
;
1971 /* Fix the size of the common section */
1973 com
->section
->_raw_size
=
1974 ALIGN (com
->section
->_raw_size
, align
);
1976 /* Remember if this is the biggest alignment ever seen */
1977 if (power_of_two
> com
->section
->alignment_power
)
1979 com
->section
->alignment_power
= power_of_two
;
1982 /* Symbol stops being common and starts being global, but
1983 we remember that it was common once. */
1985 com
->flags
= BSF_EXPORT
| BSF_GLOBAL
| BSF_OLD_COMMON
;
1986 com
->value
= com
->section
->_raw_size
;
1990 fprintf (config
.map_file
, "Allocating common %s: %x at %x %s\n",
1993 (unsigned) com
->value
,
1994 com
->the_bfd
->filename
);
1997 com
->section
->_raw_size
+= size
;
2010 run through the input files and ensure that every input
2011 section has somewhere to go. If one is found without
2012 a destination then create an input request and place it
2013 into the statement tree.
2017 DEFUN_VOID (lang_place_orphans
)
2019 lang_input_statement_type
*file
;
2021 for (file
= (lang_input_statement_type
*) file_chain
.head
;
2022 file
!= (lang_input_statement_type
*) NULL
;
2023 file
= (lang_input_statement_type
*) file
->next
)
2027 for (s
= file
->the_bfd
->sections
;
2028 s
!= (asection
*) NULL
;
2031 if (s
->output_section
== (asection
*) NULL
)
2033 /* This section of the file is not attatched, root
2034 around for a sensible place for it to go */
2036 if (file
->common_section
== s
)
2038 /* This is a lonely common section which must
2039 have come from an archive. We attatch to the
2040 section with the wildcard */
2041 if (config
.relocateable_output
!= true
2042 && command_line
.force_common_definition
== false)
2044 if (default_common_section
==
2045 (lang_output_section_statement_type
*) NULL
)
2047 info ("%P: No [COMMON] command, defaulting to .bss\n");
2049 default_common_section
=
2050 lang_output_section_statement_lookup (".bss");
2053 wild_doit (&default_common_section
->children
, s
,
2054 default_common_section
, file
);
2059 lang_output_section_statement_type
*os
=
2060 lang_output_section_statement_lookup (s
->name
);
2062 wild_doit (&os
->children
, s
, os
, file
);
2071 DEFUN (lang_set_flags
, (ptr
, flags
),
2075 boolean state
= false;
2090 /* ptr->flag_read = state; */
2093 /* ptr->flag_write = state; */
2096 /* ptr->flag_executable= state;*/
2100 /* ptr->flag_loadable= state;*/
2103 einfo ("%P%F illegal syntax in flags\n");
2113 DEFUN (lang_for_each_file
, (func
),
2114 PROTO (void, (*func
), (lang_input_statement_type
*)))
2116 lang_input_statement_type
*f
;
2118 for (f
= (lang_input_statement_type
*) file_chain
.head
;
2119 f
!= (lang_input_statement_type
*) NULL
;
2120 f
= (lang_input_statement_type
*) f
->next
)
2128 DEFUN (lang_for_each_input_section
, (func
),
2129 PROTO (void, (*func
), (bfd
* ab
, asection
* as
)))
2131 lang_input_statement_type
*f
;
2133 for (f
= (lang_input_statement_type
*) file_chain
.head
;
2134 f
!= (lang_input_statement_type
*) NULL
;
2135 f
= (lang_input_statement_type
*) f
->next
)
2139 for (s
= f
->the_bfd
->sections
;
2140 s
!= (asection
*) NULL
;
2143 func (f
->the_bfd
, s
);
2151 DEFUN (ldlang_add_file
, (entry
),
2152 lang_input_statement_type
* entry
)
2155 lang_statement_append (&file_chain
,
2156 (lang_statement_union_type
*) entry
,
2161 DEFUN (lang_add_output
, (name
),
2164 lang_output_statement_type
*new = new_stat (lang_output_statement
,
2168 had_output_filename
= true;
2172 static lang_output_section_statement_type
*current_section
;
2175 DEFUN (lang_enter_output_section_statement
,
2176 (output_section_statement_name
,
2180 char *output_section_statement_name AND
2181 etree_type
* address_exp AND
2183 bfd_vma block_value
)
2185 lang_output_section_statement_type
*os
;
2189 lang_output_section_statement_lookup (output_section_statement_name
);
2193 /* Add this statement to tree */
2194 /* add_statement(lang_output_section_statement_enum,
2195 output_section_statement);*/
2196 /* Make next things chain into subchain of this */
2198 if (os
->addr_tree
==
2199 (etree_type
*) NULL
)
2205 os
->block_value
= block_value
;
2206 stat_ptr
= &os
->children
;
2211 DEFUN_VOID (lang_final
)
2213 if (had_output_filename
== false)
2215 extern CONST
char *output_filename
;
2217 lang_add_output (output_filename
);
2221 /* Reset the current counters in the regions */
2223 DEFUN_VOID (reset_memory_regions
)
2225 lang_memory_region_type
*p
= lang_memory_region_list
;
2227 for (p
= lang_memory_region_list
;
2228 p
!= (lang_memory_region_type
*) NULL
;
2231 p
->current
= p
->origin
;
2237 DEFUN (create_symbol
, (name
, flags
, section
),
2238 CONST
char *name AND
2242 extern lang_input_statement_type
*script_file
;
2243 asymbol
**def_ptr
= (asymbol
**) stat_alloc ((bfd_size_type
) (sizeof (asymbol
**)));
2245 /* Add this definition to script file */
2246 asymbol
*def
= (asymbol
*) bfd_make_empty_symbol (script_file
->the_bfd
);
2248 def
->name
= buystring (name
);
2251 def
->section
= section
;
2254 Q_enter_global_ref (def_ptr
, name
);
2259 DEFUN_VOID (lang_process
)
2262 if (had_script
== false)
2264 parse_line (ldemul_get_script (), 1);
2266 lang_reasonable_defaults ();
2267 current_target
= default_target
;
2269 lang_for_each_statement (ldlang_open_output
); /* Open the output file */
2270 /* For each output section statement, create a section in the output
2272 lang_create_output_section_statements ();
2274 /* Create a dummy bfd for the script */
2275 lang_init_script_file ();
2277 /* Add to the hash table all undefineds on the command line */
2278 lang_place_undefineds ();
2280 /* Create a bfd for each input file */
2281 current_target
= default_target
;
2282 lang_for_each_statement (open_input_bfds
);
2284 common_section
.userdata
= (PTR
) & common_section_userdata
;
2287 /* Run through the contours of the script and attatch input sections
2288 to the correct output sections
2290 find_constructors ();
2291 map_input_to_output_sections (statement_list
.head
, (char *) NULL
,
2292 (lang_output_section_statement_type
*) NULL
);
2295 /* Find any sections not attatched explicitly and handle them */
2296 lang_place_orphans ();
2298 /* Size up the common data */
2301 ldemul_before_allocation ();
2304 /* Size up the sections */
2305 lang_size_sections (statement_list
.head
,
2307 &(statement_list
.head
), 0, (bfd_vma
) 0, false);
2310 /* Now run around and relax if we can */
2311 if (command_line
.relax
)
2313 reset_memory_regions ();
2315 /* Move the global symbols around */
2316 lang_relocate_globals ();
2324 lang_size_sections (statement_list
.head
,
2325 (lang_output_section_statement_type
*) NULL
,
2326 &(statement_list
.head
), 0, (bfd_vma
) 0, true);
2327 /* FIXME. Until the code in relax is fixed so that it only reads in
2328 stuff once, we cant iterate since there is no way for the linker to
2329 know what has been patched and what hasn't */
2340 /* See if anything special should be done now we know how big
2342 ldemul_after_allocation ();
2344 /* Do all the assignments, now that we know the final restingplaces
2345 of all the symbols */
2347 lang_do_assignments (statement_list
.head
,
2352 /* Move the global symbols around */
2353 lang_relocate_globals ();
2355 /* Make sure that we're not mixing architectures */
2363 /* EXPORTED TO YACC */
2366 DEFUN (lang_add_wild
, (section_name
, filename
),
2367 CONST
char *CONST section_name AND
2368 CONST
char *CONST filename
)
2370 lang_wild_statement_type
*new = new_stat (lang_wild_statement
,
2373 if (section_name
!= (char *) NULL
&& strcmp (section_name
, "COMMON") == 0)
2375 placed_commons
= true;
2377 if (filename
!= (char *) NULL
)
2379 lang_has_input_file
= true;
2381 new->section_name
= section_name
;
2382 new->filename
= filename
;
2383 lang_list_init (&new->children
);
2387 DEFUN (lang_section_start
, (name
, address
),
2388 CONST
char *name AND
2389 etree_type
* address
)
2391 lang_address_statement_type
*ad
= new_stat (lang_address_statement
, stat_ptr
);
2393 ad
->section_name
= name
;
2394 ad
->address
= address
;
2398 DEFUN (lang_add_entry
, (name
),
2401 entry_symbol
= name
;
2405 DEFUN (lang_add_target
, (name
),
2408 lang_target_statement_type
*new = new_stat (lang_target_statement
,
2416 DEFUN (lang_add_map
, (name
),
2424 map_option_f
= true;
2432 DEFUN (lang_add_fill
, (exp
),
2435 lang_fill_statement_type
*new = new_stat (lang_fill_statement
,
2442 DEFUN (lang_add_data
, (type
, exp
),
2444 union etree_union
*exp
)
2447 lang_data_statement_type
*new = new_stat (lang_data_statement
,
2456 DEFUN (lang_add_assignment
, (exp
),
2459 lang_assignment_statement_type
*new = new_stat (lang_assignment_statement
,
2466 DEFUN (lang_add_attribute
, (attribute
),
2467 enum statement_enum attribute
)
2469 new_statement (attribute
, sizeof (lang_statement_union_type
), stat_ptr
);
2473 DEFUN (lang_startup
, (name
),
2476 if (startup_file
!= (char *) NULL
)
2478 einfo ("%P%FMultiple STARTUP files\n");
2480 first_file
->filename
= name
;
2481 first_file
->local_sym_name
= name
;
2483 startup_file
= name
;
2487 DEFUN (lang_float
, (maybe
),
2490 lang_float_flag
= maybe
;
2494 DEFUN (lang_leave_output_section_statement
, (fill
, memspec
),
2496 CONST
char *memspec
)
2498 current_section
->fill
= fill
;
2499 current_section
->region
= lang_memory_region_lookup (memspec
);
2500 stat_ptr
= &statement_list
;
2502 /* We remember if we are closing a .data section, since we use it to
2503 store constructors in */
2504 if (strcmp (current_section
->name
, ".data") == 0)
2506 end_of_data_section_statement_list
= statement_list
;
2512 Create an absolute symbol with the given name with the value of the
2513 address of first byte of the section named.
2515 If the symbol already exists, then do nothing.
2518 DEFUN (lang_abs_symbol_at_beginning_of
, (section
, name
),
2519 CONST
char *section AND
2522 if (ldsym_undefined (name
))
2524 asection
*s
= bfd_get_section_by_name (output_bfd
, section
);
2525 asymbol
*def
= create_symbol (name
,
2526 BSF_GLOBAL
| BSF_EXPORT
,
2529 if (s
!= (asection
*) NULL
)
2531 def
->value
= s
->vma
;
2541 Create an absolute symbol with the given name with the value of the
2542 address of the first byte after the end of the section named.
2544 If the symbol already exists, then do nothing.
2547 DEFUN (lang_abs_symbol_at_end_of
, (section
, name
),
2548 CONST
char *section AND
2551 if (ldsym_undefined (name
))
2553 asection
*s
= bfd_get_section_by_name (output_bfd
, section
);
2555 /* Add a symbol called _end */
2556 asymbol
*def
= create_symbol (name
,
2557 BSF_GLOBAL
| BSF_EXPORT
,
2560 if (s
!= (asection
*) NULL
)
2562 def
->value
= s
->vma
+ s
->_raw_size
;
2572 DEFUN (lang_statement_append
, (list
, element
, field
),
2573 lang_statement_list_type
* list AND
2574 lang_statement_union_type
* element AND
2575 lang_statement_union_type
** field
)
2577 *(list
->tail
) = element
;
2581 /* Set the output format type */
2583 DEFUN (lang_add_output_format
, (format
),
2586 output_target
= format
;