1 /* Linker command language support.
2 Copyright 1991, 1992 Free Software Foundation, Inc.
4 This file is part of GLD, the Gnu Linker.
6 GLD is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 1, or (at your option)
11 GLD is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GLD; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
36 static void print_statements PARAMS ((void));
37 static void print_statement PARAMS ((lang_statement_union_type *,
38 lang_output_section_statement_type *));
41 static struct obstack stat_obstack;
43 #define obstack_chunk_alloc ldmalloc
44 #define obstack_chunk_free free
45 static CONST char *startup_file;
46 static lang_statement_list_type input_file_chain;
48 /* Points to the last statement in the .data section, so we can add
49 stuff to the data section without pain */
50 static lang_statement_list_type end_of_data_section_statement_list;
52 /* List of statements needed to handle constructors */
53 extern lang_statement_list_type constructor_list;
55 static boolean placed_commons = false;
56 static lang_output_section_statement_type *default_common_section;
57 static boolean map_option_f;
58 static bfd_vma print_dot;
59 static lang_input_statement_type *first_file;
60 static lang_statement_list_type lang_output_section_statement;
61 static CONST char *current_target;
62 static CONST char *output_target;
63 static size_t longest_section_name = 8;
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 lang_add_data PARAMS ((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;
615 /* Be selective about what the output section inherits from the
618 section->output_section->flags |= section->flags & ~SEC_NEVER_LOAD;
620 if (!output->loadable)
622 /* Turn off load flag */
623 output->bfd_section->flags &= ~SEC_LOAD;
624 output->bfd_section->flags |= SEC_NEVER_LOAD;
626 if (section->alignment_power > output->bfd_section->alignment_power)
628 output->bfd_section->alignment_power = section->alignment_power;
630 /* If supplied an aligmnet, then force it */
631 if (output->section_alignment != -1)
633 output->bfd_section->alignment_power = output->section_alignment;
639 DEFUN (our_bfd_get_section_by_name, (abfd, section),
643 return bfd_get_section_by_name (abfd, section);
647 DEFUN (wild_section, (ptr, section, file, output),
648 lang_wild_statement_type * ptr AND
649 CONST char *section AND
650 lang_input_statement_type * file AND
651 lang_output_section_statement_type * output)
655 if (file->just_syms_flag == false)
657 if (section == (char *) NULL)
659 /* Do the creation to all sections in the file */
660 for (s = file->the_bfd->sections; s != (asection *) NULL; s = s->next)
663 if ((s->flags & SEC_IS_COMMON) == 0)
665 wild_doit (&ptr->children, s, output, file);
671 /* Do the creation to the named section only */
672 wild_doit (&ptr->children,
673 our_bfd_get_section_by_name (file->the_bfd, section),
679 /* passed a file name (which must have been seen already and added to
680 the statement tree. We will see if it has been opened already and
681 had its symbols read. If not then we'll read it.
683 Archives are pecuilar here. We may open them once, but if they do
684 not define anything we need at the time, they won't have all their
685 symbols read. If we need them later, we'll have to redo it.
688 lang_input_statement_type *
689 DEFUN (lookup_name, (name),
690 CONST char *CONST name)
692 lang_input_statement_type *search;
694 for (search = (lang_input_statement_type *) input_file_chain.head;
695 search != (lang_input_statement_type *) NULL;
696 search = (lang_input_statement_type *) search->next_real_file)
698 if (search->filename == (char *) NULL && name == (char *) NULL)
702 if (search->filename != (char *) NULL && name != (char *) NULL)
704 if (strcmp (search->filename, name) == 0)
706 ldmain_open_file_read_symbol (search);
712 /* There isn't an afile entry for this file yet, this must be
713 because the name has only appeared inside a load script and not
714 on the command line */
715 search = new_afile (name, lang_input_file_is_file_enum, default_target);
716 ldmain_open_file_read_symbol (search);
723 DEFUN (wild, (s, section, file, target, output),
724 lang_wild_statement_type * s AND
725 CONST char *CONST section AND
726 CONST char *CONST file AND
727 CONST char *CONST target AND
728 lang_output_section_statement_type * output)
730 lang_input_statement_type *f;
732 if (file == (char *) NULL)
734 /* Perform the iteration over all files in the list */
735 for (f = (lang_input_statement_type *) file_chain.head;
736 f != (lang_input_statement_type *) NULL;
737 f = (lang_input_statement_type *) f->next)
739 wild_section (s, section, f, output);
741 /* Once more for the script file */
742 wild_section(s, section, script_file, output);
746 /* Perform the iteration over a single file */
747 wild_section (s, section, lookup_name (file), output);
749 if (section != (char *) NULL
750 && strcmp (section, "COMMON") == 0
751 && default_common_section == (lang_output_section_statement_type *) NULL)
753 /* Remember the section that common is going to incase we later
754 get something which doesn't know where to put it */
755 default_common_section = output;
760 read in all the files
763 DEFUN (open_output, (name),
764 CONST char *CONST name)
766 extern unsigned long ldfile_output_machine;
767 extern enum bfd_architecture ldfile_output_architecture;
769 extern CONST char *output_filename;
772 if (output_target == (char *) NULL)
774 if (current_target != (char *) NULL)
775 output_target = current_target;
777 output_target = default_target;
779 output = bfd_openw (name, output_target);
780 output_filename = name;
782 if (output == (bfd *) NULL)
784 if (bfd_error == invalid_target)
786 einfo ("%P%F target %s not found\n", output_target);
788 einfo ("%P%F problem opening output file %s, %E\n", name);
791 /* output->flags |= D_PAGED;*/
793 bfd_set_format (output, bfd_object);
794 bfd_set_arch_mach (output,
795 ldfile_output_architecture,
796 ldfile_output_machine);
804 DEFUN (ldlang_open_output, (statement),
805 lang_statement_union_type * statement)
807 switch (statement->header.type)
809 case lang_output_statement_enum:
810 output_bfd = open_output (statement->output_statement.name);
811 ldemul_set_output_arch ();
812 if (config.magic_demand_paged && !config.relocateable_output)
813 output_bfd->flags |= D_PAGED;
815 output_bfd->flags &= ~D_PAGED;
816 if (config.text_read_only)
817 output_bfd->flags |= WP_TEXT;
819 output_bfd->flags &= ~WP_TEXT;
822 case lang_target_statement_enum:
823 current_target = statement->target_statement.target;
831 DEFUN (open_input_bfds, (statement),
832 lang_statement_union_type * statement)
834 switch (statement->header.type)
836 case lang_target_statement_enum:
837 current_target = statement->target_statement.target;
839 case lang_wild_statement_enum:
840 /* Maybe we should load the file's symbols */
841 if (statement->wild_statement.filename)
843 (void) lookup_name (statement->wild_statement.filename);
846 case lang_input_statement_enum:
847 if (statement->input_statement.real == true)
849 statement->input_statement.target = current_target;
850 lookup_name (statement->input_statement.filename);
858 /* If there are [COMMONS] statements, put a wild one into the bss section */
861 lang_reasonable_defaults ()
867 lang_output_section_statement_lookup (".text");
868 lang_output_section_statement_lookup (".data");
870 default_common_section =
871 lang_output_section_statement_lookup (".bss");
874 if (placed_commons == false)
876 lang_wild_statement_type *new =
877 new_stat (lang_wild_statement,
878 &default_common_section->children);
880 new->section_name = "COMMON";
881 new->filename = (char *) NULL;
882 lang_list_init (&new->children);
889 Add the supplied name to the symbol table as an undefined reference.
890 Remove items from the chain as we open input bfds
892 typedef struct ldlang_undef_chain_list
894 struct ldlang_undef_chain_list *next;
896 } ldlang_undef_chain_list_type;
898 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
901 DEFUN (ldlang_add_undef, (name),
902 CONST char *CONST name)
904 ldlang_undef_chain_list_type *new =
905 (ldlang_undef_chain_list_type
906 *) stat_alloc ((bfd_size_type) (sizeof (ldlang_undef_chain_list_type)));
908 new->next = ldlang_undef_chain_list_head;
909 ldlang_undef_chain_list_head = new;
911 new->name = buystring (name);
914 /* Run through the list of undefineds created above and place them
915 into the linker hash table as undefined symbols belonging to the
919 DEFUN_VOID (lang_place_undefineds)
921 ldlang_undef_chain_list_type *ptr = ldlang_undef_chain_list_head;
923 while (ptr != (ldlang_undef_chain_list_type *) NULL)
926 asymbol **def_ptr = (asymbol **) stat_alloc ((bfd_size_type) (sizeof (asymbol **)));
928 def = (asymbol *) bfd_make_empty_symbol (script_file->the_bfd);
930 def->name = ptr->name;
931 def->section = &bfd_und_section;
932 Q_enter_global_ref (def_ptr, ptr->name);
937 /* Copy important data from out internal form to the bfd way. Also
938 create a section for the dummy file
942 DEFUN_VOID (lang_create_output_section_statements)
944 lang_statement_union_type *os;
946 for (os = lang_output_section_statement.head;
947 os != (lang_statement_union_type *) NULL;
948 os = os->output_section_statement.next)
950 lang_output_section_statement_type *s =
951 &os->output_section_statement;
959 DEFUN_VOID (lang_init_script_file)
961 script_file = lang_add_input_file ("command line",
962 lang_input_file_is_fake_enum,
964 script_file->the_bfd = bfd_create ("command line", output_bfd);
965 script_file->symbol_count = 0;
966 script_file->the_bfd->sections = 0;
968 /* The user data of a bfd points to the input statement attatched */
969 script_file->the_bfd->usrdata = (void *)script_file;
970 script_file->common_section =
971 bfd_make_section(script_file->the_bfd,"COMMON");
974 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
976 abs_output_section->bfd_section = &bfd_abs_section;
980 /* Open input files and attatch to output sections */
982 DEFUN (map_input_to_output_sections, (s, target, output_section_statement),
983 lang_statement_union_type * s AND
984 CONST char *target AND
985 lang_output_section_statement_type * output_section_statement)
987 for (; s != (lang_statement_union_type *) NULL; s = s->next)
989 switch (s->header.type)
993 case lang_wild_statement_enum:
994 wild (&s->wild_statement, s->wild_statement.section_name,
995 s->wild_statement.filename, target,
996 output_section_statement);
999 case lang_constructors_statement_enum:
1000 map_input_to_output_sections (constructor_list.head,
1002 output_section_statement);
1004 case lang_output_section_statement_enum:
1005 map_input_to_output_sections (s->output_section_statement.children.head,
1007 &s->output_section_statement);
1009 case lang_output_statement_enum:
1011 case lang_target_statement_enum:
1012 target = s->target_statement.target;
1014 case lang_fill_statement_enum:
1015 case lang_input_section_enum:
1016 case lang_object_symbols_statement_enum:
1017 case lang_data_statement_enum:
1018 case lang_assignment_statement_enum:
1019 case lang_padding_statement_enum:
1021 case lang_afile_asection_pair_statement_enum:
1024 case lang_address_statement_enum:
1025 /* Mark the specified section with the supplied address */
1027 lang_output_section_statement_type *os =
1028 lang_output_section_statement_lookup
1029 (s->address_statement.section_name);
1031 os->addr_tree = s->address_statement.address;
1032 if (os->bfd_section == (asection *) NULL)
1034 einfo ("%P%F can't set the address of undefined section %s\n",
1035 s->address_statement.section_name);
1039 case lang_input_statement_enum:
1040 /* A standard input statement, has no wildcards */
1041 /* ldmain_open_file_read_symbol(&s->input_statement);*/
1052 DEFUN (print_output_section_statement, (output_section_statement),
1053 lang_output_section_statement_type * output_section_statement)
1055 asection *section = output_section_statement->bfd_section;
1058 print_section (output_section_statement->name);
1063 print_dot = section->vma;
1067 print_address (section->vma);
1069 print_size (section->_raw_size);
1071 print_size(section->_cooked_size);
1073 print_alignment (section->alignment_power);
1076 fprintf (config.map_file, "%s flags", output_section_statement->region->name);
1077 print_flags (stdout, &output_section_statement->flags);
1079 if (section->flags & SEC_LOAD)
1080 fprintf (config.map_file, "load ");
1081 if (section->flags & SEC_ALLOC)
1082 fprintf (config.map_file, "alloc ");
1083 if (section->flags & SEC_RELOC)
1084 fprintf (config.map_file, "reloc ");
1085 if (section->flags & SEC_HAS_CONTENTS)
1086 fprintf (config.map_file, "contents ");
1091 fprintf (config.map_file, "No attached output section");
1094 if (output_section_statement->section_alignment >= 0
1095 || output_section_statement->section_alignment >= 0)
1097 printf("\t\t\t\t\tforced alignment ");
1098 if ( output_section_statement->section_alignment >= 0)
1100 printf("section 2**%d ",output_section_statement->section_alignment );
1102 if ( output_section_statement->subsection_alignment >= 0)
1104 printf("subsection 2**%d ",output_section_statement->subsection_alignment );
1109 print_statement (output_section_statement->children.head,
1110 output_section_statement);
1115 DEFUN (print_assignment, (assignment, output_section),
1116 lang_assignment_statement_type * assignment AND
1117 lang_output_section_statement_type * output_section)
1119 etree_value_type result;
1125 print_address (print_dot);
1127 result = exp_fold_tree (assignment->exp->assign.src,
1129 lang_final_phase_enum,
1135 print_address (result.value);
1139 fprintf (config.map_file, "*undefined*");
1142 exp_print_tree (assignment->exp);
1144 fprintf (config.map_file, "\n");
1148 DEFUN (print_input_statement, (statm),
1149 lang_input_statement_type * statm)
1151 if (statm->filename != (char *) NULL)
1153 fprintf (config.map_file, "LOAD %s\n", statm->filename);
1158 DEFUN (print_symbol, (q),
1162 fprintf (config.map_file, " ");
1164 fprintf (config.map_file, " ");
1165 print_address (outside_symbol_address (q));
1166 fprintf (config.map_file, " %s", q->name ? q->name : " ");
1171 DEFUN (print_input_section, (in),
1172 lang_input_section_type * in)
1174 asection *i = in->section;
1175 int size = i->reloc_done ?
1176 bfd_get_section_size_after_reloc (i) :
1177 bfd_get_section_size_before_reloc (i);
1182 fprintf (config.map_file, " ");
1183 print_section (i->name);
1184 fprintf (config.map_file, " ");
1185 if (i->output_section)
1187 print_address (i->output_section->vma + i->output_offset);
1188 fprintf (config.map_file, " ");
1189 print_size (i->_raw_size);
1190 fprintf (config.map_file, " ");
1191 print_size(i->_cooked_size);
1192 fprintf (config.map_file, " ");
1193 print_alignment (i->alignment_power);
1194 fprintf (config.map_file, " ");
1198 bfd *abfd = in->ifile->the_bfd;
1200 if (in->ifile->just_syms_flag == true)
1202 fprintf (config.map_file, "symbols only ");
1205 fprintf (config.map_file, " %s ", abfd->xvec->name);
1206 if (abfd->my_archive != (bfd *) NULL)
1208 fprintf (config.map_file, "[%s]%s", abfd->my_archive->filename,
1213 fprintf (config.map_file, "%s", abfd->filename);
1215 fprintf (config.map_file, "(overhead %d bytes)", (int) bfd_alloc_size (abfd));
1218 /* Find all the symbols in this file defined in this section */
1220 if (in->ifile->symbol_count)
1224 for (p = in->ifile->asymbols; *p; p++)
1228 if (bfd_get_section (q) == i && q->flags & BSF_GLOBAL)
1241 print_dot = outside_section_address (i) + size;
1245 fprintf (config.map_file, "No output section allocated\n");
1251 DEFUN (print_fill_statement, (fill),
1252 lang_fill_statement_type * fill)
1254 fprintf (config.map_file, "FILL mask ");
1255 print_fill (fill->fill);
1259 DEFUN (print_data_statement, (data),
1260 lang_data_statement_type * data)
1262 /* bfd_vma value; */
1267 /* ASSERT(print_dot == data->output_vma);*/
1269 print_address (data->output_vma + data->output_section->vma);
1271 print_address (data->value);
1276 fprintf (config.map_file, "BYTE ");
1277 print_dot += BYTE_SIZE;
1280 fprintf (config.map_file, "SHORT ");
1281 print_dot += SHORT_SIZE;
1284 fprintf (config.map_file, "LONG ");
1285 print_dot += LONG_SIZE;
1289 exp_print_tree (data->exp);
1291 fprintf (config.map_file, "\n");
1296 DEFUN (print_padding_statement, (s),
1297 lang_padding_statement_type * s)
1301 print_section ("*fill*");
1303 print_address (s->output_offset + s->output_section->vma);
1305 print_size (s->size);
1307 print_fill (s->fill);
1310 print_dot = s->output_offset + s->output_section->vma + s->size;
1315 DEFUN (print_wild_statement, (w, os),
1316 lang_wild_statement_type * w AND
1317 lang_output_section_statement_type * os)
1319 fprintf (config.map_file, " from ");
1320 if (w->filename != (char *) NULL)
1322 fprintf (config.map_file, "%s", w->filename);
1326 fprintf (config.map_file, "*");
1328 if (w->section_name != (char *) NULL)
1330 fprintf (config.map_file, "(%s)", w->section_name);
1334 fprintf (config.map_file, "(*)");
1337 print_statement (w->children.head, os);
1341 DEFUN (print_statement, (s, os),
1342 lang_statement_union_type * s AND
1343 lang_output_section_statement_type * os)
1347 switch (s->header.type)
1349 case lang_constructors_statement_enum:
1350 fprintf (config.map_file, "constructors:\n");
1351 print_statement (constructor_list.head, os);
1353 case lang_wild_statement_enum:
1354 print_wild_statement (&s->wild_statement, os);
1357 fprintf (config.map_file, "Fail with %d\n", s->header.type);
1360 case lang_address_statement_enum:
1361 fprintf (config.map_file, "address\n");
1363 case lang_object_symbols_statement_enum:
1364 fprintf (config.map_file, "object symbols\n");
1366 case lang_fill_statement_enum:
1367 print_fill_statement (&s->fill_statement);
1369 case lang_data_statement_enum:
1370 print_data_statement (&s->data_statement);
1372 case lang_input_section_enum:
1373 print_input_section (&s->input_section);
1375 case lang_padding_statement_enum:
1376 print_padding_statement (&s->padding_statement);
1378 case lang_output_section_statement_enum:
1379 print_output_section_statement (&s->output_section_statement);
1381 case lang_assignment_statement_enum:
1382 print_assignment (&s->assignment_statement,
1385 case lang_target_statement_enum:
1386 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
1388 case lang_output_statement_enum:
1389 fprintf (config.map_file, "OUTPUT(%s %s)\n",
1390 s->output_statement.name,
1391 output_target ? output_target : "");
1393 case lang_input_statement_enum:
1394 print_input_statement (&s->input_statement);
1396 case lang_afile_asection_pair_statement_enum:
1406 DEFUN_VOID (print_statements)
1408 print_statement (statement_list.head,
1409 abs_output_section);
1414 DEFUN (insert_pad, (this_ptr, fill, power, output_section_statement, dot),
1415 lang_statement_union_type ** this_ptr AND
1417 unsigned int power AND
1418 asection * output_section_statement AND
1421 /* Align this section first to the
1422 input sections requirement, then
1423 to the output section's requirement.
1424 If this alignment is > than any seen before,
1425 then record it too. Perform the alignment by
1426 inserting a magic 'padding' statement.
1429 unsigned int alignment_needed = align_power (dot, power) - dot;
1431 if (alignment_needed != 0)
1433 lang_statement_union_type *new =
1434 (lang_statement_union_type *)
1435 stat_alloc ((bfd_size_type) (sizeof (lang_padding_statement_type)));
1437 /* Link into existing chain */
1438 new->header.next = *this_ptr;
1440 new->header.type = lang_padding_statement_enum;
1441 new->padding_statement.output_section = output_section_statement;
1442 new->padding_statement.output_offset =
1443 dot - output_section_statement->vma;
1444 new->padding_statement.fill = fill;
1445 new->padding_statement.size = alignment_needed;
1449 /* Remember the most restrictive alignment */
1450 if (power > output_section_statement->alignment_power)
1452 output_section_statement->alignment_power = power;
1454 output_section_statement->_raw_size += alignment_needed;
1455 return alignment_needed + dot;
1459 /* Work out how much this section will move the dot point */
1461 DEFUN (size_input_section, (this_ptr, output_section_statement, fill,
1463 lang_statement_union_type ** this_ptr AND
1464 lang_output_section_statement_type * output_section_statement AND
1465 unsigned short fill AND
1469 lang_input_section_type *is = &((*this_ptr)->input_section);
1470 asection *i = is->section;
1472 if (is->ifile->just_syms_flag == false)
1474 if (output_section_statement->subsection_alignment != -1)
1475 i->alignment_power =
1476 output_section_statement->subsection_alignment;
1478 dot = insert_pad (this_ptr, fill, i->alignment_power,
1479 output_section_statement->bfd_section, dot);
1481 /* remember the largest size so we can malloc the largest area
1482 needed for the output stage. Only remember the size of sections
1483 which we will actually allocate */
1485 (SEC_HAS_CONTENTS | SEC_ALLOC)) == (SEC_HAS_CONTENTS | SEC_ALLOC))
1486 && (bfd_get_section_size_before_reloc (i) > largest_section))
1488 largest_section = bfd_get_section_size_before_reloc (i);
1491 /* Remember where in the output section this input section goes */
1493 i->output_offset = dot - output_section_statement->bfd_section->vma;
1495 /* Mark how big the output section must be to contain this now
1499 dot += i->_cooked_size;
1503 dot += i->_raw_size;
1505 output_section_statement->bfd_section->_raw_size = dot - output_section_statement->bfd_section->vma;
1509 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
1515 /* Sizing happens in two passes, first pass we allocate worst case
1516 stuff. The second pass (if relaxing), we use what we learnt to
1517 change the size of some relocs from worst case to better
1519 static boolean had_relax;
1522 DEFUN (lang_size_sections, (s, output_section_statement, prev, fill,
1524 lang_statement_union_type * s AND
1525 lang_output_section_statement_type * output_section_statement AND
1526 lang_statement_union_type ** prev AND
1527 unsigned short fill AND
1531 /* Size up the sections from their constituent parts */
1532 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1534 switch (s->header.type)
1537 case lang_output_section_statement_enum:
1540 lang_output_section_statement_type *os = &s->output_section_statement;
1542 /* If this is a shared library section, don't change the size
1544 if (os->bfd_section->flags & SEC_SHARED_LIBRARY)
1547 if (os->bfd_section == &bfd_abs_section)
1549 /* No matter what happens, an abs section starts at zero */
1550 bfd_set_section_vma (0, os->bfd_section, 0);
1554 if (os->addr_tree == (etree_type *) NULL)
1556 /* No address specified for this section, get one
1557 from the region specification
1559 if (os->region == (lang_memory_region_type *) NULL)
1561 os->region = lang_memory_region_lookup ("*default*");
1563 dot = os->region->current;
1569 r = exp_fold_tree (os->addr_tree,
1571 lang_allocating_phase_enum,
1573 if (r.valid == false)
1575 einfo ("%F%S: non constant address expression for section %s\n",
1580 /* The section starts here */
1581 /* First, align to what the section needs */
1584 dot = align_power (dot, os->bfd_section->alignment_power);
1585 bfd_set_section_vma (0, os->bfd_section, dot);
1589 os->bfd_section->output_offset = 0;
1591 (void) lang_size_sections (os->children.head, os, &os->children.head,
1592 os->fill, dot, relax);
1593 /* Ignore the size of the input sections, use the vma and size to */
1597 after = ALIGN (os->bfd_section->vma +
1598 os->bfd_section->_raw_size,
1602 os->bfd_section->_raw_size = after - os->bfd_section->vma;
1603 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1604 os->processed = true;
1606 /* Replace into region ? */
1607 if (os->addr_tree == (etree_type *) NULL
1608 && os->region != (lang_memory_region_type *) NULL)
1610 os->region->current = dot;
1611 /* Make sure this isn't silly */
1612 if (os->region->current >
1613 os->region->origin +
1616 einfo ("%X%P: Region %s is full (%B section %s)\n",
1618 os->bfd_section->owner,
1619 os->bfd_section->name);
1620 /* Reset the region pointer */
1621 os->region->current = 0;
1629 case lang_constructors_statement_enum:
1630 dot = lang_size_sections (constructor_list.head,
1631 output_section_statement,
1632 &s->wild_statement.children.head,
1637 case lang_data_statement_enum:
1639 unsigned int size = 0;
1641 s->data_statement.output_vma = dot - output_section_statement->bfd_section->vma;
1642 s->data_statement.output_section =
1643 output_section_statement->bfd_section;
1645 switch (s->data_statement.type)
1659 output_section_statement->bfd_section->_raw_size += size;
1663 case lang_wild_statement_enum:
1665 dot = lang_size_sections (s->wild_statement.children.head,
1666 output_section_statement,
1667 &s->wild_statement.children.head,
1673 case lang_object_symbols_statement_enum:
1674 create_object_symbols = output_section_statement;
1676 case lang_output_statement_enum:
1677 case lang_target_statement_enum:
1679 case lang_input_section_enum:
1684 if( relax_section (prev))
1690 (*prev)->input_section.section->_cooked_size =
1691 (*prev)->input_section.section->_raw_size ;
1694 dot = size_input_section (prev,
1695 output_section_statement,
1696 output_section_statement->fill,
1699 case lang_input_statement_enum:
1701 case lang_fill_statement_enum:
1702 s->fill_statement.output_section = output_section_statement->bfd_section;
1704 fill = s->fill_statement.fill;
1706 case lang_assignment_statement_enum:
1708 bfd_vma newdot = dot;
1710 exp_fold_tree (s->assignment_statement.exp,
1711 output_section_statement,
1712 lang_allocating_phase_enum,
1716 if (newdot != dot && !relax)
1717 /* We've been moved ! so insert a pad */
1719 lang_statement_union_type *new =
1720 (lang_statement_union_type *)
1721 stat_alloc ((bfd_size_type) (sizeof (lang_padding_statement_type)));
1723 /* Link into existing chain */
1724 new->header.next = *prev;
1726 new->header.type = lang_padding_statement_enum;
1727 new->padding_statement.output_section =
1728 output_section_statement->bfd_section;
1729 new->padding_statement.output_offset =
1730 dot - output_section_statement->bfd_section->vma;
1731 new->padding_statement.fill = fill;
1732 new->padding_statement.size = newdot - dot;
1733 output_section_statement->bfd_section->_raw_size +=
1734 new->padding_statement.size;
1743 /* This can only get here when relaxing is turned on */
1744 case lang_padding_statement_enum:
1746 case lang_address_statement_enum:
1749 prev = &s->header.next;
1755 DEFUN (lang_do_assignments, (s, output_section_statement, fill, dot),
1756 lang_statement_union_type * s AND
1757 lang_output_section_statement_type * output_section_statement AND
1758 unsigned short fill AND
1762 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1764 switch (s->header.type)
1766 case lang_constructors_statement_enum:
1767 dot = lang_do_assignments (constructor_list.head,
1768 output_section_statement,
1773 case lang_output_section_statement_enum:
1775 lang_output_section_statement_type *os =
1776 &(s->output_section_statement);
1778 dot = os->bfd_section->vma;
1779 (void) lang_do_assignments (os->children.head, os, os->fill, dot);
1780 dot = os->bfd_section->vma + os->bfd_section->_raw_size;
1783 case lang_wild_statement_enum:
1785 dot = lang_do_assignments (s->wild_statement.children.head,
1786 output_section_statement,
1791 case lang_object_symbols_statement_enum:
1792 case lang_output_statement_enum:
1793 case lang_target_statement_enum:
1795 case lang_common_statement_enum:
1798 case lang_data_statement_enum:
1800 etree_value_type value;
1802 value = exp_fold_tree (s->data_statement.exp,
1804 lang_final_phase_enum, dot, &dot);
1805 s->data_statement.value = value.value;
1806 if (value.valid == false)
1807 einfo ("%F%P: Invalid data statement\n");
1809 switch (s->data_statement.type)
1822 case lang_input_section_enum:
1824 asection *in = s->input_section.section;
1826 dot += bfd_get_section_size_before_reloc (in);
1830 case lang_input_statement_enum:
1832 case lang_fill_statement_enum:
1833 fill = s->fill_statement.fill;
1835 case lang_assignment_statement_enum:
1837 exp_fold_tree (s->assignment_statement.exp,
1838 output_section_statement,
1839 lang_final_phase_enum,
1845 case lang_padding_statement_enum:
1846 dot += s->padding_statement.size;
1851 case lang_address_statement_enum:
1862 DEFUN_VOID (lang_relocate_globals)
1866 Each ldsym_type maintains a chain of pointers to asymbols which
1867 references the definition. Replace each pointer to the referenence
1868 with a pointer to only one place, preferably the definition. If
1869 the defintion isn't available then the common symbol, and if
1870 there isn't one of them then choose one reference.
1873 FOR_EACH_LDSYM (lgs)
1877 if (lgs->sdefs_chain)
1879 it = *(lgs->sdefs_chain);
1881 else if (lgs->scoms_chain != (asymbol **) NULL)
1883 it = *(lgs->scoms_chain);
1885 else if (lgs->srefs_chain != (asymbol **) NULL)
1887 it = *(lgs->srefs_chain);
1891 /* This can happen when the command line asked for a symbol to
1893 it = (asymbol *) NULL;
1895 if (it != (asymbol *) NULL)
1898 asymbol **ptr = lgs->srefs_chain;;
1899 if (lgs->flags & SYM_WARNING)
1901 produce_warnings (lgs, it);
1904 while (ptr != (asymbol **) NULL
1907 asymbol *ref = *ptr;
1910 ptr = (asymbol **) (ref->udata);
1919 DEFUN_VOID (lang_finish)
1922 int warn = config.relocateable_output != true;
1923 if (entry_symbol == (char *) NULL)
1925 /* No entry has been specified, look for start, but don't warn */
1926 entry_symbol = "start";
1929 lgs = ldsym_get_soft (entry_symbol);
1930 if (lgs && lgs->sdefs_chain)
1932 asymbol *sy = *(lgs->sdefs_chain);
1934 /* We can set the entry address*/
1935 bfd_set_start_address (output_bfd,
1936 outside_symbol_address (sy));
1941 /* Can't find anything reasonable,
1942 use the first address in the text section
1944 asection *ts = bfd_get_section_by_name (output_bfd, ".text");
1948 einfo ("%P: Warning, can't find entry symbol %s, defaulting to %V\n",
1949 entry_symbol, ts->vma);
1951 bfd_set_start_address (output_bfd, ts->vma);
1956 einfo ("%P: Warning, can't find entry symbol %s, not setting start address\n",
1962 /* By now we know the target architecture, and we may have an */
1963 /* ldfile_output_machine_name */
1965 DEFUN_VOID (lang_check)
1967 lang_statement_union_type *file;
1969 unsigned long input_machine;
1970 enum bfd_architecture input_architecture;
1971 CONST bfd_arch_info_type *compatible;
1973 for (file = file_chain.head;
1974 file != (lang_statement_union_type *) NULL;
1975 file = file->input_statement.next)
1977 input_bfd = file->input_statement.the_bfd;
1979 input_machine = bfd_get_mach (input_bfd);
1980 input_architecture = bfd_get_arch (input_bfd);
1983 /* Inspect the architecture and ensure we're linking like with
1986 compatible = bfd_arch_get_compatible (input_bfd,
1991 ldfile_output_machine = compatible->mach;
1992 ldfile_output_architecture = compatible->arch;
1997 info ("%P: warning, %s architecture of input file `%B' incompatible with %s output\n",
1998 bfd_printable_name (input_bfd), input_bfd,
1999 bfd_printable_name (output_bfd));
2001 bfd_set_arch_mach (output_bfd,
2010 * run through all the global common symbols and tie them
2011 * to the output section requested.
2013 As an experiment we do this 4 times, once for all the byte sizes,
2014 then all the two bytes, all the four bytes and then everything else
2018 DEFUN_VOID (lang_common)
2023 if (config.relocateable_output == false ||
2024 command_line.force_common_definition == true)
2026 for (power = 1; (config.sort_common == true && power == 1) || (power <= 16); power <<= 1)
2028 for (lgs = symbol_head;
2029 lgs != (ldsym_type *) NULL;
2033 unsigned int power_of_two;
2037 if (lgs->scoms_chain != (asymbol **) NULL)
2039 com = *(lgs->scoms_chain);
2069 if (config.sort_common == false || align == power)
2073 /* Change from a common symbol into a definition of
2075 lgs->sdefs_chain = lgs->scoms_chain;
2076 lgs->scoms_chain = (asymbol **) NULL;
2079 /* Point to the correct common section */
2080 symbfd = bfd_asymbol_bfd (com);
2081 if (com->section == &bfd_com_section)
2083 ((lang_input_statement_type *) symbfd->usrdata)
2090 name = bfd_get_section_name (symbfd,
2092 newsec = bfd_get_section_by_name (symbfd,
2094 /* BFD backend must provide this section. */
2095 if (newsec == (asection *) NULL)
2096 einfo ("%P%F: No output section %s", name);
2097 com->section = newsec;
2100 /* Fix the size of the common section */
2102 com->section->_raw_size =
2103 ALIGN (com->section->_raw_size, align);
2105 /* Remember if this is the biggest alignment ever seen */
2106 if (power_of_two > com->section->alignment_power)
2108 com->section->alignment_power = power_of_two;
2111 /* Symbol stops being common and starts being global, but
2112 we remember that it was common once. */
2114 com->flags = BSF_EXPORT | BSF_GLOBAL | BSF_OLD_COMMON;
2115 com->value = com->section->_raw_size;
2117 if (write_map && config.map_file)
2119 fprintf (config.map_file, "Allocating common %s: %x at %x %s\n",
2122 (unsigned) com->value,
2123 bfd_asymbol_bfd(com)->filename);
2126 com->section->_raw_size += size;
2139 run through the input files and ensure that every input
2140 section has somewhere to go. If one is found without
2141 a destination then create an input request and place it
2142 into the statement tree.
2146 DEFUN_VOID (lang_place_orphans)
2148 lang_input_statement_type *file;
2150 for (file = (lang_input_statement_type *) file_chain.head;
2151 file != (lang_input_statement_type *) NULL;
2152 file = (lang_input_statement_type *) file->next)
2156 for (s = file->the_bfd->sections;
2157 s != (asection *) NULL;
2160 if (s->output_section == (asection *) NULL)
2162 /* This section of the file is not attatched, root
2163 around for a sensible place for it to go */
2165 if (file->common_section == s)
2167 /* This is a lonely common section which must
2168 have come from an archive. We attatch to the
2169 section with the wildcard */
2170 if (config.relocateable_output != true
2171 && command_line.force_common_definition == false)
2173 if (default_common_section ==
2174 (lang_output_section_statement_type *) NULL)
2176 info ("%P: No [COMMON] command, defaulting to .bss\n");
2178 default_common_section =
2179 lang_output_section_statement_lookup (".bss");
2182 wild_doit (&default_common_section->children, s,
2183 default_common_section, file);
2188 lang_output_section_statement_type *os =
2189 lang_output_section_statement_lookup (s->name);
2191 wild_doit (&os->children, s, os, file);
2200 DEFUN (lang_set_flags, (ptr, flags),
2204 boolean state = false;
2219 /* ptr->flag_read = state; */
2222 /* ptr->flag_write = state; */
2225 /* ptr->flag_executable= state;*/
2229 /* ptr->flag_loadable= state;*/
2232 einfo ("%P%F illegal syntax in flags\n");
2242 DEFUN (lang_for_each_file, (func),
2243 void (*func) PARAMS ((lang_input_statement_type *)))
2245 lang_input_statement_type *f;
2247 for (f = (lang_input_statement_type *) file_chain.head;
2248 f != (lang_input_statement_type *) NULL;
2249 f = (lang_input_statement_type *) f->next)
2257 DEFUN (lang_for_each_input_section, (func),
2258 void (*func) PARAMS ((bfd * ab, asection * as)))
2260 lang_input_statement_type *f;
2262 for (f = (lang_input_statement_type *) file_chain.head;
2263 f != (lang_input_statement_type *) NULL;
2264 f = (lang_input_statement_type *) f->next)
2268 for (s = f->the_bfd->sections;
2269 s != (asection *) NULL;
2272 func (f->the_bfd, s);
2280 DEFUN (ldlang_add_file, (entry),
2281 lang_input_statement_type * entry)
2284 lang_statement_append (&file_chain,
2285 (lang_statement_union_type *) entry,
2290 DEFUN (lang_add_output, (name),
2293 lang_output_statement_type *new = new_stat (lang_output_statement,
2297 had_output_filename = true;
2301 static lang_output_section_statement_type *current_section;
2303 static int topower(x)
2308 if (x < 0) return -1;
2309 for (l = 0; l < 32; l++)
2311 if (i >= x) return l;
2317 DEFUN (lang_enter_output_section_statement,
2318 (output_section_statement_name,
2323 char *output_section_statement_name AND
2324 etree_type * address_exp AND
2326 bfd_vma block_value AND
2327 etree_type *align AND
2328 etree_type *subalign)
2330 lang_output_section_statement_type *os;
2334 lang_output_section_statement_lookup (output_section_statement_name);
2338 /* Add this statement to tree */
2339 /* add_statement(lang_output_section_statement_enum,
2340 output_section_statement);*/
2341 /* Make next things chain into subchain of this */
2343 if (os->addr_tree ==
2344 (etree_type *) NULL)
2350 if (flags & SEC_NEVER_LOAD)
2354 os->block_value = block_value ? block_value : 1;
2355 stat_ptr = &os->children;
2357 os->subsection_alignment = topower(
2358 exp_get_value_int(subalign, -1,
2359 "subsection alignment",
2361 os->section_alignment = topower(
2362 exp_get_value_int(align, -1,
2363 "section alignment", 0));
2367 DEFUN_VOID (lang_final)
2369 if (had_output_filename == false)
2371 extern CONST char *output_filename;
2373 lang_add_output (output_filename);
2377 /* Reset the current counters in the regions */
2379 DEFUN_VOID (reset_memory_regions)
2381 lang_memory_region_type *p = lang_memory_region_list;
2383 for (p = lang_memory_region_list;
2384 p != (lang_memory_region_type *) NULL;
2387 p->old_length = p->current - p->origin;
2388 p->current = p->origin;
2395 DEFUN (create_symbol, (name, flags, section),
2396 CONST char *name AND
2400 extern lang_input_statement_type *script_file;
2401 asymbol **def_ptr = (asymbol **) stat_alloc ((bfd_size_type) (sizeof (asymbol **)));
2403 /* Add this definition to script file */
2404 asymbol *def = (asymbol *) bfd_make_empty_symbol (script_file->the_bfd);
2405 def->name = buystring (name);
2408 def->section = section;
2410 Q_enter_global_ref (def_ptr, name);
2415 DEFUN_VOID (lang_process)
2418 if (had_script == false)
2420 parse_line (ldemul_get_script (), 1);
2422 lang_reasonable_defaults ();
2423 current_target = default_target;
2425 lang_for_each_statement (ldlang_open_output); /* Open the output file */
2426 /* For each output section statement, create a section in the output
2428 lang_create_output_section_statements ();
2430 /* Create a dummy bfd for the script */
2431 lang_init_script_file ();
2433 /* Add to the hash table all undefineds on the command line */
2434 lang_place_undefineds ();
2436 /* Create a bfd for each input file */
2437 current_target = default_target;
2438 lang_for_each_statement (open_input_bfds);
2440 /* Run through the contours of the script and attatch input sections
2441 to the correct output sections
2443 find_constructors ();
2444 map_input_to_output_sections (statement_list.head, (char *) NULL,
2445 (lang_output_section_statement_type *) NULL);
2448 /* Find any sections not attatched explicitly and handle them */
2449 lang_place_orphans ();
2451 /* Size up the common data */
2454 ldemul_before_allocation ();
2464 lang_size_sections (statement_list.head,
2465 (lang_output_section_statement_type *) NULL,
2466 &(statement_list.head), 0, (bfd_vma) 0, true);
2467 /* FIXME. Until the code in relax is fixed so that it only reads in
2468 stuff once, we cant iterate since there is no way for the linker to
2469 know what has been patched and what hasn't */
2475 /* Now run around and relax if we can */
2476 if (command_line.relax)
2478 /* First time round is a trial run to get the 'worst case' addresses of the
2479 objects if there was no relaxing */
2480 lang_size_sections (statement_list.head,
2481 (lang_output_section_statement_type *) NULL,
2482 &(statement_list.head), 0, (bfd_vma) 0, false);
2486 /* Move the global symbols around so the second pass of relaxing can
2488 lang_relocate_globals ();
2490 reset_memory_regions ();
2492 /* Do all the assignments, now that we know the final restingplaces
2493 of all the symbols */
2495 lang_do_assignments (statement_list.head,
2500 /* Perform another relax pass - this time we know where the
2501 globals are, so can make better guess */
2502 lang_size_sections (statement_list.head,
2503 (lang_output_section_statement_type *) NULL,
2504 &(statement_list.head), 0, (bfd_vma) 0, true);
2512 /* Size up the sections */
2513 lang_size_sections (statement_list.head,
2515 &(statement_list.head), 0, (bfd_vma) 0, false);
2520 /* See if anything special should be done now we know how big
2522 ldemul_after_allocation ();
2524 /* Do all the assignments, now that we know the final restingplaces
2525 of all the symbols */
2527 lang_do_assignments (statement_list.head,
2532 /* Move the global symbols around */
2533 lang_relocate_globals ();
2535 /* Make sure that we're not mixing architectures */
2543 /* EXPORTED TO YACC */
2546 DEFUN (lang_add_wild, (section_name, filename),
2547 CONST char *CONST section_name AND
2548 CONST char *CONST filename)
2550 lang_wild_statement_type *new = new_stat (lang_wild_statement,
2553 if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
2555 placed_commons = true;
2557 if (filename != (char *) NULL)
2559 lang_has_input_file = true;
2561 new->section_name = section_name;
2562 new->filename = filename;
2563 lang_list_init (&new->children);
2567 DEFUN (lang_section_start, (name, address),
2568 CONST char *name AND
2569 etree_type * address)
2571 lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
2573 ad->section_name = name;
2574 ad->address = address;
2578 DEFUN (lang_add_entry, (name),
2581 entry_symbol = name;
2585 DEFUN (lang_add_target, (name),
2588 lang_target_statement_type *new = new_stat (lang_target_statement,
2596 DEFUN (lang_add_map, (name),
2604 map_option_f = true;
2612 DEFUN (lang_add_fill, (exp),
2615 lang_fill_statement_type *new = new_stat (lang_fill_statement,
2622 DEFUN (lang_add_data, (type, exp),
2624 union etree_union *exp)
2627 lang_data_statement_type *new = new_stat (lang_data_statement,
2636 DEFUN (lang_add_assignment, (exp),
2639 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
2646 DEFUN (lang_add_attribute, (attribute),
2647 enum statement_enum attribute)
2649 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
2653 DEFUN (lang_startup, (name),
2656 if (startup_file != (char *) NULL)
2658 einfo ("%P%FMultiple STARTUP files\n");
2660 first_file->filename = name;
2661 first_file->local_sym_name = name;
2663 startup_file = name;
2667 DEFUN (lang_float, (maybe),
2670 lang_float_flag = maybe;
2674 DEFUN (lang_leave_output_section_statement, (fill, memspec),
2676 CONST char *memspec)
2678 current_section->fill = fill;
2679 current_section->region = lang_memory_region_lookup (memspec);
2680 stat_ptr = &statement_list;
2682 /* We remember if we are closing a .data section, since we use it to
2683 store constructors in */
2684 if (strcmp (current_section->name, ".data") == 0)
2686 end_of_data_section_statement_list = statement_list;
2692 Create an absolute symbol with the given name with the value of the
2693 address of first byte of the section named.
2695 If the symbol already exists, then do nothing.
2698 DEFUN (lang_abs_symbol_at_beginning_of, (section, name),
2699 CONST char *section AND
2702 if (ldsym_undefined (name))
2704 asection *s = bfd_get_section_by_name (output_bfd, section);
2705 asymbol *def = create_symbol (name,
2706 BSF_GLOBAL | BSF_EXPORT,
2709 if (s != (asection *) NULL)
2711 def->value = s->vma;
2721 Create an absolute symbol with the given name with the value of the
2722 address of the first byte after the end of the section named.
2724 If the symbol already exists, then do nothing.
2727 DEFUN (lang_abs_symbol_at_end_of, (section, name),
2728 CONST char *section AND
2731 if (ldsym_undefined (name))
2733 asection *s = bfd_get_section_by_name (output_bfd, section);
2735 /* Add a symbol called _end */
2736 asymbol *def = create_symbol (name,
2737 BSF_GLOBAL | BSF_EXPORT,
2740 if (s != (asection *) NULL)
2742 def->value = s->vma + s->_raw_size;
2752 DEFUN (lang_statement_append, (list, element, field),
2753 lang_statement_list_type * list AND
2754 lang_statement_union_type * element AND
2755 lang_statement_union_type ** field)
2757 *(list->tail) = element;
2761 /* Set the output format type */
2763 DEFUN (lang_add_output_format, (format),
2766 output_target = format;