1 /* Copyright (C) 1991 Free Software Foundation, Inc.
3 This file is part of GLD, the Gnu Linker.
5 GLD is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 1, or (at your option)
10 GLD is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GLD; see the file COPYING. If not, write to
17 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
35 PROTO (static void, print_statements, (void));
36 PROTO (static void, print_statement, (lang_statement_union_type *,
37 lang_output_section_statement_type *));
40 static struct obstack stat_obstack;
42 #define obstack_chunk_alloc ldmalloc
43 #define obstack_chunk_free free
44 static CONST char *startup_file;
45 static lang_statement_list_type input_file_chain;
47 /* Points to the last statement in the .data section, so we can add
48 stuff to the data section without pain */
49 static lang_statement_list_type end_of_data_section_statement_list;
51 /* List of statements needed to handle constructors */
52 extern lang_statement_list_type constructor_list;
54 static boolean placed_commons = false;
55 static lang_output_section_statement_type *default_common_section;
56 static boolean map_option_f;
57 static bfd_vma print_dot;
58 static lang_input_statement_type *first_file;
59 static lang_statement_list_type lang_output_section_statement;
60 static CONST char *current_target;
61 static CONST char *output_target;
62 static size_t longest_section_name = 8;
63 static asection common_section;
64 static section_userdata_type common_section_userdata;
65 static lang_statement_list_type statement_list;
69 lang_output_section_statement_type *abs_output_section;
70 lang_statement_list_type *stat_ptr = &statement_list;
71 lang_input_statement_type *script_file = 0;
72 boolean option_longmap = false;
73 lang_statement_list_type file_chain =
75 CONST char *entry_symbol = 0;
76 bfd_size_type largest_section = 0;
77 boolean lang_has_input_file = false;
78 lang_output_section_statement_type *create_object_symbols = 0;
79 boolean had_output_filename = false;
80 boolean lang_float_flag = false;
83 extern char *default_target;
85 extern unsigned int undefined_global_sym_count;
86 extern char *current_file;
87 extern bfd *output_bfd;
88 extern enum bfd_architecture ldfile_output_architecture;
89 extern unsigned long ldfile_output_machine;
90 extern char *ldfile_output_machine_name;
91 extern ldsym_type *symbol_head;
92 extern unsigned int commons_pending;
93 extern args_type command_line;
94 extern ld_config_type config;
95 extern boolean had_script;
96 extern boolean write_map;
101 #define cat(a,b) a/**/b
104 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
106 #define outside_section_address(q) ( (q)->output_offset + (q)->output_section->vma)
108 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
110 void EXFUN (lang_add_data, (int type, union etree_union * exp));
113 DEFUN (stat_alloc, (size),
116 return obstack_alloc (&stat_obstack, size);
119 DEFUN (print_size, (value),
122 fprintf (config.map_file, "%5x", (unsigned) value);
125 DEFUN (print_alignment, (value),
128 fprintf (config.map_file, "2**%1u", value);
131 DEFUN (print_fill, (value),
134 fprintf (config.map_file, "%04x", (unsigned) value);
139 DEFUN (print_section, (name),
140 CONST char *CONST name)
142 fprintf (config.map_file, "%*s", -longest_section_name, name);
145 /*----------------------------------------------------------------------
146 lang_for_each_statement walks the parse tree and calls the provided
147 function for each node
151 DEFUN (lang_for_each_statement_worker, (func, s),
153 lang_statement_union_type * s)
155 for (; s != (lang_statement_union_type *) NULL; s = s->next)
159 switch (s->header.type)
161 case lang_constructors_statement_enum:
162 lang_for_each_statement_worker (func, constructor_list.head);
164 case lang_output_section_statement_enum:
165 lang_for_each_statement_worker
167 s->output_section_statement.children.head);
169 case lang_wild_statement_enum:
170 lang_for_each_statement_worker
172 s->wild_statement.children.head);
174 case lang_data_statement_enum:
175 case lang_object_symbols_statement_enum:
176 case lang_output_statement_enum:
177 case lang_target_statement_enum:
178 case lang_input_section_enum:
179 case lang_input_statement_enum:
180 case lang_assignment_statement_enum:
181 case lang_padding_statement_enum:
182 case lang_address_statement_enum:
192 DEFUN (lang_for_each_statement, (func),
195 lang_for_each_statement_worker (func,
196 statement_list.head);
199 /*----------------------------------------------------------------------*/
201 DEFUN (lang_list_init, (list),
202 lang_statement_list_type * list)
204 list->head = (lang_statement_union_type *) NULL;
205 list->tail = &list->head;
208 /*----------------------------------------------------------------------
210 build a new statement node for the parse tree
215 lang_statement_union_type *
216 DEFUN (new_statement, (type, size, list),
217 enum statement_enum type AND
218 bfd_size_type size AND
219 lang_statement_list_type * list)
221 lang_statement_union_type *new = (lang_statement_union_type *)
224 new->header.type = type;
225 new->header.next = (lang_statement_union_type *) NULL;
226 lang_statement_append (list, new, &new->header.next);
231 Build a new input file node for the language. There are several ways
232 in which we treat an input file, eg, we only look at symbols, or
233 prefix it with a -l etc.
235 We can be supplied with requests for input files more than once;
236 they may, for example be split over serveral lines like foo.o(.text)
237 foo.o(.data) etc, so when asked for a file we check that we havn't
238 got it already so we don't duplicate the bfd.
241 static lang_input_statement_type *
242 DEFUN (new_afile, (name, file_type, target),
243 CONST char *CONST name AND
244 CONST lang_input_file_enum_type file_type AND
245 CONST char *CONST target)
248 lang_input_statement_type *p = new_stat (lang_input_statement,
251 lang_has_input_file = true;
253 p->complained = false;
256 case lang_input_file_is_symbols_only_enum:
258 p->is_archive = false;
260 p->local_sym_name = name;
261 p->just_syms_flag = true;
262 p->search_dirs_flag = false;
264 case lang_input_file_is_fake_enum:
266 p->is_archive = false;
268 p->local_sym_name = name;
269 p->just_syms_flag = false;
270 p->search_dirs_flag = false;
272 case lang_input_file_is_l_enum:
273 p->is_archive = true;
276 p->local_sym_name = concat ("-l", name, "");
277 p->just_syms_flag = false;
278 p->search_dirs_flag = true;
280 case lang_input_file_is_search_file_enum:
281 case lang_input_file_is_marker_enum:
283 p->is_archive = false;
285 p->local_sym_name = name;
286 p->just_syms_flag = false;
287 p->search_dirs_flag = true;
289 case lang_input_file_is_file_enum:
291 p->is_archive = false;
293 p->local_sym_name = name;
294 p->just_syms_flag = false;
295 p->search_dirs_flag = false;
300 p->asymbols = (asymbol **) NULL;
301 p->superfile = (lang_input_statement_type *) NULL;
302 p->next_real_file = (lang_statement_union_type *) NULL;
303 p->next = (lang_statement_union_type *) NULL;
305 p->common_output_section = (asection *) NULL;
306 lang_statement_append (&input_file_chain,
307 (lang_statement_union_type *) p,
312 lang_input_statement_type *
313 DEFUN (lang_add_input_file, (name, file_type, target),
315 lang_input_file_enum_type file_type AND
318 /* Look it up or build a new one */
319 lang_has_input_file = true;
321 lang_input_statement_type *p;
323 for (p = (lang_input_statement_type *) input_file_chain.head;
324 p != (lang_input_statement_type *) NULL;
325 p = (lang_input_statement_type *) (p->next_real_file))
327 /* Sometimes we have incomplete entries in here */
328 if (p->filename != (char *) NULL)
330 if (strcmp (name, p->filename) == 0)
336 return new_afile (name, file_type, target);
340 DEFUN (lang_add_keepsyms_file, (filename),
341 CONST char *filename)
343 extern strip_symbols_type strip_symbols;
344 if (keepsyms_file != 0)
345 info ("%X%P error: duplicated keep-symbols-file value\n");
346 keepsyms_file = filename;
347 if (strip_symbols != STRIP_NONE)
348 info ("%P `-keep-only-symbols-file' overrides `-s' and `-S'\n");
349 strip_symbols = STRIP_SOME;
352 /* Build enough state so that the parser can build its tree */
354 DEFUN_VOID (lang_init)
356 obstack_begin (&stat_obstack, 1000);
358 stat_ptr = &statement_list;
360 lang_list_init (stat_ptr);
362 lang_list_init (&input_file_chain);
363 lang_list_init (&lang_output_section_statement);
364 lang_list_init (&file_chain);
365 first_file = lang_add_input_file ((char *) NULL,
366 lang_input_file_is_marker_enum,
368 abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
370 abs_output_section->bfd_section = &bfd_abs_section;
374 /*----------------------------------------------------------------------
375 A region is an area of memory declared with the
376 MEMORY { name:org=exp, len=exp ... }
379 We maintain a list of all the regions here
381 If no regions are specified in the script, then the default is used
382 which is created when looked up to be the entire data space
385 static lang_memory_region_type *lang_memory_region_list;
386 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
388 lang_memory_region_type *
389 DEFUN (lang_memory_region_lookup, (name),
390 CONST char *CONST name)
393 lang_memory_region_type *p = lang_memory_region_list;
395 for (p = lang_memory_region_list;
396 p != (lang_memory_region_type *) NULL;
399 if (strcmp (p->name, name) == 0)
404 if (strcmp (name, "*default*") == 0)
406 /* This is the default region, dig out first one on the list */
407 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
409 return lang_memory_region_list;
413 lang_memory_region_type *new =
414 (lang_memory_region_type *) stat_alloc ((bfd_size_type) (sizeof (lang_memory_region_type)));
416 new->name = buystring (name);
417 new->next = (lang_memory_region_type *) NULL;
419 *lang_memory_region_list_tail = new;
420 lang_memory_region_list_tail = &new->next;
424 new->had_full_message = false;
431 lang_output_section_statement_type *
432 DEFUN (lang_output_section_find, (name),
433 CONST char *CONST name)
435 lang_statement_union_type *u;
436 lang_output_section_statement_type *lookup;
438 for (u = lang_output_section_statement.head;
439 u != (lang_statement_union_type *) NULL;
442 lookup = &u->output_section_statement;
443 if (strcmp (name, lookup->name) == 0)
448 return (lang_output_section_statement_type *) NULL;
451 lang_output_section_statement_type *
452 DEFUN (lang_output_section_statement_lookup, (name),
453 CONST char *CONST name)
455 lang_output_section_statement_type *lookup;
457 lookup = lang_output_section_find (name);
458 if (lookup == (lang_output_section_statement_type *) NULL)
461 lookup = (lang_output_section_statement_type *)
462 new_stat (lang_output_section_statement, stat_ptr);
463 lookup->region = (lang_memory_region_type *) NULL;
465 lookup->block_value = 1;
468 lookup->next = (lang_statement_union_type *) NULL;
469 lookup->bfd_section = (asection *) NULL;
470 lookup->processed = false;
471 lookup->loadable = 1;
472 lookup->addr_tree = (etree_type *) NULL;
473 lang_list_init (&lookup->children);
475 lang_statement_append (&lang_output_section_statement,
476 (lang_statement_union_type *) lookup,
484 DEFUN (print_flags, (ignore_flags),
487 fprintf (config.map_file, "(");
489 if (flags->flag_read)
490 fprintf (outfile, "R");
491 if (flags->flag_write)
492 fprintf (outfile, "W");
493 if (flags->flag_executable)
494 fprintf (outfile, "X");
495 if (flags->flag_loadable)
496 fprintf (outfile, "L");
498 fprintf (config.map_file, ")");
502 DEFUN_VOID (lang_map)
504 lang_memory_region_type *m;
506 fprintf (config.map_file, "**MEMORY CONFIGURATION**\n\n");
508 fprintf (config.map_file, "name\t\torigin\t\tlength\t\tattributes\n");
510 fprintf (config.map_file,
511 "name\t\torigin length r_size c_size is attributes\n");
514 for (m = lang_memory_region_list;
515 m != (lang_memory_region_type *) NULL;
518 fprintf (config.map_file, "%-16s", m->name);
519 print_address (m->origin);
521 print_address (m->length);
523 print_address (m->old_length);
525 print_address (m->current - m->origin);
528 fprintf(config.map_file," %2d%% ", ( m->current - m->origin) * 100 / m->old_length);
529 print_flags (&m->flags);
530 fprintf (config.map_file, "\n");
532 fprintf (config.map_file, "\n\n**LINK EDITOR MEMORY MAP**\n\n");
533 fprintf (config.map_file, "output input virtual\n");
534 fprintf (config.map_file, "section section address tsize\n\n");
545 lang_output_section_statement_type * s)
547 /* asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
548 section_userdata_type *new =
549 (section_userdata_type *)
550 stat_alloc ((bfd_size_type) (sizeof (section_userdata_type)));
552 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
553 if (s->bfd_section == (asection *) NULL)
554 s->bfd_section = bfd_make_section (output_bfd, s->name);
555 if (s->bfd_section == (asection *) NULL)
557 einfo ("%P%F output format %s cannot represent section called %s\n",
558 output_bfd->xvec->name, s->name);
560 s->bfd_section->output_section = s->bfd_section;
561 /* s->bfd_section->flags = s->flags;*/
563 /* We initialize an output sections output offset to minus its own */
564 /* vma to allow us to output a section through itself */
565 s->bfd_section->output_offset = 0;
566 get_userdata (s->bfd_section) = (PTR) new;
570 /***********************************************************************
573 These expand statements like *(.text) and foo.o to a list of
574 explicit actions, like foo.o(.text), bar.o(.text) and
577 The toplevel routine, wild, takes a statement, section, file and
578 target. If either the section or file is null it is taken to be the
579 wildcard. Seperate lang_input_section statements are created for
580 each part of the expanstion, and placed after the statement provided.
585 DEFUN (wild_doit, (ptr, section, output, file),
586 lang_statement_list_type * ptr AND
587 asection * section AND
588 lang_output_section_statement_type * output AND
589 lang_input_statement_type * file)
591 if (output->bfd_section == (asection *) NULL)
594 /* Initialize the vma and size to the existing section. This will
595 be overriden in lang_size_sections unless SEC_NEVER_LOAD gets
597 if (section != (asection *) NULL)
599 bfd_set_section_vma (0, output->bfd_section,
600 bfd_section_vma (0, section));
601 output->bfd_section->_raw_size = section->_raw_size;
605 if (section != (asection *) NULL
606 && section->output_section == (asection *) NULL)
608 /* Add a section reference to the list */
609 lang_input_section_type *new = new_stat (lang_input_section, ptr);
611 new->section = section;
613 section->output_section = output->bfd_section;
614 section->output_section->flags |= section->flags;
615 if (!output->loadable)
617 /* Turn of load flag */
618 output->bfd_section->flags &= ~SEC_LOAD;
620 if (section->alignment_power > output->bfd_section->alignment_power)
622 output->bfd_section->alignment_power = section->alignment_power;
628 DEFUN (our_bfd_get_section_by_name, (abfd, section),
632 return bfd_get_section_by_name (abfd, section);
636 DEFUN (wild_section, (ptr, section, file, output),
637 lang_wild_statement_type * ptr AND
638 CONST char *section AND
639 lang_input_statement_type * file AND
640 lang_output_section_statement_type * output)
644 if (file->just_syms_flag == false)
646 if (section == (char *) NULL)
648 /* Do the creation to all sections in the file */
649 for (s = file->the_bfd->sections; s != (asection *) NULL; s = s->next)
651 wild_doit (&ptr->children, s, output, file);
656 /* Do the creation to the named section only */
657 wild_doit (&ptr->children,
658 our_bfd_get_section_by_name (file->the_bfd, section),
664 /* passed a file name (which must have been seen already and added to
665 the statement tree. We will see if it has been opened already and
666 had its symbols read. If not then we'll read it.
668 Archives are pecuilar here. We may open them once, but if they do
669 not define anything we need at the time, they won't have all their
670 symbols read. If we need them later, we'll have to redo it.
673 lang_input_statement_type *
674 DEFUN (lookup_name, (name),
675 CONST char *CONST name)
677 lang_input_statement_type *search;
679 for (search = (lang_input_statement_type *) input_file_chain.head;
680 search != (lang_input_statement_type *) NULL;
681 search = (lang_input_statement_type *) search->next_real_file)
683 if (search->filename == (char *) NULL && name == (char *) NULL)
687 if (search->filename != (char *) NULL && name != (char *) NULL)
689 if (strcmp (search->filename, name) == 0)
691 ldmain_open_file_read_symbol (search);
697 /* There isn't an afile entry for this file yet, this must be
698 because the name has only appeared inside a load script and not
699 on the command line */
700 search = new_afile (name, lang_input_file_is_file_enum, default_target);
701 ldmain_open_file_read_symbol (search);
708 DEFUN (wild, (s, section, file, target, output),
709 lang_wild_statement_type * s AND
710 CONST char *CONST section AND
711 CONST char *CONST file AND
712 CONST char *CONST target AND
713 lang_output_section_statement_type * output)
715 lang_input_statement_type *f;
717 if (file == (char *) NULL)
719 /* Perform the iteration over all files in the list */
720 for (f = (lang_input_statement_type *) file_chain.head;
721 f != (lang_input_statement_type *) NULL;
722 f = (lang_input_statement_type *) f->next)
724 wild_section (s, section, f, output);
729 /* Perform the iteration over a single file */
730 wild_section (s, section, lookup_name (file), output);
732 if (section != (char *) NULL
733 && strcmp (section, "COMMON") == 0
734 && default_common_section == (lang_output_section_statement_type *) NULL)
736 /* Remember the section that common is going to incase we later
737 get something which doesn't know where to put it */
738 default_common_section = output;
743 read in all the files
746 DEFUN (open_output, (name),
747 CONST char *CONST name)
749 extern unsigned long ldfile_output_machine;
750 extern enum bfd_architecture ldfile_output_architecture;
752 extern CONST char *output_filename;
755 if (output_target == (char *) NULL)
757 if (current_target != (char *) NULL)
758 output_target = current_target;
760 output_target = default_target;
762 output = bfd_openw (name, output_target);
763 output_filename = name;
765 if (output == (bfd *) NULL)
767 if (bfd_error == invalid_target)
769 einfo ("%P%F target %s not found\n", output_target);
771 einfo ("%P%F problem opening output file %s, %E\n", name);
774 /* output->flags |= D_PAGED;*/
776 bfd_set_format (output, bfd_object);
777 bfd_set_arch_mach (output,
778 ldfile_output_architecture,
779 ldfile_output_machine);
787 DEFUN (ldlang_open_output, (statement),
788 lang_statement_union_type * statement)
790 switch (statement->header.type)
792 case lang_output_statement_enum:
793 output_bfd = open_output (statement->output_statement.name);
794 ldemul_set_output_arch ();
795 if (config.magic_demand_paged && !config.relocateable_output)
796 output_bfd->flags |= D_PAGED;
798 output_bfd->flags &= ~D_PAGED;
799 if (config.text_read_only)
800 output_bfd->flags |= WP_TEXT;
802 output_bfd->flags &= ~WP_TEXT;
805 case lang_target_statement_enum:
806 current_target = statement->target_statement.target;
814 DEFUN (open_input_bfds, (statement),
815 lang_statement_union_type * statement)
817 switch (statement->header.type)
819 case lang_target_statement_enum:
820 current_target = statement->target_statement.target;
822 case lang_wild_statement_enum:
823 /* Maybe we should load the file's symbols */
824 if (statement->wild_statement.filename)
826 (void) lookup_name (statement->wild_statement.filename);
829 case lang_input_statement_enum:
830 if (statement->input_statement.real == true)
832 statement->input_statement.target = current_target;
833 lookup_name (statement->input_statement.filename);
841 /* If there are [COMMONS] statements, put a wild one into the bss section */
844 lang_reasonable_defaults ()
850 lang_output_section_statement_lookup (".text");
851 lang_output_section_statement_lookup (".data");
853 default_common_section =
854 lang_output_section_statement_lookup (".bss");
857 if (placed_commons == false)
859 lang_wild_statement_type *new =
860 new_stat (lang_wild_statement,
861 &default_common_section->children);
863 new->section_name = "COMMON";
864 new->filename = (char *) NULL;
865 lang_list_init (&new->children);
872 Add the supplied name to the symbol table as an undefined reference.
873 Remove items from the chain as we open input bfds
875 typedef struct ldlang_undef_chain_list
877 struct ldlang_undef_chain_list *next;
879 } ldlang_undef_chain_list_type;
881 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
884 DEFUN (ldlang_add_undef, (name),
885 CONST char *CONST name)
887 ldlang_undef_chain_list_type *new =
888 (ldlang_undef_chain_list_type
889 *) stat_alloc ((bfd_size_type) (sizeof (ldlang_undef_chain_list_type)));
891 new->next = ldlang_undef_chain_list_head;
892 ldlang_undef_chain_list_head = new;
894 new->name = buystring (name);
897 /* Run through the list of undefineds created above and place them
898 into the linker hash table as undefined symbols belonging to the
902 DEFUN_VOID (lang_place_undefineds)
904 ldlang_undef_chain_list_type *ptr = ldlang_undef_chain_list_head;
906 while (ptr != (ldlang_undef_chain_list_type *) NULL)
909 asymbol **def_ptr = (asymbol **) stat_alloc ((bfd_size_type) (sizeof (asymbol **)));
911 def = (asymbol *) bfd_make_empty_symbol (script_file->the_bfd);
913 def->name = ptr->name;
914 def->section = &bfd_und_section;
915 Q_enter_global_ref (def_ptr, ptr->name);
920 /* Copy important data from out internal form to the bfd way. Also
921 create a section for the dummy file
925 DEFUN_VOID (lang_create_output_section_statements)
927 lang_statement_union_type *os;
929 for (os = lang_output_section_statement.head;
930 os != (lang_statement_union_type *) NULL;
931 os = os->output_section_statement.next)
933 lang_output_section_statement_type *s =
934 &os->output_section_statement;
942 DEFUN_VOID (lang_init_script_file)
944 script_file = lang_add_input_file ("script file",
945 lang_input_file_is_fake_enum,
947 script_file->the_bfd = bfd_create ("script file", output_bfd);
948 script_file->symbol_count = 0;
949 script_file->the_bfd->sections = output_bfd->sections;
950 abs_output_section = lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
952 abs_output_section->bfd_section = &bfd_abs_section;
956 /* Open input files and attatch to output sections */
958 DEFUN (map_input_to_output_sections, (s, target, output_section_statement),
959 lang_statement_union_type * s AND
960 CONST char *target AND
961 lang_output_section_statement_type * output_section_statement)
963 for (; s != (lang_statement_union_type *) NULL; s = s->next)
965 switch (s->header.type)
969 case lang_wild_statement_enum:
970 wild (&s->wild_statement, s->wild_statement.section_name,
971 s->wild_statement.filename, target,
972 output_section_statement);
975 case lang_constructors_statement_enum:
976 map_input_to_output_sections (constructor_list.head,
978 output_section_statement);
980 case lang_output_section_statement_enum:
981 map_input_to_output_sections (s->output_section_statement.children.head,
983 &s->output_section_statement);
985 case lang_output_statement_enum:
987 case lang_target_statement_enum:
988 target = s->target_statement.target;
990 case lang_fill_statement_enum:
991 case lang_input_section_enum:
992 case lang_object_symbols_statement_enum:
993 case lang_data_statement_enum:
994 case lang_assignment_statement_enum:
995 case lang_padding_statement_enum:
997 case lang_afile_asection_pair_statement_enum:
1000 case lang_address_statement_enum:
1001 /* Mark the specified section with the supplied address */
1003 lang_output_section_statement_type *os =
1004 lang_output_section_statement_lookup
1005 (s->address_statement.section_name);
1007 os->addr_tree = s->address_statement.address;
1008 if (os->bfd_section == (asection *) NULL)
1010 einfo ("%P%F can't set the address of undefined section %s\n",
1011 s->address_statement.section_name);
1015 case lang_input_statement_enum:
1016 /* A standard input statement, has no wildcards */
1017 /* ldmain_open_file_read_symbol(&s->input_statement);*/
1028 DEFUN (print_output_section_statement, (output_section_statement),
1029 lang_output_section_statement_type * output_section_statement)
1031 asection *section = output_section_statement->bfd_section;
1034 print_section (output_section_statement->name);
1038 print_dot = section->vma;
1042 print_address (section->vma);
1044 print_size (section->_raw_size);
1046 print_size(section->_cooked_size);
1048 print_alignment (section->alignment_power);
1051 fprintf (config.map_file, "%s flags", output_section_statement->region->name);
1052 print_flags (stdout, &output_section_statement->flags);
1054 if (section->flags & SEC_LOAD)
1055 fprintf (config.map_file, "load ");
1056 if (section->flags & SEC_ALLOC)
1057 fprintf (config.map_file, "alloc ");
1058 if (section->flags & SEC_RELOC)
1059 fprintf (config.map_file, "reloc ");
1060 if (section->flags & SEC_HAS_CONTENTS)
1061 fprintf (config.map_file, "contents ");
1066 fprintf (config.map_file, "No attached output section");
1069 print_statement (output_section_statement->children.head,
1070 output_section_statement);
1075 DEFUN (print_assignment, (assignment, output_section),
1076 lang_assignment_statement_type * assignment AND
1077 lang_output_section_statement_type * output_section)
1079 etree_value_type result;
1085 print_address (print_dot);
1087 result = exp_fold_tree (assignment->exp->assign.src,
1089 lang_final_phase_enum,
1095 print_address (result.value);
1099 fprintf (config.map_file, "*undefined*");
1102 exp_print_tree (assignment->exp);
1104 fprintf (config.map_file, "\n");
1108 DEFUN (print_input_statement, (statm),
1109 lang_input_statement_type * statm)
1111 if (statm->filename != (char *) NULL)
1113 fprintf (config.map_file, "LOAD %s\n", statm->filename);
1118 DEFUN (print_symbol, (q),
1122 fprintf (config.map_file, " ");
1124 fprintf (config.map_file, " ");
1125 print_address (outside_symbol_address (q));
1126 fprintf (config.map_file, " %s", q->name ? q->name : " ");
1131 DEFUN (print_input_section, (in),
1132 lang_input_section_type * in)
1134 asection *i = in->section;
1135 int size = i->reloc_done ?
1136 bfd_get_section_size_after_reloc (i) :
1137 bfd_get_section_size_before_reloc (i);
1142 fprintf (config.map_file, " ");
1143 print_section (i->name);
1144 fprintf (config.map_file, " ");
1145 if (i->output_section)
1147 print_address (i->output_section->vma + i->output_offset);
1148 fprintf (config.map_file, " ");
1149 print_size (i->_raw_size);
1150 fprintf (config.map_file, " ");
1151 print_size(i->_cooked_size);
1152 fprintf (config.map_file, " ");
1153 print_alignment (i->alignment_power);
1154 fprintf (config.map_file, " ");
1158 bfd *abfd = in->ifile->the_bfd;
1160 if (in->ifile->just_syms_flag == true)
1162 fprintf (config.map_file, "symbols only ");
1165 fprintf (config.map_file, " %s ", abfd->xvec->name);
1166 if (abfd->my_archive != (bfd *) NULL)
1168 fprintf (config.map_file, "[%s]%s", abfd->my_archive->filename,
1173 fprintf (config.map_file, "%s", abfd->filename);
1175 fprintf (config.map_file, "(overhead %d bytes)", (int) bfd_alloc_size (abfd));
1178 /* Find all the symbols in this file defined in this section */
1180 if (in->ifile->symbol_count)
1184 for (p = in->ifile->asymbols; *p; p++)
1188 if (bfd_get_section (q) == i && q->flags & BSF_GLOBAL)
1201 print_dot = outside_section_address (i) + size;
1205 fprintf (config.map_file, "No output section allocated\n");
1211 DEFUN (print_fill_statement, (fill),
1212 lang_fill_statement_type * fill)
1214 fprintf (config.map_file, "FILL mask ");
1215 print_fill (fill->fill);
1219 DEFUN (print_data_statement, (data),
1220 lang_data_statement_type * data)
1222 /* bfd_vma value; */
1227 /* ASSERT(print_dot == data->output_vma);*/
1229 print_address (data->output_vma + data->output_section->vma);
1231 print_address (data->value);
1236 fprintf (config.map_file, "BYTE ");
1237 print_dot += BYTE_SIZE;
1240 fprintf (config.map_file, "SHORT ");
1241 print_dot += SHORT_SIZE;
1244 fprintf (config.map_file, "LONG ");
1245 print_dot += LONG_SIZE;
1249 exp_print_tree (data->exp);
1251 fprintf (config.map_file, "\n");
1256 DEFUN (print_padding_statement, (s),
1257 lang_padding_statement_type * s)
1261 print_section ("*fill*");
1263 print_address (s->output_offset + s->output_section->vma);
1265 print_size (s->size);
1267 print_fill (s->fill);
1270 print_dot = s->output_offset + s->output_section->vma + s->size;
1275 DEFUN (print_wild_statement, (w, os),
1276 lang_wild_statement_type * w AND
1277 lang_output_section_statement_type * os)
1279 fprintf (config.map_file, " from ");
1280 if (w->filename != (char *) NULL)
1282 fprintf (config.map_file, "%s", w->filename);
1286 fprintf (config.map_file, "*");
1288 if (w->section_name != (char *) NULL)
1290 fprintf (config.map_file, "(%s)", w->section_name);
1294 fprintf (config.map_file, "(*)");
1297 print_statement (w->children.head, os);
1301 DEFUN (print_statement, (s, os),
1302 lang_statement_union_type * s AND
1303 lang_output_section_statement_type * os)
1307 switch (s->header.type)
1309 case lang_constructors_statement_enum:
1310 fprintf (config.map_file, "constructors:\n");
1311 print_statement (constructor_list.head, os);
1313 case lang_wild_statement_enum:
1314 print_wild_statement (&s->wild_statement, os);
1317 fprintf (config.map_file, "Fail with %d\n", s->header.type);
1320 case lang_address_statement_enum:
1321 fprintf (config.map_file, "address\n");
1323 case lang_object_symbols_statement_enum:
1324 fprintf (config.map_file, "object symbols\n");
1326 case lang_fill_statement_enum:
1327 print_fill_statement (&s->fill_statement);
1329 case lang_data_statement_enum:
1330 print_data_statement (&s->data_statement);
1332 case lang_input_section_enum:
1333 print_input_section (&s->input_section);
1335 case lang_padding_statement_enum:
1336 print_padding_statement (&s->padding_statement);
1338 case lang_output_section_statement_enum:
1339 print_output_section_statement (&s->output_section_statement);
1341 case lang_assignment_statement_enum:
1342 print_assignment (&s->assignment_statement,
1345 case lang_target_statement_enum:
1346 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
1348 case lang_output_statement_enum:
1349 fprintf (config.map_file, "OUTPUT(%s %s)\n",
1350 s->output_statement.name,
1353 case lang_input_statement_enum:
1354 print_input_statement (&s->input_statement);
1356 case lang_afile_asection_pair_statement_enum:
1366 DEFUN_VOID (print_statements)
1368 print_statement (statement_list.head,
1369 abs_output_section);
1374 DEFUN (insert_pad, (this_ptr, fill, power, output_section_statement, dot),
1375 lang_statement_union_type ** this_ptr AND
1377 unsigned int power AND
1378 asection * output_section_statement AND
1381 /* Align this section first to the
1382 input sections requirement, then
1383 to the output section's requirement.
1384 If this alignment is > than any seen before,
1385 then record it too. Perform the alignment by
1386 inserting a magic 'padding' statement.
1389 unsigned int alignment_needed = align_power (dot, power) - dot;
1391 if (alignment_needed != 0)
1393 lang_statement_union_type *new =
1394 (lang_statement_union_type *)
1395 stat_alloc ((bfd_size_type) (sizeof (lang_padding_statement_type)));
1397 /* Link into existing chain */
1398 new->header.next = *this_ptr;
1400 new->header.type = lang_padding_statement_enum;
1401 new->padding_statement.output_section = output_section_statement;
1402 new->padding_statement.output_offset =
1403 dot - output_section_statement->vma;
1404 new->padding_statement.fill = fill;
1405 new->padding_statement.size = alignment_needed;
1409 /* Remember the most restrictive alignment */
1410 if (power > output_section_statement->alignment_power)
1412 output_section_statement->alignment_power = power;
1414 output_section_statement->_raw_size += alignment_needed;
1415 return alignment_needed + dot;
1419 /* Work out how much this section will move the dot point */
1421 DEFUN (size_input_section, (this_ptr, output_section_statement, fill,
1423 lang_statement_union_type ** this_ptr AND
1424 lang_output_section_statement_type * output_section_statement AND
1425 unsigned short fill AND
1429 lang_input_section_type *is = &((*this_ptr)->input_section);
1430 asection *i = is->section;
1432 if (is->ifile->just_syms_flag == false)
1434 dot = insert_pad (this_ptr, fill, i->alignment_power,
1435 output_section_statement->bfd_section, dot);
1437 /* remember the largest size so we can malloc the largest area
1438 needed for the output stage. Only remember the size of sections
1439 which we will actually allocate */
1441 (SEC_HAS_CONTENTS | SEC_ALLOC)) == (SEC_HAS_CONTENTS | SEC_ALLOC))
1442 && (bfd_get_section_size_before_reloc (i) > largest_section))
1444 largest_section = bfd_get_section_size_before_reloc (i);
1447 /* Remember where in the output section this input section goes */
1449 i->output_offset = dot - output_section_statement->bfd_section->vma;
1451 /* Mark how big the output section must be to contain this now
1455 dot += i->_cooked_size;
1459 dot += i->_raw_size;
1461 output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma;
1465 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
1471 /* Sizing happens in two passes, first pass we allocate worst case
1472 stuff. The second pass (if relaxing), we use what we learnt to
1473 change the size of some relocs from worst case to better
1475 static boolean had_relax;
1478 DEFUN (lang_size_sections, (s, output_section_statement, prev, fill,
1480 lang_statement_union_type * s AND
1481 lang_output_section_statement_type * output_section_statement AND
1482 lang_statement_union_type ** prev AND
1483 unsigned short fill AND
1487 /* Size up the sections from their constituent parts */
1488 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1490 switch (s->header.type)
1493 case lang_output_section_statement_enum:
1496 lang_output_section_statement_type *os = &s->output_section_statement;
1498 /* If this section is never loaded, don't change the size and
1500 if (os->bfd_section->flags & SEC_NEVER_LOAD)
1503 if (os->bfd_section == &bfd_abs_section)
1505 /* No matter what happens, an abs section starts at zero */
1506 bfd_set_section_vma (0, os->bfd_section, 0);
1510 if (os->addr_tree == (etree_type *) NULL)
1512 /* No address specified for this section, get one
1513 from the region specification
1515 if (os->region == (lang_memory_region_type *) NULL)
1517 os->region = lang_memory_region_lookup ("*default*");
1519 dot = os->region->current;
1525 r = exp_fold_tree (os->addr_tree,
1527 lang_allocating_phase_enum,
1529 if (r.valid == false)
1531 einfo ("%F%S: non constant address expression for section %s\n",
1536 /* The section starts here */
1537 /* First, align to what the section needs */
1540 dot = align_power (dot, os->bfd_section->alignment_power);
1541 bfd_set_section_vma (0, os->bfd_section, dot);
1545 os->bfd_section->output_offset = 0;
1547 (void) lang_size_sections (os->children.head, os, &os->children.head,
1548 os->fill, dot, relax);
1549 /* Ignore the size of the input sections, use the vma and size to */
1553 after = ALIGN (os->bfd_section->vma +
1554 os->bfd_section->_raw_size,
1558 os->bfd_section->_raw_size = after - os->bfd_section->vma;
1559 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1560 os->processed = true;
1562 /* Replace into region ? */
1563 if (os->addr_tree == (etree_type *) NULL
1564 && os->region != (lang_memory_region_type *) NULL)
1566 os->region->current = dot;
1567 /* Make sure this isn't silly */
1568 if (os->region->current >
1569 os->region->origin +
1572 einfo ("%X%P: Region %s is full (%B section %s)\n",
1574 os->bfd_section->owner,
1575 os->bfd_section->name);
1576 /* Reset the region pointer */
1577 os->region->current = 0;
1585 case lang_constructors_statement_enum:
1586 dot = lang_size_sections (constructor_list.head,
1587 output_section_statement,
1588 &s->wild_statement.children.head,
1593 case lang_data_statement_enum:
1595 unsigned int size = 0;
1597 s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
1598 s->data_statement.output_section =
1599 output_section_statement->bfd_section;
1601 switch (s->data_statement.type)
1615 output_section_statement->bfd_section->_raw_size += size;
1619 case lang_wild_statement_enum:
1621 dot = lang_size_sections (s->wild_statement.children.head,
1622 output_section_statement,
1623 &s->wild_statement.children.head,
1629 case lang_object_symbols_statement_enum:
1630 create_object_symbols = output_section_statement;
1632 case lang_output_statement_enum:
1633 case lang_target_statement_enum:
1635 case lang_input_section_enum:
1640 if( relax_section (prev))
1646 (*prev)->input_section.section->_cooked_size =
1647 (*prev)->input_section.section->_raw_size ;
1650 dot = size_input_section (prev,
1651 output_section_statement,
1652 output_section_statement->fill,
1655 case lang_input_statement_enum:
1657 case lang_fill_statement_enum:
1658 s->fill_statement.output_section = output_section_statement->bfd_section;
1660 fill = s->fill_statement.fill;
1662 case lang_assignment_statement_enum:
1664 bfd_vma newdot = dot;
1666 exp_fold_tree (s->assignment_statement.exp,
1667 output_section_statement,
1668 lang_allocating_phase_enum,
1672 if (newdot != dot && !relax)
1673 /* We've been moved ! so insert a pad */
1675 lang_statement_union_type *new =
1676 (lang_statement_union_type *)
1677 stat_alloc ((bfd_size_type) (sizeof (lang_padding_statement_type)));
1679 /* Link into existing chain */
1680 new->header.next = *prev;
1682 new->header.type = lang_padding_statement_enum;
1683 new->padding_statement.output_section =
1684 output_section_statement->bfd_section;
1685 new->padding_statement.output_offset =
1686 dot - output_section_statement->bfd_section->vma;
1687 new->padding_statement.fill = fill;
1688 new->padding_statement.size = newdot - dot;
1689 output_section_statement->bfd_section->_raw_size +=
1690 new->padding_statement.size;
1699 /* This can only get here when relaxing is turned on */
1700 case lang_padding_statement_enum:
1702 case lang_address_statement_enum:
1705 prev = &s->header.next;
1711 DEFUN (lang_do_assignments, (s, output_section_statement, fill, dot),
1712 lang_statement_union_type * s AND
1713 lang_output_section_statement_type * output_section_statement AND
1714 unsigned short fill AND
1718 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1720 switch (s->header.type)
1722 case lang_constructors_statement_enum:
1723 dot = lang_do_assignments (constructor_list.head,
1724 output_section_statement,
1729 case lang_output_section_statement_enum:
1731 lang_output_section_statement_type *os =
1732 &(s->output_section_statement);
1734 dot = os->bfd_section->vma;
1735 (void) lang_do_assignments (os->children.head, os, os->fill, dot);
1736 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1739 case lang_wild_statement_enum:
1741 dot = lang_do_assignments (s->wild_statement.children.head,
1742 output_section_statement,
1747 case lang_object_symbols_statement_enum:
1748 case lang_output_statement_enum:
1749 case lang_target_statement_enum:
1751 case lang_common_statement_enum:
1754 case lang_data_statement_enum:
1756 etree_value_type value;
1758 value = exp_fold_tree (s->data_statement.exp,
1760 lang_final_phase_enum, dot, &dot);
1761 s->data_statement.value = value.value;
1762 if (value.valid == false)
1763 einfo ("%F%P: Invalid data statement\n");
1765 switch (s->data_statement.type)
1778 case lang_input_section_enum:
1780 asection *in = s->input_section.section;
1782 dot += bfd_get_section_size_before_reloc (in);
1786 case lang_input_statement_enum:
1788 case lang_fill_statement_enum:
1789 fill = s->fill_statement.fill;
1791 case lang_assignment_statement_enum:
1793 exp_fold_tree (s->assignment_statement.exp,
1794 output_section_statement,
1795 lang_final_phase_enum,
1801 case lang_padding_statement_enum:
1802 dot += s->padding_statement.size;
1807 case lang_address_statement_enum:
1818 DEFUN_VOID (lang_relocate_globals)
1822 Each ldsym_type maintains a chain of pointers to asymbols which
1823 references the definition. Replace each pointer to the referenence
1824 with a pointer to only one place, preferably the definition. If
1825 the defintion isn't available then the common symbol, and if
1826 there isn't one of them then choose one reference.
1829 FOR_EACH_LDSYM (lgs)
1833 if (lgs->sdefs_chain)
1835 it = *(lgs->sdefs_chain);
1837 else if (lgs->scoms_chain != (asymbol **) NULL)
1839 it = *(lgs->scoms_chain);
1841 else if (lgs->srefs_chain != (asymbol **) NULL)
1843 it = *(lgs->srefs_chain);
1847 /* This can happen when the command line asked for a symbol to
1849 it = (asymbol *) NULL;
1851 if (it != (asymbol *) NULL)
1853 asymbol **ptr = lgs->srefs_chain;;
1854 if (lgs->flags & SYM_WARNING)
1856 produce_warnings (lgs, it);
1859 while (ptr != (asymbol **) NULL)
1861 asymbol *ref = *ptr;
1864 ptr = (asymbol **) (ref->udata);
1873 DEFUN_VOID (lang_finish)
1876 int warn = config.relocateable_output != true;
1877 if (entry_symbol == (char *) NULL)
1879 /* No entry has been specified, look for start, but don't warn */
1880 entry_symbol = "start";
1883 lgs = ldsym_get_soft (entry_symbol);
1884 if (lgs && lgs->sdefs_chain)
1886 asymbol *sy = *(lgs->sdefs_chain);
1888 /* We can set the entry address*/
1889 bfd_set_start_address (output_bfd,
1890 outside_symbol_address (sy));
1895 /* Can't find anything reasonable,
1896 use the first address in the text section
1898 asection *ts = bfd_get_section_by_name (output_bfd, ".text");
1902 einfo ("%P: Warning, can't find entry symbol %s, defaulting to %V\n",
1903 entry_symbol, ts->vma);
1905 bfd_set_start_address (output_bfd, ts->vma);
1910 einfo ("%P: Warning, can't find entry symbol %s, not setting start address\n",
1916 /* By now we know the target architecture, and we may have an */
1917 /* ldfile_output_machine_name */
1919 DEFUN_VOID (lang_check)
1921 lang_statement_union_type *file;
1923 unsigned long input_machine;
1924 enum bfd_architecture input_architecture;
1925 CONST bfd_arch_info_type *compatible;
1927 for (file = file_chain.head;
1928 file != (lang_statement_union_type *) NULL;
1929 file = file->input_statement.next)
1931 unsigned long ldfile_new_output_machine = 0;
1932 enum bfd_architecture ldfile_new_output_architecture = bfd_arch_unknown;
1934 input_bfd = file->input_statement.the_bfd;
1936 input_machine = bfd_get_mach (input_bfd);
1937 input_architecture = bfd_get_arch (input_bfd);
1940 /* Inspect the architecture and ensure we're linking like with
1943 compatible = bfd_arch_get_compatible (input_bfd,
1948 ldfile_output_machine = compatible->mach;
1949 ldfile_output_architecture = compatible->arch;
1954 info ("%P: warning, %s architecture of input file `%B' incompatible with %s output\n",
1955 bfd_printable_name (input_bfd), input_bfd,
1956 bfd_printable_name (output_bfd));
1958 bfd_set_arch_mach (output_bfd,
1967 * run through all the global common symbols and tie them
1968 * to the output section requested.
1970 As an experiment we do this 4 times, once for all the byte sizes,
1971 then all the two bytes, all the four bytes and then everything else
1975 DEFUN_VOID (lang_common)
1980 if (config.relocateable_output == false ||
1981 command_line.force_common_definition == true)
1983 for (power = 1; (config.sort_common == true && power == 1) || (power <= 16); power <<= 1)
1985 for (lgs = symbol_head;
1986 lgs != (ldsym_type *) NULL;
1990 unsigned int power_of_two;
1994 if (lgs->scoms_chain != (asymbol **) NULL)
1996 com = *(lgs->scoms_chain);
2026 if (config.sort_common == false || align == power)
2028 /* Change from a common symbol into a definition of
2030 lgs->sdefs_chain = lgs->scoms_chain;
2031 lgs->scoms_chain = (asymbol **) NULL;
2033 /* Point to the correct common section */
2035 ((lang_input_statement_type *)
2036 (com->the_bfd->usrdata))->common_section;
2037 /* Fix the size of the common section */
2039 com->section->_raw_size =
2040 ALIGN (com->section->_raw_size, align);
2042 /* Remember if this is the biggest alignment ever seen */
2043 if (power_of_two > com->section->alignment_power)
2045 com->section->alignment_power = power_of_two;
2048 /* Symbol stops being common and starts being global, but
2049 we remember that it was common once. */
2051 com->flags = BSF_EXPORT | BSF_GLOBAL | BSF_OLD_COMMON;
2052 com->value = com->section->_raw_size;
2056 fprintf (config.map_file, "Allocating common %s: %x at %x %s\n",
2059 (unsigned) com->value,
2060 com->the_bfd->filename);
2063 com->section->_raw_size += size;
2076 run through the input files and ensure that every input
2077 section has somewhere to go. If one is found without
2078 a destination then create an input request and place it
2079 into the statement tree.
2083 DEFUN_VOID (lang_place_orphans)
2085 lang_input_statement_type *file;
2087 for (file = (lang_input_statement_type *) file_chain.head;
2088 file != (lang_input_statement_type *) NULL;
2089 file = (lang_input_statement_type *) file->next)
2093 for (s = file->the_bfd->sections;
2094 s != (asection *) NULL;
2097 if (s->output_section == (asection *) NULL)
2099 /* This section of the file is not attatched, root
2100 around for a sensible place for it to go */
2102 if (file->common_section == s)
2104 /* This is a lonely common section which must
2105 have come from an archive. We attatch to the
2106 section with the wildcard */
2107 if (config.relocateable_output != true
2108 && command_line.force_common_definition == false)
2110 if (default_common_section ==
2111 (lang_output_section_statement_type *) NULL)
2113 info ("%P: No [COMMON] command, defaulting to .bss\n");
2115 default_common_section =
2116 lang_output_section_statement_lookup (".bss");
2119 wild_doit (&default_common_section->children, s,
2120 default_common_section, file);
2125 lang_output_section_statement_type *os =
2126 lang_output_section_statement_lookup (s->name);
2128 wild_doit (&os->children, s, os, file);
2137 DEFUN (lang_set_flags, (ptr, flags),
2141 boolean state = false;
2156 /* ptr->flag_read = state; */
2159 /* ptr->flag_write = state; */
2162 /* ptr->flag_executable= state;*/
2166 /* ptr->flag_loadable= state;*/
2169 einfo ("%P%F illegal syntax in flags\n");
2179 DEFUN (lang_for_each_file, (func),
2180 PROTO (void, (*func), (lang_input_statement_type *)))
2182 lang_input_statement_type *f;
2184 for (f = (lang_input_statement_type *) file_chain.head;
2185 f != (lang_input_statement_type *) NULL;
2186 f = (lang_input_statement_type *) f->next)
2194 DEFUN (lang_for_each_input_section, (func),
2195 PROTO (void, (*func), (bfd * ab, asection * as)))
2197 lang_input_statement_type *f;
2199 for (f = (lang_input_statement_type *) file_chain.head;
2200 f != (lang_input_statement_type *) NULL;
2201 f = (lang_input_statement_type *) f->next)
2205 for (s = f->the_bfd->sections;
2206 s != (asection *) NULL;
2209 func (f->the_bfd, s);
2217 DEFUN (ldlang_add_file, (entry),
2218 lang_input_statement_type * entry)
2221 lang_statement_append (&file_chain,
2222 (lang_statement_union_type *) entry,
2227 DEFUN (lang_add_output, (name),
2230 lang_output_statement_type *new = new_stat (lang_output_statement,
2234 had_output_filename = true;
2238 static lang_output_section_statement_type *current_section;
2241 DEFUN (lang_enter_output_section_statement,
2242 (output_section_statement_name,
2246 char *output_section_statement_name AND
2247 etree_type * address_exp AND
2249 bfd_vma block_value)
2251 lang_output_section_statement_type *os;
2255 lang_output_section_statement_lookup (output_section_statement_name);
2259 /* Add this statement to tree */
2260 /* add_statement(lang_output_section_statement_enum,
2261 output_section_statement);*/
2262 /* Make next things chain into subchain of this */
2264 if (os->addr_tree ==
2265 (etree_type *) NULL)
2271 if (flags & SEC_NEVER_LOAD)
2275 os->block_value = block_value;
2276 stat_ptr = &os->children;
2281 DEFUN_VOID (lang_final)
2283 if (had_output_filename == false)
2285 extern CONST char *output_filename;
2287 lang_add_output (output_filename);
2291 /* Reset the current counters in the regions */
2293 DEFUN_VOID (reset_memory_regions)
2295 lang_memory_region_type *p = lang_memory_region_list;
2297 for (p = lang_memory_region_list;
2298 p != (lang_memory_region_type *) NULL;
2301 p->old_length = p->current - p->origin;
2302 p->current = p->origin;
2309 DEFUN (create_symbol, (name, flags, section),
2310 CONST char *name AND
2314 extern lang_input_statement_type *script_file;
2315 asymbol **def_ptr = (asymbol **) stat_alloc ((bfd_size_type) (sizeof (asymbol **)));
2317 /* Add this definition to script file */
2318 asymbol *def = (asymbol *) bfd_make_empty_symbol (script_file->the_bfd);
2320 def->name = buystring (name);
2323 def->section = section;
2326 Q_enter_global_ref (def_ptr, name);
2331 DEFUN_VOID (lang_process)
2334 if (had_script == false)
2336 parse_line (ldemul_get_script (), 1);
2338 lang_reasonable_defaults ();
2339 current_target = default_target;
2341 lang_for_each_statement (ldlang_open_output); /* Open the output file */
2342 /* For each output section statement, create a section in the output
2344 lang_create_output_section_statements ();
2346 /* Create a dummy bfd for the script */
2347 lang_init_script_file ();
2349 /* Add to the hash table all undefineds on the command line */
2350 lang_place_undefineds ();
2352 /* Create a bfd for each input file */
2353 current_target = default_target;
2354 lang_for_each_statement (open_input_bfds);
2356 common_section.userdata = (PTR) & common_section_userdata;
2359 /* Run through the contours of the script and attatch input sections
2360 to the correct output sections
2362 find_constructors ();
2363 map_input_to_output_sections (statement_list.head, (char *) NULL,
2364 (lang_output_section_statement_type *) NULL);
2367 /* Find any sections not attatched explicitly and handle them */
2368 lang_place_orphans ();
2370 /* Size up the common data */
2373 ldemul_before_allocation ();
2383 lang_size_sections (statement_list.head,
2384 (lang_output_section_statement_type *) NULL,
2385 &(statement_list.head), 0, (bfd_vma) 0, true);
2386 /* FIXME. Until the code in relax is fixed so that it only reads in
2387 stuff once, we cant iterate since there is no way for the linker to
2388 know what has been patched and what hasn't */
2394 /* Now run around and relax if we can */
2395 if (command_line.relax)
2397 /* First time round is a trial run to get the 'worst case' addresses of the
2398 objects if there was no relaxing */
2399 lang_size_sections (statement_list.head,
2400 (lang_output_section_statement_type *) NULL,
2401 &(statement_list.head), 0, (bfd_vma) 0, false);
2405 /* Move the global symbols around so the second pass of relaxing can
2407 lang_relocate_globals ();
2409 reset_memory_regions ();
2411 /* Do all the assignments, now that we know the final restingplaces
2412 of all the symbols */
2414 lang_do_assignments (statement_list.head,
2419 /* Perform another relax pass - this time we know where the
2420 globals are, so can make better guess */
2421 lang_size_sections (statement_list.head,
2422 (lang_output_section_statement_type *) NULL,
2423 &(statement_list.head), 0, (bfd_vma) 0, true);
2431 /* Size up the sections */
2432 lang_size_sections (statement_list.head,
2434 &(statement_list.head), 0, (bfd_vma) 0, false);
2439 /* See if anything special should be done now we know how big
2441 ldemul_after_allocation ();
2443 /* Do all the assignments, now that we know the final restingplaces
2444 of all the symbols */
2446 lang_do_assignments (statement_list.head,
2451 /* Move the global symbols around */
2452 lang_relocate_globals ();
2454 /* Make sure that we're not mixing architectures */
2462 /* EXPORTED TO YACC */
2465 DEFUN (lang_add_wild, (section_name, filename),
2466 CONST char *CONST section_name AND
2467 CONST char *CONST filename)
2469 lang_wild_statement_type *new = new_stat (lang_wild_statement,
2472 if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
2474 placed_commons = true;
2476 if (filename != (char *) NULL)
2478 lang_has_input_file = true;
2480 new->section_name = section_name;
2481 new->filename = filename;
2482 lang_list_init (&new->children);
2486 DEFUN (lang_section_start, (name, address),
2487 CONST char *name AND
2488 etree_type * address)
2490 lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
2492 ad->section_name = name;
2493 ad->address = address;
2497 DEFUN (lang_add_entry, (name),
2500 entry_symbol = name;
2504 DEFUN (lang_add_target, (name),
2507 lang_target_statement_type *new = new_stat (lang_target_statement,
2515 DEFUN (lang_add_map, (name),
2523 map_option_f = true;
2531 DEFUN (lang_add_fill, (exp),
2534 lang_fill_statement_type *new = new_stat (lang_fill_statement,
2541 DEFUN (lang_add_data, (type, exp),
2543 union etree_union *exp)
2546 lang_data_statement_type *new = new_stat (lang_data_statement,
2555 DEFUN (lang_add_assignment, (exp),
2558 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
2565 DEFUN (lang_add_attribute, (attribute),
2566 enum statement_enum attribute)
2568 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
2572 DEFUN (lang_startup, (name),
2575 if (startup_file != (char *) NULL)
2577 einfo ("%P%FMultiple STARTUP files\n");
2579 first_file->filename = name;
2580 first_file->local_sym_name = name;
2582 startup_file = name;
2586 DEFUN (lang_float, (maybe),
2589 lang_float_flag = maybe;
2593 DEFUN (lang_leave_output_section_statement, (fill, memspec),
2595 CONST char *memspec)
2597 current_section->fill = fill;
2598 current_section->region = lang_memory_region_lookup (memspec);
2599 stat_ptr = &statement_list;
2601 /* We remember if we are closing a .data section, since we use it to
2602 store constructors in */
2603 if (strcmp (current_section->name, ".data") == 0)
2605 end_of_data_section_statement_list = statement_list;
2611 Create an absolute symbol with the given name with the value of the
2612 address of first byte of the section named.
2614 If the symbol already exists, then do nothing.
2617 DEFUN (lang_abs_symbol_at_beginning_of, (section, name),
2618 CONST char *section AND
2621 if (ldsym_undefined (name))
2623 asection *s = bfd_get_section_by_name (output_bfd, section);
2624 asymbol *def = create_symbol (name,
2625 BSF_GLOBAL | BSF_EXPORT,
2628 if (s != (asection *) NULL)
2630 def->value = s->vma;
2640 Create an absolute symbol with the given name with the value of the
2641 address of the first byte after the end of the section named.
2643 If the symbol already exists, then do nothing.
2646 DEFUN (lang_abs_symbol_at_end_of, (section, name),
2647 CONST char *section AND
2650 if (ldsym_undefined (name))
2652 asection *s = bfd_get_section_by_name (output_bfd, section);
2654 /* Add a symbol called _end */
2655 asymbol *def = create_symbol (name,
2656 BSF_GLOBAL | BSF_EXPORT,
2659 if (s != (asection *) NULL)
2661 def->value = s->vma + s->_raw_size;
2671 DEFUN (lang_statement_append, (list, element, field),
2672 lang_statement_list_type * list AND
2673 lang_statement_union_type * element AND
2674 lang_statement_union_type ** field)
2676 *(list->tail) = element;
2680 /* Set the output format type */
2682 DEFUN (lang_add_output_format, (format),
2685 output_target = format;