1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94, 95, 1996 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 the Free
18 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "libiberty.h"
41 static lang_statement_union_type *new_statement PARAMS ((enum statement_enum,
43 lang_statement_list_type*));
47 static struct obstack stat_obstack;
49 #define obstack_chunk_alloc xmalloc
50 #define obstack_chunk_free free
51 static CONST char *startup_file;
52 static lang_statement_list_type input_file_chain;
53 static boolean placed_commons = false;
54 static lang_output_section_statement_type *default_common_section;
55 static boolean map_option_f;
56 static bfd_vma print_dot;
57 static lang_input_statement_type *first_file;
58 static lang_statement_list_type lang_output_section_statement;
59 static CONST char *current_target;
60 static CONST char *output_target;
61 static lang_statement_list_type statement_list;
62 static struct lang_phdr *lang_phdr_list;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*func) (lang_statement_union_type *),
66 lang_statement_union_type *s));
67 static lang_input_statement_type *new_afile
68 PARAMS ((const char *name, lang_input_file_enum_type file_type,
69 const char *target, boolean add_to_list));
70 static void init_os PARAMS ((lang_output_section_statement_type *s));
71 static void exp_init_os PARAMS ((etree_type *));
72 static void section_already_linked PARAMS ((bfd *, asection *, PTR));
73 static boolean wildcardp PARAMS ((const char *));
74 static void wild_section PARAMS ((lang_wild_statement_type *ptr,
76 lang_input_statement_type *file,
77 lang_output_section_statement_type *output));
78 static lang_input_statement_type *lookup_name PARAMS ((const char *name));
79 static void load_symbols PARAMS ((lang_input_statement_type *entry,
80 lang_statement_list_type *));
81 static void wild_file PARAMS ((lang_wild_statement_type *, const char *,
82 lang_input_statement_type *,
83 lang_output_section_statement_type *));
84 static void wild PARAMS ((lang_wild_statement_type *s,
85 const char *section, const char *file,
87 lang_output_section_statement_type *output));
88 static bfd *open_output PARAMS ((const char *name));
89 static void ldlang_open_output PARAMS ((lang_statement_union_type *statement));
90 static void open_input_bfds
91 PARAMS ((lang_statement_union_type *statement, boolean));
92 static void lang_reasonable_defaults PARAMS ((void));
93 static void lang_place_undefineds PARAMS ((void));
94 static void map_input_to_output_sections
95 PARAMS ((lang_statement_union_type *s,
97 lang_output_section_statement_type *output_section_statement));
98 static void print_output_section_statement
99 PARAMS ((lang_output_section_statement_type *output_section_statement));
100 static void print_assignment
101 PARAMS ((lang_assignment_statement_type *assignment,
102 lang_output_section_statement_type *output_section));
103 static void print_input_statement PARAMS ((lang_input_statement_type *statm));
104 static void print_input_section PARAMS ((lang_input_section_type *in));
105 static void print_fill_statement PARAMS ((lang_fill_statement_type *fill));
106 static void print_data_statement PARAMS ((lang_data_statement_type *data));
107 static void print_address_statement PARAMS ((lang_address_statement_type *));
108 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *reloc));
109 static void print_padding_statement PARAMS ((lang_padding_statement_type *s));
110 static void print_wild_statement
111 PARAMS ((lang_wild_statement_type *w,
112 lang_output_section_statement_type *os));
113 static void print_group
114 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
115 static void print_statement PARAMS ((lang_statement_union_type *s,
116 lang_output_section_statement_type *os));
117 static void print_statement_list PARAMS ((lang_statement_union_type *s,
118 lang_output_section_statement_type *os));
119 static void print_statements PARAMS ((void));
120 static bfd_vma insert_pad PARAMS ((lang_statement_union_type **this_ptr,
121 fill_type fill, unsigned int power,
122 asection *output_section_statement,
124 static bfd_vma size_input_section
125 PARAMS ((lang_statement_union_type **this_ptr,
126 lang_output_section_statement_type *output_section_statement,
127 fill_type fill, bfd_vma dot, boolean relax));
128 static void lang_finish PARAMS ((void));
129 static void lang_check PARAMS ((void));
130 static void lang_common PARAMS ((void));
131 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
132 static void lang_place_orphans PARAMS ((void));
133 static int topower PARAMS ((int));
134 static void lang_set_startof PARAMS ((void));
135 static void reset_memory_regions PARAMS ((void));
136 static void lang_record_phdrs PARAMS ((void));
139 lang_output_section_statement_type *abs_output_section;
140 lang_statement_list_type *stat_ptr = &statement_list;
141 lang_statement_list_type file_chain = { 0 };
142 const char *entry_symbol = NULL;
143 boolean entry_from_cmdline;
144 boolean lang_has_input_file = false;
145 boolean had_output_filename = false;
146 boolean lang_float_flag = false;
147 boolean delete_output_file_on_failure = false;
148 struct lang_nocrossrefs *nocrossref_list;
150 etree_type *base; /* Relocation base - or null */
153 #if defined(__STDC__) || defined(ALMOST_STDC)
154 #define cat(a,b) a##b
156 #define cat(a,b) a/**/b
159 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
161 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
163 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
165 #define SECTION_NAME_MAP_LENGTH (16)
171 return obstack_alloc (&stat_obstack, size);
174 /*----------------------------------------------------------------------
175 lang_for_each_statement walks the parse tree and calls the provided
176 function for each node
180 lang_for_each_statement_worker (func, s)
181 void (*func) PARAMS ((lang_statement_union_type *));
182 lang_statement_union_type *s;
184 for (; s != (lang_statement_union_type *) NULL; s = s->next)
188 switch (s->header.type)
190 case lang_constructors_statement_enum:
191 lang_for_each_statement_worker (func, constructor_list.head);
193 case lang_output_section_statement_enum:
194 lang_for_each_statement_worker
196 s->output_section_statement.children.head);
198 case lang_wild_statement_enum:
199 lang_for_each_statement_worker
201 s->wild_statement.children.head);
203 case lang_group_statement_enum:
204 lang_for_each_statement_worker (func,
205 s->group_statement.children.head);
207 case lang_data_statement_enum:
208 case lang_reloc_statement_enum:
209 case lang_object_symbols_statement_enum:
210 case lang_output_statement_enum:
211 case lang_target_statement_enum:
212 case lang_input_section_enum:
213 case lang_input_statement_enum:
214 case lang_assignment_statement_enum:
215 case lang_padding_statement_enum:
216 case lang_address_statement_enum:
217 case lang_fill_statement_enum:
227 lang_for_each_statement (func)
228 void (*func) PARAMS ((lang_statement_union_type *));
230 lang_for_each_statement_worker (func,
231 statement_list.head);
234 /*----------------------------------------------------------------------*/
236 lang_list_init (list)
237 lang_statement_list_type *list;
239 list->head = (lang_statement_union_type *) NULL;
240 list->tail = &list->head;
243 /*----------------------------------------------------------------------
245 build a new statement node for the parse tree
250 lang_statement_union_type *
251 new_statement (type, size, list)
252 enum statement_enum type;
254 lang_statement_list_type * list;
256 lang_statement_union_type *new = (lang_statement_union_type *)
259 new->header.type = type;
260 new->header.next = (lang_statement_union_type *) NULL;
261 lang_statement_append (list, new, &new->header.next);
266 Build a new input file node for the language. There are several ways
267 in which we treat an input file, eg, we only look at symbols, or
268 prefix it with a -l etc.
270 We can be supplied with requests for input files more than once;
271 they may, for example be split over serveral lines like foo.o(.text)
272 foo.o(.data) etc, so when asked for a file we check that we havn't
273 got it already so we don't duplicate the bfd.
276 static lang_input_statement_type *
277 new_afile (name, file_type, target, add_to_list)
279 lang_input_file_enum_type file_type;
283 lang_input_statement_type *p;
286 p = new_stat (lang_input_statement, stat_ptr);
289 p = ((lang_input_statement_type *)
290 stat_alloc (sizeof (lang_input_statement_type)));
291 p->header.next = NULL;
294 lang_has_input_file = true;
298 case lang_input_file_is_symbols_only_enum:
300 p->is_archive = false;
302 p->local_sym_name = name;
303 p->just_syms_flag = true;
304 p->search_dirs_flag = false;
306 case lang_input_file_is_fake_enum:
308 p->is_archive = false;
310 p->local_sym_name = name;
311 p->just_syms_flag = false;
312 p->search_dirs_flag = false;
314 case lang_input_file_is_l_enum:
315 p->is_archive = true;
318 p->local_sym_name = concat ("-l", name, (const char *) NULL);
319 p->just_syms_flag = false;
320 p->search_dirs_flag = true;
322 case lang_input_file_is_marker_enum:
324 p->is_archive = false;
326 p->local_sym_name = name;
327 p->just_syms_flag = false;
328 p->search_dirs_flag = true;
330 case lang_input_file_is_search_file_enum:
332 p->is_archive = false;
334 p->local_sym_name = name;
335 p->just_syms_flag = false;
336 p->search_dirs_flag = true;
338 case lang_input_file_is_file_enum:
340 p->is_archive = false;
342 p->local_sym_name = name;
343 p->just_syms_flag = false;
344 p->search_dirs_flag = false;
349 p->the_bfd = (bfd *) NULL;
350 p->asymbols = (asymbol **) NULL;
351 p->next_real_file = (lang_statement_union_type *) NULL;
352 p->next = (lang_statement_union_type *) NULL;
354 p->dynamic = config.dynamic_link;
355 p->whole_archive = whole_archive;
357 lang_statement_append (&input_file_chain,
358 (lang_statement_union_type *) p,
363 lang_input_statement_type *
364 lang_add_input_file (name, file_type, target)
366 lang_input_file_enum_type file_type;
369 lang_has_input_file = true;
370 return new_afile (name, file_type, target, true);
373 /* Build enough state so that the parser can build its tree */
377 obstack_begin (&stat_obstack, 1000);
379 stat_ptr = &statement_list;
381 lang_list_init (stat_ptr);
383 lang_list_init (&input_file_chain);
384 lang_list_init (&lang_output_section_statement);
385 lang_list_init (&file_chain);
386 first_file = lang_add_input_file ((char *) NULL,
387 lang_input_file_is_marker_enum,
389 abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
391 abs_output_section->bfd_section = bfd_abs_section_ptr;
395 /*----------------------------------------------------------------------
396 A region is an area of memory declared with the
397 MEMORY { name:org=exp, len=exp ... }
400 We maintain a list of all the regions here
402 If no regions are specified in the script, then the default is used
403 which is created when looked up to be the entire data space
406 static lang_memory_region_type *lang_memory_region_list;
407 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
409 lang_memory_region_type *
410 lang_memory_region_lookup (name)
411 CONST char *CONST name;
414 lang_memory_region_type *p = lang_memory_region_list;
416 for (p = lang_memory_region_list;
417 p != (lang_memory_region_type *) NULL;
420 if (strcmp (p->name, name) == 0)
427 /* This code used to always use the first region in the list as the
428 default region. I changed it to instead use a region
429 encompassing all of memory as the default region. This permits
430 NOLOAD sections to work reasonably without requiring a region.
431 People should specify what region they mean, if they really want
433 if (strcmp (name, "*default*") == 0)
435 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
437 return lang_memory_region_list;
443 lang_memory_region_type *new =
444 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
446 new->name = buystring (name);
447 new->next = (lang_memory_region_type *) NULL;
449 *lang_memory_region_list_tail = new;
450 lang_memory_region_list_tail = &new->next;
452 new->length = ~(bfd_size_type)0;
454 new->had_full_message = false;
461 lang_output_section_statement_type *
462 lang_output_section_find (name)
463 CONST char *CONST name;
465 lang_statement_union_type *u;
466 lang_output_section_statement_type *lookup;
468 for (u = lang_output_section_statement.head;
469 u != (lang_statement_union_type *) NULL;
472 lookup = &u->output_section_statement;
473 if (strcmp (name, lookup->name) == 0)
478 return (lang_output_section_statement_type *) NULL;
481 lang_output_section_statement_type *
482 lang_output_section_statement_lookup (name)
483 CONST char *CONST name;
485 lang_output_section_statement_type *lookup;
487 lookup = lang_output_section_find (name);
488 if (lookup == (lang_output_section_statement_type *) NULL)
491 lookup = (lang_output_section_statement_type *)
492 new_stat (lang_output_section_statement, stat_ptr);
493 lookup->region = (lang_memory_region_type *) NULL;
495 lookup->block_value = 1;
498 lookup->next = (lang_statement_union_type *) NULL;
499 lookup->bfd_section = (asection *) NULL;
500 lookup->processed = false;
501 lookup->sectype = normal_section;
502 lookup->addr_tree = (etree_type *) NULL;
503 lang_list_init (&lookup->children);
505 lookup->memspec = (CONST char *) NULL;
507 lookup->subsection_alignment = -1;
508 lookup->section_alignment = -1;
509 lookup->load_base = (union etree_union *) NULL;
510 lookup->phdrs = NULL;
512 lang_statement_append (&lang_output_section_statement,
513 (lang_statement_union_type *) lookup,
522 lang_memory_region_type *m;
524 minfo ("\nMemory Configuration\n\n");
525 fprintf (config.map_file, "%-16s %-18s %-18s\n",
526 "Name", "Origin", "Length");
528 for (m = lang_memory_region_list;
529 m != (lang_memory_region_type *) NULL;
535 fprintf (config.map_file, "%-16s ", m->name);
537 sprintf_vma (buf, m->origin);
538 minfo ("0x%s ", buf);
546 minfo ("0x%V\n", m->length);
549 fprintf (config.map_file, "\nLinker script and memory map\n\n");
554 /* Initialize an output section. */
558 lang_output_section_statement_type *s;
560 section_userdata_type *new;
562 if (s->bfd_section != NULL)
565 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
566 einfo ("%P%F: Illegal use of `%s' section", DISCARD_SECTION_NAME);
568 new = ((section_userdata_type *)
569 stat_alloc (sizeof (section_userdata_type)));
571 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
572 if (s->bfd_section == (asection *) NULL)
573 s->bfd_section = bfd_make_section (output_bfd, s->name);
574 if (s->bfd_section == (asection *) NULL)
576 einfo ("%P%F: output format %s cannot represent section called %s\n",
577 output_bfd->xvec->name, s->name);
579 s->bfd_section->output_section = s->bfd_section;
581 /* We initialize an output sections output offset to minus its own */
582 /* vma to allow us to output a section through itself */
583 s->bfd_section->output_offset = 0;
584 get_userdata (s->bfd_section) = (PTR) new;
586 /* If there is a base address, make sure that any sections it might
587 mention are initialized. */
588 if (s->addr_tree != NULL)
589 exp_init_os (s->addr_tree);
592 /* Make sure that all output sections mentioned in an expression are
599 switch (exp->type.node_class)
602 exp_init_os (exp->assign.src);
606 exp_init_os (exp->binary.lhs);
607 exp_init_os (exp->binary.rhs);
611 exp_init_os (exp->trinary.cond);
612 exp_init_os (exp->trinary.lhs);
613 exp_init_os (exp->trinary.rhs);
617 exp_init_os (exp->unary.child);
621 switch (exp->type.node_code)
627 lang_output_section_statement_type *os;
629 os = lang_output_section_find (exp->name.name);
630 if (os != NULL && os->bfd_section == NULL)
641 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
642 once into the output. This routine checks each sections, and
643 arranges to discard it if a section of the same name has already
644 been linked. This code assumes that all relevant sections have the
645 SEC_LINK_ONCE flag set; that is, it does not depend solely upon the
646 section name. This is called via bfd_map_over_sections. */
650 section_already_linked (abfd, sec, ignore)
657 struct sec_link_once *next;
660 static struct sec_link_once *sec_link_once_list;
663 struct sec_link_once *l;
665 flags = bfd_get_section_flags (abfd, sec);
667 if ((flags & SEC_LINK_ONCE) == 0)
670 name = bfd_get_section_name (abfd, sec);
672 for (l = sec_link_once_list; l != NULL; l = l->next)
674 if (strcmp (name, bfd_get_section_name (l->sec->owner, l->sec)) == 0)
676 /* The section has already been linked. See if we should
678 switch (flags & SEC_LINK_DUPLICATES)
683 case SEC_LINK_DUPLICATES_DISCARD:
686 case SEC_LINK_DUPLICATES_ONE_ONLY:
687 einfo ("%P: %B: warning: ignoring duplicate section `%s'\n",
691 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
692 /* FIXME: We should really dig out the contents of both
693 sections and memcmp them. The COFF/PE spec says that
694 the Microsoft linker does not implement this
695 correctly, so I'm not going to bother doing it
698 case SEC_LINK_DUPLICATES_SAME_SIZE:
699 if (bfd_section_size (abfd, sec)
700 != bfd_section_size (l->sec->owner, l->sec))
701 einfo ("%P: %B: warning: duplicate section `%s' has different size\n",
706 /* Set the output_section field so that wild_doit does not
707 create a lang_input_section structure for this section. */
708 sec->output_section = bfd_abs_section_ptr;
714 /* This is the first section with this name. Record it. */
716 l = (struct sec_link_once *) xmalloc (sizeof *l);
718 l->next = sec_link_once_list;
719 sec_link_once_list = l;
722 /* The wild routines.
724 These expand statements like *(.text) and foo.o to a list of
725 explicit actions, like foo.o(.text), bar.o(.text) and
726 foo.o(.text, .data). */
728 /* Return true if the PATTERN argument is a wildcard pattern. */
736 for (s = pattern; *s != '\0'; ++s)
745 /* Add SECTION to the output section OUTPUT. Do this by creating a
746 lang_input_section statement which is placed at PTR. FILE is the
747 input file which holds SECTION. */
750 wild_doit (ptr, section, output, file)
751 lang_statement_list_type *ptr;
753 lang_output_section_statement_type *output;
754 lang_input_statement_type *file;
759 flags = bfd_get_section_flags (section->owner, section);
763 /* If we are doing a final link, discard sections marked with
765 if (! link_info.relocateable
766 && (flags & SEC_EXCLUDE) != 0)
769 /* Discard input sections which are assigned to a section named
770 DISCARD_SECTION_NAME. */
771 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
774 /* Discard debugging sections if we are stripping debugging
776 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
777 && (flags & SEC_DEBUGGING) != 0)
782 if (section->output_section == NULL)
784 /* This prevents future calls from assigning this section. */
785 section->output_section = bfd_abs_section_ptr;
790 if (section->output_section == NULL)
792 lang_input_section_type *new;
794 if (output->bfd_section == NULL)
797 /* Add a section reference to the list */
798 new = new_stat (lang_input_section, ptr);
800 new->section = section;
802 section->output_section = output->bfd_section;
804 /* We don't copy the SEC_NEVER_LOAD flag from an input section
805 to an output section, because we want to be able to include a
806 SEC_NEVER_LOAD section in the middle of an otherwise loaded
807 section (I don't know why we want to do this, but we do).
808 build_link_order in ldwrite.c handles this case by turning
809 the embedded SEC_NEVER_LOAD section into a fill.
811 If final link, don't copy the SEC_LINK_ONCE flags, they've already
812 been processed. One reason to do this is that on pe format targets,
813 .text$foo sections go into .text and it's odd to see .text with
814 SEC_LINK_ONCE set. */
816 section->output_section->flags |=
817 section->flags & (flagword) (~ (SEC_NEVER_LOAD
818 | (! link_info.relocateable
819 ? SEC_LINK_ONCE | SEC_LINK_DUPLICATES
822 switch (output->sectype)
829 case overlay_section:
830 output->bfd_section->flags &= ~SEC_ALLOC;
833 output->bfd_section->flags &= ~SEC_LOAD;
834 output->bfd_section->flags |= SEC_NEVER_LOAD;
838 if (section->alignment_power > output->bfd_section->alignment_power)
839 output->bfd_section->alignment_power = section->alignment_power;
841 /* If supplied an aligment, then force it. */
842 if (output->section_alignment != -1)
843 output->bfd_section->alignment_power = output->section_alignment;
847 /* Expand a wild statement for a particular FILE. SECTION may be
848 NULL, in which case it is a wild card. */
851 wild_section (ptr, section, file, output)
852 lang_wild_statement_type *ptr;
854 lang_input_statement_type *file;
855 lang_output_section_statement_type *output;
857 if (file->just_syms_flag == false)
859 register asection *s;
865 wildcard = wildcardp (section);
867 for (s = file->the_bfd->sections; s != NULL; s = s->next)
871 /* Attach all sections named SECTION. If SECTION is NULL,
872 then attach all sections.
874 Previously, if SECTION was NULL, this code did not call
875 wild_doit if the SEC_IS_COMMON flag was set for the
876 section. I did not understand that, and I took it out.
885 name = bfd_get_section_name (file->the_bfd, s);
887 match = fnmatch (section, name, 0) == 0 ? true : false;
889 match = strcmp (section, name) == 0 ? true : false;
892 wild_doit (&ptr->children, s, output, file);
897 /* This is passed a file name which must have been seen already and
898 added to the statement tree. We will see if it has been opened
899 already and had its symbols read. If not then we'll read it. */
901 static lang_input_statement_type *
905 lang_input_statement_type *search;
907 for (search = (lang_input_statement_type *) input_file_chain.head;
908 search != (lang_input_statement_type *) NULL;
909 search = (lang_input_statement_type *) search->next_real_file)
911 if (search->filename == (char *) NULL && name == (char *) NULL)
913 if (search->filename != (char *) NULL
914 && name != (char *) NULL
915 && strcmp (search->filename, name) == 0)
919 if (search == (lang_input_statement_type *) NULL)
920 search = new_afile (name, lang_input_file_is_file_enum, default_target,
923 /* If we have already added this file, or this file is not real
924 (FIXME: can that ever actually happen?) or the name is NULL
925 (FIXME: can that ever actually happen?) don't add this file. */
928 || search->filename == (const char *) NULL)
931 load_symbols (search, (lang_statement_list_type *) NULL);
936 /* Get the symbols for an input file. */
939 load_symbols (entry, place)
940 lang_input_statement_type *entry;
941 lang_statement_list_type *place;
948 ldfile_open_file (entry);
950 if (! bfd_check_format (entry->the_bfd, bfd_archive)
951 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
954 lang_statement_list_type *hold;
956 err = bfd_get_error ();
957 if (err == bfd_error_file_ambiguously_recognized)
961 einfo ("%B: file not recognized: %E\n", entry->the_bfd);
962 einfo ("%B: matching formats:", entry->the_bfd);
963 for (p = matching; *p != NULL; p++)
967 else if (err != bfd_error_file_not_recognized
969 einfo ("%F%B: file not recognized: %E\n", entry->the_bfd);
971 bfd_close (entry->the_bfd);
972 entry->the_bfd = NULL;
974 /* See if the emulation has some special knowledge. */
976 if (ldemul_unrecognized_file (entry))
979 /* Try to interpret the file as a linker script. */
981 ldfile_open_command_file (entry->filename);
986 ldfile_assumed_script = true;
987 parser_input = input_script;
989 ldfile_assumed_script = false;
996 /* We don't call ldlang_add_file for an archive. Instead, the
997 add_symbols entry point will call ldlang_add_file, via the
998 add_archive_element callback, for each element of the archive
1000 switch (bfd_get_format (entry->the_bfd))
1006 ldlang_add_file (entry);
1007 if (trace_files || trace_file_tries)
1008 info_msg ("%I\n", entry);
1012 if (entry->whole_archive)
1014 bfd *member = bfd_openr_next_archived_file (entry->the_bfd,
1016 while (member != NULL)
1018 if (! bfd_check_format (member, bfd_object))
1019 einfo ("%F%B: object %B in archive is not object\n",
1020 entry->the_bfd, member);
1021 if (! ((*link_info.callbacks->add_archive_element)
1022 (&link_info, member, "--whole-archive")))
1024 if (! bfd_link_add_symbols (member, &link_info))
1025 einfo ("%F%B: could not read symbols: %E\n", member);
1026 member = bfd_openr_next_archived_file (entry->the_bfd,
1030 entry->loaded = true;
1036 if (! bfd_link_add_symbols (entry->the_bfd, &link_info))
1037 einfo ("%F%B: could not read symbols: %E\n", entry->the_bfd);
1039 entry->loaded = true;
1042 /* Handle a wild statement for a single file F. */
1045 wild_file (s, section, f, output)
1046 lang_wild_statement_type *s;
1047 const char *section;
1048 lang_input_statement_type *f;
1049 lang_output_section_statement_type *output;
1051 if (f->the_bfd == NULL
1052 || ! bfd_check_format (f->the_bfd, bfd_archive))
1053 wild_section (s, section, f, output);
1058 /* This is an archive file. We must map each member of the
1059 archive separately. */
1060 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
1061 while (member != NULL)
1063 /* When lookup_name is called, it will call the add_symbols
1064 entry point for the archive. For each element of the
1065 archive which is included, BFD will call ldlang_add_file,
1066 which will set the usrdata field of the member to the
1067 lang_input_statement. */
1068 if (member->usrdata != NULL)
1070 wild_section (s, section,
1071 (lang_input_statement_type *) member->usrdata,
1075 member = bfd_openr_next_archived_file (f->the_bfd, member);
1080 /* Handle a wild statement. SECTION or FILE or both may be NULL,
1081 indicating that it is a wildcard. Separate lang_input_section
1082 statements are created for each part of the expansion; they are
1083 added after the wild statement S. OUTPUT is the output section. */
1086 wild (s, section, file, target, output)
1087 lang_wild_statement_type *s;
1088 const char *section;
1091 lang_output_section_statement_type *output;
1093 lang_input_statement_type *f;
1095 if (file == (char *) NULL)
1097 /* Perform the iteration over all files in the list */
1098 for (f = (lang_input_statement_type *) file_chain.head;
1099 f != (lang_input_statement_type *) NULL;
1100 f = (lang_input_statement_type *) f->next)
1102 wild_file (s, section, f, output);
1105 else if (wildcardp (file))
1107 for (f = (lang_input_statement_type *) file_chain.head;
1108 f != (lang_input_statement_type *) NULL;
1109 f = (lang_input_statement_type *) f->next)
1111 if (fnmatch (file, f->filename, FNM_FILE_NAME) == 0)
1112 wild_file (s, section, f, output);
1117 /* Perform the iteration over a single file */
1118 f = lookup_name (file);
1119 wild_file (s, section, f, output);
1122 if (section != (char *) NULL
1123 && strcmp (section, "COMMON") == 0
1124 && default_common_section == NULL)
1126 /* Remember the section that common is going to in case we later
1127 get something which doesn't know where to put it. */
1128 default_common_section = output;
1132 /* Open the output file. */
1140 if (output_target == (char *) NULL)
1142 if (current_target != (char *) NULL)
1143 output_target = current_target;
1145 output_target = default_target;
1147 output = bfd_openw (name, output_target);
1149 if (output == (bfd *) NULL)
1151 if (bfd_get_error () == bfd_error_invalid_target)
1153 einfo ("%P%F: target %s not found\n", output_target);
1155 einfo ("%P%F: cannot open output file %s: %E\n", name);
1158 delete_output_file_on_failure = true;
1160 /* output->flags |= D_PAGED;*/
1162 if (! bfd_set_format (output, bfd_object))
1163 einfo ("%P%F:%s: can not make object file: %E\n", name);
1164 if (! bfd_set_arch_mach (output,
1165 ldfile_output_architecture,
1166 ldfile_output_machine))
1167 einfo ("%P%F:%s: can not set architecture: %E\n", name);
1169 link_info.hash = bfd_link_hash_table_create (output);
1170 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1171 einfo ("%P%F: can not create link hash table: %E\n");
1173 bfd_set_gp_size (output, g_switch_value);
1181 ldlang_open_output (statement)
1182 lang_statement_union_type * statement;
1184 switch (statement->header.type)
1186 case lang_output_statement_enum:
1187 ASSERT (output_bfd == (bfd *) NULL);
1188 output_bfd = open_output (statement->output_statement.name);
1189 ldemul_set_output_arch ();
1190 if (config.magic_demand_paged && !link_info.relocateable)
1191 output_bfd->flags |= D_PAGED;
1193 output_bfd->flags &= ~D_PAGED;
1194 if (config.text_read_only)
1195 output_bfd->flags |= WP_TEXT;
1197 output_bfd->flags &= ~WP_TEXT;
1198 if (link_info.traditional_format)
1199 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1201 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1204 case lang_target_statement_enum:
1205 current_target = statement->target_statement.target;
1212 /* Open all the input files. */
1215 open_input_bfds (s, force)
1216 lang_statement_union_type *s;
1219 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1221 switch (s->header.type)
1223 case lang_constructors_statement_enum:
1224 open_input_bfds (constructor_list.head, force);
1226 case lang_output_section_statement_enum:
1227 open_input_bfds (s->output_section_statement.children.head, force);
1229 case lang_wild_statement_enum:
1230 /* Maybe we should load the file's symbols */
1231 if (s->wild_statement.filename
1232 && ! wildcardp (s->wild_statement.filename))
1233 (void) lookup_name (s->wild_statement.filename);
1234 open_input_bfds (s->wild_statement.children.head, force);
1236 case lang_group_statement_enum:
1238 struct bfd_link_hash_entry *undefs;
1240 /* We must continually search the entries in the group
1241 until no new symbols are added to the list of undefined
1246 undefs = link_info.hash->undefs_tail;
1247 open_input_bfds (s->group_statement.children.head, true);
1249 while (undefs != link_info.hash->undefs_tail);
1252 case lang_target_statement_enum:
1253 current_target = s->target_statement.target;
1255 case lang_input_statement_enum:
1256 if (s->input_statement.real == true)
1258 lang_statement_list_type add;
1260 s->input_statement.target = current_target;
1262 /* If we are being called from within a group, and this
1263 is an archive which has already been searched, then
1264 force it to be researched. */
1266 && s->input_statement.loaded
1267 && bfd_check_format (s->input_statement.the_bfd,
1269 s->input_statement.loaded = false;
1271 lang_list_init (&add);
1273 load_symbols (&s->input_statement, &add);
1275 if (add.head != NULL)
1277 *add.tail = s->next;
1288 /* If there are [COMMONS] statements, put a wild one into the bss section */
1291 lang_reasonable_defaults ()
1294 lang_output_section_statement_lookup (".text");
1295 lang_output_section_statement_lookup (".data");
1297 default_common_section =
1298 lang_output_section_statement_lookup (".bss");
1301 if (placed_commons == false)
1303 lang_wild_statement_type *new =
1304 new_stat (lang_wild_statement,
1305 &default_common_section->children);
1307 new->section_name = "COMMON";
1308 new->filename = (char *) NULL;
1309 lang_list_init (&new->children);
1316 Add the supplied name to the symbol table as an undefined reference.
1317 Remove items from the chain as we open input bfds
1319 typedef struct ldlang_undef_chain_list
1321 struct ldlang_undef_chain_list *next;
1323 } ldlang_undef_chain_list_type;
1325 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
1328 ldlang_add_undef (name)
1329 CONST char *CONST name;
1331 ldlang_undef_chain_list_type *new =
1332 ((ldlang_undef_chain_list_type *)
1333 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
1335 new->next = ldlang_undef_chain_list_head;
1336 ldlang_undef_chain_list_head = new;
1338 new->name = buystring (name);
1341 /* Run through the list of undefineds created above and place them
1342 into the linker hash table as undefined symbols belonging to the
1346 lang_place_undefineds ()
1348 ldlang_undef_chain_list_type *ptr;
1350 for (ptr = ldlang_undef_chain_list_head;
1351 ptr != (ldlang_undef_chain_list_type *) NULL;
1354 struct bfd_link_hash_entry *h;
1356 h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
1357 if (h == (struct bfd_link_hash_entry *) NULL)
1358 einfo ("%P%F: bfd_link_hash_lookup failed: %E");
1359 if (h->type == bfd_link_hash_new)
1361 h->type = bfd_link_hash_undefined;
1362 h->u.undef.abfd = NULL;
1363 bfd_link_add_undef (link_info.hash, h);
1368 /* Open input files and attatch to output sections */
1370 map_input_to_output_sections (s, target, output_section_statement)
1371 lang_statement_union_type * s;
1373 lang_output_section_statement_type * output_section_statement;
1375 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1377 switch (s->header.type)
1381 case lang_wild_statement_enum:
1382 wild (&s->wild_statement, s->wild_statement.section_name,
1383 s->wild_statement.filename, target,
1384 output_section_statement);
1387 case lang_constructors_statement_enum:
1388 map_input_to_output_sections (constructor_list.head,
1390 output_section_statement);
1392 case lang_output_section_statement_enum:
1393 map_input_to_output_sections (s->output_section_statement.children.head,
1395 &s->output_section_statement);
1397 case lang_output_statement_enum:
1399 case lang_target_statement_enum:
1400 target = s->target_statement.target;
1402 case lang_group_statement_enum:
1403 map_input_to_output_sections (s->group_statement.children.head,
1405 output_section_statement);
1407 case lang_fill_statement_enum:
1408 case lang_input_section_enum:
1409 case lang_object_symbols_statement_enum:
1410 case lang_data_statement_enum:
1411 case lang_reloc_statement_enum:
1412 case lang_padding_statement_enum:
1413 case lang_input_statement_enum:
1414 if (output_section_statement != NULL
1415 && output_section_statement->bfd_section == NULL)
1416 init_os (output_section_statement);
1418 case lang_assignment_statement_enum:
1419 if (output_section_statement != NULL
1420 && output_section_statement->bfd_section == NULL)
1421 init_os (output_section_statement);
1423 /* Make sure that any sections mentioned in the assignment
1425 exp_init_os (s->assignment_statement.exp);
1427 case lang_afile_asection_pair_statement_enum:
1430 case lang_address_statement_enum:
1431 /* Mark the specified section with the supplied address */
1433 lang_output_section_statement_type *os =
1434 lang_output_section_statement_lookup
1435 (s->address_statement.section_name);
1437 if (os->bfd_section == NULL)
1439 os->addr_tree = s->address_statement.address;
1447 print_output_section_statement (output_section_statement)
1448 lang_output_section_statement_type * output_section_statement;
1450 asection *section = output_section_statement->bfd_section;
1453 if (output_section_statement != abs_output_section)
1455 minfo ("\n%s", output_section_statement->name);
1457 if (section != NULL)
1459 print_dot = section->vma;
1461 len = strlen (output_section_statement->name);
1462 if (len >= SECTION_NAME_MAP_LENGTH - 1)
1467 while (len < SECTION_NAME_MAP_LENGTH)
1473 minfo ("0x%V %W", section->vma, section->_raw_size);
1475 if (output_section_statement->load_base != NULL)
1479 addr = exp_get_abs_int (output_section_statement->load_base, 0,
1480 "load base", lang_final_phase_enum);
1481 minfo (" load address 0x%V", addr);
1488 print_statement_list (output_section_statement->children.head,
1489 output_section_statement);
1493 print_assignment (assignment, output_section)
1494 lang_assignment_statement_type * assignment;
1495 lang_output_section_statement_type * output_section;
1498 etree_value_type result;
1500 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1503 result = exp_fold_tree (assignment->exp->assign.src, output_section,
1504 lang_final_phase_enum, print_dot, &print_dot);
1506 minfo ("0x%V", result.value + result.section->bfd_section->vma);
1517 exp_print_tree (assignment->exp);
1523 print_input_statement (statm)
1524 lang_input_statement_type * statm;
1526 if (statm->filename != (char *) NULL)
1528 fprintf (config.map_file, "LOAD %s\n", statm->filename);
1532 /* Print all symbols defined in a particular section. This is called
1533 via bfd_link_hash_traverse. */
1536 print_one_symbol (hash_entry, ptr)
1537 struct bfd_link_hash_entry *hash_entry;
1540 asection *sec = (asection *) ptr;
1542 if ((hash_entry->type == bfd_link_hash_defined
1543 || hash_entry->type == bfd_link_hash_defweak)
1544 && sec == hash_entry->u.def.section)
1548 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1551 (hash_entry->u.def.value
1552 + hash_entry->u.def.section->output_offset
1553 + hash_entry->u.def.section->output_section->vma));
1555 minfo (" %T\n", hash_entry->root.string);
1561 /* Print information about an input section to the map file. */
1564 print_input_section (in)
1565 lang_input_section_type * in;
1567 asection *i = in->section;
1568 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
1574 minfo ("%s", i->name);
1576 if (i->output_section != NULL)
1580 len = 1 + strlen (i->name);
1581 if (len >= SECTION_NAME_MAP_LENGTH - 1)
1586 while (len < SECTION_NAME_MAP_LENGTH)
1592 minfo ("0x%V %W %B\n",
1593 i->output_section->vma + i->output_offset, size,
1596 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
1598 len = SECTION_NAME_MAP_LENGTH + 3;
1610 minfo ("%W (size before relaxing)\n", i->_raw_size);
1613 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
1615 print_dot = i->output_section->vma + i->output_offset + size;
1621 print_fill_statement (fill)
1622 lang_fill_statement_type * fill;
1624 fprintf (config.map_file, " FILL mask 0x%x\n", fill->fill);
1628 print_data_statement (data)
1629 lang_data_statement_type * data;
1636 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1639 addr = data->output_vma;
1640 if (data->output_section != NULL)
1641 addr += data->output_section->vma;
1665 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
1667 if (data->exp->type.node_class != etree_value)
1670 exp_print_tree (data->exp);
1675 print_dot = addr + size;
1678 /* Print an address statement. These are generated by options like
1682 print_address_statement (address)
1683 lang_address_statement_type *address;
1685 minfo ("Address of section %s set to ", address->section_name);
1686 exp_print_tree (address->address);
1690 /* Print a reloc statement. */
1693 print_reloc_statement (reloc)
1694 lang_reloc_statement_type *reloc;
1700 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1703 addr = reloc->output_vma;
1704 if (reloc->output_section != NULL)
1705 addr += reloc->output_section->vma;
1707 size = bfd_get_reloc_size (reloc->howto);
1709 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
1711 if (reloc->name != NULL)
1712 minfo ("%s+", reloc->name);
1714 minfo ("%s+", reloc->section->name);
1716 exp_print_tree (reloc->addend_exp);
1720 print_dot = addr + size;
1724 print_padding_statement (s)
1725 lang_padding_statement_type *s;
1732 len = sizeof " *fill*" - 1;
1733 while (len < SECTION_NAME_MAP_LENGTH)
1739 addr = s->output_offset;
1740 if (s->output_section != NULL)
1741 addr += s->output_section->vma;
1742 minfo ("0x%V %W", addr, s->size);
1745 minfo (" %u", s->fill);
1749 print_dot = addr + s->size;
1753 print_wild_statement (w, os)
1754 lang_wild_statement_type * w;
1755 lang_output_section_statement_type * os;
1759 if (w->filename != NULL)
1760 minfo ("%s", w->filename);
1764 if (w->section_name != NULL)
1765 minfo ("(%s)", w->section_name);
1771 print_statement_list (w->children.head, os);
1774 /* Print a group statement. */
1778 lang_group_statement_type *s;
1779 lang_output_section_statement_type *os;
1781 fprintf (config.map_file, "START GROUP\n");
1782 print_statement_list (s->children.head, os);
1783 fprintf (config.map_file, "END GROUP\n");
1786 /* Print the list of statements in S.
1787 This can be called for any statement type. */
1790 print_statement_list (s, os)
1791 lang_statement_union_type *s;
1792 lang_output_section_statement_type *os;
1796 print_statement (s, os);
1801 /* Print the first statement in statement list S.
1802 This can be called for any statement type. */
1805 print_statement (s, os)
1806 lang_statement_union_type *s;
1807 lang_output_section_statement_type *os;
1809 switch (s->header.type)
1812 fprintf (config.map_file, "Fail with %d\n", s->header.type);
1815 case lang_constructors_statement_enum:
1816 if (constructor_list.head != NULL)
1818 minfo (" CONSTRUCTORS\n");
1819 print_statement_list (constructor_list.head, os);
1822 case lang_wild_statement_enum:
1823 print_wild_statement (&s->wild_statement, os);
1825 case lang_address_statement_enum:
1826 print_address_statement (&s->address_statement);
1828 case lang_object_symbols_statement_enum:
1829 minfo (" CREATE_OBJECT_SYMBOLS\n");
1831 case lang_fill_statement_enum:
1832 print_fill_statement (&s->fill_statement);
1834 case lang_data_statement_enum:
1835 print_data_statement (&s->data_statement);
1837 case lang_reloc_statement_enum:
1838 print_reloc_statement (&s->reloc_statement);
1840 case lang_input_section_enum:
1841 print_input_section (&s->input_section);
1843 case lang_padding_statement_enum:
1844 print_padding_statement (&s->padding_statement);
1846 case lang_output_section_statement_enum:
1847 print_output_section_statement (&s->output_section_statement);
1849 case lang_assignment_statement_enum:
1850 print_assignment (&s->assignment_statement, os);
1852 case lang_target_statement_enum:
1853 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
1855 case lang_output_statement_enum:
1856 minfo ("OUTPUT(%s", s->output_statement.name);
1857 if (output_target != NULL)
1858 minfo (" %s", output_target);
1861 case lang_input_statement_enum:
1862 print_input_statement (&s->input_statement);
1864 case lang_group_statement_enum:
1865 print_group (&s->group_statement, os);
1867 case lang_afile_asection_pair_statement_enum:
1876 print_statement_list (statement_list.head, abs_output_section);
1879 /* Print the first N statements in statement list S to STDERR.
1880 If N == 0, nothing is printed.
1881 If N < 0, the entire list is printed.
1882 Intended to be called from GDB. */
1885 dprint_statement (s, n)
1886 lang_statement_union_type * s;
1889 FILE *map_save = config.map_file;
1891 config.map_file = stderr;
1894 print_statement_list (s, abs_output_section);
1897 while (s && --n >= 0)
1899 print_statement (s, abs_output_section);
1904 config.map_file = map_save;
1908 insert_pad (this_ptr, fill, power, output_section_statement, dot)
1909 lang_statement_union_type ** this_ptr;
1912 asection * output_section_statement;
1915 /* Align this section first to the
1916 input sections requirement, then
1917 to the output section's requirement.
1918 If this alignment is > than any seen before,
1919 then record it too. Perform the alignment by
1920 inserting a magic 'padding' statement.
1923 unsigned int alignment_needed = align_power (dot, power) - dot;
1925 if (alignment_needed != 0)
1927 lang_statement_union_type *new =
1928 ((lang_statement_union_type *)
1929 stat_alloc (sizeof (lang_padding_statement_type)));
1931 /* Link into existing chain */
1932 new->header.next = *this_ptr;
1934 new->header.type = lang_padding_statement_enum;
1935 new->padding_statement.output_section = output_section_statement;
1936 new->padding_statement.output_offset =
1937 dot - output_section_statement->vma;
1938 new->padding_statement.fill = fill;
1939 new->padding_statement.size = alignment_needed;
1943 /* Remember the most restrictive alignment */
1944 if (power > output_section_statement->alignment_power)
1946 output_section_statement->alignment_power = power;
1948 output_section_statement->_raw_size += alignment_needed;
1949 return alignment_needed + dot;
1953 /* Work out how much this section will move the dot point */
1955 size_input_section (this_ptr, output_section_statement, fill, dot, relax)
1956 lang_statement_union_type ** this_ptr;
1957 lang_output_section_statement_type * output_section_statement;
1962 lang_input_section_type *is = &((*this_ptr)->input_section);
1963 asection *i = is->section;
1965 if (is->ifile->just_syms_flag == false)
1967 if (output_section_statement->subsection_alignment != -1)
1968 i->alignment_power =
1969 output_section_statement->subsection_alignment;
1971 dot = insert_pad (this_ptr, fill, i->alignment_power,
1972 output_section_statement->bfd_section, dot);
1974 /* Remember where in the output section this input section goes */
1976 i->output_offset = dot - output_section_statement->bfd_section->vma;
1978 /* Mark how big the output section must be to contain this now
1980 if (i->_cooked_size != 0)
1981 dot += i->_cooked_size;
1983 dot += i->_raw_size;
1984 output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma;
1988 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
1994 /* This variable indicates whether bfd_relax_section should be called
1997 static boolean relax_again;
1999 /* Set the sizes for all the output sections. */
2002 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
2003 lang_statement_union_type * s;
2004 lang_output_section_statement_type * output_section_statement;
2005 lang_statement_union_type ** prev;
2010 /* Size up the sections from their constituent parts */
2011 for (; s != (lang_statement_union_type *) NULL; s = s->next)
2013 switch (s->header.type)
2016 case lang_output_section_statement_enum:
2019 lang_output_section_statement_type *os = &s->output_section_statement;
2021 if (os->bfd_section == NULL)
2023 /* This section was never actually created. */
2027 /* If this is a COFF shared library section, use the size and
2028 address from the input section. FIXME: This is COFF
2029 specific; it would be cleaner if there were some other way
2030 to do this, but nothing simple comes to mind. */
2031 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2035 if (os->children.head == NULL
2036 || os->children.head->next != NULL
2037 || os->children.head->header.type != lang_input_section_enum)
2038 einfo ("%P%X: Internal error on COFF shared library section %s",
2041 input = os->children.head->input_section.section;
2042 bfd_set_section_vma (os->bfd_section->owner,
2044 bfd_section_vma (input->owner, input));
2045 os->bfd_section->_raw_size = input->_raw_size;
2049 if (bfd_is_abs_section (os->bfd_section))
2051 /* No matter what happens, an abs section starts at zero */
2052 ASSERT (os->bfd_section->vma == 0);
2056 if (os->addr_tree == (etree_type *) NULL)
2058 /* No address specified for this section, get one
2059 from the region specification
2061 if (os->region == (lang_memory_region_type *) NULL)
2063 os->region = lang_memory_region_lookup ("*default*");
2065 dot = os->region->current;
2066 if (os->section_alignment == -1)
2067 dot = align_power (dot, os->bfd_section->alignment_power);
2073 r = exp_fold_tree (os->addr_tree,
2075 lang_allocating_phase_enum,
2077 if (r.valid == false)
2079 einfo ("%F%S: non constant address expression for section %s\n",
2082 dot = r.value + r.section->bfd_section->vma;
2084 /* The section starts here */
2085 /* First, align to what the section needs */
2087 if (os->section_alignment != -1)
2088 dot = align_power (dot, os->section_alignment);
2090 bfd_set_section_vma (0, os->bfd_section, dot);
2092 os->bfd_section->output_offset = 0;
2095 (void) lang_size_sections (os->children.head, os, &os->children.head,
2096 os->fill, dot, relax);
2097 /* Ignore the size of the input sections, use the vma and size to */
2100 after = ALIGN_N (os->bfd_section->vma +
2101 os->bfd_section->_raw_size,
2102 /* The coercion here is important, see ld.h. */
2103 (bfd_vma) os->block_value);
2105 if (bfd_is_abs_section (os->bfd_section))
2106 ASSERT (after == os->bfd_section->vma);
2108 os->bfd_section->_raw_size = after - os->bfd_section->vma;
2109 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
2110 os->processed = true;
2112 /* Replace into region ? */
2113 if (os->region != (lang_memory_region_type *) NULL)
2115 os->region->current = dot;
2116 /* Make sure this isn't silly. */
2117 if (os->region->current < os->region->origin
2118 || (os->region->current - os->region->origin
2119 > os->region->length))
2121 if (os->addr_tree != (etree_type *) NULL)
2123 einfo ("%X%P: address 0x%v of %B section %s is not within region %s\n",
2124 os->region->current,
2125 os->bfd_section->owner,
2126 os->bfd_section->name,
2131 einfo ("%X%P: region %s is full (%B section %s)\n",
2133 os->bfd_section->owner,
2134 os->bfd_section->name);
2136 /* Reset the region pointer. */
2137 os->region->current = os->region->origin;
2143 case lang_constructors_statement_enum:
2144 dot = lang_size_sections (constructor_list.head,
2145 output_section_statement,
2146 &s->wild_statement.children.head,
2151 case lang_data_statement_enum:
2153 unsigned int size = 0;
2155 s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
2156 s->data_statement.output_section =
2157 output_section_statement->bfd_section;
2159 switch (s->data_statement.type)
2176 output_section_statement->bfd_section->_raw_size += size;
2177 /* The output section gets contents, and then we inspect for
2178 any flags set in the input script which override any ALLOC */
2179 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
2180 if (!(output_section_statement->flags & SEC_NEVER_LOAD)) {
2181 output_section_statement->bfd_section->flags |= SEC_ALLOC | SEC_LOAD;
2186 case lang_reloc_statement_enum:
2190 s->reloc_statement.output_vma =
2191 dot - output_section_statement->bfd_section->vma;
2192 s->reloc_statement.output_section =
2193 output_section_statement->bfd_section;
2194 size = bfd_get_reloc_size (s->reloc_statement.howto);
2196 output_section_statement->bfd_section->_raw_size += size;
2200 case lang_wild_statement_enum:
2202 dot = lang_size_sections (s->wild_statement.children.head,
2203 output_section_statement,
2204 &s->wild_statement.children.head,
2210 case lang_object_symbols_statement_enum:
2211 link_info.create_object_symbols_section =
2212 output_section_statement->bfd_section;
2214 case lang_output_statement_enum:
2215 case lang_target_statement_enum:
2217 case lang_input_section_enum:
2221 i = (*prev)->input_section.section;
2224 if (i->_cooked_size == 0)
2225 i->_cooked_size = i->_raw_size;
2231 if (! bfd_relax_section (i->owner, i, &link_info, &again))
2232 einfo ("%P%F: can't relax section: %E\n");
2236 dot = size_input_section (prev,
2237 output_section_statement,
2238 output_section_statement->fill,
2242 case lang_input_statement_enum:
2244 case lang_fill_statement_enum:
2245 s->fill_statement.output_section = output_section_statement->bfd_section;
2247 fill = s->fill_statement.fill;
2249 case lang_assignment_statement_enum:
2251 bfd_vma newdot = dot;
2253 exp_fold_tree (s->assignment_statement.exp,
2254 output_section_statement,
2255 lang_allocating_phase_enum,
2259 if (newdot != dot && !relax)
2261 /* The assignment changed dot. Insert a pad. */
2262 if (output_section_statement == abs_output_section)
2264 /* If we don't have an output section, then just adjust
2265 the default memory address. */
2266 lang_memory_region_lookup ("*default*")->current = newdot;
2270 lang_statement_union_type *new =
2271 ((lang_statement_union_type *)
2272 stat_alloc (sizeof (lang_padding_statement_type)));
2274 /* Link into existing chain */
2275 new->header.next = *prev;
2277 new->header.type = lang_padding_statement_enum;
2278 new->padding_statement.output_section =
2279 output_section_statement->bfd_section;
2280 new->padding_statement.output_offset =
2281 dot - output_section_statement->bfd_section->vma;
2282 new->padding_statement.fill = fill;
2283 new->padding_statement.size = newdot - dot;
2284 output_section_statement->bfd_section->_raw_size +=
2285 new->padding_statement.size;
2293 case lang_padding_statement_enum:
2294 /* If we are relaxing, and this is not the first pass, some
2295 padding statements may have been inserted during previous
2296 passes. We may have to move the padding statement to a new
2297 location if dot has a different value at this point in this
2298 pass than it did at this point in the previous pass. */
2299 s->padding_statement.output_offset =
2300 dot - output_section_statement->bfd_section->vma;
2301 dot += s->padding_statement.size;
2302 output_section_statement->bfd_section->_raw_size +=
2303 s->padding_statement.size;
2306 case lang_group_statement_enum:
2307 dot = lang_size_sections (s->group_statement.children.head,
2308 output_section_statement,
2309 &s->group_statement.children.head,
2317 /* This can only get here when relaxing is turned on */
2319 case lang_address_statement_enum:
2322 prev = &s->header.next;
2328 lang_do_assignments (s, output_section_statement, fill, dot)
2329 lang_statement_union_type * s;
2330 lang_output_section_statement_type * output_section_statement;
2334 for (; s != (lang_statement_union_type *) NULL; s = s->next)
2336 switch (s->header.type)
2338 case lang_constructors_statement_enum:
2339 dot = lang_do_assignments (constructor_list.head,
2340 output_section_statement,
2345 case lang_output_section_statement_enum:
2347 lang_output_section_statement_type *os =
2348 &(s->output_section_statement);
2350 if (os->bfd_section != NULL)
2352 dot = os->bfd_section->vma;
2353 (void) lang_do_assignments (os->children.head, os,
2355 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
2359 /* If nothing has been placed into the output section then
2360 it won't have a bfd_section. */
2361 if (os->bfd_section)
2363 os->bfd_section->lma
2364 = exp_get_abs_int(os->load_base, 0,"load base", lang_final_phase_enum);
2369 case lang_wild_statement_enum:
2371 dot = lang_do_assignments (s->wild_statement.children.head,
2372 output_section_statement,
2377 case lang_object_symbols_statement_enum:
2378 case lang_output_statement_enum:
2379 case lang_target_statement_enum:
2381 case lang_common_statement_enum:
2384 case lang_data_statement_enum:
2386 etree_value_type value;
2388 value = exp_fold_tree (s->data_statement.exp,
2390 lang_final_phase_enum, dot, &dot);
2391 s->data_statement.value = value.value;
2392 if (value.valid == false)
2393 einfo ("%F%P: invalid data statement\n");
2395 switch (s->data_statement.type)
2412 case lang_reloc_statement_enum:
2414 etree_value_type value;
2416 value = exp_fold_tree (s->reloc_statement.addend_exp,
2418 lang_final_phase_enum, dot, &dot);
2419 s->reloc_statement.addend_value = value.value;
2420 if (value.valid == false)
2421 einfo ("%F%P: invalid reloc statement\n");
2423 dot += bfd_get_reloc_size (s->reloc_statement.howto);
2426 case lang_input_section_enum:
2428 asection *in = s->input_section.section;
2430 if (in->_cooked_size != 0)
2431 dot += in->_cooked_size;
2433 dot += in->_raw_size;
2437 case lang_input_statement_enum:
2439 case lang_fill_statement_enum:
2440 fill = s->fill_statement.fill;
2442 case lang_assignment_statement_enum:
2444 exp_fold_tree (s->assignment_statement.exp,
2445 output_section_statement,
2446 lang_final_phase_enum,
2452 case lang_padding_statement_enum:
2453 dot += s->padding_statement.size;
2456 case lang_group_statement_enum:
2457 dot = lang_do_assignments (s->group_statement.children.head,
2458 output_section_statement,
2466 case lang_address_statement_enum:
2474 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
2475 operator .startof. (section_name), it produces an undefined symbol
2476 .startof.section_name. Similarly, when it sees
2477 .sizeof. (section_name), it produces an undefined symbol
2478 .sizeof.section_name. For all the output sections, we look for
2479 such symbols, and set them to the correct value. */
2486 if (link_info.relocateable)
2489 for (s = output_bfd->sections; s != NULL; s = s->next)
2491 const char *secname;
2493 struct bfd_link_hash_entry *h;
2495 secname = bfd_get_section_name (output_bfd, s);
2496 buf = xmalloc (10 + strlen (secname));
2498 sprintf (buf, ".startof.%s", secname);
2499 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
2500 if (h != NULL && h->type == bfd_link_hash_undefined)
2502 h->type = bfd_link_hash_defined;
2503 h->u.def.value = bfd_get_section_vma (output_bfd, s);
2504 h->u.def.section = bfd_abs_section_ptr;
2507 sprintf (buf, ".sizeof.%s", secname);
2508 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
2509 if (h != NULL && h->type == bfd_link_hash_undefined)
2511 h->type = bfd_link_hash_defined;
2512 if (s->_cooked_size != 0)
2513 h->u.def.value = s->_cooked_size;
2515 h->u.def.value = s->_raw_size;
2516 h->u.def.section = bfd_abs_section_ptr;
2526 struct bfd_link_hash_entry *h;
2529 if (link_info.relocateable || link_info.shared)
2534 if (entry_symbol == (char *) NULL)
2536 /* No entry has been specified. Look for start, but don't warn
2537 if we don't find it. */
2538 entry_symbol = "start";
2542 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
2543 if (h != (struct bfd_link_hash_entry *) NULL
2544 && (h->type == bfd_link_hash_defined
2545 || h->type == bfd_link_hash_defweak)
2546 && h->u.def.section->output_section != NULL)
2550 val = (h->u.def.value
2551 + bfd_get_section_vma (output_bfd,
2552 h->u.def.section->output_section)
2553 + h->u.def.section->output_offset);
2554 if (! bfd_set_start_address (output_bfd, val))
2555 einfo ("%P%F:%s: can't set start address\n", entry_symbol);
2561 /* Can't find the entry symbol. Use the first address in the
2563 ts = bfd_get_section_by_name (output_bfd, ".text");
2564 if (ts != (asection *) NULL)
2567 einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n",
2568 entry_symbol, bfd_get_section_vma (output_bfd, ts));
2569 if (! bfd_set_start_address (output_bfd,
2570 bfd_get_section_vma (output_bfd, ts)))
2571 einfo ("%P%F: can't set start address\n");
2576 einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n",
2582 /* Check that the architecture of all the input files is compatible
2583 with the output file. Also call the backend to let it do any
2584 other checking that is needed. */
2589 lang_statement_union_type *file;
2591 CONST bfd_arch_info_type *compatible;
2593 for (file = file_chain.head;
2594 file != (lang_statement_union_type *) NULL;
2595 file = file->input_statement.next)
2597 input_bfd = file->input_statement.the_bfd;
2598 compatible = bfd_arch_get_compatible (input_bfd,
2600 if (compatible == NULL)
2601 einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n",
2602 bfd_printable_name (input_bfd), input_bfd,
2603 bfd_printable_name (output_bfd));
2606 bfd_merge_private_bfd_data (input_bfd, output_bfd);
2610 /* Look through all the global common symbols and attach them to the
2611 correct section. The -sort-common command line switch may be used
2612 to roughly sort the entries by size. */
2617 if (link_info.relocateable
2618 && ! command_line.force_common_definition)
2621 if (! config.sort_common)
2622 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
2627 for (power = 4; power >= 0; power--)
2628 bfd_link_hash_traverse (link_info.hash, lang_one_common,
2633 /* Place one common symbol in the correct section. */
2636 lang_one_common (h, info)
2637 struct bfd_link_hash_entry *h;
2640 unsigned int power_of_two;
2644 if (h->type != bfd_link_hash_common)
2648 power_of_two = h->u.c.p->alignment_power;
2650 if (config.sort_common
2651 && power_of_two < (unsigned int) *(int *) info)
2654 section = h->u.c.p->section;
2656 /* Increase the size of the section. */
2657 section->_raw_size = ALIGN_N (section->_raw_size,
2658 (bfd_size_type) (1 << power_of_two));
2660 /* Adjust the alignment if necessary. */
2661 if (power_of_two > section->alignment_power)
2662 section->alignment_power = power_of_two;
2664 /* Change the symbol from common to defined. */
2665 h->type = bfd_link_hash_defined;
2666 h->u.def.section = section;
2667 h->u.def.value = section->_raw_size;
2669 /* Increase the size of the section. */
2670 section->_raw_size += size;
2672 /* Make sure the section is allocated in memory. */
2673 section->flags |= SEC_ALLOC;
2675 if (config.map_file != NULL)
2677 static boolean header_printed;
2682 if (! header_printed)
2684 minfo ("\nAllocating common symbols\n");
2685 minfo ("Common symbol size file\n\n");
2686 header_printed = true;
2689 name = demangle (h->root.string);
2691 len = strlen (name);
2706 if (size <= 0xffffffff)
2707 sprintf (buf, "%lx", (unsigned long) size);
2709 sprintf_vma (buf, size);
2719 minfo ("%B\n", section->owner);
2726 run through the input files and ensure that every input
2727 section has somewhere to go. If one is found without
2728 a destination then create an input request and place it
2729 into the statement tree.
2733 lang_place_orphans ()
2735 lang_input_statement_type *file;
2737 for (file = (lang_input_statement_type *) file_chain.head;
2738 file != (lang_input_statement_type *) NULL;
2739 file = (lang_input_statement_type *) file->next)
2743 for (s = file->the_bfd->sections;
2744 s != (asection *) NULL;
2747 if (s->output_section == (asection *) NULL)
2749 /* This section of the file is not attatched, root
2750 around for a sensible place for it to go */
2752 if (file->just_syms_flag)
2754 /* We are only retrieving symbol values from this
2755 file. We want the symbols to act as though the
2756 values in the file are absolute. */
2757 s->output_section = bfd_abs_section_ptr;
2758 s->output_offset = s->vma;
2760 else if (strcmp (s->name, "COMMON") == 0)
2762 /* This is a lonely common section which must have
2763 come from an archive. We attach to the section
2764 with the wildcard. */
2765 if (! link_info.relocateable
2766 || command_line.force_common_definition)
2768 if (default_common_section == NULL)
2771 /* This message happens when using the
2772 svr3.ifile linker script, so I have
2774 info_msg ("%P: no [COMMON] command, defaulting to .bss\n");
2776 default_common_section =
2777 lang_output_section_statement_lookup (".bss");
2780 wild_doit (&default_common_section->children, s,
2781 default_common_section, file);
2784 else if (ldemul_place_orphan (file, s))
2788 lang_output_section_statement_type *os =
2789 lang_output_section_statement_lookup (s->name);
2791 wild_doit (&os->children, s, os, file);
2800 lang_set_flags (ptr, flags)
2804 boolean state = false;
2819 /* ptr->flag_read = state; */
2822 /* ptr->flag_write = state; */
2825 /* ptr->flag_executable= state;*/
2829 /* ptr->flag_loadable= state;*/
2832 einfo ("%P%F: invalid syntax in flags\n");
2839 /* Call a function on each input file. This function will be called
2840 on an archive, but not on the elements. */
2843 lang_for_each_input_file (func)
2844 void (*func) PARAMS ((lang_input_statement_type *));
2846 lang_input_statement_type *f;
2848 for (f = (lang_input_statement_type *) input_file_chain.head;
2850 f = (lang_input_statement_type *) f->next_real_file)
2854 /* Call a function on each file. The function will be called on all
2855 the elements of an archive which are included in the link, but will
2856 not be called on the archive file itself. */
2859 lang_for_each_file (func)
2860 void (*func) PARAMS ((lang_input_statement_type *));
2862 lang_input_statement_type *f;
2864 for (f = (lang_input_statement_type *) file_chain.head;
2865 f != (lang_input_statement_type *) NULL;
2866 f = (lang_input_statement_type *) f->next)
2877 lang_for_each_input_section (func)
2878 void (*func) PARAMS ((bfd * ab, asection * as));
2880 lang_input_statement_type *f;
2882 for (f = (lang_input_statement_type *) file_chain.head;
2883 f != (lang_input_statement_type *) NULL;
2884 f = (lang_input_statement_type *) f->next)
2888 for (s = f->the_bfd->sections;
2889 s != (asection *) NULL;
2892 func (f->the_bfd, s);
2900 ldlang_add_file (entry)
2901 lang_input_statement_type * entry;
2905 lang_statement_append (&file_chain,
2906 (lang_statement_union_type *) entry,
2909 /* The BFD linker needs to have a list of all input BFDs involved in
2911 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
2912 ASSERT (entry->the_bfd != output_bfd);
2913 for (pp = &link_info.input_bfds;
2914 *pp != (bfd *) NULL;
2915 pp = &(*pp)->link_next)
2917 *pp = entry->the_bfd;
2918 entry->the_bfd->usrdata = (PTR) entry;
2919 bfd_set_gp_size (entry->the_bfd, g_switch_value);
2921 /* Look through the sections and check for any which should not be
2922 included in the link. We need to do this now, so that we can
2923 notice when the backend linker tries to report multiple
2924 definition errors for symbols which are in sections we aren't
2925 going to link. FIXME: It might be better to entirely ignore
2926 symbols which are defined in sections which are going to be
2927 discarded. This would require modifying the backend linker for
2928 each backend which might set the SEC_LINK_ONCE flag. If we do
2929 this, we should probably handle SEC_EXCLUDE in the same way. */
2931 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) NULL);
2935 lang_add_output (name, from_script)
2939 /* Make -o on command line override OUTPUT in script. */
2940 if (had_output_filename == false || !from_script)
2942 output_filename = name;
2943 had_output_filename = true;
2948 static lang_output_section_statement_type *current_section;
2960 for (l = 0; l < 32; l++)
2962 if (i >= (unsigned int) x)
2971 lang_enter_output_section_statement (output_section_statement_name,
2972 address_exp, sectype, block_value,
2973 align, subalign, ebase)
2974 const char *output_section_statement_name;
2975 etree_type * address_exp;
2976 enum section_type sectype;
2977 bfd_vma block_value;
2979 etree_type *subalign;
2982 lang_output_section_statement_type *os;
2986 lang_output_section_statement_lookup (output_section_statement_name);
2990 /* Add this statement to tree */
2991 /* add_statement(lang_output_section_statement_enum,
2992 output_section_statement);*/
2993 /* Make next things chain into subchain of this */
2995 if (os->addr_tree ==
2996 (etree_type *) NULL)
3001 os->sectype = sectype;
3002 if (sectype != noload_section)
3003 os->flags = SEC_NO_FLAGS;
3005 os->flags = SEC_NEVER_LOAD;
3006 os->block_value = block_value ? block_value : 1;
3007 stat_ptr = &os->children;
3009 os->subsection_alignment = topower(
3010 exp_get_value_int(subalign, -1,
3011 "subsection alignment",
3013 os->section_alignment = topower(
3014 exp_get_value_int(align, -1,
3015 "section alignment", 0));
3017 os->load_base = ebase;
3024 lang_output_statement_type *new =
3025 new_stat (lang_output_statement, stat_ptr);
3027 new->name = output_filename;
3030 /* Reset the current counters in the regions */
3032 reset_memory_regions ()
3034 lang_memory_region_type *p = lang_memory_region_list;
3036 for (p = lang_memory_region_list;
3037 p != (lang_memory_region_type *) NULL;
3040 p->old_length = (bfd_size_type) (p->current - p->origin);
3041 p->current = p->origin;
3048 lang_reasonable_defaults ();
3049 current_target = default_target;
3051 lang_for_each_statement (ldlang_open_output); /* Open the output file */
3053 ldemul_create_output_section_statements ();
3055 /* Add to the hash table all undefineds on the command line */
3056 lang_place_undefineds ();
3058 /* Create a bfd for each input file */
3059 current_target = default_target;
3060 open_input_bfds (statement_list.head, false);
3062 ldemul_after_open ();
3064 /* Build all sets based on the information gathered from the input
3066 ldctor_build_sets ();
3068 /* Size up the common data */
3071 /* Run through the contours of the script and attatch input sections
3072 to the correct output sections
3074 map_input_to_output_sections (statement_list.head, (char *) NULL,
3075 (lang_output_section_statement_type *) NULL);
3078 /* Find any sections not attatched explicitly and handle them */
3079 lang_place_orphans ();
3081 ldemul_before_allocation ();
3083 /* We must record the program headers before we try to fix the
3084 section positions, since they will affect SIZEOF_HEADERS. */
3085 lang_record_phdrs ();
3087 /* Now run around and relax if we can */
3088 if (command_line.relax)
3090 /* First time round is a trial run to get the 'worst case'
3091 addresses of the objects if there was no relaxing. */
3092 lang_size_sections (statement_list.head,
3094 &(statement_list.head), 0, (bfd_vma) 0, false);
3096 /* Keep relaxing until bfd_relax_section gives up. */
3099 reset_memory_regions ();
3101 relax_again = false;
3103 /* Do all the assignments with our current guesses as to
3105 lang_do_assignments (statement_list.head,
3107 (fill_type) 0, (bfd_vma) 0);
3109 /* Perform another relax pass - this time we know where the
3110 globals are, so can make better guess. */
3111 lang_size_sections (statement_list.head,
3113 &(statement_list.head), 0, (bfd_vma) 0, true);
3115 while (relax_again);
3119 /* Size up the sections. */
3120 lang_size_sections (statement_list.head,
3122 &(statement_list.head), 0, (bfd_vma) 0, false);
3125 /* See if anything special should be done now we know how big
3127 ldemul_after_allocation ();
3129 /* Fix any .startof. or .sizeof. symbols. */
3130 lang_set_startof ();
3132 /* Do all the assignments, now that we know the final restingplaces
3133 of all the symbols */
3135 lang_do_assignments (statement_list.head,
3137 (fill_type) 0, (bfd_vma) 0);
3139 /* Make sure that we're not mixing architectures */
3149 /* EXPORTED TO YACC */
3152 lang_add_wild (section_name, filename)
3153 CONST char *CONST section_name;
3154 CONST char *CONST filename;
3156 lang_wild_statement_type *new = new_stat (lang_wild_statement,
3159 if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
3161 placed_commons = true;
3163 if (filename != (char *) NULL)
3165 lang_has_input_file = true;
3167 new->section_name = section_name;
3168 new->filename = filename;
3169 lang_list_init (&new->children);
3173 lang_section_start (name, address)
3175 etree_type * address;
3177 lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
3179 ad->section_name = name;
3180 ad->address = address;
3183 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
3184 because of a -e argument on the command line, or zero if this is
3185 called by ENTRY in a linker script. Command line arguments take
3188 /* WINDOWS_NT. When an entry point has been specified, we will also force
3189 this symbol to be defined by calling ldlang_add_undef (equivalent to
3190 having switch -u entry_name on the command line). The reason we do
3191 this is so that the user doesn't have to because they would have to use
3192 the -u switch if they were specifying an entry point other than
3193 _mainCRTStartup. Specifically, if creating a windows application, entry
3194 point _WinMainCRTStartup must be specified.
3195 What I have found for non console applications (entry not _mainCRTStartup)
3196 is that the .obj that contains mainCRTStartup is brought in since it is
3197 the first encountered in libc.lib and it has other symbols in it which will
3198 be pulled in by the link process. To avoid this, adding -u with the entry
3199 point name specified forces the correct .obj to be used. We can avoid
3200 making the user do this by always adding the entry point name as an
3201 undefined symbol. */
3204 lang_add_entry (name, cmdline)
3208 if (entry_symbol == NULL
3210 || ! entry_from_cmdline)
3212 entry_symbol = name;
3213 entry_from_cmdline = cmdline;
3216 /* don't do this yet. It seems to work (the executables run), but the
3217 image created is very different from what I was getting before indicating
3218 that something else is being pulled in. When everything else is working,
3219 then try to put this back in to see if it will do the right thing for
3220 other more complicated applications */
3221 ldlang_add_undef (name);
3226 lang_add_target (name)
3229 lang_target_statement_type *new = new_stat (lang_target_statement,
3245 map_option_f = true;
3256 lang_fill_statement_type *new = new_stat (lang_fill_statement,
3263 lang_add_data (type, exp)
3265 union etree_union *exp;
3268 lang_data_statement_type *new = new_stat (lang_data_statement,
3276 /* Create a new reloc statement. RELOC is the BFD relocation type to
3277 generate. HOWTO is the corresponding howto structure (we could
3278 look this up, but the caller has already done so). SECTION is the
3279 section to generate a reloc against, or NAME is the name of the
3280 symbol to generate a reloc against. Exactly one of SECTION and
3281 NAME must be NULL. ADDEND is an expression for the addend. */
3284 lang_add_reloc (reloc, howto, section, name, addend)
3285 bfd_reloc_code_real_type reloc;
3286 reloc_howto_type *howto;
3289 union etree_union *addend;
3291 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
3295 p->section = section;
3297 p->addend_exp = addend;
3299 p->addend_value = 0;
3300 p->output_section = NULL;
3305 lang_add_assignment (exp)
3308 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
3315 lang_add_attribute (attribute)
3316 enum statement_enum attribute;
3318 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
3325 if (startup_file != (char *) NULL)
3327 einfo ("%P%Fmultiple STARTUP files\n");
3329 first_file->filename = name;
3330 first_file->local_sym_name = name;
3331 first_file->real = true;
3333 startup_file = name;
3340 lang_float_flag = maybe;
3344 lang_leave_output_section_statement (fill, memspec, phdrs)
3346 const char *memspec;
3347 struct lang_output_section_phdr_list *phdrs;
3349 current_section->fill = fill;
3350 current_section->region = lang_memory_region_lookup (memspec);
3351 current_section->phdrs = phdrs;
3352 stat_ptr = &statement_list;
3356 Create an absolute symbol with the given name with the value of the
3357 address of first byte of the section named.
3359 If the symbol already exists, then do nothing.
3362 lang_abs_symbol_at_beginning_of (secname, name)
3363 const char *secname;
3366 struct bfd_link_hash_entry *h;
3368 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
3369 if (h == (struct bfd_link_hash_entry *) NULL)
3370 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
3372 if (h->type == bfd_link_hash_new
3373 || h->type == bfd_link_hash_undefined)
3377 h->type = bfd_link_hash_defined;
3379 sec = bfd_get_section_by_name (output_bfd, secname);
3380 if (sec == (asection *) NULL)
3383 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
3385 h->u.def.section = bfd_abs_section_ptr;
3390 Create an absolute symbol with the given name with the value of the
3391 address of the first byte after the end of the section named.
3393 If the symbol already exists, then do nothing.
3396 lang_abs_symbol_at_end_of (secname, name)
3397 const char *secname;
3400 struct bfd_link_hash_entry *h;
3402 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
3403 if (h == (struct bfd_link_hash_entry *) NULL)
3404 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
3406 if (h->type == bfd_link_hash_new
3407 || h->type == bfd_link_hash_undefined)
3411 h->type = bfd_link_hash_defined;
3413 sec = bfd_get_section_by_name (output_bfd, secname);
3414 if (sec == (asection *) NULL)
3417 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
3418 + bfd_section_size (output_bfd, sec));
3420 h->u.def.section = bfd_abs_section_ptr;
3425 lang_statement_append (list, element, field)
3426 lang_statement_list_type * list;
3427 lang_statement_union_type * element;
3428 lang_statement_union_type ** field;
3430 *(list->tail) = element;
3434 /* Set the output format type. -oformat overrides scripts. */
3437 lang_add_output_format (format, big, little, from_script)
3443 if (output_target == NULL || !from_script)
3445 if (command_line.endian == ENDIAN_BIG
3448 else if (command_line.endian == ENDIAN_LITTLE
3452 output_target = format;
3456 /* Enter a group. This creates a new lang_group_statement, and sets
3457 stat_ptr to build new statements within the group. */
3462 lang_group_statement_type *g;
3464 g = new_stat (lang_group_statement, stat_ptr);
3465 lang_list_init (&g->children);
3466 stat_ptr = &g->children;
3469 /* Leave a group. This just resets stat_ptr to start writing to the
3470 regular list of statements again. Note that this will not work if
3471 groups can occur inside anything else which can adjust stat_ptr,
3472 but currently they can't. */
3477 stat_ptr = &statement_list;
3480 /* Add a new program header. This is called for each entry in a PHDRS
3481 command in a linker script. */
3484 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
3492 struct lang_phdr *n, **pp;
3494 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
3497 n->type = exp_get_value_int (type, 0, "program header type",
3498 lang_final_phase_enum);
3499 n->filehdr = filehdr;
3504 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
3509 /* Record the program header information in the output BFD. FIXME: We
3510 should not be calling an ELF specific function here. */
3513 lang_record_phdrs ()
3517 struct lang_output_section_phdr_list *last;
3518 struct lang_phdr *l;
3519 lang_statement_union_type *u;
3522 secs = xmalloc (alc * sizeof (asection *));
3524 for (l = lang_phdr_list; l != NULL; l = l->next)
3531 for (u = lang_output_section_statement.head;
3533 u = u->output_section_statement.next)
3535 lang_output_section_statement_type *os;
3536 struct lang_output_section_phdr_list *pl;
3538 os = &u->output_section_statement;
3545 if (os->sectype == noload_section
3546 || os->bfd_section == NULL
3547 || (os->bfd_section->flags & SEC_ALLOC) == 0)
3552 if (os->bfd_section == NULL)
3555 for (; pl != NULL; pl = pl->next)
3557 if (strcmp (pl->name, l->name) == 0)
3562 secs = xrealloc (secs, alc * sizeof (asection *));
3564 secs[c] = os->bfd_section;
3571 if (l->flags == NULL)
3574 flags = exp_get_vma (l->flags, 0, "phdr flags",
3575 lang_final_phase_enum);
3580 at = exp_get_vma (l->at, 0, "phdr load address",
3581 lang_final_phase_enum);
3583 if (! bfd_record_phdr (output_bfd, l->type,
3584 l->flags == NULL ? false : true,
3586 l->at == NULL ? false : true,
3587 at, l->filehdr, l->phdrs, c, secs))
3588 einfo ("%F%P: bfd_record_phdr failed: %E\n");
3593 /* Make sure all the phdr assignments succeeded. */
3594 for (u = lang_output_section_statement.head;
3596 u = u->output_section_statement.next)
3598 struct lang_output_section_phdr_list *pl;
3600 if (u->output_section_statement.bfd_section == NULL)
3603 for (pl = u->output_section_statement.phdrs;
3606 if (! pl->used && strcmp (pl->name, "NONE") != 0)
3607 einfo ("%X%P: section `%s' assigned to non-existent phdr `%s'\n",
3608 u->output_section_statement.name, pl->name);
3612 /* Record a list of sections which may not be cross referenced. */
3615 lang_add_nocrossref (l)
3616 struct lang_nocrossref *l;
3618 struct lang_nocrossrefs *n;
3620 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
3621 n->next = nocrossref_list;
3623 nocrossref_list = n;
3625 /* Set notice_all so that we get informed about all symbols. */
3626 link_info.notice_all = true;
3629 /* Overlay handling. We handle overlays with some static variables. */
3631 /* The overlay virtual address. */
3632 static etree_type *overlay_vma;
3634 /* The overlay load address. */
3635 static etree_type *overlay_lma;
3637 /* An expression for the maximum section size seen so far. */
3638 static etree_type *overlay_max;
3640 /* A list of all the sections in this overlay. */
3644 struct overlay_list *next;
3645 lang_output_section_statement_type *os;
3648 static struct overlay_list *overlay_list;
3650 /* Start handling an overlay. */
3653 lang_enter_overlay (vma_expr, lma_expr)
3654 etree_type *vma_expr;
3655 etree_type *lma_expr;
3657 /* The grammar should prevent nested overlays from occurring. */
3658 ASSERT (overlay_vma == NULL
3659 && overlay_lma == NULL
3660 && overlay_list == NULL
3661 && overlay_max == NULL);
3663 overlay_vma = vma_expr;
3664 overlay_lma = lma_expr;
3667 /* Start a section in an overlay. We handle this by calling
3668 lang_enter_output_section_statement with the correct VMA and LMA. */
3671 lang_enter_overlay_section (name)
3674 struct overlay_list *n;
3677 lang_enter_output_section_statement (name, overlay_vma, normal_section,
3678 0, 0, 0, overlay_lma);
3680 /* If this is the first section, then base the VMA and LMA of future
3681 sections on this one. This will work correctly even if `.' is
3682 used in the addresses. */
3683 if (overlay_list == NULL)
3685 overlay_vma = exp_nameop (ADDR, name);
3686 overlay_lma = exp_nameop (LOADADDR, name);
3689 /* Remember the section. */
3690 n = (struct overlay_list *) xmalloc (sizeof *n);
3691 n->os = current_section;
3692 n->next = overlay_list;
3695 size = exp_nameop (SIZEOF, name);
3697 /* Adjust the LMA for the next section. */
3698 overlay_lma = exp_binop ('+', overlay_lma, size);
3700 /* Arrange to work out the maximum section end address. */
3701 if (overlay_max == NULL)
3704 overlay_max = exp_binop (MAX, overlay_max, size);
3707 /* Finish a section in an overlay. There isn't any special to do
3711 lang_leave_overlay_section (fill, phdrs)
3713 struct lang_output_section_phdr_list *phdrs;
3720 name = current_section->name;
3722 lang_leave_output_section_statement (fill, "*default*", phdrs);
3724 /* Define the magic symbols. */
3726 clean = xmalloc (strlen (name) + 1);
3728 for (s1 = name; *s1 != '\0'; s1++)
3729 if (isalnum (*s1) || *s1 == '_')
3733 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
3734 sprintf (buf, "__load_start_%s", clean);
3735 lang_add_assignment (exp_assop ('=', buf,
3736 exp_nameop (LOADADDR, name)));
3738 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
3739 sprintf (buf, "__load_stop_%s", clean);
3740 lang_add_assignment (exp_assop ('=', buf,
3742 exp_nameop (LOADADDR, name),
3743 exp_nameop (SIZEOF, name))));
3748 /* Finish an overlay. If there are any overlay wide settings, this
3749 looks through all the sections in the overlay and sets them. */
3752 lang_leave_overlay (fill, memspec, phdrs)
3754 const char *memspec;
3755 struct lang_output_section_phdr_list *phdrs;
3757 lang_memory_region_type *region;
3758 struct overlay_list *l;
3759 struct lang_nocrossref *nocrossref;
3761 if (memspec == NULL)
3764 region = lang_memory_region_lookup (memspec);
3771 struct lang_nocrossref *nc;
3772 struct overlay_list *next;
3774 if (fill != 0 && l->os->fill == 0)
3776 if (region != NULL && l->os->region == NULL)
3777 l->os->region = region;
3778 if (phdrs != NULL && l->os->phdrs == NULL)
3779 l->os->phdrs = phdrs;
3781 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
3782 nc->name = l->os->name;
3783 nc->next = nocrossref;
3791 if (nocrossref != NULL)
3792 lang_add_nocrossref (nocrossref);
3794 /* Update . for the end of the overlay. */
3795 lang_add_assignment (exp_assop ('=', ".",
3796 exp_binop ('+', overlay_vma, overlay_max)));
3800 overlay_list = NULL;