1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 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 boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
105 static void print_input_section PARAMS ((lang_input_section_type *in));
106 static void print_fill_statement PARAMS ((lang_fill_statement_type *fill));
107 static void print_data_statement PARAMS ((lang_data_statement_type *data));
108 static void print_address_statement PARAMS ((lang_address_statement_type *));
109 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *reloc));
110 static void print_padding_statement PARAMS ((lang_padding_statement_type *s));
111 static void print_wild_statement
112 PARAMS ((lang_wild_statement_type *w,
113 lang_output_section_statement_type *os));
114 static void print_group
115 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
116 static void print_statement PARAMS ((lang_statement_union_type *s,
117 lang_output_section_statement_type *os));
118 static void print_statement_list PARAMS ((lang_statement_union_type *s,
119 lang_output_section_statement_type *os));
120 static void print_statements PARAMS ((void));
121 static bfd_vma insert_pad PARAMS ((lang_statement_union_type **this_ptr,
122 fill_type fill, unsigned int power,
123 asection *output_section_statement,
125 static bfd_vma size_input_section
126 PARAMS ((lang_statement_union_type **this_ptr,
127 lang_output_section_statement_type *output_section_statement,
128 fill_type fill, bfd_vma dot, boolean relax));
129 static void lang_finish PARAMS ((void));
130 static void lang_check PARAMS ((void));
131 static void lang_common PARAMS ((void));
132 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
133 static void lang_place_orphans PARAMS ((void));
134 static int topower PARAMS ((int));
135 static void lang_set_startof PARAMS ((void));
136 static void reset_memory_regions PARAMS ((void));
137 static void lang_record_phdrs PARAMS ((void));
140 lang_output_section_statement_type *abs_output_section;
141 lang_statement_list_type *stat_ptr = &statement_list;
142 lang_statement_list_type file_chain = { 0 };
143 const char *entry_symbol = NULL;
144 boolean entry_from_cmdline;
145 boolean lang_has_input_file = false;
146 boolean had_output_filename = false;
147 boolean lang_float_flag = false;
148 boolean delete_output_file_on_failure = false;
149 struct lang_nocrossrefs *nocrossref_list;
151 etree_type *base; /* Relocation base - or null */
154 #if defined(__STDC__) || defined(ALMOST_STDC)
155 #define cat(a,b) a##b
157 #define cat(a,b) a/**/b
160 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
162 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
164 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
166 #define SECTION_NAME_MAP_LENGTH (16)
172 return obstack_alloc (&stat_obstack, size);
175 /*----------------------------------------------------------------------
176 lang_for_each_statement walks the parse tree and calls the provided
177 function for each node
181 lang_for_each_statement_worker (func, s)
182 void (*func) PARAMS ((lang_statement_union_type *));
183 lang_statement_union_type *s;
185 for (; s != (lang_statement_union_type *) NULL; s = s->next)
189 switch (s->header.type)
191 case lang_constructors_statement_enum:
192 lang_for_each_statement_worker (func, constructor_list.head);
194 case lang_output_section_statement_enum:
195 lang_for_each_statement_worker
197 s->output_section_statement.children.head);
199 case lang_wild_statement_enum:
200 lang_for_each_statement_worker
202 s->wild_statement.children.head);
204 case lang_group_statement_enum:
205 lang_for_each_statement_worker (func,
206 s->group_statement.children.head);
208 case lang_data_statement_enum:
209 case lang_reloc_statement_enum:
210 case lang_object_symbols_statement_enum:
211 case lang_output_statement_enum:
212 case lang_target_statement_enum:
213 case lang_input_section_enum:
214 case lang_input_statement_enum:
215 case lang_assignment_statement_enum:
216 case lang_padding_statement_enum:
217 case lang_address_statement_enum:
218 case lang_fill_statement_enum:
228 lang_for_each_statement (func)
229 void (*func) PARAMS ((lang_statement_union_type *));
231 lang_for_each_statement_worker (func,
232 statement_list.head);
235 /*----------------------------------------------------------------------*/
237 lang_list_init (list)
238 lang_statement_list_type *list;
240 list->head = (lang_statement_union_type *) NULL;
241 list->tail = &list->head;
244 /*----------------------------------------------------------------------
246 build a new statement node for the parse tree
251 lang_statement_union_type *
252 new_statement (type, size, list)
253 enum statement_enum type;
255 lang_statement_list_type * list;
257 lang_statement_union_type *new = (lang_statement_union_type *)
260 new->header.type = type;
261 new->header.next = (lang_statement_union_type *) NULL;
262 lang_statement_append (list, new, &new->header.next);
267 Build a new input file node for the language. There are several ways
268 in which we treat an input file, eg, we only look at symbols, or
269 prefix it with a -l etc.
271 We can be supplied with requests for input files more than once;
272 they may, for example be split over serveral lines like foo.o(.text)
273 foo.o(.data) etc, so when asked for a file we check that we havn't
274 got it already so we don't duplicate the bfd.
277 static lang_input_statement_type *
278 new_afile (name, file_type, target, add_to_list)
280 lang_input_file_enum_type file_type;
284 lang_input_statement_type *p;
287 p = new_stat (lang_input_statement, stat_ptr);
290 p = ((lang_input_statement_type *)
291 stat_alloc (sizeof (lang_input_statement_type)));
292 p->header.next = NULL;
295 lang_has_input_file = true;
299 case lang_input_file_is_symbols_only_enum:
301 p->is_archive = false;
303 p->local_sym_name = name;
304 p->just_syms_flag = true;
305 p->search_dirs_flag = false;
307 case lang_input_file_is_fake_enum:
309 p->is_archive = false;
311 p->local_sym_name = name;
312 p->just_syms_flag = false;
313 p->search_dirs_flag = false;
315 case lang_input_file_is_l_enum:
316 p->is_archive = true;
319 p->local_sym_name = concat ("-l", name, (const char *) NULL);
320 p->just_syms_flag = false;
321 p->search_dirs_flag = true;
323 case lang_input_file_is_marker_enum:
325 p->is_archive = false;
327 p->local_sym_name = name;
328 p->just_syms_flag = false;
329 p->search_dirs_flag = true;
331 case lang_input_file_is_search_file_enum:
333 p->is_archive = false;
335 p->local_sym_name = name;
336 p->just_syms_flag = false;
337 p->search_dirs_flag = true;
339 case lang_input_file_is_file_enum:
341 p->is_archive = false;
343 p->local_sym_name = name;
344 p->just_syms_flag = false;
345 p->search_dirs_flag = false;
350 p->the_bfd = (bfd *) NULL;
351 p->asymbols = (asymbol **) NULL;
352 p->next_real_file = (lang_statement_union_type *) NULL;
353 p->next = (lang_statement_union_type *) NULL;
355 p->dynamic = config.dynamic_link;
356 p->whole_archive = whole_archive;
358 lang_statement_append (&input_file_chain,
359 (lang_statement_union_type *) p,
364 lang_input_statement_type *
365 lang_add_input_file (name, file_type, target)
367 lang_input_file_enum_type file_type;
370 lang_has_input_file = true;
371 return new_afile (name, file_type, target, true);
374 /* Build enough state so that the parser can build its tree */
378 obstack_begin (&stat_obstack, 1000);
380 stat_ptr = &statement_list;
382 lang_list_init (stat_ptr);
384 lang_list_init (&input_file_chain);
385 lang_list_init (&lang_output_section_statement);
386 lang_list_init (&file_chain);
387 first_file = lang_add_input_file ((char *) NULL,
388 lang_input_file_is_marker_enum,
390 abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
392 abs_output_section->bfd_section = bfd_abs_section_ptr;
396 /*----------------------------------------------------------------------
397 A region is an area of memory declared with the
398 MEMORY { name:org=exp, len=exp ... }
401 We maintain a list of all the regions here
403 If no regions are specified in the script, then the default is used
404 which is created when looked up to be the entire data space
407 static lang_memory_region_type *lang_memory_region_list;
408 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
410 lang_memory_region_type *
411 lang_memory_region_lookup (name)
412 CONST char *CONST name;
415 lang_memory_region_type *p = lang_memory_region_list;
417 for (p = lang_memory_region_list;
418 p != (lang_memory_region_type *) NULL;
421 if (strcmp (p->name, name) == 0)
428 /* This code used to always use the first region in the list as the
429 default region. I changed it to instead use a region
430 encompassing all of memory as the default region. This permits
431 NOLOAD sections to work reasonably without requiring a region.
432 People should specify what region they mean, if they really want
434 if (strcmp (name, "*default*") == 0)
436 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
438 return lang_memory_region_list;
444 lang_memory_region_type *new =
445 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
447 new->name = buystring (name);
448 new->next = (lang_memory_region_type *) NULL;
450 *lang_memory_region_list_tail = new;
451 lang_memory_region_list_tail = &new->next;
453 new->length = ~(bfd_size_type)0;
455 new->had_full_message = false;
462 lang_output_section_statement_type *
463 lang_output_section_find (name)
464 CONST char *CONST name;
466 lang_statement_union_type *u;
467 lang_output_section_statement_type *lookup;
469 for (u = lang_output_section_statement.head;
470 u != (lang_statement_union_type *) NULL;
473 lookup = &u->output_section_statement;
474 if (strcmp (name, lookup->name) == 0)
479 return (lang_output_section_statement_type *) NULL;
482 lang_output_section_statement_type *
483 lang_output_section_statement_lookup (name)
484 CONST char *CONST name;
486 lang_output_section_statement_type *lookup;
488 lookup = lang_output_section_find (name);
489 if (lookup == (lang_output_section_statement_type *) NULL)
492 lookup = (lang_output_section_statement_type *)
493 new_stat (lang_output_section_statement, stat_ptr);
494 lookup->region = (lang_memory_region_type *) NULL;
496 lookup->block_value = 1;
499 lookup->next = (lang_statement_union_type *) NULL;
500 lookup->bfd_section = (asection *) NULL;
501 lookup->processed = false;
502 lookup->sectype = normal_section;
503 lookup->addr_tree = (etree_type *) NULL;
504 lang_list_init (&lookup->children);
506 lookup->memspec = (CONST char *) NULL;
508 lookup->subsection_alignment = -1;
509 lookup->section_alignment = -1;
510 lookup->load_base = (union etree_union *) NULL;
511 lookup->phdrs = NULL;
513 lang_statement_append (&lang_output_section_statement,
514 (lang_statement_union_type *) lookup,
523 lang_memory_region_type *m;
525 minfo ("\nMemory Configuration\n\n");
526 fprintf (config.map_file, "%-16s %-18s %-18s\n",
527 "Name", "Origin", "Length");
529 for (m = lang_memory_region_list;
530 m != (lang_memory_region_type *) NULL;
536 fprintf (config.map_file, "%-16s ", m->name);
538 sprintf_vma (buf, m->origin);
539 minfo ("0x%s ", buf);
547 minfo ("0x%V\n", m->length);
550 fprintf (config.map_file, "\nLinker script and memory map\n\n");
555 /* Initialize an output section. */
559 lang_output_section_statement_type *s;
561 section_userdata_type *new;
563 if (s->bfd_section != NULL)
566 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
567 einfo ("%P%F: Illegal use of `%s' section", DISCARD_SECTION_NAME);
569 new = ((section_userdata_type *)
570 stat_alloc (sizeof (section_userdata_type)));
572 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
573 if (s->bfd_section == (asection *) NULL)
574 s->bfd_section = bfd_make_section (output_bfd, s->name);
575 if (s->bfd_section == (asection *) NULL)
577 einfo ("%P%F: output format %s cannot represent section called %s\n",
578 output_bfd->xvec->name, s->name);
580 s->bfd_section->output_section = s->bfd_section;
582 /* We initialize an output sections output offset to minus its own */
583 /* vma to allow us to output a section through itself */
584 s->bfd_section->output_offset = 0;
585 get_userdata (s->bfd_section) = (PTR) new;
587 /* If there is a base address, make sure that any sections it might
588 mention are initialized. */
589 if (s->addr_tree != NULL)
590 exp_init_os (s->addr_tree);
593 /* Make sure that all output sections mentioned in an expression are
600 switch (exp->type.node_class)
603 exp_init_os (exp->assign.src);
607 exp_init_os (exp->binary.lhs);
608 exp_init_os (exp->binary.rhs);
612 exp_init_os (exp->trinary.cond);
613 exp_init_os (exp->trinary.lhs);
614 exp_init_os (exp->trinary.rhs);
618 exp_init_os (exp->unary.child);
622 switch (exp->type.node_code)
628 lang_output_section_statement_type *os;
630 os = lang_output_section_find (exp->name.name);
631 if (os != NULL && os->bfd_section == NULL)
642 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
643 once into the output. This routine checks each sections, and
644 arranges to discard it if a section of the same name has already
645 been linked. This code assumes that all relevant sections have the
646 SEC_LINK_ONCE flag set; that is, it does not depend solely upon the
647 section name. This is called via bfd_map_over_sections. */
651 section_already_linked (abfd, sec, data)
656 lang_input_statement_type *entry = (lang_input_statement_type *) data;
659 struct sec_link_once *next;
662 static struct sec_link_once *sec_link_once_list;
665 struct sec_link_once *l;
667 /* If we are only reading symbols from this object, then we want to
668 discard all sections. */
669 if (entry->just_syms_flag)
671 sec->output_section = bfd_abs_section_ptr;
672 sec->output_offset = sec->vma;
676 flags = bfd_get_section_flags (abfd, sec);
678 if ((flags & SEC_LINK_ONCE) == 0)
681 name = bfd_get_section_name (abfd, sec);
683 for (l = sec_link_once_list; l != NULL; l = l->next)
685 if (strcmp (name, bfd_get_section_name (l->sec->owner, l->sec)) == 0)
687 /* The section has already been linked. See if we should
689 switch (flags & SEC_LINK_DUPLICATES)
694 case SEC_LINK_DUPLICATES_DISCARD:
697 case SEC_LINK_DUPLICATES_ONE_ONLY:
698 einfo ("%P: %B: warning: ignoring duplicate section `%s'\n",
702 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
703 /* FIXME: We should really dig out the contents of both
704 sections and memcmp them. The COFF/PE spec says that
705 the Microsoft linker does not implement this
706 correctly, so I'm not going to bother doing it
709 case SEC_LINK_DUPLICATES_SAME_SIZE:
710 if (bfd_section_size (abfd, sec)
711 != bfd_section_size (l->sec->owner, l->sec))
712 einfo ("%P: %B: warning: duplicate section `%s' has different size\n",
717 /* Set the output_section field so that wild_doit does not
718 create a lang_input_section structure for this section. */
719 sec->output_section = bfd_abs_section_ptr;
725 /* This is the first section with this name. Record it. */
727 l = (struct sec_link_once *) xmalloc (sizeof *l);
729 l->next = sec_link_once_list;
730 sec_link_once_list = l;
733 /* The wild routines.
735 These expand statements like *(.text) and foo.o to a list of
736 explicit actions, like foo.o(.text), bar.o(.text) and
737 foo.o(.text, .data). */
739 /* Return true if the PATTERN argument is a wildcard pattern. */
747 for (s = pattern; *s != '\0'; ++s)
756 /* Add SECTION to the output section OUTPUT. Do this by creating a
757 lang_input_section statement which is placed at PTR. FILE is the
758 input file which holds SECTION. */
761 wild_doit (ptr, section, output, file)
762 lang_statement_list_type *ptr;
764 lang_output_section_statement_type *output;
765 lang_input_statement_type *file;
770 flags = bfd_get_section_flags (section->owner, section);
774 /* If we are doing a final link, discard sections marked with
776 if (! link_info.relocateable
777 && (flags & SEC_EXCLUDE) != 0)
780 /* Discard input sections which are assigned to a section named
781 DISCARD_SECTION_NAME. */
782 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
785 /* Discard debugging sections if we are stripping debugging
787 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
788 && (flags & SEC_DEBUGGING) != 0)
793 if (section->output_section == NULL)
795 /* This prevents future calls from assigning this section. */
796 section->output_section = bfd_abs_section_ptr;
801 if (section->output_section == NULL)
803 lang_input_section_type *new;
805 if (output->bfd_section == NULL)
808 /* Add a section reference to the list */
809 new = new_stat (lang_input_section, ptr);
811 new->section = section;
813 section->output_section = output->bfd_section;
815 /* We don't copy the SEC_NEVER_LOAD flag from an input section
816 to an output section, because we want to be able to include a
817 SEC_NEVER_LOAD section in the middle of an otherwise loaded
818 section (I don't know why we want to do this, but we do).
819 build_link_order in ldwrite.c handles this case by turning
820 the embedded SEC_NEVER_LOAD section into a fill.
822 If final link, don't copy the SEC_LINK_ONCE flags, they've already
823 been processed. One reason to do this is that on pe format targets,
824 .text$foo sections go into .text and it's odd to see .text with
825 SEC_LINK_ONCE set. */
827 section->output_section->flags |=
828 section->flags & (flagword) (~ (SEC_NEVER_LOAD
829 | (! link_info.relocateable
830 ? SEC_LINK_ONCE | SEC_LINK_DUPLICATES
833 switch (output->sectype)
840 case overlay_section:
841 output->bfd_section->flags &= ~SEC_ALLOC;
844 output->bfd_section->flags &= ~SEC_LOAD;
845 output->bfd_section->flags |= SEC_NEVER_LOAD;
849 if (section->alignment_power > output->bfd_section->alignment_power)
850 output->bfd_section->alignment_power = section->alignment_power;
852 /* If supplied an aligment, then force it. */
853 if (output->section_alignment != -1)
854 output->bfd_section->alignment_power = output->section_alignment;
858 /* Expand a wild statement for a particular FILE. SECTION may be
859 NULL, in which case it is a wild card. */
862 wild_section (ptr, section, file, output)
863 lang_wild_statement_type *ptr;
865 lang_input_statement_type *file;
866 lang_output_section_statement_type *output;
868 if (file->just_syms_flag == false)
870 register asection *s;
876 wildcard = wildcardp (section);
878 for (s = file->the_bfd->sections; s != NULL; s = s->next)
882 /* Attach all sections named SECTION. If SECTION is NULL,
883 then attach all sections.
885 Previously, if SECTION was NULL, this code did not call
886 wild_doit if the SEC_IS_COMMON flag was set for the
887 section. I did not understand that, and I took it out.
896 name = bfd_get_section_name (file->the_bfd, s);
898 match = fnmatch (section, name, 0) == 0 ? true : false;
900 match = strcmp (section, name) == 0 ? true : false;
903 wild_doit (&ptr->children, s, output, file);
908 /* This is passed a file name which must have been seen already and
909 added to the statement tree. We will see if it has been opened
910 already and had its symbols read. If not then we'll read it. */
912 static lang_input_statement_type *
916 lang_input_statement_type *search;
918 for (search = (lang_input_statement_type *) input_file_chain.head;
919 search != (lang_input_statement_type *) NULL;
920 search = (lang_input_statement_type *) search->next_real_file)
922 if (search->filename == (char *) NULL && name == (char *) NULL)
924 if (search->filename != (char *) NULL
925 && name != (char *) NULL
926 && strcmp (search->filename, name) == 0)
930 if (search == (lang_input_statement_type *) NULL)
931 search = new_afile (name, lang_input_file_is_file_enum, default_target,
934 /* If we have already added this file, or this file is not real
935 (FIXME: can that ever actually happen?) or the name is NULL
936 (FIXME: can that ever actually happen?) don't add this file. */
939 || search->filename == (const char *) NULL)
942 load_symbols (search, (lang_statement_list_type *) NULL);
947 /* Get the symbols for an input file. */
950 load_symbols (entry, place)
951 lang_input_statement_type *entry;
952 lang_statement_list_type *place;
959 ldfile_open_file (entry);
961 if (! bfd_check_format (entry->the_bfd, bfd_archive)
962 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
965 lang_statement_list_type *hold;
967 err = bfd_get_error ();
968 if (err == bfd_error_file_ambiguously_recognized)
972 einfo ("%B: file not recognized: %E\n", entry->the_bfd);
973 einfo ("%B: matching formats:", entry->the_bfd);
974 for (p = matching; *p != NULL; p++)
978 else if (err != bfd_error_file_not_recognized
980 einfo ("%F%B: file not recognized: %E\n", entry->the_bfd);
982 bfd_close (entry->the_bfd);
983 entry->the_bfd = NULL;
985 /* See if the emulation has some special knowledge. */
987 if (ldemul_unrecognized_file (entry))
990 /* Try to interpret the file as a linker script. */
992 ldfile_open_command_file (entry->filename);
997 ldfile_assumed_script = true;
998 parser_input = input_script;
1000 ldfile_assumed_script = false;
1007 /* We don't call ldlang_add_file for an archive. Instead, the
1008 add_symbols entry point will call ldlang_add_file, via the
1009 add_archive_element callback, for each element of the archive
1011 switch (bfd_get_format (entry->the_bfd))
1017 ldlang_add_file (entry);
1018 if (trace_files || trace_file_tries)
1019 info_msg ("%I\n", entry);
1023 if (entry->whole_archive)
1025 bfd *member = bfd_openr_next_archived_file (entry->the_bfd,
1027 while (member != NULL)
1029 if (! bfd_check_format (member, bfd_object))
1030 einfo ("%F%B: object %B in archive is not object\n",
1031 entry->the_bfd, member);
1032 if (! ((*link_info.callbacks->add_archive_element)
1033 (&link_info, member, "--whole-archive")))
1035 if (! bfd_link_add_symbols (member, &link_info))
1036 einfo ("%F%B: could not read symbols: %E\n", member);
1037 member = bfd_openr_next_archived_file (entry->the_bfd,
1041 entry->loaded = true;
1047 if (! bfd_link_add_symbols (entry->the_bfd, &link_info))
1048 einfo ("%F%B: could not read symbols: %E\n", entry->the_bfd);
1050 entry->loaded = true;
1053 /* Handle a wild statement for a single file F. */
1056 wild_file (s, section, f, output)
1057 lang_wild_statement_type *s;
1058 const char *section;
1059 lang_input_statement_type *f;
1060 lang_output_section_statement_type *output;
1062 if (f->the_bfd == NULL
1063 || ! bfd_check_format (f->the_bfd, bfd_archive))
1064 wild_section (s, section, f, output);
1069 /* This is an archive file. We must map each member of the
1070 archive separately. */
1071 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
1072 while (member != NULL)
1074 /* When lookup_name is called, it will call the add_symbols
1075 entry point for the archive. For each element of the
1076 archive which is included, BFD will call ldlang_add_file,
1077 which will set the usrdata field of the member to the
1078 lang_input_statement. */
1079 if (member->usrdata != NULL)
1081 wild_section (s, section,
1082 (lang_input_statement_type *) member->usrdata,
1086 member = bfd_openr_next_archived_file (f->the_bfd, member);
1091 /* Handle a wild statement. SECTION or FILE or both may be NULL,
1092 indicating that it is a wildcard. Separate lang_input_section
1093 statements are created for each part of the expansion; they are
1094 added after the wild statement S. OUTPUT is the output section. */
1097 wild (s, section, file, target, output)
1098 lang_wild_statement_type *s;
1099 const char *section;
1102 lang_output_section_statement_type *output;
1104 lang_input_statement_type *f;
1106 if (file == (char *) NULL)
1108 /* Perform the iteration over all files in the list */
1109 for (f = (lang_input_statement_type *) file_chain.head;
1110 f != (lang_input_statement_type *) NULL;
1111 f = (lang_input_statement_type *) f->next)
1113 wild_file (s, section, f, output);
1116 else if (wildcardp (file))
1118 for (f = (lang_input_statement_type *) file_chain.head;
1119 f != (lang_input_statement_type *) NULL;
1120 f = (lang_input_statement_type *) f->next)
1122 if (fnmatch (file, f->filename, FNM_FILE_NAME) == 0)
1123 wild_file (s, section, f, output);
1128 /* Perform the iteration over a single file */
1129 f = lookup_name (file);
1130 wild_file (s, section, f, output);
1133 if (section != (char *) NULL
1134 && strcmp (section, "COMMON") == 0
1135 && default_common_section == NULL)
1137 /* Remember the section that common is going to in case we later
1138 get something which doesn't know where to put it. */
1139 default_common_section = output;
1143 /* Open the output file. */
1151 if (output_target == (char *) NULL)
1153 if (current_target != (char *) NULL)
1154 output_target = current_target;
1156 output_target = default_target;
1158 output = bfd_openw (name, output_target);
1160 if (output == (bfd *) NULL)
1162 if (bfd_get_error () == bfd_error_invalid_target)
1164 einfo ("%P%F: target %s not found\n", output_target);
1166 einfo ("%P%F: cannot open output file %s: %E\n", name);
1169 delete_output_file_on_failure = true;
1171 /* output->flags |= D_PAGED;*/
1173 if (! bfd_set_format (output, bfd_object))
1174 einfo ("%P%F:%s: can not make object file: %E\n", name);
1175 if (! bfd_set_arch_mach (output,
1176 ldfile_output_architecture,
1177 ldfile_output_machine))
1178 einfo ("%P%F:%s: can not set architecture: %E\n", name);
1180 link_info.hash = bfd_link_hash_table_create (output);
1181 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1182 einfo ("%P%F: can not create link hash table: %E\n");
1184 bfd_set_gp_size (output, g_switch_value);
1192 ldlang_open_output (statement)
1193 lang_statement_union_type * statement;
1195 switch (statement->header.type)
1197 case lang_output_statement_enum:
1198 ASSERT (output_bfd == (bfd *) NULL);
1199 output_bfd = open_output (statement->output_statement.name);
1200 ldemul_set_output_arch ();
1201 if (config.magic_demand_paged && !link_info.relocateable)
1202 output_bfd->flags |= D_PAGED;
1204 output_bfd->flags &= ~D_PAGED;
1205 if (config.text_read_only)
1206 output_bfd->flags |= WP_TEXT;
1208 output_bfd->flags &= ~WP_TEXT;
1209 if (link_info.traditional_format)
1210 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1212 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1215 case lang_target_statement_enum:
1216 current_target = statement->target_statement.target;
1223 /* Open all the input files. */
1226 open_input_bfds (s, force)
1227 lang_statement_union_type *s;
1230 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1232 switch (s->header.type)
1234 case lang_constructors_statement_enum:
1235 open_input_bfds (constructor_list.head, force);
1237 case lang_output_section_statement_enum:
1238 open_input_bfds (s->output_section_statement.children.head, force);
1240 case lang_wild_statement_enum:
1241 /* Maybe we should load the file's symbols */
1242 if (s->wild_statement.filename
1243 && ! wildcardp (s->wild_statement.filename))
1244 (void) lookup_name (s->wild_statement.filename);
1245 open_input_bfds (s->wild_statement.children.head, force);
1247 case lang_group_statement_enum:
1249 struct bfd_link_hash_entry *undefs;
1251 /* We must continually search the entries in the group
1252 until no new symbols are added to the list of undefined
1257 undefs = link_info.hash->undefs_tail;
1258 open_input_bfds (s->group_statement.children.head, true);
1260 while (undefs != link_info.hash->undefs_tail);
1263 case lang_target_statement_enum:
1264 current_target = s->target_statement.target;
1266 case lang_input_statement_enum:
1267 if (s->input_statement.real == true)
1269 lang_statement_list_type add;
1271 s->input_statement.target = current_target;
1273 /* If we are being called from within a group, and this
1274 is an archive which has already been searched, then
1275 force it to be researched. */
1277 && s->input_statement.loaded
1278 && bfd_check_format (s->input_statement.the_bfd,
1280 s->input_statement.loaded = false;
1282 lang_list_init (&add);
1284 load_symbols (&s->input_statement, &add);
1286 if (add.head != NULL)
1288 *add.tail = s->next;
1299 /* If there are [COMMONS] statements, put a wild one into the bss section */
1302 lang_reasonable_defaults ()
1305 lang_output_section_statement_lookup (".text");
1306 lang_output_section_statement_lookup (".data");
1308 default_common_section =
1309 lang_output_section_statement_lookup (".bss");
1312 if (placed_commons == false)
1314 lang_wild_statement_type *new =
1315 new_stat (lang_wild_statement,
1316 &default_common_section->children);
1318 new->section_name = "COMMON";
1319 new->filename = (char *) NULL;
1320 lang_list_init (&new->children);
1327 Add the supplied name to the symbol table as an undefined reference.
1328 Remove items from the chain as we open input bfds
1330 typedef struct ldlang_undef_chain_list
1332 struct ldlang_undef_chain_list *next;
1334 } ldlang_undef_chain_list_type;
1336 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
1339 ldlang_add_undef (name)
1340 CONST char *CONST name;
1342 ldlang_undef_chain_list_type *new =
1343 ((ldlang_undef_chain_list_type *)
1344 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
1346 new->next = ldlang_undef_chain_list_head;
1347 ldlang_undef_chain_list_head = new;
1349 new->name = buystring (name);
1352 /* Run through the list of undefineds created above and place them
1353 into the linker hash table as undefined symbols belonging to the
1357 lang_place_undefineds ()
1359 ldlang_undef_chain_list_type *ptr;
1361 for (ptr = ldlang_undef_chain_list_head;
1362 ptr != (ldlang_undef_chain_list_type *) NULL;
1365 struct bfd_link_hash_entry *h;
1367 h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
1368 if (h == (struct bfd_link_hash_entry *) NULL)
1369 einfo ("%P%F: bfd_link_hash_lookup failed: %E");
1370 if (h->type == bfd_link_hash_new)
1372 h->type = bfd_link_hash_undefined;
1373 h->u.undef.abfd = NULL;
1374 bfd_link_add_undef (link_info.hash, h);
1379 /* Open input files and attatch to output sections */
1381 map_input_to_output_sections (s, target, output_section_statement)
1382 lang_statement_union_type * s;
1384 lang_output_section_statement_type * output_section_statement;
1386 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1388 switch (s->header.type)
1392 case lang_wild_statement_enum:
1393 wild (&s->wild_statement, s->wild_statement.section_name,
1394 s->wild_statement.filename, target,
1395 output_section_statement);
1398 case lang_constructors_statement_enum:
1399 map_input_to_output_sections (constructor_list.head,
1401 output_section_statement);
1403 case lang_output_section_statement_enum:
1404 map_input_to_output_sections (s->output_section_statement.children.head,
1406 &s->output_section_statement);
1408 case lang_output_statement_enum:
1410 case lang_target_statement_enum:
1411 target = s->target_statement.target;
1413 case lang_group_statement_enum:
1414 map_input_to_output_sections (s->group_statement.children.head,
1416 output_section_statement);
1418 case lang_fill_statement_enum:
1419 case lang_input_section_enum:
1420 case lang_object_symbols_statement_enum:
1421 case lang_data_statement_enum:
1422 case lang_reloc_statement_enum:
1423 case lang_padding_statement_enum:
1424 case lang_input_statement_enum:
1425 if (output_section_statement != NULL
1426 && output_section_statement->bfd_section == NULL)
1427 init_os (output_section_statement);
1429 case lang_assignment_statement_enum:
1430 if (output_section_statement != NULL
1431 && output_section_statement->bfd_section == NULL)
1432 init_os (output_section_statement);
1434 /* Make sure that any sections mentioned in the assignment
1436 exp_init_os (s->assignment_statement.exp);
1438 case lang_afile_asection_pair_statement_enum:
1441 case lang_address_statement_enum:
1442 /* Mark the specified section with the supplied address */
1444 lang_output_section_statement_type *os =
1445 lang_output_section_statement_lookup
1446 (s->address_statement.section_name);
1448 if (os->bfd_section == NULL)
1450 os->addr_tree = s->address_statement.address;
1458 print_output_section_statement (output_section_statement)
1459 lang_output_section_statement_type * output_section_statement;
1461 asection *section = output_section_statement->bfd_section;
1464 if (output_section_statement != abs_output_section)
1466 minfo ("\n%s", output_section_statement->name);
1468 if (section != NULL)
1470 print_dot = section->vma;
1472 len = strlen (output_section_statement->name);
1473 if (len >= SECTION_NAME_MAP_LENGTH - 1)
1478 while (len < SECTION_NAME_MAP_LENGTH)
1484 minfo ("0x%V %W", section->vma, section->_raw_size);
1486 if (output_section_statement->load_base != NULL)
1490 addr = exp_get_abs_int (output_section_statement->load_base, 0,
1491 "load base", lang_final_phase_enum);
1492 minfo (" load address 0x%V", addr);
1499 print_statement_list (output_section_statement->children.head,
1500 output_section_statement);
1504 print_assignment (assignment, output_section)
1505 lang_assignment_statement_type * assignment;
1506 lang_output_section_statement_type * output_section;
1509 etree_value_type result;
1511 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1514 result = exp_fold_tree (assignment->exp->assign.src, output_section,
1515 lang_final_phase_enum, print_dot, &print_dot);
1517 minfo ("0x%V", result.value + result.section->bfd_section->vma);
1528 exp_print_tree (assignment->exp);
1534 print_input_statement (statm)
1535 lang_input_statement_type * statm;
1537 if (statm->filename != (char *) NULL)
1539 fprintf (config.map_file, "LOAD %s\n", statm->filename);
1543 /* Print all symbols defined in a particular section. This is called
1544 via bfd_link_hash_traverse. */
1547 print_one_symbol (hash_entry, ptr)
1548 struct bfd_link_hash_entry *hash_entry;
1551 asection *sec = (asection *) ptr;
1553 if ((hash_entry->type == bfd_link_hash_defined
1554 || hash_entry->type == bfd_link_hash_defweak)
1555 && sec == hash_entry->u.def.section)
1559 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1562 (hash_entry->u.def.value
1563 + hash_entry->u.def.section->output_offset
1564 + hash_entry->u.def.section->output_section->vma));
1566 minfo (" %T\n", hash_entry->root.string);
1572 /* Print information about an input section to the map file. */
1575 print_input_section (in)
1576 lang_input_section_type * in;
1578 asection *i = in->section;
1579 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
1585 minfo ("%s", i->name);
1587 if (i->output_section != NULL)
1591 len = 1 + strlen (i->name);
1592 if (len >= SECTION_NAME_MAP_LENGTH - 1)
1597 while (len < SECTION_NAME_MAP_LENGTH)
1603 minfo ("0x%V %W %B\n",
1604 i->output_section->vma + i->output_offset, size,
1607 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
1609 len = SECTION_NAME_MAP_LENGTH + 3;
1621 minfo ("%W (size before relaxing)\n", i->_raw_size);
1624 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
1626 print_dot = i->output_section->vma + i->output_offset + size;
1632 print_fill_statement (fill)
1633 lang_fill_statement_type * fill;
1635 fprintf (config.map_file, " FILL mask 0x%x\n", fill->fill);
1639 print_data_statement (data)
1640 lang_data_statement_type * data;
1647 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1650 addr = data->output_vma;
1651 if (data->output_section != NULL)
1652 addr += data->output_section->vma;
1676 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
1678 if (data->exp->type.node_class != etree_value)
1681 exp_print_tree (data->exp);
1686 print_dot = addr + size;
1689 /* Print an address statement. These are generated by options like
1693 print_address_statement (address)
1694 lang_address_statement_type *address;
1696 minfo ("Address of section %s set to ", address->section_name);
1697 exp_print_tree (address->address);
1701 /* Print a reloc statement. */
1704 print_reloc_statement (reloc)
1705 lang_reloc_statement_type *reloc;
1711 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
1714 addr = reloc->output_vma;
1715 if (reloc->output_section != NULL)
1716 addr += reloc->output_section->vma;
1718 size = bfd_get_reloc_size (reloc->howto);
1720 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
1722 if (reloc->name != NULL)
1723 minfo ("%s+", reloc->name);
1725 minfo ("%s+", reloc->section->name);
1727 exp_print_tree (reloc->addend_exp);
1731 print_dot = addr + size;
1735 print_padding_statement (s)
1736 lang_padding_statement_type *s;
1743 len = sizeof " *fill*" - 1;
1744 while (len < SECTION_NAME_MAP_LENGTH)
1750 addr = s->output_offset;
1751 if (s->output_section != NULL)
1752 addr += s->output_section->vma;
1753 minfo ("0x%V %W", addr, s->size);
1756 minfo (" %u", s->fill);
1760 print_dot = addr + s->size;
1764 print_wild_statement (w, os)
1765 lang_wild_statement_type * w;
1766 lang_output_section_statement_type * os;
1770 if (w->filename != NULL)
1771 minfo ("%s", w->filename);
1775 if (w->section_name != NULL)
1776 minfo ("(%s)", w->section_name);
1782 print_statement_list (w->children.head, os);
1785 /* Print a group statement. */
1789 lang_group_statement_type *s;
1790 lang_output_section_statement_type *os;
1792 fprintf (config.map_file, "START GROUP\n");
1793 print_statement_list (s->children.head, os);
1794 fprintf (config.map_file, "END GROUP\n");
1797 /* Print the list of statements in S.
1798 This can be called for any statement type. */
1801 print_statement_list (s, os)
1802 lang_statement_union_type *s;
1803 lang_output_section_statement_type *os;
1807 print_statement (s, os);
1812 /* Print the first statement in statement list S.
1813 This can be called for any statement type. */
1816 print_statement (s, os)
1817 lang_statement_union_type *s;
1818 lang_output_section_statement_type *os;
1820 switch (s->header.type)
1823 fprintf (config.map_file, "Fail with %d\n", s->header.type);
1826 case lang_constructors_statement_enum:
1827 if (constructor_list.head != NULL)
1829 minfo (" CONSTRUCTORS\n");
1830 print_statement_list (constructor_list.head, os);
1833 case lang_wild_statement_enum:
1834 print_wild_statement (&s->wild_statement, os);
1836 case lang_address_statement_enum:
1837 print_address_statement (&s->address_statement);
1839 case lang_object_symbols_statement_enum:
1840 minfo (" CREATE_OBJECT_SYMBOLS\n");
1842 case lang_fill_statement_enum:
1843 print_fill_statement (&s->fill_statement);
1845 case lang_data_statement_enum:
1846 print_data_statement (&s->data_statement);
1848 case lang_reloc_statement_enum:
1849 print_reloc_statement (&s->reloc_statement);
1851 case lang_input_section_enum:
1852 print_input_section (&s->input_section);
1854 case lang_padding_statement_enum:
1855 print_padding_statement (&s->padding_statement);
1857 case lang_output_section_statement_enum:
1858 print_output_section_statement (&s->output_section_statement);
1860 case lang_assignment_statement_enum:
1861 print_assignment (&s->assignment_statement, os);
1863 case lang_target_statement_enum:
1864 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
1866 case lang_output_statement_enum:
1867 minfo ("OUTPUT(%s", s->output_statement.name);
1868 if (output_target != NULL)
1869 minfo (" %s", output_target);
1872 case lang_input_statement_enum:
1873 print_input_statement (&s->input_statement);
1875 case lang_group_statement_enum:
1876 print_group (&s->group_statement, os);
1878 case lang_afile_asection_pair_statement_enum:
1887 print_statement_list (statement_list.head, abs_output_section);
1890 /* Print the first N statements in statement list S to STDERR.
1891 If N == 0, nothing is printed.
1892 If N < 0, the entire list is printed.
1893 Intended to be called from GDB. */
1896 dprint_statement (s, n)
1897 lang_statement_union_type * s;
1900 FILE *map_save = config.map_file;
1902 config.map_file = stderr;
1905 print_statement_list (s, abs_output_section);
1908 while (s && --n >= 0)
1910 print_statement (s, abs_output_section);
1915 config.map_file = map_save;
1919 insert_pad (this_ptr, fill, power, output_section_statement, dot)
1920 lang_statement_union_type ** this_ptr;
1923 asection * output_section_statement;
1926 /* Align this section first to the
1927 input sections requirement, then
1928 to the output section's requirement.
1929 If this alignment is > than any seen before,
1930 then record it too. Perform the alignment by
1931 inserting a magic 'padding' statement.
1934 unsigned int alignment_needed = align_power (dot, power) - dot;
1936 if (alignment_needed != 0)
1938 lang_statement_union_type *new =
1939 ((lang_statement_union_type *)
1940 stat_alloc (sizeof (lang_padding_statement_type)));
1942 /* Link into existing chain */
1943 new->header.next = *this_ptr;
1945 new->header.type = lang_padding_statement_enum;
1946 new->padding_statement.output_section = output_section_statement;
1947 new->padding_statement.output_offset =
1948 dot - output_section_statement->vma;
1949 new->padding_statement.fill = fill;
1950 new->padding_statement.size = alignment_needed;
1954 /* Remember the most restrictive alignment */
1955 if (power > output_section_statement->alignment_power)
1957 output_section_statement->alignment_power = power;
1959 output_section_statement->_raw_size += alignment_needed;
1960 return alignment_needed + dot;
1964 /* Work out how much this section will move the dot point */
1966 size_input_section (this_ptr, output_section_statement, fill, dot, relax)
1967 lang_statement_union_type ** this_ptr;
1968 lang_output_section_statement_type * output_section_statement;
1973 lang_input_section_type *is = &((*this_ptr)->input_section);
1974 asection *i = is->section;
1976 if (is->ifile->just_syms_flag == false)
1978 if (output_section_statement->subsection_alignment != -1)
1979 i->alignment_power =
1980 output_section_statement->subsection_alignment;
1982 dot = insert_pad (this_ptr, fill, i->alignment_power,
1983 output_section_statement->bfd_section, dot);
1985 /* Remember where in the output section this input section goes */
1987 i->output_offset = dot - output_section_statement->bfd_section->vma;
1989 /* Mark how big the output section must be to contain this now
1991 if (i->_cooked_size != 0)
1992 dot += i->_cooked_size;
1994 dot += i->_raw_size;
1995 output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma;
1999 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2005 /* This variable indicates whether bfd_relax_section should be called
2008 static boolean relax_again;
2010 /* Set the sizes for all the output sections. */
2013 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
2014 lang_statement_union_type * s;
2015 lang_output_section_statement_type * output_section_statement;
2016 lang_statement_union_type ** prev;
2021 /* Size up the sections from their constituent parts */
2022 for (; s != (lang_statement_union_type *) NULL; s = s->next)
2024 switch (s->header.type)
2027 case lang_output_section_statement_enum:
2030 lang_output_section_statement_type *os = &s->output_section_statement;
2032 if (os->bfd_section == NULL)
2034 /* This section was never actually created. */
2038 /* If this is a COFF shared library section, use the size and
2039 address from the input section. FIXME: This is COFF
2040 specific; it would be cleaner if there were some other way
2041 to do this, but nothing simple comes to mind. */
2042 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2046 if (os->children.head == NULL
2047 || os->children.head->next != NULL
2048 || os->children.head->header.type != lang_input_section_enum)
2049 einfo ("%P%X: Internal error on COFF shared library section %s",
2052 input = os->children.head->input_section.section;
2053 bfd_set_section_vma (os->bfd_section->owner,
2055 bfd_section_vma (input->owner, input));
2056 os->bfd_section->_raw_size = input->_raw_size;
2060 if (bfd_is_abs_section (os->bfd_section))
2062 /* No matter what happens, an abs section starts at zero */
2063 ASSERT (os->bfd_section->vma == 0);
2067 if (os->addr_tree == (etree_type *) NULL)
2069 /* No address specified for this section, get one
2070 from the region specification
2072 if (os->region == (lang_memory_region_type *) NULL)
2074 os->region = lang_memory_region_lookup ("*default*");
2076 dot = os->region->current;
2077 if (os->section_alignment == -1)
2082 dot = align_power (dot, os->bfd_section->alignment_power);
2083 if (dot != olddot && config.warn_section_align)
2084 einfo ("%P: warning: changing start of section %s by %u bytes\n",
2085 os->name, (unsigned int) (dot - olddot));
2092 r = exp_fold_tree (os->addr_tree,
2094 lang_allocating_phase_enum,
2096 if (r.valid == false)
2098 einfo ("%F%S: non constant address expression for section %s\n",
2101 dot = r.value + r.section->bfd_section->vma;
2103 /* The section starts here */
2104 /* First, align to what the section needs */
2106 if (os->section_alignment != -1)
2107 dot = align_power (dot, os->section_alignment);
2109 bfd_set_section_vma (0, os->bfd_section, dot);
2111 os->bfd_section->output_offset = 0;
2114 (void) lang_size_sections (os->children.head, os, &os->children.head,
2115 os->fill, dot, relax);
2116 /* Ignore the size of the input sections, use the vma and size to */
2119 after = ALIGN_N (os->bfd_section->vma +
2120 os->bfd_section->_raw_size,
2121 /* The coercion here is important, see ld.h. */
2122 (bfd_vma) os->block_value);
2124 if (bfd_is_abs_section (os->bfd_section))
2125 ASSERT (after == os->bfd_section->vma);
2127 os->bfd_section->_raw_size = after - os->bfd_section->vma;
2128 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
2129 os->processed = true;
2131 /* Replace into region ? */
2132 if (os->region != (lang_memory_region_type *) NULL)
2134 os->region->current = dot;
2135 /* Make sure this isn't silly. */
2136 if (os->region->current < os->region->origin
2137 || (os->region->current - os->region->origin
2138 > os->region->length))
2140 if (os->addr_tree != (etree_type *) NULL)
2142 einfo ("%X%P: address 0x%v of %B section %s is not within region %s\n",
2143 os->region->current,
2144 os->bfd_section->owner,
2145 os->bfd_section->name,
2150 einfo ("%X%P: region %s is full (%B section %s)\n",
2152 os->bfd_section->owner,
2153 os->bfd_section->name);
2155 /* Reset the region pointer. */
2156 os->region->current = os->region->origin;
2162 case lang_constructors_statement_enum:
2163 dot = lang_size_sections (constructor_list.head,
2164 output_section_statement,
2165 &s->wild_statement.children.head,
2170 case lang_data_statement_enum:
2172 unsigned int size = 0;
2174 s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
2175 s->data_statement.output_section =
2176 output_section_statement->bfd_section;
2178 switch (s->data_statement.type)
2195 output_section_statement->bfd_section->_raw_size += size;
2196 /* The output section gets contents, and then we inspect for
2197 any flags set in the input script which override any ALLOC */
2198 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
2199 if (!(output_section_statement->flags & SEC_NEVER_LOAD)) {
2200 output_section_statement->bfd_section->flags |= SEC_ALLOC | SEC_LOAD;
2205 case lang_reloc_statement_enum:
2209 s->reloc_statement.output_vma =
2210 dot - output_section_statement->bfd_section->vma;
2211 s->reloc_statement.output_section =
2212 output_section_statement->bfd_section;
2213 size = bfd_get_reloc_size (s->reloc_statement.howto);
2215 output_section_statement->bfd_section->_raw_size += size;
2219 case lang_wild_statement_enum:
2221 dot = lang_size_sections (s->wild_statement.children.head,
2222 output_section_statement,
2223 &s->wild_statement.children.head,
2229 case lang_object_symbols_statement_enum:
2230 link_info.create_object_symbols_section =
2231 output_section_statement->bfd_section;
2233 case lang_output_statement_enum:
2234 case lang_target_statement_enum:
2236 case lang_input_section_enum:
2240 i = (*prev)->input_section.section;
2243 if (i->_cooked_size == 0)
2244 i->_cooked_size = i->_raw_size;
2250 if (! bfd_relax_section (i->owner, i, &link_info, &again))
2251 einfo ("%P%F: can't relax section: %E\n");
2255 dot = size_input_section (prev,
2256 output_section_statement,
2257 output_section_statement->fill,
2261 case lang_input_statement_enum:
2263 case lang_fill_statement_enum:
2264 s->fill_statement.output_section = output_section_statement->bfd_section;
2266 fill = s->fill_statement.fill;
2268 case lang_assignment_statement_enum:
2270 bfd_vma newdot = dot;
2272 exp_fold_tree (s->assignment_statement.exp,
2273 output_section_statement,
2274 lang_allocating_phase_enum,
2278 if (newdot != dot && !relax)
2280 /* The assignment changed dot. Insert a pad. */
2281 if (output_section_statement == abs_output_section)
2283 /* If we don't have an output section, then just adjust
2284 the default memory address. */
2285 lang_memory_region_lookup ("*default*")->current = newdot;
2289 lang_statement_union_type *new =
2290 ((lang_statement_union_type *)
2291 stat_alloc (sizeof (lang_padding_statement_type)));
2293 /* Link into existing chain */
2294 new->header.next = *prev;
2296 new->header.type = lang_padding_statement_enum;
2297 new->padding_statement.output_section =
2298 output_section_statement->bfd_section;
2299 new->padding_statement.output_offset =
2300 dot - output_section_statement->bfd_section->vma;
2301 new->padding_statement.fill = fill;
2302 new->padding_statement.size = newdot - dot;
2303 output_section_statement->bfd_section->_raw_size +=
2304 new->padding_statement.size;
2312 case lang_padding_statement_enum:
2313 /* If we are relaxing, and this is not the first pass, some
2314 padding statements may have been inserted during previous
2315 passes. We may have to move the padding statement to a new
2316 location if dot has a different value at this point in this
2317 pass than it did at this point in the previous pass. */
2318 s->padding_statement.output_offset =
2319 dot - output_section_statement->bfd_section->vma;
2320 dot += s->padding_statement.size;
2321 output_section_statement->bfd_section->_raw_size +=
2322 s->padding_statement.size;
2325 case lang_group_statement_enum:
2326 dot = lang_size_sections (s->group_statement.children.head,
2327 output_section_statement,
2328 &s->group_statement.children.head,
2336 /* This can only get here when relaxing is turned on */
2338 case lang_address_statement_enum:
2341 prev = &s->header.next;
2347 lang_do_assignments (s, output_section_statement, fill, dot)
2348 lang_statement_union_type * s;
2349 lang_output_section_statement_type * output_section_statement;
2353 for (; s != (lang_statement_union_type *) NULL; s = s->next)
2355 switch (s->header.type)
2357 case lang_constructors_statement_enum:
2358 dot = lang_do_assignments (constructor_list.head,
2359 output_section_statement,
2364 case lang_output_section_statement_enum:
2366 lang_output_section_statement_type *os =
2367 &(s->output_section_statement);
2369 if (os->bfd_section != NULL)
2371 dot = os->bfd_section->vma;
2372 (void) lang_do_assignments (os->children.head, os,
2374 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
2378 /* If nothing has been placed into the output section then
2379 it won't have a bfd_section. */
2380 if (os->bfd_section)
2382 os->bfd_section->lma
2383 = exp_get_abs_int(os->load_base, 0,"load base", lang_final_phase_enum);
2388 case lang_wild_statement_enum:
2390 dot = lang_do_assignments (s->wild_statement.children.head,
2391 output_section_statement,
2396 case lang_object_symbols_statement_enum:
2397 case lang_output_statement_enum:
2398 case lang_target_statement_enum:
2400 case lang_common_statement_enum:
2403 case lang_data_statement_enum:
2405 etree_value_type value;
2407 value = exp_fold_tree (s->data_statement.exp,
2409 lang_final_phase_enum, dot, &dot);
2410 s->data_statement.value = value.value;
2411 if (value.valid == false)
2412 einfo ("%F%P: invalid data statement\n");
2414 switch (s->data_statement.type)
2431 case lang_reloc_statement_enum:
2433 etree_value_type value;
2435 value = exp_fold_tree (s->reloc_statement.addend_exp,
2437 lang_final_phase_enum, dot, &dot);
2438 s->reloc_statement.addend_value = value.value;
2439 if (value.valid == false)
2440 einfo ("%F%P: invalid reloc statement\n");
2442 dot += bfd_get_reloc_size (s->reloc_statement.howto);
2445 case lang_input_section_enum:
2447 asection *in = s->input_section.section;
2449 if (in->_cooked_size != 0)
2450 dot += in->_cooked_size;
2452 dot += in->_raw_size;
2456 case lang_input_statement_enum:
2458 case lang_fill_statement_enum:
2459 fill = s->fill_statement.fill;
2461 case lang_assignment_statement_enum:
2463 exp_fold_tree (s->assignment_statement.exp,
2464 output_section_statement,
2465 lang_final_phase_enum,
2471 case lang_padding_statement_enum:
2472 dot += s->padding_statement.size;
2475 case lang_group_statement_enum:
2476 dot = lang_do_assignments (s->group_statement.children.head,
2477 output_section_statement,
2485 case lang_address_statement_enum:
2493 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
2494 operator .startof. (section_name), it produces an undefined symbol
2495 .startof.section_name. Similarly, when it sees
2496 .sizeof. (section_name), it produces an undefined symbol
2497 .sizeof.section_name. For all the output sections, we look for
2498 such symbols, and set them to the correct value. */
2505 if (link_info.relocateable)
2508 for (s = output_bfd->sections; s != NULL; s = s->next)
2510 const char *secname;
2512 struct bfd_link_hash_entry *h;
2514 secname = bfd_get_section_name (output_bfd, s);
2515 buf = xmalloc (10 + strlen (secname));
2517 sprintf (buf, ".startof.%s", secname);
2518 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
2519 if (h != NULL && h->type == bfd_link_hash_undefined)
2521 h->type = bfd_link_hash_defined;
2522 h->u.def.value = bfd_get_section_vma (output_bfd, s);
2523 h->u.def.section = bfd_abs_section_ptr;
2526 sprintf (buf, ".sizeof.%s", secname);
2527 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
2528 if (h != NULL && h->type == bfd_link_hash_undefined)
2530 h->type = bfd_link_hash_defined;
2531 if (s->_cooked_size != 0)
2532 h->u.def.value = s->_cooked_size;
2534 h->u.def.value = s->_raw_size;
2535 h->u.def.section = bfd_abs_section_ptr;
2545 struct bfd_link_hash_entry *h;
2548 if (link_info.relocateable || link_info.shared)
2553 if (entry_symbol == (char *) NULL)
2555 /* No entry has been specified. Look for start, but don't warn
2556 if we don't find it. */
2557 entry_symbol = "start";
2561 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
2562 if (h != (struct bfd_link_hash_entry *) NULL
2563 && (h->type == bfd_link_hash_defined
2564 || h->type == bfd_link_hash_defweak)
2565 && h->u.def.section->output_section != NULL)
2569 val = (h->u.def.value
2570 + bfd_get_section_vma (output_bfd,
2571 h->u.def.section->output_section)
2572 + h->u.def.section->output_offset);
2573 if (! bfd_set_start_address (output_bfd, val))
2574 einfo ("%P%F:%s: can't set start address\n", entry_symbol);
2580 /* Can't find the entry symbol. Use the first address in the
2582 ts = bfd_get_section_by_name (output_bfd, ".text");
2583 if (ts != (asection *) NULL)
2586 einfo ("%P: warning: cannot find entry symbol %s; defaulting to %V\n",
2587 entry_symbol, bfd_get_section_vma (output_bfd, ts));
2588 if (! bfd_set_start_address (output_bfd,
2589 bfd_get_section_vma (output_bfd, ts)))
2590 einfo ("%P%F: can't set start address\n");
2595 einfo ("%P: warning: cannot find entry symbol %s; not setting start address\n",
2601 /* Check that the architecture of all the input files is compatible
2602 with the output file. Also call the backend to let it do any
2603 other checking that is needed. */
2608 lang_statement_union_type *file;
2610 CONST bfd_arch_info_type *compatible;
2612 for (file = file_chain.head;
2613 file != (lang_statement_union_type *) NULL;
2614 file = file->input_statement.next)
2616 input_bfd = file->input_statement.the_bfd;
2617 compatible = bfd_arch_get_compatible (input_bfd,
2619 if (compatible == NULL)
2620 einfo ("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n",
2621 bfd_printable_name (input_bfd), input_bfd,
2622 bfd_printable_name (output_bfd));
2625 bfd_merge_private_bfd_data (input_bfd, output_bfd);
2629 /* Look through all the global common symbols and attach them to the
2630 correct section. The -sort-common command line switch may be used
2631 to roughly sort the entries by size. */
2636 if (link_info.relocateable
2637 && ! command_line.force_common_definition)
2640 if (! config.sort_common)
2641 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
2646 for (power = 4; power >= 0; power--)
2647 bfd_link_hash_traverse (link_info.hash, lang_one_common,
2652 /* Place one common symbol in the correct section. */
2655 lang_one_common (h, info)
2656 struct bfd_link_hash_entry *h;
2659 unsigned int power_of_two;
2663 if (h->type != bfd_link_hash_common)
2667 power_of_two = h->u.c.p->alignment_power;
2669 if (config.sort_common
2670 && power_of_two < (unsigned int) *(int *) info)
2673 section = h->u.c.p->section;
2675 /* Increase the size of the section. */
2676 section->_raw_size = ALIGN_N (section->_raw_size,
2677 (bfd_size_type) (1 << power_of_two));
2679 /* Adjust the alignment if necessary. */
2680 if (power_of_two > section->alignment_power)
2681 section->alignment_power = power_of_two;
2683 /* Change the symbol from common to defined. */
2684 h->type = bfd_link_hash_defined;
2685 h->u.def.section = section;
2686 h->u.def.value = section->_raw_size;
2688 /* Increase the size of the section. */
2689 section->_raw_size += size;
2691 /* Make sure the section is allocated in memory, and make sure that
2692 it is no longer a common section. */
2693 section->flags |= SEC_ALLOC;
2694 section->flags &= ~ SEC_IS_COMMON;
2696 if (config.map_file != NULL)
2698 static boolean header_printed;
2703 if (! header_printed)
2705 minfo ("\nAllocating common symbols\n");
2706 minfo ("Common symbol size file\n\n");
2707 header_printed = true;
2710 name = demangle (h->root.string);
2712 len = strlen (name);
2727 if (size <= 0xffffffff)
2728 sprintf (buf, "%lx", (unsigned long) size);
2730 sprintf_vma (buf, size);
2740 minfo ("%B\n", section->owner);
2747 run through the input files and ensure that every input
2748 section has somewhere to go. If one is found without
2749 a destination then create an input request and place it
2750 into the statement tree.
2754 lang_place_orphans ()
2756 lang_input_statement_type *file;
2758 for (file = (lang_input_statement_type *) file_chain.head;
2759 file != (lang_input_statement_type *) NULL;
2760 file = (lang_input_statement_type *) file->next)
2764 for (s = file->the_bfd->sections;
2765 s != (asection *) NULL;
2768 if (s->output_section == (asection *) NULL)
2770 /* This section of the file is not attatched, root
2771 around for a sensible place for it to go */
2773 if (file->just_syms_flag)
2775 /* We are only retrieving symbol values from this
2776 file. We want the symbols to act as though the
2777 values in the file are absolute. */
2778 s->output_section = bfd_abs_section_ptr;
2779 s->output_offset = s->vma;
2781 else if (strcmp (s->name, "COMMON") == 0)
2783 /* This is a lonely common section which must have
2784 come from an archive. We attach to the section
2785 with the wildcard. */
2786 if (! link_info.relocateable
2787 || command_line.force_common_definition)
2789 if (default_common_section == NULL)
2792 /* This message happens when using the
2793 svr3.ifile linker script, so I have
2795 info_msg ("%P: no [COMMON] command, defaulting to .bss\n");
2797 default_common_section =
2798 lang_output_section_statement_lookup (".bss");
2801 wild_doit (&default_common_section->children, s,
2802 default_common_section, file);
2805 else if (ldemul_place_orphan (file, s))
2809 lang_output_section_statement_type *os =
2810 lang_output_section_statement_lookup (s->name);
2812 wild_doit (&os->children, s, os, file);
2821 lang_set_flags (ptr, flags)
2825 boolean state = false;
2840 /* ptr->flag_read = state; */
2843 /* ptr->flag_write = state; */
2846 /* ptr->flag_executable= state;*/
2850 /* ptr->flag_loadable= state;*/
2853 einfo ("%P%F: invalid syntax in flags\n");
2860 /* Call a function on each input file. This function will be called
2861 on an archive, but not on the elements. */
2864 lang_for_each_input_file (func)
2865 void (*func) PARAMS ((lang_input_statement_type *));
2867 lang_input_statement_type *f;
2869 for (f = (lang_input_statement_type *) input_file_chain.head;
2871 f = (lang_input_statement_type *) f->next_real_file)
2875 /* Call a function on each file. The function will be called on all
2876 the elements of an archive which are included in the link, but will
2877 not be called on the archive file itself. */
2880 lang_for_each_file (func)
2881 void (*func) PARAMS ((lang_input_statement_type *));
2883 lang_input_statement_type *f;
2885 for (f = (lang_input_statement_type *) file_chain.head;
2886 f != (lang_input_statement_type *) NULL;
2887 f = (lang_input_statement_type *) f->next)
2898 lang_for_each_input_section (func)
2899 void (*func) PARAMS ((bfd * ab, asection * as));
2901 lang_input_statement_type *f;
2903 for (f = (lang_input_statement_type *) file_chain.head;
2904 f != (lang_input_statement_type *) NULL;
2905 f = (lang_input_statement_type *) f->next)
2909 for (s = f->the_bfd->sections;
2910 s != (asection *) NULL;
2913 func (f->the_bfd, s);
2921 ldlang_add_file (entry)
2922 lang_input_statement_type * entry;
2926 lang_statement_append (&file_chain,
2927 (lang_statement_union_type *) entry,
2930 /* The BFD linker needs to have a list of all input BFDs involved in
2932 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
2933 ASSERT (entry->the_bfd != output_bfd);
2934 for (pp = &link_info.input_bfds;
2935 *pp != (bfd *) NULL;
2936 pp = &(*pp)->link_next)
2938 *pp = entry->the_bfd;
2939 entry->the_bfd->usrdata = (PTR) entry;
2940 bfd_set_gp_size (entry->the_bfd, g_switch_value);
2942 /* Look through the sections and check for any which should not be
2943 included in the link. We need to do this now, so that we can
2944 notice when the backend linker tries to report multiple
2945 definition errors for symbols which are in sections we aren't
2946 going to link. FIXME: It might be better to entirely ignore
2947 symbols which are defined in sections which are going to be
2948 discarded. This would require modifying the backend linker for
2949 each backend which might set the SEC_LINK_ONCE flag. If we do
2950 this, we should probably handle SEC_EXCLUDE in the same way. */
2952 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
2956 lang_add_output (name, from_script)
2960 /* Make -o on command line override OUTPUT in script. */
2961 if (had_output_filename == false || !from_script)
2963 output_filename = name;
2964 had_output_filename = true;
2969 static lang_output_section_statement_type *current_section;
2981 for (l = 0; l < 32; l++)
2983 if (i >= (unsigned int) x)
2992 lang_enter_output_section_statement (output_section_statement_name,
2993 address_exp, sectype, block_value,
2994 align, subalign, ebase)
2995 const char *output_section_statement_name;
2996 etree_type * address_exp;
2997 enum section_type sectype;
2998 bfd_vma block_value;
3000 etree_type *subalign;
3003 lang_output_section_statement_type *os;
3007 lang_output_section_statement_lookup (output_section_statement_name);
3011 /* Add this statement to tree */
3012 /* add_statement(lang_output_section_statement_enum,
3013 output_section_statement);*/
3014 /* Make next things chain into subchain of this */
3016 if (os->addr_tree ==
3017 (etree_type *) NULL)
3022 os->sectype = sectype;
3023 if (sectype != noload_section)
3024 os->flags = SEC_NO_FLAGS;
3026 os->flags = SEC_NEVER_LOAD;
3027 os->block_value = block_value ? block_value : 1;
3028 stat_ptr = &os->children;
3030 os->subsection_alignment = topower(
3031 exp_get_value_int(subalign, -1,
3032 "subsection alignment",
3034 os->section_alignment = topower(
3035 exp_get_value_int(align, -1,
3036 "section alignment", 0));
3038 os->load_base = ebase;
3045 lang_output_statement_type *new =
3046 new_stat (lang_output_statement, stat_ptr);
3048 new->name = output_filename;
3051 /* Reset the current counters in the regions */
3053 reset_memory_regions ()
3055 lang_memory_region_type *p = lang_memory_region_list;
3057 for (p = lang_memory_region_list;
3058 p != (lang_memory_region_type *) NULL;
3061 p->old_length = (bfd_size_type) (p->current - p->origin);
3062 p->current = p->origin;
3069 lang_reasonable_defaults ();
3070 current_target = default_target;
3072 lang_for_each_statement (ldlang_open_output); /* Open the output file */
3074 ldemul_create_output_section_statements ();
3076 /* Add to the hash table all undefineds on the command line */
3077 lang_place_undefineds ();
3079 /* Create a bfd for each input file */
3080 current_target = default_target;
3081 open_input_bfds (statement_list.head, false);
3083 ldemul_after_open ();
3085 /* Build all sets based on the information gathered from the input
3087 ldctor_build_sets ();
3089 /* Size up the common data */
3092 /* Run through the contours of the script and attatch input sections
3093 to the correct output sections
3095 map_input_to_output_sections (statement_list.head, (char *) NULL,
3096 (lang_output_section_statement_type *) NULL);
3099 /* Find any sections not attatched explicitly and handle them */
3100 lang_place_orphans ();
3102 ldemul_before_allocation ();
3104 /* We must record the program headers before we try to fix the
3105 section positions, since they will affect SIZEOF_HEADERS. */
3106 lang_record_phdrs ();
3108 /* Now run around and relax if we can */
3109 if (command_line.relax)
3111 /* First time round is a trial run to get the 'worst case'
3112 addresses of the objects if there was no relaxing. */
3113 lang_size_sections (statement_list.head,
3115 &(statement_list.head), 0, (bfd_vma) 0, false);
3117 /* Keep relaxing until bfd_relax_section gives up. */
3120 reset_memory_regions ();
3122 relax_again = false;
3124 /* Do all the assignments with our current guesses as to
3126 lang_do_assignments (statement_list.head,
3128 (fill_type) 0, (bfd_vma) 0);
3130 /* Perform another relax pass - this time we know where the
3131 globals are, so can make better guess. */
3132 lang_size_sections (statement_list.head,
3134 &(statement_list.head), 0, (bfd_vma) 0, true);
3136 while (relax_again);
3140 /* Size up the sections. */
3141 lang_size_sections (statement_list.head,
3143 &(statement_list.head), 0, (bfd_vma) 0, false);
3146 /* See if anything special should be done now we know how big
3148 ldemul_after_allocation ();
3150 /* Fix any .startof. or .sizeof. symbols. */
3151 lang_set_startof ();
3153 /* Do all the assignments, now that we know the final restingplaces
3154 of all the symbols */
3156 lang_do_assignments (statement_list.head,
3158 (fill_type) 0, (bfd_vma) 0);
3160 /* Make sure that we're not mixing architectures */
3170 /* EXPORTED TO YACC */
3173 lang_add_wild (section_name, filename)
3174 CONST char *CONST section_name;
3175 CONST char *CONST filename;
3177 lang_wild_statement_type *new = new_stat (lang_wild_statement,
3180 if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
3182 placed_commons = true;
3184 if (filename != (char *) NULL)
3186 lang_has_input_file = true;
3188 new->section_name = section_name;
3189 new->filename = filename;
3190 lang_list_init (&new->children);
3194 lang_section_start (name, address)
3196 etree_type * address;
3198 lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
3200 ad->section_name = name;
3201 ad->address = address;
3204 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
3205 because of a -e argument on the command line, or zero if this is
3206 called by ENTRY in a linker script. Command line arguments take
3209 /* WINDOWS_NT. When an entry point has been specified, we will also force
3210 this symbol to be defined by calling ldlang_add_undef (equivalent to
3211 having switch -u entry_name on the command line). The reason we do
3212 this is so that the user doesn't have to because they would have to use
3213 the -u switch if they were specifying an entry point other than
3214 _mainCRTStartup. Specifically, if creating a windows application, entry
3215 point _WinMainCRTStartup must be specified.
3216 What I have found for non console applications (entry not _mainCRTStartup)
3217 is that the .obj that contains mainCRTStartup is brought in since it is
3218 the first encountered in libc.lib and it has other symbols in it which will
3219 be pulled in by the link process. To avoid this, adding -u with the entry
3220 point name specified forces the correct .obj to be used. We can avoid
3221 making the user do this by always adding the entry point name as an
3222 undefined symbol. */
3225 lang_add_entry (name, cmdline)
3229 if (entry_symbol == NULL
3231 || ! entry_from_cmdline)
3233 entry_symbol = name;
3234 entry_from_cmdline = cmdline;
3237 /* don't do this yet. It seems to work (the executables run), but the
3238 image created is very different from what I was getting before indicating
3239 that something else is being pulled in. When everything else is working,
3240 then try to put this back in to see if it will do the right thing for
3241 other more complicated applications */
3242 ldlang_add_undef (name);
3247 lang_add_target (name)
3250 lang_target_statement_type *new = new_stat (lang_target_statement,
3266 map_option_f = true;
3277 lang_fill_statement_type *new = new_stat (lang_fill_statement,
3284 lang_add_data (type, exp)
3286 union etree_union *exp;
3289 lang_data_statement_type *new = new_stat (lang_data_statement,
3297 /* Create a new reloc statement. RELOC is the BFD relocation type to
3298 generate. HOWTO is the corresponding howto structure (we could
3299 look this up, but the caller has already done so). SECTION is the
3300 section to generate a reloc against, or NAME is the name of the
3301 symbol to generate a reloc against. Exactly one of SECTION and
3302 NAME must be NULL. ADDEND is an expression for the addend. */
3305 lang_add_reloc (reloc, howto, section, name, addend)
3306 bfd_reloc_code_real_type reloc;
3307 reloc_howto_type *howto;
3310 union etree_union *addend;
3312 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
3316 p->section = section;
3318 p->addend_exp = addend;
3320 p->addend_value = 0;
3321 p->output_section = NULL;
3326 lang_add_assignment (exp)
3329 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
3336 lang_add_attribute (attribute)
3337 enum statement_enum attribute;
3339 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
3346 if (startup_file != (char *) NULL)
3348 einfo ("%P%Fmultiple STARTUP files\n");
3350 first_file->filename = name;
3351 first_file->local_sym_name = name;
3352 first_file->real = true;
3354 startup_file = name;
3361 lang_float_flag = maybe;
3365 lang_leave_output_section_statement (fill, memspec, phdrs)
3367 const char *memspec;
3368 struct lang_output_section_phdr_list *phdrs;
3370 current_section->fill = fill;
3371 current_section->region = lang_memory_region_lookup (memspec);
3372 current_section->phdrs = phdrs;
3373 stat_ptr = &statement_list;
3377 Create an absolute symbol with the given name with the value of the
3378 address of first byte of the section named.
3380 If the symbol already exists, then do nothing.
3383 lang_abs_symbol_at_beginning_of (secname, name)
3384 const char *secname;
3387 struct bfd_link_hash_entry *h;
3389 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
3390 if (h == (struct bfd_link_hash_entry *) NULL)
3391 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
3393 if (h->type == bfd_link_hash_new
3394 || h->type == bfd_link_hash_undefined)
3398 h->type = bfd_link_hash_defined;
3400 sec = bfd_get_section_by_name (output_bfd, secname);
3401 if (sec == (asection *) NULL)
3404 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
3406 h->u.def.section = bfd_abs_section_ptr;
3411 Create an absolute symbol with the given name with the value of the
3412 address of the first byte after the end of the section named.
3414 If the symbol already exists, then do nothing.
3417 lang_abs_symbol_at_end_of (secname, name)
3418 const char *secname;
3421 struct bfd_link_hash_entry *h;
3423 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
3424 if (h == (struct bfd_link_hash_entry *) NULL)
3425 einfo ("%P%F: bfd_link_hash_lookup failed: %E\n");
3427 if (h->type == bfd_link_hash_new
3428 || h->type == bfd_link_hash_undefined)
3432 h->type = bfd_link_hash_defined;
3434 sec = bfd_get_section_by_name (output_bfd, secname);
3435 if (sec == (asection *) NULL)
3438 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
3439 + bfd_section_size (output_bfd, sec));
3441 h->u.def.section = bfd_abs_section_ptr;
3446 lang_statement_append (list, element, field)
3447 lang_statement_list_type * list;
3448 lang_statement_union_type * element;
3449 lang_statement_union_type ** field;
3451 *(list->tail) = element;
3455 /* Set the output format type. -oformat overrides scripts. */
3458 lang_add_output_format (format, big, little, from_script)
3464 if (output_target == NULL || !from_script)
3466 if (command_line.endian == ENDIAN_BIG
3469 else if (command_line.endian == ENDIAN_LITTLE
3473 output_target = format;
3477 /* Enter a group. This creates a new lang_group_statement, and sets
3478 stat_ptr to build new statements within the group. */
3483 lang_group_statement_type *g;
3485 g = new_stat (lang_group_statement, stat_ptr);
3486 lang_list_init (&g->children);
3487 stat_ptr = &g->children;
3490 /* Leave a group. This just resets stat_ptr to start writing to the
3491 regular list of statements again. Note that this will not work if
3492 groups can occur inside anything else which can adjust stat_ptr,
3493 but currently they can't. */
3498 stat_ptr = &statement_list;
3501 /* Add a new program header. This is called for each entry in a PHDRS
3502 command in a linker script. */
3505 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
3513 struct lang_phdr *n, **pp;
3515 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
3518 n->type = exp_get_value_int (type, 0, "program header type",
3519 lang_final_phase_enum);
3520 n->filehdr = filehdr;
3525 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
3530 /* Record the program header information in the output BFD. FIXME: We
3531 should not be calling an ELF specific function here. */
3534 lang_record_phdrs ()
3538 struct lang_output_section_phdr_list *last;
3539 struct lang_phdr *l;
3540 lang_statement_union_type *u;
3543 secs = (asection **) xmalloc (alc * sizeof (asection *));
3545 for (l = lang_phdr_list; l != NULL; l = l->next)
3552 for (u = lang_output_section_statement.head;
3554 u = u->output_section_statement.next)
3556 lang_output_section_statement_type *os;
3557 struct lang_output_section_phdr_list *pl;
3559 os = &u->output_section_statement;
3566 if (os->sectype == noload_section
3567 || os->bfd_section == NULL
3568 || (os->bfd_section->flags & SEC_ALLOC) == 0)
3573 if (os->bfd_section == NULL)
3576 for (; pl != NULL; pl = pl->next)
3578 if (strcmp (pl->name, l->name) == 0)
3583 secs = ((asection **)
3584 xrealloc (secs, alc * sizeof (asection *)));
3586 secs[c] = os->bfd_section;
3593 if (l->flags == NULL)
3596 flags = exp_get_vma (l->flags, 0, "phdr flags",
3597 lang_final_phase_enum);
3602 at = exp_get_vma (l->at, 0, "phdr load address",
3603 lang_final_phase_enum);
3605 if (! bfd_record_phdr (output_bfd, l->type,
3606 l->flags == NULL ? false : true,
3608 l->at == NULL ? false : true,
3609 at, l->filehdr, l->phdrs, c, secs))
3610 einfo ("%F%P: bfd_record_phdr failed: %E\n");
3615 /* Make sure all the phdr assignments succeeded. */
3616 for (u = lang_output_section_statement.head;
3618 u = u->output_section_statement.next)
3620 struct lang_output_section_phdr_list *pl;
3622 if (u->output_section_statement.bfd_section == NULL)
3625 for (pl = u->output_section_statement.phdrs;
3628 if (! pl->used && strcmp (pl->name, "NONE") != 0)
3629 einfo ("%X%P: section `%s' assigned to non-existent phdr `%s'\n",
3630 u->output_section_statement.name, pl->name);
3634 /* Record a list of sections which may not be cross referenced. */
3637 lang_add_nocrossref (l)
3638 struct lang_nocrossref *l;
3640 struct lang_nocrossrefs *n;
3642 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
3643 n->next = nocrossref_list;
3645 nocrossref_list = n;
3647 /* Set notice_all so that we get informed about all symbols. */
3648 link_info.notice_all = true;
3651 /* Overlay handling. We handle overlays with some static variables. */
3653 /* The overlay virtual address. */
3654 static etree_type *overlay_vma;
3656 /* The overlay load address. */
3657 static etree_type *overlay_lma;
3659 /* Whether nocrossrefs is set for this overlay. */
3660 static int overlay_nocrossrefs;
3662 /* An expression for the maximum section size seen so far. */
3663 static etree_type *overlay_max;
3665 /* A list of all the sections in this overlay. */
3669 struct overlay_list *next;
3670 lang_output_section_statement_type *os;
3673 static struct overlay_list *overlay_list;
3675 /* Start handling an overlay. */
3678 lang_enter_overlay (vma_expr, lma_expr, nocrossrefs)
3679 etree_type *vma_expr;
3680 etree_type *lma_expr;
3683 /* The grammar should prevent nested overlays from occurring. */
3684 ASSERT (overlay_vma == NULL
3685 && overlay_lma == NULL
3686 && overlay_list == NULL
3687 && overlay_max == NULL);
3689 overlay_vma = vma_expr;
3690 overlay_lma = lma_expr;
3691 overlay_nocrossrefs = nocrossrefs;
3694 /* Start a section in an overlay. We handle this by calling
3695 lang_enter_output_section_statement with the correct VMA and LMA. */
3698 lang_enter_overlay_section (name)
3701 struct overlay_list *n;
3704 lang_enter_output_section_statement (name, overlay_vma, normal_section,
3705 0, 0, 0, overlay_lma);
3707 /* If this is the first section, then base the VMA and LMA of future
3708 sections on this one. This will work correctly even if `.' is
3709 used in the addresses. */
3710 if (overlay_list == NULL)
3712 overlay_vma = exp_nameop (ADDR, name);
3713 overlay_lma = exp_nameop (LOADADDR, name);
3716 /* Remember the section. */
3717 n = (struct overlay_list *) xmalloc (sizeof *n);
3718 n->os = current_section;
3719 n->next = overlay_list;
3722 size = exp_nameop (SIZEOF, name);
3724 /* Adjust the LMA for the next section. */
3725 overlay_lma = exp_binop ('+', overlay_lma, size);
3727 /* Arrange to work out the maximum section end address. */
3728 if (overlay_max == NULL)
3731 overlay_max = exp_binop (MAX, overlay_max, size);
3734 /* Finish a section in an overlay. There isn't any special to do
3738 lang_leave_overlay_section (fill, phdrs)
3740 struct lang_output_section_phdr_list *phdrs;
3747 name = current_section->name;
3749 lang_leave_output_section_statement (fill, "*default*", phdrs);
3751 /* Define the magic symbols. */
3753 clean = xmalloc (strlen (name) + 1);
3755 for (s1 = name; *s1 != '\0'; s1++)
3756 if (isalnum (*s1) || *s1 == '_')
3760 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
3761 sprintf (buf, "__load_start_%s", clean);
3762 lang_add_assignment (exp_assop ('=', buf,
3763 exp_nameop (LOADADDR, name)));
3765 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
3766 sprintf (buf, "__load_stop_%s", clean);
3767 lang_add_assignment (exp_assop ('=', buf,
3769 exp_nameop (LOADADDR, name),
3770 exp_nameop (SIZEOF, name))));
3775 /* Finish an overlay. If there are any overlay wide settings, this
3776 looks through all the sections in the overlay and sets them. */
3779 lang_leave_overlay (fill, memspec, phdrs)
3781 const char *memspec;
3782 struct lang_output_section_phdr_list *phdrs;
3784 lang_memory_region_type *region;
3785 struct overlay_list *l;
3786 struct lang_nocrossref *nocrossref;
3788 if (memspec == NULL)
3791 region = lang_memory_region_lookup (memspec);
3798 struct overlay_list *next;
3800 if (fill != 0 && l->os->fill == 0)
3802 if (region != NULL && l->os->region == NULL)
3803 l->os->region = region;
3804 if (phdrs != NULL && l->os->phdrs == NULL)
3805 l->os->phdrs = phdrs;
3807 if (overlay_nocrossrefs)
3809 struct lang_nocrossref *nc;
3811 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
3812 nc->name = l->os->name;
3813 nc->next = nocrossref;
3822 if (nocrossref != NULL)
3823 lang_add_nocrossref (nocrossref);
3825 /* Update . for the end of the overlay. */
3826 lang_add_assignment (exp_assop ('=', ".",
3827 exp_binop ('+', overlay_vma, overlay_max)));
3831 overlay_nocrossrefs = 0;
3832 overlay_list = NULL;
3836 /* Version handling. This is only useful for ELF. */
3838 /* This global variable holds the version tree that we build. */
3840 struct bfd_elf_version_tree *lang_elf_version_info;
3842 /* This is called for each variable name or match expression. */
3844 struct bfd_elf_version_expr *
3845 lang_new_vers_regex (orig, new)
3846 struct bfd_elf_version_expr *orig;
3849 struct bfd_elf_version_expr *ret;
3851 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
3857 /* This is called for each set of variable names and match
3860 struct bfd_elf_version_tree *
3861 lang_new_vers_node (globals, locals)
3862 struct bfd_elf_version_expr *globals;
3863 struct bfd_elf_version_expr *locals;
3865 struct bfd_elf_version_tree *ret;
3867 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
3871 ret->globals = globals;
3872 ret->locals = locals;
3874 ret->name_indx = (unsigned int) -1;
3879 /* This static variable keeps track of version indices. */
3881 static int version_index;
3883 /* This is called when we know the name and dependencies of the
3887 lang_register_vers_node (name, version, deps)
3889 struct bfd_elf_version_tree *version;
3890 struct bfd_elf_version_deps *deps;
3892 struct bfd_elf_version_tree *t, **pp;
3893 struct bfd_elf_version_expr *e1;
3895 /* Make sure this node has a unique name. */
3896 for (t = lang_elf_version_info; t != NULL; t = t->next)
3897 if (strcmp (t->name, name) == 0)
3898 einfo ("%X%P: duplicate version tag `%s'\n", name);
3900 /* Check the global and local match names, and make sure there
3901 aren't any duplicates. */
3903 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
3905 for (t = lang_elf_version_info; t != NULL; t = t->next)
3907 struct bfd_elf_version_expr *e2;
3909 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
3910 if (strcmp (e1->match, e2->match) == 0)
3911 einfo ("%X%P: duplicate expression `%s' in version information\n",
3914 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
3915 if (strcmp (e1->match, e2->match) == 0)
3916 einfo ("%X%P: duplicate expression `%s' in version information\n",
3921 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
3923 for (t = lang_elf_version_info; t != NULL; t = t->next)
3925 struct bfd_elf_version_expr *e2;
3927 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
3928 if (strcmp (e1->match, e2->match) == 0)
3929 einfo ("%X%P: duplicate expression `%s' in version information\n",
3932 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
3933 if (strcmp (e1->match, e2->match) == 0)
3934 einfo ("%X%P: duplicate expression `%s' in version information\n",
3939 version->deps = deps;
3940 version->name = name;
3942 version->vernum = version_index;
3944 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
3949 /* This is called when we see a version dependency. */
3951 struct bfd_elf_version_deps *
3952 lang_add_vers_depend (list, name)
3953 struct bfd_elf_version_deps *list;
3956 struct bfd_elf_version_deps *ret;
3957 struct bfd_elf_version_tree *t;
3959 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
3962 for (t = lang_elf_version_info; t != NULL; t = t->next)
3964 if (strcmp (t->name, name) == 0)
3966 ret->version_needed = t;
3971 einfo ("%X%P: unable to find version dependency `%s'\n", name);