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 asection *our_bfd_get_section_by_name PARAMS ((bfd *abfd,
85 const char *section));
86 static void wild_section PARAMS ((lang_wild_statement_type *ptr,
88 lang_input_statement_type *file,
89 lang_output_section_statement_type *output));
90 static lang_input_statement_type *lookup_name PARAMS ((const char *name));
91 static void load_symbols PARAMS ((lang_input_statement_type *entry));
92 static void wild PARAMS ((lang_wild_statement_type *s,
93 const char *section, const char *file,
95 lang_output_section_statement_type *output));
96 static bfd *open_output PARAMS ((const char *name));
97 static void ldlang_open_output PARAMS ((lang_statement_union_type *statement));
98 static void open_input_bfds PARAMS ((lang_statement_union_type *statement));
99 static void lang_reasonable_defaults PARAMS ((void));
100 static void lang_place_undefineds PARAMS ((void));
101 static void lang_create_output_section_statements PARAMS ((void));
102 static void map_input_to_output_sections
103 PARAMS ((lang_statement_union_type *s,
105 lang_output_section_statement_type *output_section_statement));
106 static void print_output_section_statement
107 PARAMS ((lang_output_section_statement_type *output_section_statement));
108 static void print_assignment
109 PARAMS ((lang_assignment_statement_type *assignment,
110 lang_output_section_statement_type *output_section));
111 static void print_input_statement PARAMS ((lang_input_statement_type *statm));
112 static void print_input_section PARAMS ((lang_input_section_type *in));
113 static void print_fill_statement PARAMS ((lang_fill_statement_type *fill));
114 static void print_data_statement PARAMS ((lang_data_statement_type *data));
115 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *reloc));
116 static void print_padding_statement PARAMS ((lang_padding_statement_type *s));
117 static void print_wild_statement
118 PARAMS ((lang_wild_statement_type *w,
119 lang_output_section_statement_type *os));
120 static void print_statement PARAMS ((lang_statement_union_type *s,
121 lang_output_section_statement_type *os));
122 static void print_statements PARAMS ((void));
123 static bfd_vma insert_pad PARAMS ((lang_statement_union_type **this_ptr,
124 fill_type fill, unsigned int power,
125 asection *output_section_statement,
127 static bfd_vma size_input_section
128 PARAMS ((lang_statement_union_type **this_ptr,
129 lang_output_section_statement_type *output_section_statement,
130 fill_type fill, bfd_vma dot, boolean relax));
131 static bfd_vma lang_do_assignments
132 PARAMS ((lang_statement_union_type * s,
133 lang_output_section_statement_type *output_section_statement,
136 static void lang_finish PARAMS ((void));
137 static void lang_check PARAMS ((void));
138 static void lang_common PARAMS ((void));
139 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
140 static void lang_place_orphans PARAMS ((void));
141 static int topower PARAMS ((int));
142 static void reset_memory_regions PARAMS ((void));
145 lang_output_section_statement_type *abs_output_section;
146 lang_statement_list_type *stat_ptr = &statement_list;
147 lang_statement_list_type file_chain =
149 CONST char *entry_symbol = 0;
150 boolean lang_has_input_file = false;
151 boolean had_output_filename = false;
152 boolean lang_float_flag = false;
153 boolean delete_output_file_on_failure = false;
155 etree_type *base; /* Relocation base - or null */
158 #if defined(__STDC__) || defined(ALMOST_STDC)
159 #define cat(a,b) a##b
161 #define cat(a,b) a/**/b
164 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
166 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
168 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
174 return obstack_alloc (&stat_obstack, size);
181 fprintf (config.map_file, "%5x", (unsigned) value);
185 print_alignment (value)
188 fprintf (config.map_file, "2**%1u", value);
195 fprintf (config.map_file, "%04x", (unsigned) value);
202 fprintf (config.map_file, "%*s", -longest_section_name, name);
205 /*----------------------------------------------------------------------
206 lang_for_each_statement walks the parse tree and calls the provided
207 function for each node
211 lang_for_each_statement_worker (func, s)
212 void (*func) PARAMS ((lang_statement_union_type *));
213 lang_statement_union_type *s;
215 for (; s != (lang_statement_union_type *) NULL; s = s->next)
219 switch (s->header.type)
221 case lang_constructors_statement_enum:
222 lang_for_each_statement_worker (func, constructor_list.head);
224 case lang_output_section_statement_enum:
225 lang_for_each_statement_worker
227 s->output_section_statement.children.head);
229 case lang_wild_statement_enum:
230 lang_for_each_statement_worker
232 s->wild_statement.children.head);
234 case lang_data_statement_enum:
235 case lang_reloc_statement_enum:
236 case lang_object_symbols_statement_enum:
237 case lang_output_statement_enum:
238 case lang_target_statement_enum:
239 case lang_input_section_enum:
240 case lang_input_statement_enum:
241 case lang_assignment_statement_enum:
242 case lang_padding_statement_enum:
243 case lang_address_statement_enum:
253 lang_for_each_statement (func)
254 void (*func) PARAMS ((lang_statement_union_type *));
256 lang_for_each_statement_worker (func,
257 statement_list.head);
260 /*----------------------------------------------------------------------*/
262 lang_list_init (list)
263 lang_statement_list_type *list;
265 list->head = (lang_statement_union_type *) NULL;
266 list->tail = &list->head;
269 /*----------------------------------------------------------------------
271 build a new statement node for the parse tree
276 lang_statement_union_type *
277 new_statement (type, size, list)
278 enum statement_enum type;
280 lang_statement_list_type * list;
282 lang_statement_union_type *new = (lang_statement_union_type *)
285 new->header.type = type;
286 new->header.next = (lang_statement_union_type *) NULL;
287 lang_statement_append (list, new, &new->header.next);
292 Build a new input file node for the language. There are several ways
293 in which we treat an input file, eg, we only look at symbols, or
294 prefix it with a -l etc.
296 We can be supplied with requests for input files more than once;
297 they may, for example be split over serveral lines like foo.o(.text)
298 foo.o(.data) etc, so when asked for a file we check that we havn't
299 got it already so we don't duplicate the bfd.
302 static lang_input_statement_type *
303 new_afile (name, file_type, target, add_to_list)
305 lang_input_file_enum_type file_type;
309 lang_input_statement_type *p;
312 p = new_stat (lang_input_statement, stat_ptr);
315 p = ((lang_input_statement_type *)
316 stat_alloc (sizeof (lang_input_statement_type)));
317 p->header.next = NULL;
320 lang_has_input_file = true;
322 p->complained = false;
325 case lang_input_file_is_symbols_only_enum:
327 p->is_archive = false;
329 p->local_sym_name = name;
330 p->just_syms_flag = true;
331 p->search_dirs_flag = false;
333 case lang_input_file_is_fake_enum:
335 p->is_archive = false;
337 p->local_sym_name = name;
338 p->just_syms_flag = false;
339 p->search_dirs_flag = false;
341 case lang_input_file_is_l_enum:
342 p->is_archive = true;
345 p->local_sym_name = concat ("-l", name, (const char *) NULL);
346 p->just_syms_flag = false;
347 p->search_dirs_flag = true;
349 case lang_input_file_is_marker_enum:
351 p->is_archive = false;
353 p->local_sym_name = name;
354 p->just_syms_flag = false;
355 p->search_dirs_flag = true;
357 case lang_input_file_is_search_file_enum:
359 p->is_archive = false;
361 p->local_sym_name = name;
362 p->just_syms_flag = false;
363 p->search_dirs_flag = true;
365 case lang_input_file_is_file_enum:
367 p->is_archive = false;
369 p->local_sym_name = name;
370 p->just_syms_flag = false;
371 p->search_dirs_flag = false;
376 p->the_bfd = (bfd *) NULL;
377 p->asymbols = (asymbol **) NULL;
378 p->superfile = (lang_input_statement_type *) NULL;
379 p->next_real_file = (lang_statement_union_type *) NULL;
380 p->next = (lang_statement_union_type *) NULL;
382 p->common_output_section = (asection *) NULL;
384 lang_statement_append (&input_file_chain,
385 (lang_statement_union_type *) p,
390 lang_input_statement_type *
391 lang_add_input_file (name, file_type, target)
393 lang_input_file_enum_type file_type;
396 /* Look it up or build a new one */
397 lang_has_input_file = true;
400 lang_input_statement_type *p;
402 for (p = (lang_input_statement_type *) input_file_chain.head;
403 p != (lang_input_statement_type *) NULL;
404 p = (lang_input_statement_type *) (p->next_real_file))
406 /* Sometimes we have incomplete entries in here */
407 if (p->filename != (char *) NULL)
409 if (strcmp (name, p->filename) == 0)
415 return new_afile (name, file_type, target, true);
418 /* Build enough state so that the parser can build its tree */
422 obstack_begin (&stat_obstack, 1000);
424 stat_ptr = &statement_list;
426 lang_list_init (stat_ptr);
428 lang_list_init (&input_file_chain);
429 lang_list_init (&lang_output_section_statement);
430 lang_list_init (&file_chain);
431 first_file = lang_add_input_file ((char *) NULL,
432 lang_input_file_is_marker_enum,
434 abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
436 abs_output_section->bfd_section = &bfd_abs_section;
440 /*----------------------------------------------------------------------
441 A region is an area of memory declared with the
442 MEMORY { name:org=exp, len=exp ... }
445 We maintain a list of all the regions here
447 If no regions are specified in the script, then the default is used
448 which is created when looked up to be the entire data space
451 static lang_memory_region_type *lang_memory_region_list;
452 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
454 lang_memory_region_type *
455 lang_memory_region_lookup (name)
456 CONST char *CONST name;
459 lang_memory_region_type *p = lang_memory_region_list;
461 for (p = lang_memory_region_list;
462 p != (lang_memory_region_type *) NULL;
465 if (strcmp (p->name, name) == 0)
470 if (strcmp (name, "*default*") == 0)
472 /* This is the default region, dig out first one on the list */
473 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
475 return lang_memory_region_list;
479 lang_memory_region_type *new =
480 (lang_memory_region_type *) stat_alloc ((bfd_size_type) (sizeof (lang_memory_region_type)));
482 new->name = buystring (name);
483 new->next = (lang_memory_region_type *) NULL;
485 *lang_memory_region_list_tail = new;
486 lang_memory_region_list_tail = &new->next;
488 new->length = ~(bfd_size_type)0;
490 new->had_full_message = false;
497 lang_output_section_statement_type *
498 lang_output_section_find (name)
499 CONST char *CONST name;
501 lang_statement_union_type *u;
502 lang_output_section_statement_type *lookup;
504 for (u = lang_output_section_statement.head;
505 u != (lang_statement_union_type *) NULL;
508 lookup = &u->output_section_statement;
509 if (strcmp (name, lookup->name) == 0)
514 return (lang_output_section_statement_type *) NULL;
517 lang_output_section_statement_type *
518 lang_output_section_statement_lookup (name)
519 CONST char *CONST name;
521 lang_output_section_statement_type *lookup;
523 lookup = lang_output_section_find (name);
524 if (lookup == (lang_output_section_statement_type *) NULL)
527 lookup = (lang_output_section_statement_type *)
528 new_stat (lang_output_section_statement, stat_ptr);
529 lookup->region = (lang_memory_region_type *) NULL;
531 lookup->block_value = 1;
534 lookup->next = (lang_statement_union_type *) NULL;
535 lookup->bfd_section = (asection *) NULL;
536 lookup->processed = false;
537 lookup->loadable = 1;
538 lookup->addr_tree = (etree_type *) NULL;
539 lang_list_init (&lookup->children);
541 lookup->memspec = (CONST char *) NULL;
543 lookup->subsection_alignment = -1;
544 lookup->section_alignment = -1;
545 lookup->load_base = (union etree_union *) NULL;
547 lang_statement_append (&lang_output_section_statement,
548 (lang_statement_union_type *) lookup,
556 print_flags (ignore_flags)
559 fprintf (config.map_file, "(");
561 if (flags->flag_read)
562 fprintf (outfile, "R");
563 if (flags->flag_write)
564 fprintf (outfile, "W");
565 if (flags->flag_executable)
566 fprintf (outfile, "X");
567 if (flags->flag_loadable)
568 fprintf (outfile, "L");
570 fprintf (config.map_file, ")");
576 lang_memory_region_type *m;
578 fprintf (config.map_file, "**MEMORY CONFIGURATION**\n\n");
580 fprintf (config.map_file, "name\t\torigin\t\tlength\t\tattributes\n");
582 fprintf (config.map_file,
583 "name\t\torigin length r_size c_size is attributes\n");
586 for (m = lang_memory_region_list;
587 m != (lang_memory_region_type *) NULL;
590 fprintf (config.map_file, "%-16s", m->name);
591 print_address (m->origin);
593 print_address ((bfd_vma)m->length);
595 print_address ((bfd_vma)m->old_length);
597 print_address (m->current - m->origin);
600 fprintf (config.map_file, " %2d%% ",
601 (int) ((m->current - m->origin) * 100 / m->old_length));
602 print_flags (&m->flags);
603 fprintf (config.map_file, "\n");
605 fprintf (config.map_file, "\n\n**LINK EDITOR MEMORY MAP**\n\n");
606 fprintf (config.map_file, "output input virtual\n");
607 fprintf (config.map_file, "section section address tsize\n\n");
618 lang_output_section_statement_type * s;
620 /* asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
621 section_userdata_type *new =
622 (section_userdata_type *)
623 stat_alloc ((bfd_size_type) (sizeof (section_userdata_type)));
625 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
626 if (s->bfd_section == (asection *) NULL)
627 s->bfd_section = bfd_make_section (output_bfd, s->name);
628 if (s->bfd_section == (asection *) NULL)
630 einfo ("%P%F: output format %s cannot represent section called %s\n",
631 output_bfd->xvec->name, s->name);
633 s->bfd_section->output_section = s->bfd_section;
634 /* s->bfd_section->flags = s->flags;*/
636 /* We initialize an output sections output offset to minus its own */
637 /* vma to allow us to output a section through itself */
638 s->bfd_section->output_offset = 0;
639 get_userdata (s->bfd_section) = (PTR) new;
643 /***********************************************************************
646 These expand statements like *(.text) and foo.o to a list of
647 explicit actions, like foo.o(.text), bar.o(.text) and
650 The toplevel routine, wild, takes a statement, section, file and
651 target. If either the section or file is null it is taken to be the
652 wildcard. Seperate lang_input_section statements are created for
653 each part of the expanstion, and placed after the statement provided.
658 wild_doit (ptr, section, output, file)
659 lang_statement_list_type * ptr;
661 lang_output_section_statement_type * output;
662 lang_input_statement_type * file;
664 if (output->bfd_section == (asection *) NULL)
667 if (section != (asection *) NULL
668 && section->output_section == (asection *) NULL)
670 /* Add a section reference to the list */
671 lang_input_section_type *new = new_stat (lang_input_section, ptr);
673 new->section = section;
675 section->output_section = output->bfd_section;
677 /* We don't copy the SEC_NEVER_LOAD flag from an input section to
678 an output section, because we want to be able to include a
679 SEC_NEVER_LOAD section in the middle of an otherwise loaded
680 section (I don't know why we want to do this, but we do).
681 build_link_order in ldwrite.c handles this case by turning the
682 embedded SEC_NEVER_LOAD section into a fill. */
683 section->output_section->flags |=
684 section->flags & (flagword) (~ SEC_NEVER_LOAD);
686 if (!output->loadable)
688 /* Turn off load flag */
689 output->bfd_section->flags &= ~SEC_LOAD;
690 output->bfd_section->flags |= SEC_NEVER_LOAD;
692 if (section->alignment_power > output->bfd_section->alignment_power)
694 output->bfd_section->alignment_power = section->alignment_power;
696 /* If supplied an aligmnet, then force it */
697 if (output->section_alignment != -1)
699 output->bfd_section->alignment_power = output->section_alignment;
705 our_bfd_get_section_by_name (abfd, section)
709 return bfd_get_section_by_name (abfd, section);
713 wild_section (ptr, section, file, output)
714 lang_wild_statement_type * ptr;
716 lang_input_statement_type * file;
717 lang_output_section_statement_type * output;
721 if (file->just_syms_flag == false)
723 if (section == (char *) NULL)
725 /* Do the creation to all sections in the file */
726 for (s = file->the_bfd->sections; s != (asection *) NULL; s = s->next)
729 if ((s->flags & SEC_IS_COMMON) == 0)
731 wild_doit (&ptr->children, s, output, file);
737 /* Do the creation to the named section only */
738 wild_doit (&ptr->children,
739 our_bfd_get_section_by_name (file->the_bfd, section),
745 /* passed a file name (which must have been seen already and added to
746 the statement tree. We will see if it has been opened already and
747 had its symbols read. If not then we'll read it.
749 Archives are pecuilar here. We may open them once, but if they do
750 not define anything we need at the time, they won't have all their
751 symbols read. If we need them later, we'll have to redo it.
753 static lang_input_statement_type *
757 lang_input_statement_type *search;
759 for (search = (lang_input_statement_type *) input_file_chain.head;
760 search != (lang_input_statement_type *) NULL;
761 search = (lang_input_statement_type *) search->next_real_file)
763 if (search->filename == (char *) NULL && name == (char *) NULL)
765 if (search->filename != (char *) NULL
766 && name != (char *) NULL
767 && strcmp (search->filename, name) == 0)
771 if (search == (lang_input_statement_type *) NULL)
772 search = new_afile (name, lang_input_file_is_file_enum, default_target,
775 /* If we have already added this file, or this file is not real
776 (FIXME: can that ever actually happen?) or the name is NULL
777 (FIXME: can that ever actually happen?) don't add this file. */
780 || search->filename == (const char *) NULL)
783 load_symbols (search);
788 /* Get the symbols for an input file. */
792 lang_input_statement_type *entry;
797 ldfile_open_file (entry);
799 if (bfd_check_format (entry->the_bfd, bfd_object))
801 ldlang_add_file (entry);
802 if (trace_files || trace_file_tries)
803 info_msg ("%I\n", entry);
805 else if (bfd_check_format (entry->the_bfd, bfd_archive))
807 /* There is nothing to do here; the add_symbols routine will
808 call ldlang_add_file (via the add_archive_element callback)
809 for each element of the archive which is used. */
812 einfo ("%F%B: file not recognized: %E\n", entry->the_bfd);
814 if (bfd_link_add_symbols (entry->the_bfd, &link_info) == false)
815 einfo ("%F%B: could not read symbols: %E\n", entry->the_bfd);
817 entry->loaded = true;
821 wild (s, section, file, target, output)
822 lang_wild_statement_type * s;
826 lang_output_section_statement_type * output;
828 lang_input_statement_type *f;
830 if (file == (char *) NULL)
832 /* Perform the iteration over all files in the list */
833 for (f = (lang_input_statement_type *) file_chain.head;
834 f != (lang_input_statement_type *) NULL;
835 f = (lang_input_statement_type *) f->next)
837 wild_section (s, section, f, output);
842 /* Perform the iteration over a single file */
843 wild_section (s, section, lookup_name (file), output);
845 if (section != (char *) NULL
846 && strcmp (section, "COMMON") == 0
847 && default_common_section == (lang_output_section_statement_type *) NULL)
849 /* Remember the section that common is going to incase we later
850 get something which doesn't know where to put it */
851 default_common_section = output;
856 read in all the files
865 if (output_target == (char *) NULL)
867 if (current_target != (char *) NULL)
868 output_target = current_target;
870 output_target = default_target;
872 output = bfd_openw (name, output_target);
874 if (output == (bfd *) NULL)
876 if (bfd_get_error () == bfd_error_invalid_target)
878 einfo ("%P%F: target %s not found\n", output_target);
880 einfo ("%P%F: cannot open output file %s: %E\n", name);
883 delete_output_file_on_failure = 1;
885 /* output->flags |= D_PAGED;*/
887 if (! bfd_set_format (output, bfd_object))
888 einfo ("%P%F:%s: can not make object file: %E\n", name);
889 if (! bfd_set_arch_mach (output,
890 ldfile_output_architecture,
891 ldfile_output_machine))
892 einfo ("%P%F:%s: can not set architecture: %E\n", name);
894 link_info.hash = bfd_link_hash_table_create (output);
895 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
896 einfo ("%P%F: can not create link hash table: %E\n");
898 bfd_set_gp_size (output, g_switch_value);
906 ldlang_open_output (statement)
907 lang_statement_union_type * statement;
909 switch (statement->header.type)
911 case lang_output_statement_enum:
912 ASSERT (output_bfd == (bfd *) NULL);
913 output_bfd = open_output (statement->output_statement.name);
914 ldemul_set_output_arch ();
915 if (config.magic_demand_paged && !link_info.relocateable)
916 output_bfd->flags |= D_PAGED;
918 output_bfd->flags &= ~D_PAGED;
919 if (config.text_read_only)
920 output_bfd->flags |= WP_TEXT;
922 output_bfd->flags &= ~WP_TEXT;
925 case lang_target_statement_enum:
926 current_target = statement->target_statement.target;
934 open_input_bfds (statement)
935 lang_statement_union_type * statement;
937 switch (statement->header.type)
939 case lang_target_statement_enum:
940 current_target = statement->target_statement.target;
942 case lang_wild_statement_enum:
943 /* Maybe we should load the file's symbols */
944 if (statement->wild_statement.filename)
946 (void) lookup_name (statement->wild_statement.filename);
949 case lang_input_statement_enum:
950 if (statement->input_statement.real == true)
952 statement->input_statement.target = current_target;
953 load_symbols (&statement->input_statement);
961 /* If there are [COMMONS] statements, put a wild one into the bss section */
964 lang_reasonable_defaults ()
967 lang_output_section_statement_lookup (".text");
968 lang_output_section_statement_lookup (".data");
970 default_common_section =
971 lang_output_section_statement_lookup (".bss");
974 if (placed_commons == false)
976 lang_wild_statement_type *new =
977 new_stat (lang_wild_statement,
978 &default_common_section->children);
980 new->section_name = "COMMON";
981 new->filename = (char *) NULL;
982 lang_list_init (&new->children);
989 Add the supplied name to the symbol table as an undefined reference.
990 Remove items from the chain as we open input bfds
992 typedef struct ldlang_undef_chain_list
994 struct ldlang_undef_chain_list *next;
996 } ldlang_undef_chain_list_type;
998 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
1001 ldlang_add_undef (name)
1002 CONST char *CONST name;
1004 ldlang_undef_chain_list_type *new =
1005 (ldlang_undef_chain_list_type
1006 *) stat_alloc ((bfd_size_type) (sizeof (ldlang_undef_chain_list_type)));
1008 new->next = ldlang_undef_chain_list_head;
1009 ldlang_undef_chain_list_head = new;
1011 new->name = buystring (name);
1014 /* Run through the list of undefineds created above and place them
1015 into the linker hash table as undefined symbols belonging to the
1019 lang_place_undefineds ()
1021 ldlang_undef_chain_list_type *ptr;
1023 for (ptr = ldlang_undef_chain_list_head;
1024 ptr != (ldlang_undef_chain_list_type *) NULL;
1027 struct bfd_link_hash_entry *h;
1029 h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
1030 if (h == (struct bfd_link_hash_entry *) NULL)
1031 einfo ("%P%F: bfd_link_hash_lookup failed: %E");
1032 if (h->type == bfd_link_hash_new)
1034 h->type = bfd_link_hash_undefined;
1035 h->u.undef.abfd = NULL;
1036 bfd_link_add_undef (link_info.hash, h);
1041 /* Copy important data from out internal form to the bfd way. Also
1042 create a section for the dummy file
1046 lang_create_output_section_statements ()
1048 lang_statement_union_type *os;
1050 for (os = lang_output_section_statement.head;
1051 os != (lang_statement_union_type *) NULL;
1052 os = os->output_section_statement.next)
1054 lang_output_section_statement_type *s =
1055 &os->output_section_statement;
1062 /* Open input files and attatch to output sections */
1064 map_input_to_output_sections (s, target, output_section_statement)
1065 lang_statement_union_type * s;
1067 lang_output_section_statement_type * output_section_statement;
1069 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1071 switch (s->header.type)
1075 case lang_wild_statement_enum:
1076 wild (&s->wild_statement, s->wild_statement.section_name,
1077 s->wild_statement.filename, target,
1078 output_section_statement);
1081 case lang_constructors_statement_enum:
1082 map_input_to_output_sections (constructor_list.head,
1084 output_section_statement);
1086 case lang_output_section_statement_enum:
1087 map_input_to_output_sections (s->output_section_statement.children.head,
1089 &s->output_section_statement);
1091 case lang_output_statement_enum:
1093 case lang_target_statement_enum:
1094 target = s->target_statement.target;
1096 case lang_fill_statement_enum:
1097 case lang_input_section_enum:
1098 case lang_object_symbols_statement_enum:
1099 case lang_data_statement_enum:
1100 case lang_reloc_statement_enum:
1101 case lang_assignment_statement_enum:
1102 case lang_padding_statement_enum:
1104 case lang_afile_asection_pair_statement_enum:
1107 case lang_address_statement_enum:
1108 /* Mark the specified section with the supplied address */
1110 lang_output_section_statement_type *os =
1111 lang_output_section_statement_lookup
1112 (s->address_statement.section_name);
1114 os->addr_tree = s->address_statement.address;
1115 if (os->bfd_section == (asection *) NULL)
1117 einfo ("%P%F: cannot set the address of undefined section %s\n",
1118 s->address_statement.section_name);
1122 case lang_input_statement_enum:
1123 /* A standard input statement, has no wildcards */
1130 print_output_section_statement (output_section_statement)
1131 lang_output_section_statement_type * output_section_statement;
1133 asection *section = output_section_statement->bfd_section;
1136 print_section (output_section_statement->name);
1141 print_dot = section->vma;
1145 print_address (section->vma);
1147 print_size (section->_raw_size);
1149 print_size(section->_cooked_size);
1151 print_alignment (section->alignment_power);
1154 fprintf (config.map_file, "%s flags", output_section_statement->region->name);
1155 print_flags (stdout, &output_section_statement->flags);
1157 if (section->flags & SEC_LOAD)
1158 fprintf (config.map_file, "load ");
1159 if (section->flags & SEC_ALLOC)
1160 fprintf (config.map_file, "alloc ");
1161 if (section->flags & SEC_RELOC)
1162 fprintf (config.map_file, "reloc ");
1163 if (section->flags & SEC_HAS_CONTENTS)
1164 fprintf (config.map_file, "contents ");
1169 fprintf (config.map_file, "No attached output section");
1172 if (output_section_statement->load_base)
1174 int b = exp_get_value_int(output_section_statement->load_base,
1175 0, "output base", lang_final_phase_enum);
1176 printf("Output address %08x\n", b);
1178 if (output_section_statement->section_alignment >= 0
1179 || output_section_statement->section_alignment >= 0)
1181 printf("\t\t\t\t\tforced alignment ");
1182 if ( output_section_statement->section_alignment >= 0)
1184 printf("section 2**%d ",output_section_statement->section_alignment );
1186 if ( output_section_statement->subsection_alignment >= 0)
1188 printf("subsection 2**%d ",output_section_statement->subsection_alignment );
1193 print_statement (output_section_statement->children.head,
1194 output_section_statement);
1199 print_assignment (assignment, output_section)
1200 lang_assignment_statement_type * assignment;
1201 lang_output_section_statement_type * output_section;
1203 etree_value_type result;
1209 print_address (print_dot);
1211 result = exp_fold_tree (assignment->exp->assign.src,
1213 lang_final_phase_enum,
1219 print_address (result.value);
1223 fprintf (config.map_file, "*undefined*");
1226 exp_print_tree (assignment->exp);
1228 fprintf (config.map_file, "\n");
1232 print_input_statement (statm)
1233 lang_input_statement_type * statm;
1235 if (statm->filename != (char *) NULL)
1237 fprintf (config.map_file, "LOAD %s\n", statm->filename);
1241 /* Print all the defined symbols for the abfd provided by in the supplied
1246 print_one_symbol (hash_entry, ptr)
1247 struct bfd_link_hash_entry *hash_entry;
1250 asection * sec = (asection *)ptr;
1252 if (hash_entry->type == bfd_link_hash_defined)
1254 if (sec == hash_entry->u.def.section) {
1256 fprintf (config.map_file, " ");
1258 fprintf (config.map_file, " ");
1259 print_address (hash_entry->u.def.value + outside_section_address (sec));
1260 fprintf (config.map_file, " %s", hash_entry->root.string);
1269 print_input_section (in)
1270 lang_input_section_type * in;
1272 asection *i = in->section;
1273 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
1278 fprintf (config.map_file, " ");
1279 print_section (i->name);
1280 fprintf (config.map_file, " ");
1281 if (i->output_section)
1283 print_address (i->output_section->vma + i->output_offset);
1284 fprintf (config.map_file, " ");
1285 print_size (i->_raw_size);
1286 fprintf (config.map_file, " ");
1287 print_size(i->_cooked_size);
1288 fprintf (config.map_file, " ");
1289 print_alignment (i->alignment_power);
1290 fprintf (config.map_file, " ");
1294 bfd *abfd = in->ifile->the_bfd;
1296 if (in->ifile->just_syms_flag == true)
1298 fprintf (config.map_file, "symbols only ");
1301 fprintf (config.map_file, " %s ", abfd->xvec->name);
1302 if (abfd->my_archive != (bfd *) NULL)
1304 fprintf (config.map_file, "[%s]%s", abfd->my_archive->filename,
1309 fprintf (config.map_file, "%s", abfd->filename);
1311 fprintf (config.map_file, "(overhead %d bytes)", (int) bfd_alloc_size (abfd));
1314 /* Print all the symbols */
1315 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
1323 print_dot = outside_section_address (i) + size;
1327 fprintf (config.map_file, "No output section allocated\n");
1333 print_fill_statement (fill)
1334 lang_fill_statement_type * fill;
1336 fprintf (config.map_file, "FILL mask ");
1337 print_fill (fill->fill);
1341 print_data_statement (data)
1342 lang_data_statement_type * data;
1344 /* bfd_vma value; */
1349 /* ASSERT(print_dot == data->output_vma);*/
1351 print_address (data->output_vma + data->output_section->vma);
1353 print_address (data->value);
1358 fprintf (config.map_file, "BYTE ");
1359 print_dot += BYTE_SIZE;
1362 fprintf (config.map_file, "SHORT ");
1363 print_dot += SHORT_SIZE;
1366 fprintf (config.map_file, "LONG ");
1367 print_dot += LONG_SIZE;
1370 fprintf (config.map_file, "QUAD ");
1371 print_dot += QUAD_SIZE;
1375 exp_print_tree (data->exp);
1377 fprintf (config.map_file, "\n");
1380 /* Print a reloc statement. */
1383 print_reloc_statement (reloc)
1384 lang_reloc_statement_type *reloc;
1391 /* ASSERT(print_dot == data->output_vma);*/
1393 print_address (reloc->output_vma + reloc->output_section->vma);
1395 print_address (reloc->addend_value);
1398 fprintf (config.map_file, "RELOC %s ", reloc->howto->name);
1400 print_dot += bfd_get_reloc_size (reloc->howto);
1402 exp_print_tree (reloc->addend_exp);
1404 fprintf (config.map_file, "\n");
1408 print_padding_statement (s)
1409 lang_padding_statement_type * s;
1413 print_section ("*fill*");
1415 print_address (s->output_offset + s->output_section->vma);
1417 print_size (s->size);
1419 print_fill (s->fill);
1422 print_dot = s->output_offset + s->output_section->vma + s->size;
1427 print_wild_statement (w, os)
1428 lang_wild_statement_type * w;
1429 lang_output_section_statement_type * os;
1431 fprintf (config.map_file, " from ");
1432 if (w->filename != (char *) NULL)
1434 fprintf (config.map_file, "%s", w->filename);
1438 fprintf (config.map_file, "*");
1440 if (w->section_name != (char *) NULL)
1442 fprintf (config.map_file, "(%s)", w->section_name);
1446 fprintf (config.map_file, "(*)");
1449 print_statement (w->children.head, os);
1453 print_statement (s, os)
1454 lang_statement_union_type * s;
1455 lang_output_section_statement_type * os;
1459 switch (s->header.type)
1461 case lang_constructors_statement_enum:
1462 fprintf (config.map_file, "constructors:\n");
1463 print_statement (constructor_list.head, os);
1465 case lang_wild_statement_enum:
1466 print_wild_statement (&s->wild_statement, os);
1469 fprintf (config.map_file, "Fail with %d\n", s->header.type);
1472 case lang_address_statement_enum:
1473 fprintf (config.map_file, "address\n");
1475 case lang_object_symbols_statement_enum:
1476 fprintf (config.map_file, "object symbols\n");
1478 case lang_fill_statement_enum:
1479 print_fill_statement (&s->fill_statement);
1481 case lang_data_statement_enum:
1482 print_data_statement (&s->data_statement);
1484 case lang_reloc_statement_enum:
1485 print_reloc_statement (&s->reloc_statement);
1487 case lang_input_section_enum:
1488 print_input_section (&s->input_section);
1490 case lang_padding_statement_enum:
1491 print_padding_statement (&s->padding_statement);
1493 case lang_output_section_statement_enum:
1494 print_output_section_statement (&s->output_section_statement);
1496 case lang_assignment_statement_enum:
1497 print_assignment (&s->assignment_statement,
1500 case lang_target_statement_enum:
1501 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
1503 case lang_output_statement_enum:
1504 fprintf (config.map_file, "OUTPUT(%s %s)\n",
1505 s->output_statement.name,
1506 output_target ? output_target : "");
1508 case lang_input_statement_enum:
1509 print_input_statement (&s->input_statement);
1511 case lang_afile_asection_pair_statement_enum:
1523 print_statement (statement_list.head,
1524 abs_output_section);
1529 insert_pad (this_ptr, fill, power, output_section_statement, dot)
1530 lang_statement_union_type ** this_ptr;
1533 asection * output_section_statement;
1536 /* Align this section first to the
1537 input sections requirement, then
1538 to the output section's requirement.
1539 If this alignment is > than any seen before,
1540 then record it too. Perform the alignment by
1541 inserting a magic 'padding' statement.
1544 unsigned int alignment_needed = align_power (dot, power) - dot;
1546 if (alignment_needed != 0)
1548 lang_statement_union_type *new =
1549 (lang_statement_union_type *)
1550 stat_alloc ((bfd_size_type) (sizeof (lang_padding_statement_type)));
1552 /* Link into existing chain */
1553 new->header.next = *this_ptr;
1555 new->header.type = lang_padding_statement_enum;
1556 new->padding_statement.output_section = output_section_statement;
1557 new->padding_statement.output_offset =
1558 dot - output_section_statement->vma;
1559 new->padding_statement.fill = fill;
1560 new->padding_statement.size = alignment_needed;
1564 /* Remember the most restrictive alignment */
1565 if (power > output_section_statement->alignment_power)
1567 output_section_statement->alignment_power = power;
1569 output_section_statement->_raw_size += alignment_needed;
1570 return alignment_needed + dot;
1574 /* Work out how much this section will move the dot point */
1576 size_input_section (this_ptr, output_section_statement, fill, dot, relax)
1577 lang_statement_union_type ** this_ptr;
1578 lang_output_section_statement_type * output_section_statement;
1583 lang_input_section_type *is = &((*this_ptr)->input_section);
1584 asection *i = is->section;
1586 if (is->ifile->just_syms_flag == false)
1588 if (output_section_statement->subsection_alignment != -1)
1589 i->alignment_power =
1590 output_section_statement->subsection_alignment;
1592 dot = insert_pad (this_ptr, fill, i->alignment_power,
1593 output_section_statement->bfd_section, dot);
1595 /* Remember where in the output section this input section goes */
1597 i->output_offset = dot - output_section_statement->bfd_section->vma;
1599 /* Mark how big the output section must be to contain this now
1601 if (i->_cooked_size != 0)
1602 dot += i->_cooked_size;
1604 dot += i->_raw_size;
1605 output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma;
1609 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
1615 /* This variable indicates whether bfd_relax_section should be called
1618 static boolean relax_again;
1620 /* Set the sizes for all the output sections. */
1623 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
1624 lang_statement_union_type * s;
1625 lang_output_section_statement_type * output_section_statement;
1626 lang_statement_union_type ** prev;
1631 /* Size up the sections from their constituent parts */
1632 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1634 switch (s->header.type)
1637 case lang_output_section_statement_enum:
1640 lang_output_section_statement_type *os = &s->output_section_statement;
1642 /* If this is a COFF shared library section, use the size and
1643 address from the input section. FIXME: This is COFF
1644 specific; it would be cleaner if there were some other way
1645 to do this, but nothing simple comes to mind. */
1646 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
1650 if (os->children.head == NULL
1651 || os->children.head->next != NULL
1652 || os->children.head->header.type != lang_input_section_enum)
1653 einfo ("%P%X: Internal error on COFF shared library section %s",
1656 input = os->children.head->input_section.section;
1657 bfd_set_section_vma (os->bfd_section->owner,
1659 bfd_section_vma (input->owner, input));
1660 os->bfd_section->_raw_size = input->_raw_size;
1664 if (os->bfd_section == &bfd_abs_section)
1666 /* No matter what happens, an abs section starts at zero */
1667 bfd_set_section_vma (0, os->bfd_section, 0);
1671 if (os->addr_tree == (etree_type *) NULL)
1673 /* No address specified for this section, get one
1674 from the region specification
1676 if (os->region == (lang_memory_region_type *) NULL)
1678 os->region = lang_memory_region_lookup ("*default*");
1680 dot = os->region->current;
1681 if (os->section_alignment == -1)
1682 dot = align_power (dot, os->bfd_section->alignment_power);
1688 r = exp_fold_tree (os->addr_tree,
1690 lang_allocating_phase_enum,
1692 if (r.valid == false)
1694 einfo ("%F%S: non constant address expression for section %s\n",
1699 /* The section starts here */
1700 /* First, align to what the section needs */
1702 if (os->section_alignment != -1)
1703 dot = align_power (dot, os->section_alignment);
1705 bfd_set_section_vma (0, os->bfd_section, dot);
1707 if (os->load_base) {
1708 os->bfd_section->lma
1709 = exp_get_value_int(os->load_base, 0,"load base", lang_final_phase_enum);
1714 os->bfd_section->output_offset = 0;
1716 (void) lang_size_sections (os->children.head, os, &os->children.head,
1717 os->fill, dot, relax);
1718 /* Ignore the size of the input sections, use the vma and size to */
1721 after = ALIGN_N (os->bfd_section->vma +
1722 os->bfd_section->_raw_size,
1723 /* The coercion here is important, see ld.h. */
1724 (bfd_vma) os->block_value);
1726 os->bfd_section->_raw_size = after - os->bfd_section->vma;
1727 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1728 os->processed = true;
1730 /* Replace into region ? */
1731 if (os->addr_tree == (etree_type *) NULL
1732 && os->region != (lang_memory_region_type *) NULL)
1734 os->region->current = dot;
1735 /* Make sure this isn't silly */
1736 if (( os->region->current
1737 > os->region->origin + os->region->length)
1738 || ( os->region->origin > os->region->current ))
1740 einfo ("%X%P: region %s is full (%B section %s)\n",
1742 os->bfd_section->owner,
1743 os->bfd_section->name);
1744 /* Reset the region pointer */
1745 os->region->current = 0;
1753 case lang_constructors_statement_enum:
1754 dot = lang_size_sections (constructor_list.head,
1755 output_section_statement,
1756 &s->wild_statement.children.head,
1761 case lang_data_statement_enum:
1763 unsigned int size = 0;
1765 s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
1766 s->data_statement.output_section =
1767 output_section_statement->bfd_section;
1769 switch (s->data_statement.type)
1786 output_section_statement->bfd_section->_raw_size += size;
1790 case lang_reloc_statement_enum:
1794 s->reloc_statement.output_vma =
1795 dot - output_section_statement->bfd_section->vma;
1796 s->reloc_statement.output_section =
1797 output_section_statement->bfd_section;
1798 size = bfd_get_reloc_size (s->reloc_statement.howto);
1800 output_section_statement->bfd_section->_raw_size += size;
1804 case lang_wild_statement_enum:
1806 dot = lang_size_sections (s->wild_statement.children.head,
1807 output_section_statement,
1808 &s->wild_statement.children.head,
1814 case lang_object_symbols_statement_enum:
1815 link_info.create_object_symbols_section =
1816 output_section_statement->bfd_section;
1818 case lang_output_statement_enum:
1819 case lang_target_statement_enum:
1821 case lang_input_section_enum:
1825 i = (*prev)->input_section.section;
1827 i->_cooked_size = i->_raw_size;
1832 if (! bfd_relax_section (i->owner, i, &link_info, &again))
1833 einfo ("%P%F: can't relax section: %E\n");
1837 dot = size_input_section (prev,
1838 output_section_statement,
1839 output_section_statement->fill,
1843 case lang_input_statement_enum:
1845 case lang_fill_statement_enum:
1846 s->fill_statement.output_section = output_section_statement->bfd_section;
1848 fill = s->fill_statement.fill;
1850 case lang_assignment_statement_enum:
1852 bfd_vma newdot = dot;
1854 exp_fold_tree (s->assignment_statement.exp,
1855 output_section_statement,
1856 lang_allocating_phase_enum,
1860 if (newdot != dot && !relax)
1862 /* The assignment changed dot. Insert a pad. */
1863 if (output_section_statement == abs_output_section)
1865 /* If we don't have an output section, then just adjust
1866 the default memory address. */
1867 lang_memory_region_lookup ("*default*")->current = newdot;
1871 lang_statement_union_type *new =
1872 ((lang_statement_union_type *)
1873 stat_alloc (sizeof (lang_padding_statement_type)));
1875 /* Link into existing chain */
1876 new->header.next = *prev;
1878 new->header.type = lang_padding_statement_enum;
1879 new->padding_statement.output_section =
1880 output_section_statement->bfd_section;
1881 new->padding_statement.output_offset =
1882 dot - output_section_statement->bfd_section->vma;
1883 new->padding_statement.fill = fill;
1884 new->padding_statement.size = newdot - dot;
1885 output_section_statement->bfd_section->_raw_size +=
1886 new->padding_statement.size;
1894 case lang_padding_statement_enum:
1895 /* If we are relaxing, and this is not the first pass, some
1896 padding statements may have been inserted during previous
1897 passes. We may have to move the padding statement to a new
1898 location if dot has a different value at this point in this
1899 pass than it did at this point in the previous pass. */
1900 s->padding_statement.output_offset =
1901 dot - output_section_statement->bfd_section->vma;
1902 dot += s->padding_statement.size;
1909 /* This can only get here when relaxing is turned on */
1911 case lang_address_statement_enum:
1914 prev = &s->header.next;
1920 lang_do_assignments (s, output_section_statement, fill, dot)
1921 lang_statement_union_type * s;
1922 lang_output_section_statement_type * output_section_statement;
1926 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1928 switch (s->header.type)
1930 case lang_constructors_statement_enum:
1931 dot = lang_do_assignments (constructor_list.head,
1932 output_section_statement,
1937 case lang_output_section_statement_enum:
1939 lang_output_section_statement_type *os =
1940 &(s->output_section_statement);
1942 dot = os->bfd_section->vma;
1943 (void) lang_do_assignments (os->children.head, os, os->fill, dot);
1944 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1947 case lang_wild_statement_enum:
1949 dot = lang_do_assignments (s->wild_statement.children.head,
1950 output_section_statement,
1955 case lang_object_symbols_statement_enum:
1956 case lang_output_statement_enum:
1957 case lang_target_statement_enum:
1959 case lang_common_statement_enum:
1962 case lang_data_statement_enum:
1964 etree_value_type value;
1966 value = exp_fold_tree (s->data_statement.exp,
1968 lang_final_phase_enum, dot, &dot);
1969 s->data_statement.value = value.value;
1970 if (value.valid == false)
1971 einfo ("%F%P: invalid data statement\n");
1973 switch (s->data_statement.type)
1990 case lang_reloc_statement_enum:
1992 etree_value_type value;
1994 value = exp_fold_tree (s->reloc_statement.addend_exp,
1996 lang_final_phase_enum, dot, &dot);
1997 s->reloc_statement.addend_value = value.value;
1998 if (value.valid == false)
1999 einfo ("%F%P: invalid reloc statement\n");
2001 dot += bfd_get_reloc_size (s->reloc_statement.howto);
2004 case lang_input_section_enum:
2006 asection *in = s->input_section.section;
2008 if (in->_cooked_size != 0)
2009 dot += in->_cooked_size;
2011 dot += in->_raw_size;
2015 case lang_input_statement_enum:
2017 case lang_fill_statement_enum:
2018 fill = s->fill_statement.fill;
2020 case lang_assignment_statement_enum:
2022 exp_fold_tree (s->assignment_statement.exp,
2023 output_section_statement,
2024 lang_final_phase_enum,
2030 case lang_padding_statement_enum:
2031 dot += s->padding_statement.size;
2036 case lang_address_statement_enum:
2047 struct bfd_link_hash_entry *h;
2048 boolean warn = link_info.relocateable ? false : true;
2050 if (entry_symbol == (char *) NULL)
2052 /* No entry has been specified. Look for start, but don't warn
2053 if we don't find it. */
2054 entry_symbol = "start";
2058 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
2059 if (h != (struct bfd_link_hash_entry *) NULL
2060 && h->type == bfd_link_hash_defined)
2064 val = (h->u.def.value
2065 + bfd_get_section_vma (output_bfd,
2066 h->u.def.section->output_section)
2067 + h->u.def.section->output_offset);
2068 if (! bfd_set_start_address (output_bfd, val))
2069 einfo ("%P%F:%s: can't set start address\n", entry_symbol);
2075 /* Can't find the entry symbol. Use the first address in the
2077 ts = bfd_get_section_by_name (output_bfd, ".text");
2078 if (ts != (asection *) NULL)
2081 einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n",
2082 entry_symbol, bfd_get_section_vma (output_bfd, ts));
2083 if (! bfd_set_start_address (output_bfd,
2084 bfd_get_section_vma (output_bfd, ts)))
2085 einfo ("%P%F: can't set start address\n");
2090 einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n",
2096 /* By now we know the target architecture, and we may have an */
2097 /* ldfile_output_machine_name */
2101 lang_statement_union_type *file;
2103 unsigned long input_machine;
2104 enum bfd_architecture input_architecture;
2105 CONST bfd_arch_info_type *compatible;
2107 for (file = file_chain.head;
2108 file != (lang_statement_union_type *) NULL;
2109 file = file->input_statement.next)
2111 input_bfd = file->input_statement.the_bfd;
2113 input_machine = bfd_get_mach (input_bfd);
2114 input_architecture = bfd_get_arch (input_bfd);
2117 /* Inspect the architecture and ensure we're linking like with
2120 compatible = bfd_arch_get_compatible (input_bfd,
2125 ldfile_output_machine = compatible->mach;
2126 ldfile_output_architecture = compatible->arch;
2131 einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n",
2132 bfd_printable_name (input_bfd), input_bfd,
2133 bfd_printable_name (output_bfd));
2135 if (! bfd_set_arch_mach (output_bfd,
2138 einfo ("%P%F:%s: can't set architecture: %E\n",
2139 bfd_get_filename (output_bfd));
2145 /* Look through all the global common symbols and attach them to the
2146 correct section. The -sort-common command line switch may be used
2147 to roughly sort the entries by size. */
2152 if (link_info.relocateable
2153 && ! command_line.force_common_definition)
2156 if (! config.sort_common)
2157 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
2162 for (power = 1; power <= 16; power <<= 1)
2163 bfd_link_hash_traverse (link_info.hash, lang_one_common,
2168 /* Place one common symbol in the correct section. */
2171 lang_one_common (h, info)
2172 struct bfd_link_hash_entry *h;
2175 unsigned int power_of_two;
2180 if (h->type != bfd_link_hash_common)
2213 if (config.sort_common && align != *(unsigned int *) info)
2216 section = h->u.c.section;
2218 /* Increase the size of the section. */
2219 section->_raw_size = ALIGN_N (section->_raw_size, align);
2221 /* Adjust the alignment if necessary. */
2222 if (power_of_two > section->alignment_power)
2223 section->alignment_power = power_of_two;
2225 /* Change the symbol from common to defined. */
2226 h->type = bfd_link_hash_defined;
2227 h->u.def.section = section;
2228 h->u.def.value = section->_raw_size;
2230 /* Increase the size of the section. */
2231 section->_raw_size += size;
2233 if (config.map_file != NULL)
2234 fprintf (config.map_file, "Allocating common %s: %lx at %lx %s\n",
2235 h->root.string, (unsigned long) size,
2236 (unsigned long) h->u.def.value, section->owner->filename);
2242 run through the input files and ensure that every input
2243 section has somewhere to go. If one is found without
2244 a destination then create an input request and place it
2245 into the statement tree.
2249 lang_place_orphans ()
2251 lang_input_statement_type *file;
2253 for (file = (lang_input_statement_type *) file_chain.head;
2254 file != (lang_input_statement_type *) NULL;
2255 file = (lang_input_statement_type *) file->next)
2259 for (s = file->the_bfd->sections;
2260 s != (asection *) NULL;
2263 if (s->output_section == (asection *) NULL)
2265 /* This section of the file is not attatched, root
2266 around for a sensible place for it to go */
2268 if (file->common_section == s)
2270 /* This is a lonely common section which must
2271 have come from an archive. We attatch to the
2272 section with the wildcard */
2273 if (! link_info.relocateable
2274 && ! command_line.force_common_definition)
2276 if (default_common_section ==
2277 (lang_output_section_statement_type *) NULL)
2279 info_msg ("%P: no [COMMON] command, defaulting to .bss\n");
2281 default_common_section =
2282 lang_output_section_statement_lookup (".bss");
2285 wild_doit (&default_common_section->children, s,
2286 default_common_section, file);
2291 lang_output_section_statement_type *os =
2292 lang_output_section_statement_lookup (s->name);
2294 wild_doit (&os->children, s, os, file);
2303 lang_set_flags (ptr, flags)
2307 boolean state = false;
2322 /* ptr->flag_read = state; */
2325 /* ptr->flag_write = state; */
2328 /* ptr->flag_executable= state;*/
2332 /* ptr->flag_loadable= state;*/
2335 einfo ("%P%F: invalid syntax in flags\n");
2345 lang_for_each_file (func)
2346 void (*func) PARAMS ((lang_input_statement_type *));
2348 lang_input_statement_type *f;
2350 for (f = (lang_input_statement_type *) file_chain.head;
2351 f != (lang_input_statement_type *) NULL;
2352 f = (lang_input_statement_type *) f->next)
2363 lang_for_each_input_section (func)
2364 void (*func) PARAMS ((bfd * ab, asection * as));
2366 lang_input_statement_type *f;
2368 for (f = (lang_input_statement_type *) file_chain.head;
2369 f != (lang_input_statement_type *) NULL;
2370 f = (lang_input_statement_type *) f->next)
2374 for (s = f->the_bfd->sections;
2375 s != (asection *) NULL;
2378 func (f->the_bfd, s);
2386 ldlang_add_file (entry)
2387 lang_input_statement_type * entry;
2391 lang_statement_append (&file_chain,
2392 (lang_statement_union_type *) entry,
2395 /* The BFD linker needs to have a list of all input BFDs involved in
2397 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
2398 ASSERT (entry->the_bfd != output_bfd);
2399 for (pp = &link_info.input_bfds;
2400 *pp != (bfd *) NULL;
2401 pp = &(*pp)->link_next)
2403 *pp = entry->the_bfd;
2404 entry->the_bfd->usrdata = (PTR) entry;
2405 bfd_set_gp_size (entry->the_bfd, g_switch_value);
2409 lang_add_output (name, from_script)
2413 /* Make -o on command line override OUTPUT in script. */
2414 if (had_output_filename == false || !from_script)
2416 output_filename = name;
2417 had_output_filename = true;
2422 static lang_output_section_statement_type *current_section;
2424 static int topower(x)
2429 if (x < 0) return -1;
2430 for (l = 0; l < 32; l++)
2432 if (i >= x) return l;
2438 lang_enter_output_section_statement (output_section_statement_name,
2439 address_exp, flags, block_value,
2440 align, subalign, ebase)
2441 const char *output_section_statement_name;
2442 etree_type * address_exp;
2444 bfd_vma block_value;
2446 etree_type *subalign;
2449 lang_output_section_statement_type *os;
2453 lang_output_section_statement_lookup (output_section_statement_name);
2457 /* Add this statement to tree */
2458 /* add_statement(lang_output_section_statement_enum,
2459 output_section_statement);*/
2460 /* Make next things chain into subchain of this */
2462 if (os->addr_tree ==
2463 (etree_type *) NULL)
2469 if (flags & SEC_NEVER_LOAD)
2473 os->block_value = block_value ? block_value : 1;
2474 stat_ptr = &os->children;
2476 os->subsection_alignment = topower(
2477 exp_get_value_int(subalign, -1,
2478 "subsection alignment",
2480 os->section_alignment = topower(
2481 exp_get_value_int(align, -1,
2482 "section alignment", 0));
2484 os->load_base = ebase;
2491 lang_output_statement_type *new =
2492 new_stat (lang_output_statement, stat_ptr);
2494 new->name = output_filename;
2497 /* Reset the current counters in the regions */
2499 reset_memory_regions ()
2501 lang_memory_region_type *p = lang_memory_region_list;
2503 for (p = lang_memory_region_list;
2504 p != (lang_memory_region_type *) NULL;
2507 p->old_length = (bfd_size_type) (p->current - p->origin);
2508 p->current = p->origin;
2515 lang_reasonable_defaults ();
2516 current_target = default_target;
2518 lang_for_each_statement (ldlang_open_output); /* Open the output file */
2519 /* For each output section statement, create a section in the output
2521 lang_create_output_section_statements ();
2523 ldemul_create_output_section_statements ();
2525 /* Add to the hash table all undefineds on the command line */
2526 lang_place_undefineds ();
2528 /* Create a bfd for each input file */
2529 current_target = default_target;
2530 lang_for_each_statement (open_input_bfds);
2532 /* Build all sets based on the information gathered from the input
2534 ldctor_build_sets ();
2536 /* Size up the common data */
2539 /* Run through the contours of the script and attatch input sections
2540 to the correct output sections
2542 map_input_to_output_sections (statement_list.head, (char *) NULL,
2543 (lang_output_section_statement_type *) NULL);
2546 /* Find any sections not attatched explicitly and handle them */
2547 lang_place_orphans ();
2549 ldemul_before_allocation ();
2551 /* Now run around and relax if we can */
2552 if (command_line.relax)
2554 /* First time round is a trial run to get the 'worst case'
2555 addresses of the objects if there was no relaxing. */
2556 lang_size_sections (statement_list.head,
2558 &(statement_list.head), 0, (bfd_vma) 0, false);
2561 reset_memory_regions ();
2563 /* Keep relaxing until bfd_relax_section gives up. */
2566 relax_again = false;
2568 /* Do all the assignments with our current guesses as to
2570 lang_do_assignments (statement_list.head,
2572 (fill_type) 0, (bfd_vma) 0);
2574 /* Perform another relax pass - this time we know where the
2575 globals are, so can make better guess. */
2576 lang_size_sections (statement_list.head,
2578 &(statement_list.head), 0, (bfd_vma) 0, true);
2580 while (relax_again);
2584 /* Size up the sections. */
2585 lang_size_sections (statement_list.head,
2587 &(statement_list.head), 0, (bfd_vma) 0, false);
2590 /* See if anything special should be done now we know how big
2592 ldemul_after_allocation ();
2594 /* Do all the assignments, now that we know the final restingplaces
2595 of all the symbols */
2597 lang_do_assignments (statement_list.head,
2599 (fill_type) 0, (bfd_vma) 0);
2601 /* Make sure that we're not mixing architectures */
2611 /* EXPORTED TO YACC */
2614 lang_add_wild (section_name, filename)
2615 CONST char *CONST section_name;
2616 CONST char *CONST filename;
2618 lang_wild_statement_type *new = new_stat (lang_wild_statement,
2621 if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
2623 placed_commons = true;
2625 if (filename != (char *) NULL)
2627 lang_has_input_file = true;
2629 new->section_name = section_name;
2630 new->filename = filename;
2631 lang_list_init (&new->children);
2635 lang_section_start (name, address)
2637 etree_type * address;
2639 lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
2641 ad->section_name = name;
2642 ad->address = address;
2646 lang_add_entry (name)
2649 entry_symbol = name;
2653 lang_add_target (name)
2656 lang_target_statement_type *new = new_stat (lang_target_statement,
2672 map_option_f = true;
2683 lang_fill_statement_type *new = new_stat (lang_fill_statement,
2690 lang_add_data (type, exp)
2692 union etree_union *exp;
2695 lang_data_statement_type *new = new_stat (lang_data_statement,
2703 /* Create a new reloc statement. RELOC is the BFD relocation type to
2704 generate. HOWTO is the corresponding howto structure (we could
2705 look this up, but the caller has already done so). SECTION is the
2706 section to generate a reloc against, or NAME is the name of the
2707 symbol to generate a reloc against. Exactly one of SECTION and
2708 NAME must be NULL. ADDEND is an expression for the addend. */
2711 lang_add_reloc (reloc, howto, section, name, addend)
2712 bfd_reloc_code_real_type reloc;
2713 const reloc_howto_type *howto;
2716 union etree_union *addend;
2718 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
2722 p->section = section;
2724 p->addend_exp = addend;
2726 p->addend_value = 0;
2727 p->output_section = NULL;
2732 lang_add_assignment (exp)
2735 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
2742 lang_add_attribute (attribute)
2743 enum statement_enum attribute;
2745 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
2752 if (startup_file != (char *) NULL)
2754 einfo ("%P%Fmultiple STARTUP files\n");
2756 first_file->filename = name;
2757 first_file->local_sym_name = name;
2758 first_file->real = true;
2760 startup_file = name;
2767 lang_float_flag = maybe;
2771 lang_leave_output_section_statement (fill, memspec)
2773 CONST char *memspec;
2775 current_section->fill = fill;
2776 current_section->region = lang_memory_region_lookup (memspec);
2777 stat_ptr = &statement_list;
2779 /* We remember if we are closing a .data section, since we use it to
2780 store constructors in */
2781 if (strcmp (current_section->name, ".data") == 0)
2783 end_of_data_section_statement_list = statement_list;
2789 Create an absolute symbol with the given name with the value of the
2790 address of first byte of the section named.
2792 If the symbol already exists, then do nothing.
2795 lang_abs_symbol_at_beginning_of (secname, name)
2796 const char *secname;
2799 struct bfd_link_hash_entry *h;
2801 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
2802 if (h == (struct bfd_link_hash_entry *) NULL)
2803 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
2805 if (h->type == bfd_link_hash_new
2806 || h->type == bfd_link_hash_undefined)
2810 h->type = bfd_link_hash_defined;
2812 sec = bfd_get_section_by_name (output_bfd, secname);
2813 if (sec == (asection *) NULL)
2816 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
2818 h->u.def.section = &bfd_abs_section;
2823 Create an absolute symbol with the given name with the value of the
2824 address of the first byte after the end of the section named.
2826 If the symbol already exists, then do nothing.
2829 lang_abs_symbol_at_end_of (secname, name)
2830 const char *secname;
2833 struct bfd_link_hash_entry *h;
2835 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
2836 if (h == (struct bfd_link_hash_entry *) NULL)
2837 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
2839 if (h->type == bfd_link_hash_new
2840 || h->type == bfd_link_hash_undefined)
2844 h->type = bfd_link_hash_defined;
2846 sec = bfd_get_section_by_name (output_bfd, secname);
2847 if (sec == (asection *) NULL)
2850 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
2851 + bfd_section_size (output_bfd, sec));
2853 h->u.def.section = &bfd_abs_section;
2858 lang_statement_append (list, element, field)
2859 lang_statement_list_type * list;
2860 lang_statement_union_type * element;
2861 lang_statement_union_type ** field;
2863 *(list->tail) = element;
2867 /* Set the output format type. -oformat overrides scripts. */
2869 lang_add_output_format (format, from_script)
2873 if (output_target == NULL || !from_script)
2874 output_target = format;