2000-11-09 Philip Blundell <pb@futuretv.com>
[binutils.git] / ld / ldlang.c
blobd92ebbfd84788fe503eab898429543357c23c0ba
1 /* Linker command language support.
2 Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000
3 Free Software Foundation, Inc.
5 This file is part of GLD, the Gnu Linker.
7 GLD is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GLD is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GLD; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
22 #include "bfd.h"
23 #include "sysdep.h"
24 #include "libiberty.h"
25 #include "obstack.h"
26 #include "bfdlink.h"
28 #include "ld.h"
29 #include "ldmain.h"
30 #include "ldgram.h"
31 #include "ldexp.h"
32 #include "ldlang.h"
33 #include "ldlex.h"
34 #include "ldmisc.h"
35 #include "ldctor.h"
36 #include "ldfile.h"
37 #include "ldemul.h"
38 #include "fnmatch.h"
39 #include "demangle.h"
41 #include <ctype.h>
43 /* FORWARDS */
44 static lang_statement_union_type *new_statement PARAMS ((enum statement_enum,
45 size_t,
46 lang_statement_list_type *));
48 /* LOCALS */
49 static struct obstack stat_obstack;
51 #define obstack_chunk_alloc xmalloc
52 #define obstack_chunk_free free
53 static const char *startup_file;
54 static lang_statement_list_type input_file_chain;
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 const char *current_target;
61 static const char *output_target;
62 static lang_statement_list_type statement_list;
63 static struct lang_phdr *lang_phdr_list;
65 static void lang_for_each_statement_worker
66 PARAMS ((void (*) (lang_statement_union_type *),
67 lang_statement_union_type *));
68 static lang_input_statement_type *new_afile
69 PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
70 static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
71 static void lang_map_flags PARAMS ((flagword));
72 static void init_os PARAMS ((lang_output_section_statement_type *));
73 static void exp_init_os PARAMS ((etree_type *));
74 static void section_already_linked PARAMS ((bfd *, asection *, PTR));
75 static struct bfd_hash_entry *already_linked_newfunc
76 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
77 static void already_linked_table_init PARAMS ((void));
78 static void already_linked_table_free PARAMS ((void));
79 static boolean wildcardp PARAMS ((const char *));
80 static lang_statement_union_type *wild_sort
81 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
82 asection *));
83 static void output_section_callback
84 PARAMS ((lang_wild_statement_type *, asection *,
85 lang_input_statement_type *, PTR));
86 static lang_input_statement_type *lookup_name PARAMS ((const char *));
87 static void load_symbols
88 PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
89 static void wild
90 PARAMS ((lang_wild_statement_type *, const char *, const char *,
91 const char *, lang_output_section_statement_type *));
92 static bfd *open_output PARAMS ((const char *));
93 static void ldlang_open_output PARAMS ((lang_statement_union_type *));
94 static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
95 static void lang_reasonable_defaults PARAMS ((void));
96 static void lang_place_undefineds PARAMS ((void));
97 static void map_input_to_output_sections
98 PARAMS ((lang_statement_union_type *, const char *,
99 lang_output_section_statement_type *));
100 static void print_output_section_statement
101 PARAMS ((lang_output_section_statement_type *));
102 static void print_assignment
103 PARAMS ((lang_assignment_statement_type *,
104 lang_output_section_statement_type *));
105 static void print_input_statement PARAMS ((lang_input_statement_type *));
106 static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
107 static void print_input_section PARAMS ((lang_input_section_type *));
108 static void print_fill_statement PARAMS ((lang_fill_statement_type *));
109 static void print_data_statement PARAMS ((lang_data_statement_type *));
110 static void print_address_statement PARAMS ((lang_address_statement_type *));
111 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
112 static void print_padding_statement PARAMS ((lang_padding_statement_type *));
113 static void print_wild_statement
114 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
115 static void print_group
116 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
117 static void print_statement
118 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
119 static void print_statement_list
120 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
121 static void print_statements PARAMS ((void));
122 static bfd_vma insert_pad
123 PARAMS ((lang_statement_union_type **this_ptr, fill_type fill,
124 unsigned int power, asection *output_section_statement,
125 bfd_vma dot));
126 static bfd_vma size_input_section
127 PARAMS ((lang_statement_union_type **this_ptr,
128 lang_output_section_statement_type *output_section_statement,
129 fill_type fill, bfd_vma dot, boolean relax));
130 static void lang_finish PARAMS ((void));
131 static void ignore_bfd_errors PARAMS ((const char *, ...));
132 static void lang_check PARAMS ((void));
133 static void lang_common PARAMS ((void));
134 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
135 static void lang_place_orphans PARAMS ((void));
136 static int topower PARAMS ((int));
137 static void lang_set_startof PARAMS ((void));
138 static void reset_memory_regions PARAMS ((void));
139 static void gc_section_callback
140 PARAMS ((lang_wild_statement_type *, asection *,
141 lang_input_statement_type *, PTR));
142 static void lang_record_phdrs PARAMS ((void));
143 static void lang_gc_wild
144 PARAMS ((lang_wild_statement_type *, const char *, const char *));
145 static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
146 static void lang_gc_sections PARAMS ((void));
147 static int lang_vers_match_lang_c
148 PARAMS ((struct bfd_elf_version_expr *, const char *));
149 static int lang_vers_match_lang_cplusplus
150 PARAMS ((struct bfd_elf_version_expr *, const char *));
151 static int lang_vers_match_lang_java
152 PARAMS ((struct bfd_elf_version_expr *, const char *));
153 static void lang_do_version_exports_section PARAMS ((void));
154 static void lang_check_section_addresses PARAMS ((void));
155 static void os_region_check
156 PARAMS ((lang_output_section_statement_type *,
157 struct memory_region_struct *, etree_type *, bfd_vma));
159 typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
160 asection *, lang_input_statement_type *,
161 PTR));
162 static void walk_wild
163 PARAMS ((lang_wild_statement_type *, const char *, const char *,
164 callback_t, PTR));
165 static void walk_wild_section
166 PARAMS ((lang_wild_statement_type *, const char *,
167 lang_input_statement_type *, callback_t, PTR));
168 static void walk_wild_file
169 PARAMS ((lang_wild_statement_type *, const char *,
170 lang_input_statement_type *, callback_t, PTR));
172 static int get_target PARAMS ((const bfd_target *, PTR));
173 static void stricpy PARAMS ((char *, char *));
174 static void strcut PARAMS ((char *, char *));
175 static int name_compare PARAMS ((char *, char *));
176 static int closest_target_match PARAMS ((const bfd_target *, PTR));
177 static char * get_first_input_target PARAMS ((void));
179 /* EXPORTS */
180 lang_output_section_statement_type *abs_output_section;
181 lang_statement_list_type lang_output_section_statement;
182 lang_statement_list_type *stat_ptr = &statement_list;
183 lang_statement_list_type file_chain = { NULL, NULL };
184 const char *entry_symbol = NULL;
185 boolean entry_from_cmdline;
186 boolean lang_has_input_file = false;
187 boolean had_output_filename = false;
188 boolean lang_float_flag = false;
189 boolean delete_output_file_on_failure = false;
190 struct lang_nocrossrefs *nocrossref_list;
192 etree_type *base; /* Relocation base - or null */
194 #if defined(__STDC__) || defined(ALMOST_STDC)
195 #define cat(a,b) a##b
196 #else
197 #define cat(a,b) a/**/b
198 #endif
200 #define new_stat(x,y) (cat(x,_type)*) new_statement(cat(x,_enum), sizeof(cat(x,_type)),y)
202 #define outside_section_address(q) ((q)->output_offset + (q)->output_section->vma)
204 #define outside_symbol_address(q) ((q)->value + outside_section_address(q->section))
206 #define SECTION_NAME_MAP_LENGTH (16)
209 stat_alloc (size)
210 size_t size;
212 return obstack_alloc (&stat_obstack, size);
215 /* Generic traversal routines for finding matching sections. */
217 static void
218 walk_wild_section (ptr, section, file, callback, data)
219 lang_wild_statement_type *ptr;
220 const char *section;
221 lang_input_statement_type *file;
222 callback_t callback;
223 PTR data;
225 /* Don't process sections from files which were excluded. */
226 if (ptr->exclude_filename_list != NULL)
228 struct name_list *list_tmp;
229 for (list_tmp = ptr->exclude_filename_list; list_tmp; list_tmp = list_tmp->next)
231 boolean match;
233 if (wildcardp (list_tmp->name))
234 match = fnmatch (list_tmp->name, file->filename, 0) == 0 ? true : false;
235 else
236 match = strcmp (list_tmp->name, file->filename) == 0 ? true : false;
238 if (match)
239 return;
243 if (file->just_syms_flag == false)
245 register asection *s;
246 boolean wildcard;
248 if (section == NULL)
249 wildcard = false;
250 else
251 wildcard = wildcardp (section);
253 for (s = file->the_bfd->sections; s != NULL; s = s->next)
255 boolean match;
257 if (section == NULL)
258 match = true;
259 else
261 const char *name;
263 name = bfd_get_section_name (file->the_bfd, s);
264 if (wildcard)
265 match = fnmatch (section, name, 0) == 0 ? true : false;
266 else
267 match = strcmp (section, name) == 0 ? true : false;
270 if (match)
271 (*callback) (ptr, s, file, data);
276 /* Handle a wild statement for a single file F. */
278 static void
279 walk_wild_file (s, section, f, callback, data)
280 lang_wild_statement_type *s;
281 const char *section;
282 lang_input_statement_type *f;
283 callback_t callback;
284 PTR data;
286 if (f->the_bfd == NULL
287 || ! bfd_check_format (f->the_bfd, bfd_archive))
288 walk_wild_section (s, section, f, callback, data);
289 else
291 bfd *member;
293 /* This is an archive file. We must map each member of the
294 archive separately. */
295 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
296 while (member != NULL)
298 /* When lookup_name is called, it will call the add_symbols
299 entry point for the archive. For each element of the
300 archive which is included, BFD will call ldlang_add_file,
301 which will set the usrdata field of the member to the
302 lang_input_statement. */
303 if (member->usrdata != NULL)
305 walk_wild_section (s, section,
306 (lang_input_statement_type *) member->usrdata,
307 callback, data);
310 member = bfd_openr_next_archived_file (f->the_bfd, member);
315 static void
316 walk_wild (s, section, file, callback, data)
317 lang_wild_statement_type *s;
318 const char *section;
319 const char *file;
320 callback_t callback;
321 PTR data;
323 if (file == (char *) NULL)
325 /* Perform the iteration over all files in the list. */
326 LANG_FOR_EACH_INPUT_STATEMENT (f)
328 walk_wild_file (s, section, f, callback, data);
331 else if (wildcardp (file))
333 LANG_FOR_EACH_INPUT_STATEMENT (f)
335 if (fnmatch (file, f->filename, FNM_FILE_NAME) == 0)
336 walk_wild_file (s, section, f, callback, data);
339 else
341 lang_input_statement_type *f;
343 /* Perform the iteration over a single file. */
344 f = lookup_name (file);
345 walk_wild_file (s, section, f, callback, data);
349 /* lang_for_each_statement walks the parse tree and calls the provided
350 function for each node. */
352 static void
353 lang_for_each_statement_worker (func, s)
354 void (*func) PARAMS ((lang_statement_union_type *));
355 lang_statement_union_type *s;
357 for (; s != (lang_statement_union_type *) NULL; s = s->next)
359 func (s);
361 switch (s->header.type)
363 case lang_constructors_statement_enum:
364 lang_for_each_statement_worker (func, constructor_list.head);
365 break;
366 case lang_output_section_statement_enum:
367 lang_for_each_statement_worker
368 (func,
369 s->output_section_statement.children.head);
370 break;
371 case lang_wild_statement_enum:
372 lang_for_each_statement_worker
373 (func,
374 s->wild_statement.children.head);
375 break;
376 case lang_group_statement_enum:
377 lang_for_each_statement_worker (func,
378 s->group_statement.children.head);
379 break;
380 case lang_data_statement_enum:
381 case lang_reloc_statement_enum:
382 case lang_object_symbols_statement_enum:
383 case lang_output_statement_enum:
384 case lang_target_statement_enum:
385 case lang_input_section_enum:
386 case lang_input_statement_enum:
387 case lang_assignment_statement_enum:
388 case lang_padding_statement_enum:
389 case lang_address_statement_enum:
390 case lang_fill_statement_enum:
391 break;
392 default:
393 FAIL ();
394 break;
399 void
400 lang_for_each_statement (func)
401 void (*func) PARAMS ((lang_statement_union_type *));
403 lang_for_each_statement_worker (func, statement_list.head);
406 /*----------------------------------------------------------------------*/
408 void
409 lang_list_init (list)
410 lang_statement_list_type *list;
412 list->head = (lang_statement_union_type *) NULL;
413 list->tail = &list->head;
416 /* Build a new statement node for the parse tree. */
418 static lang_statement_union_type *
419 new_statement (type, size, list)
420 enum statement_enum type;
421 size_t size;
422 lang_statement_list_type *list;
424 lang_statement_union_type *new = (lang_statement_union_type *)
425 stat_alloc (size);
427 new->header.type = type;
428 new->header.next = (lang_statement_union_type *) NULL;
429 lang_statement_append (list, new, &new->header.next);
430 return new;
433 /* Build a new input file node for the language. There are several
434 ways in which we treat an input file, eg, we only look at symbols,
435 or prefix it with a -l etc.
437 We can be supplied with requests for input files more than once;
438 they may, for example be split over serveral lines like foo.o(.text)
439 foo.o(.data) etc, so when asked for a file we check that we havn't
440 got it already so we don't duplicate the bfd. */
442 static lang_input_statement_type *
443 new_afile (name, file_type, target, add_to_list)
444 const char *name;
445 lang_input_file_enum_type file_type;
446 const char *target;
447 boolean add_to_list;
449 lang_input_statement_type *p;
451 if (add_to_list)
452 p = new_stat (lang_input_statement, stat_ptr);
453 else
455 p = ((lang_input_statement_type *)
456 stat_alloc (sizeof (lang_input_statement_type)));
457 p->header.next = NULL;
460 lang_has_input_file = true;
461 p->target = target;
462 switch (file_type)
464 case lang_input_file_is_symbols_only_enum:
465 p->filename = name;
466 p->is_archive = false;
467 p->real = true;
468 p->local_sym_name = name;
469 p->just_syms_flag = true;
470 p->search_dirs_flag = false;
471 break;
472 case lang_input_file_is_fake_enum:
473 p->filename = name;
474 p->is_archive = false;
475 p->real = false;
476 p->local_sym_name = name;
477 p->just_syms_flag = false;
478 p->search_dirs_flag = false;
479 break;
480 case lang_input_file_is_l_enum:
481 p->is_archive = true;
482 p->filename = name;
483 p->real = true;
484 p->local_sym_name = concat ("-l", name, (const char *) NULL);
485 p->just_syms_flag = false;
486 p->search_dirs_flag = true;
487 break;
488 case lang_input_file_is_marker_enum:
489 p->filename = name;
490 p->is_archive = false;
491 p->real = false;
492 p->local_sym_name = name;
493 p->just_syms_flag = false;
494 p->search_dirs_flag = true;
495 break;
496 case lang_input_file_is_search_file_enum:
497 p->filename = name;
498 p->is_archive = false;
499 p->real = true;
500 p->local_sym_name = name;
501 p->just_syms_flag = false;
502 p->search_dirs_flag = true;
503 break;
504 case lang_input_file_is_file_enum:
505 p->filename = name;
506 p->is_archive = false;
507 p->real = true;
508 p->local_sym_name = name;
509 p->just_syms_flag = false;
510 p->search_dirs_flag = false;
511 break;
512 default:
513 FAIL ();
515 p->the_bfd = (bfd *) NULL;
516 p->asymbols = (asymbol **) NULL;
517 p->next_real_file = (lang_statement_union_type *) NULL;
518 p->next = (lang_statement_union_type *) NULL;
519 p->symbol_count = 0;
520 p->dynamic = config.dynamic_link;
521 p->whole_archive = whole_archive;
522 p->loaded = false;
523 lang_statement_append (&input_file_chain,
524 (lang_statement_union_type *) p,
525 &p->next_real_file);
526 return p;
529 lang_input_statement_type *
530 lang_add_input_file (name, file_type, target)
531 const char *name;
532 lang_input_file_enum_type file_type;
533 const char *target;
535 lang_has_input_file = true;
536 return new_afile (name, file_type, target, true);
539 /* Build enough state so that the parser can build its tree. */
541 void
542 lang_init ()
544 obstack_begin (&stat_obstack, 1000);
546 stat_ptr = &statement_list;
548 lang_list_init (stat_ptr);
550 lang_list_init (&input_file_chain);
551 lang_list_init (&lang_output_section_statement);
552 lang_list_init (&file_chain);
553 first_file = lang_add_input_file ((char *) NULL,
554 lang_input_file_is_marker_enum,
555 (char *) NULL);
556 abs_output_section =
557 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
559 abs_output_section->bfd_section = bfd_abs_section_ptr;
563 /*----------------------------------------------------------------------
564 A region is an area of memory declared with the
565 MEMORY { name:org=exp, len=exp ... }
566 syntax.
568 We maintain a list of all the regions here.
570 If no regions are specified in the script, then the default is used
571 which is created when looked up to be the entire data space. */
573 static lang_memory_region_type *lang_memory_region_list;
574 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
576 lang_memory_region_type *
577 lang_memory_region_lookup (name)
578 const char *const name;
580 lang_memory_region_type *p;
582 for (p = lang_memory_region_list;
583 p != (lang_memory_region_type *) NULL;
584 p = p->next)
586 if (strcmp (p->name, name) == 0)
588 return p;
592 #if 0
593 /* This code used to always use the first region in the list as the
594 default region. I changed it to instead use a region
595 encompassing all of memory as the default region. This permits
596 NOLOAD sections to work reasonably without requiring a region.
597 People should specify what region they mean, if they really want
598 a region. */
599 if (strcmp (name, "*default*") == 0)
601 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
603 return lang_memory_region_list;
606 #endif
609 lang_memory_region_type *new =
610 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
612 new->name = buystring (name);
613 new->next = (lang_memory_region_type *) NULL;
615 *lang_memory_region_list_tail = new;
616 lang_memory_region_list_tail = &new->next;
617 new->origin = 0;
618 new->flags = 0;
619 new->not_flags = 0;
620 new->length = ~(bfd_size_type) 0;
621 new->current = 0;
622 new->had_full_message = false;
624 return new;
628 static lang_memory_region_type *
629 lang_memory_default (section)
630 asection *section;
632 lang_memory_region_type *p;
634 flagword sec_flags = section->flags;
636 /* Override SEC_DATA to mean a writable section. */
637 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
638 sec_flags |= SEC_DATA;
640 for (p = lang_memory_region_list;
641 p != (lang_memory_region_type *) NULL;
642 p = p->next)
644 if ((p->flags & sec_flags) != 0
645 && (p->not_flags & sec_flags) == 0)
647 return p;
650 return lang_memory_region_lookup ("*default*");
653 lang_output_section_statement_type *
654 lang_output_section_find (name)
655 const char *const name;
657 lang_statement_union_type *u;
658 lang_output_section_statement_type *lookup;
660 for (u = lang_output_section_statement.head;
661 u != (lang_statement_union_type *) NULL;
662 u = lookup->next)
664 lookup = &u->output_section_statement;
665 if (strcmp (name, lookup->name) == 0)
667 return lookup;
670 return (lang_output_section_statement_type *) NULL;
673 lang_output_section_statement_type *
674 lang_output_section_statement_lookup (name)
675 const char *const name;
677 lang_output_section_statement_type *lookup;
679 lookup = lang_output_section_find (name);
680 if (lookup == (lang_output_section_statement_type *) NULL)
683 lookup = (lang_output_section_statement_type *)
684 new_stat (lang_output_section_statement, stat_ptr);
685 lookup->region = (lang_memory_region_type *) NULL;
686 lookup->lma_region = (lang_memory_region_type *) NULL;
687 lookup->fill = 0;
688 lookup->block_value = 1;
689 lookup->name = name;
691 lookup->next = (lang_statement_union_type *) NULL;
692 lookup->bfd_section = (asection *) NULL;
693 lookup->processed = false;
694 lookup->sectype = normal_section;
695 lookup->addr_tree = (etree_type *) NULL;
696 lang_list_init (&lookup->children);
698 lookup->memspec = (const char *) NULL;
699 lookup->flags = 0;
700 lookup->subsection_alignment = -1;
701 lookup->section_alignment = -1;
702 lookup->load_base = (union etree_union *) NULL;
703 lookup->phdrs = NULL;
705 lang_statement_append (&lang_output_section_statement,
706 (lang_statement_union_type *) lookup,
707 &lookup->next);
709 return lookup;
712 static void
713 lang_map_flags (flag)
714 flagword flag;
716 if (flag & SEC_ALLOC)
717 minfo ("a");
719 if (flag & SEC_CODE)
720 minfo ("x");
722 if (flag & SEC_READONLY)
723 minfo ("r");
725 if (flag & SEC_DATA)
726 minfo ("w");
728 if (flag & SEC_LOAD)
729 minfo ("l");
732 void
733 lang_map ()
735 lang_memory_region_type *m;
737 minfo (_("\nMemory Configuration\n\n"));
738 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
739 _("Name"), _("Origin"), _("Length"), _("Attributes"));
741 for (m = lang_memory_region_list;
742 m != (lang_memory_region_type *) NULL;
743 m = m->next)
745 char buf[100];
746 int len;
748 fprintf (config.map_file, "%-16s ", m->name);
750 sprintf_vma (buf, m->origin);
751 minfo ("0x%s ", buf);
752 len = strlen (buf);
753 while (len < 16)
755 print_space ();
756 ++len;
759 minfo ("0x%V", m->length);
760 if (m->flags || m->not_flags)
762 #ifndef BFD64
763 minfo (" ");
764 #endif
765 if (m->flags)
767 print_space ();
768 lang_map_flags (m->flags);
771 if (m->not_flags)
773 minfo (" !");
774 lang_map_flags (m->not_flags);
778 print_nl ();
781 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
783 print_statements ();
786 /* Initialize an output section. */
788 static void
789 init_os (s)
790 lang_output_section_statement_type *s;
792 section_userdata_type *new;
794 if (s->bfd_section != NULL)
795 return;
797 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
798 einfo (_("%P%F: Illegal use of `%s' section"), DISCARD_SECTION_NAME);
800 new = ((section_userdata_type *)
801 stat_alloc (sizeof (section_userdata_type)));
803 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
804 if (s->bfd_section == (asection *) NULL)
805 s->bfd_section = bfd_make_section (output_bfd, s->name);
806 if (s->bfd_section == (asection *) NULL)
808 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
809 output_bfd->xvec->name, s->name);
811 s->bfd_section->output_section = s->bfd_section;
813 /* We initialize an output sections output offset to minus its own
814 vma to allow us to output a section through itself. */
815 s->bfd_section->output_offset = 0;
816 get_userdata (s->bfd_section) = (PTR) new;
818 /* If there is a base address, make sure that any sections it might
819 mention are initialized. */
820 if (s->addr_tree != NULL)
821 exp_init_os (s->addr_tree);
824 /* Make sure that all output sections mentioned in an expression are
825 initialized. */
827 static void
828 exp_init_os (exp)
829 etree_type *exp;
831 switch (exp->type.node_class)
833 case etree_assign:
834 exp_init_os (exp->assign.src);
835 break;
837 case etree_binary:
838 exp_init_os (exp->binary.lhs);
839 exp_init_os (exp->binary.rhs);
840 break;
842 case etree_trinary:
843 exp_init_os (exp->trinary.cond);
844 exp_init_os (exp->trinary.lhs);
845 exp_init_os (exp->trinary.rhs);
846 break;
848 case etree_unary:
849 exp_init_os (exp->unary.child);
850 break;
852 case etree_name:
853 switch (exp->type.node_code)
855 case ADDR:
856 case LOADADDR:
857 case SIZEOF:
859 lang_output_section_statement_type *os;
861 os = lang_output_section_find (exp->name.name);
862 if (os != NULL && os->bfd_section == NULL)
863 init_os (os);
866 break;
868 default:
869 break;
873 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
874 once into the output. This routine checks each section, and
875 arrange to discard it if a section of the same name has already
876 been linked. If the section has COMDAT information, then it uses
877 that to decide whether the section should be included. This code
878 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
879 that is, it does not depend solely upon the section name.
880 section_already_linked is called via bfd_map_over_sections. */
882 /* This is the shape of the elements inside the already_linked hash
883 table. It maps a name onto a list of already_linked elements with
884 the same name. It's possible to get more than one element in a
885 list if the COMDAT sections have different names. */
887 struct already_linked_hash_entry
889 struct bfd_hash_entry root;
890 struct already_linked *entry;
893 struct already_linked
895 struct already_linked *next;
896 asection *sec;
899 /* The hash table. */
901 static struct bfd_hash_table already_linked_table;
903 static void
904 section_already_linked (abfd, sec, data)
905 bfd *abfd;
906 asection *sec;
907 PTR data;
909 lang_input_statement_type *entry = (lang_input_statement_type *) data;
910 flagword flags;
911 const char *name;
912 struct already_linked *l;
913 struct already_linked_hash_entry *already_linked_list;
915 /* If we are only reading symbols from this object, then we want to
916 discard all sections. */
917 if (entry->just_syms_flag)
919 sec->output_section = bfd_abs_section_ptr;
920 sec->output_offset = sec->vma;
921 return;
924 flags = bfd_get_section_flags (abfd, sec);
926 if ((flags & SEC_LINK_ONCE) == 0)
927 return;
929 /* FIXME: When doing a relocateable link, we may have trouble
930 copying relocations in other sections that refer to local symbols
931 in the section being discarded. Those relocations will have to
932 be converted somehow; as of this writing I'm not sure that any of
933 the backends handle that correctly.
935 It is tempting to instead not discard link once sections when
936 doing a relocateable link (technically, they should be discarded
937 whenever we are building constructors). However, that fails,
938 because the linker winds up combining all the link once sections
939 into a single large link once section, which defeats the purpose
940 of having link once sections in the first place.
942 Also, not merging link once sections in a relocateable link
943 causes trouble for MIPS ELF, which relies in link once semantics
944 to handle the .reginfo section correctly. */
946 name = bfd_get_section_name (abfd, sec);
948 already_linked_list =
949 ((struct already_linked_hash_entry *)
950 bfd_hash_lookup (&already_linked_table, name, true, false));
952 for (l = already_linked_list->entry; l != NULL; l = l->next)
954 if (sec->comdat == NULL
955 || l->sec->comdat == NULL
956 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
958 /* The section has already been linked. See if we should
959 issue a warning. */
960 switch (flags & SEC_LINK_DUPLICATES)
962 default:
963 abort ();
965 case SEC_LINK_DUPLICATES_DISCARD:
966 break;
968 case SEC_LINK_DUPLICATES_ONE_ONLY:
969 if (sec->comdat == NULL)
970 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
971 abfd, name);
972 else
973 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
974 abfd, name, sec->comdat->name);
975 break;
977 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
978 /* FIXME: We should really dig out the contents of both
979 sections and memcmp them. The COFF/PE spec says that
980 the Microsoft linker does not implement this
981 correctly, so I'm not going to bother doing it
982 either. */
983 /* Fall through. */
984 case SEC_LINK_DUPLICATES_SAME_SIZE:
985 if (bfd_section_size (abfd, sec)
986 != bfd_section_size (l->sec->owner, l->sec))
987 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
988 abfd, name);
989 break;
992 /* Set the output_section field so that wild_doit does not
993 create a lang_input_section structure for this section.
994 Since there might be a symbol in the section being
995 discarded, we must retain a pointer to the section which
996 we are really going to use. */
997 sec->output_section = bfd_abs_section_ptr;
998 sec->kept_section = l->sec;
1000 return;
1004 /* This is the first section with this name. Record it. Allocate
1005 the memory from the same obstack as the hash table is kept in. */
1007 l = ((struct already_linked *)
1008 bfd_hash_allocate (&already_linked_table, sizeof *l));
1010 l->sec = sec;
1011 l->next = already_linked_list->entry;
1012 already_linked_list->entry = l;
1015 /* Support routines for the hash table used by section_already_linked,
1016 initialize the table, fill in an entry and remove the table. */
1018 static struct bfd_hash_entry *
1019 already_linked_newfunc (entry, table, string)
1020 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1021 struct bfd_hash_table *table;
1022 const char *string ATTRIBUTE_UNUSED;
1024 struct already_linked_hash_entry *ret =
1025 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1027 ret->entry = NULL;
1029 return (struct bfd_hash_entry *) ret;
1032 static void
1033 already_linked_table_init ()
1035 if (! bfd_hash_table_init_n (&already_linked_table,
1036 already_linked_newfunc,
1037 42))
1038 einfo (_("%P%F: Failed to create hash table\n"));
1041 static void
1042 already_linked_table_free ()
1044 bfd_hash_table_free (&already_linked_table);
1047 /* The wild routines.
1049 These expand statements like *(.text) and foo.o to a list of
1050 explicit actions, like foo.o(.text), bar.o(.text) and
1051 foo.o(.text, .data). */
1053 /* Return true if the PATTERN argument is a wildcard pattern.
1054 Although backslashes are treated specially if a pattern contains
1055 wildcards, we do not consider the mere presence of a backslash to
1056 be enough to cause the the pattern to be treated as a wildcard.
1057 That lets us handle DOS filenames more naturally. */
1059 static boolean
1060 wildcardp (pattern)
1061 const char *pattern;
1063 const char *s;
1065 for (s = pattern; *s != '\0'; ++s)
1066 if (*s == '?'
1067 || *s == '*'
1068 || *s == '[')
1069 return true;
1070 return false;
1073 /* Add SECTION to the output section OUTPUT. Do this by creating a
1074 lang_input_section statement which is placed at PTR. FILE is the
1075 input file which holds SECTION. */
1077 void
1078 wild_doit (ptr, section, output, file)
1079 lang_statement_list_type *ptr;
1080 asection *section;
1081 lang_output_section_statement_type *output;
1082 lang_input_statement_type *file;
1084 flagword flags;
1085 boolean discard;
1087 flags = bfd_get_section_flags (section->owner, section);
1089 discard = false;
1091 /* If we are doing a final link, discard sections marked with
1092 SEC_EXCLUDE. */
1093 if (! link_info.relocateable
1094 && (flags & SEC_EXCLUDE) != 0)
1095 discard = true;
1097 /* Discard input sections which are assigned to a section named
1098 DISCARD_SECTION_NAME. */
1099 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1100 discard = true;
1102 /* Discard debugging sections if we are stripping debugging
1103 information. */
1104 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1105 && (flags & SEC_DEBUGGING) != 0)
1106 discard = true;
1108 if (discard)
1110 if (section->output_section == NULL)
1112 /* This prevents future calls from assigning this section. */
1113 section->output_section = bfd_abs_section_ptr;
1115 return;
1118 if (section->output_section == NULL)
1120 boolean first;
1121 lang_input_section_type *new;
1122 flagword flags;
1124 if (output->bfd_section == NULL)
1126 init_os (output);
1127 first = true;
1129 else
1130 first = false;
1132 /* Add a section reference to the list. */
1133 new = new_stat (lang_input_section, ptr);
1135 new->section = section;
1136 new->ifile = file;
1137 section->output_section = output->bfd_section;
1139 flags = section->flags;
1141 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1142 to an output section, because we want to be able to include a
1143 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1144 section (I don't know why we want to do this, but we do).
1145 build_link_order in ldwrite.c handles this case by turning
1146 the embedded SEC_NEVER_LOAD section into a fill. */
1148 flags &= ~ SEC_NEVER_LOAD;
1150 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1151 already been processed. One reason to do this is that on pe
1152 format targets, .text$foo sections go into .text and it's odd
1153 to see .text with SEC_LINK_ONCE set. */
1155 if (! link_info.relocateable)
1156 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1158 /* If this is not the first input section, and the SEC_READONLY
1159 flag is not currently set, then don't set it just because the
1160 input section has it set. */
1162 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1163 flags &= ~ SEC_READONLY;
1165 section->output_section->flags |= flags;
1167 /* If SEC_READONLY is not set in the input section, then clear
1168 it from the output section. */
1169 if ((section->flags & SEC_READONLY) == 0)
1170 section->output_section->flags &= ~SEC_READONLY;
1172 switch (output->sectype)
1174 case normal_section:
1175 break;
1176 case dsect_section:
1177 case copy_section:
1178 case info_section:
1179 case overlay_section:
1180 output->bfd_section->flags &= ~SEC_ALLOC;
1181 break;
1182 case noload_section:
1183 output->bfd_section->flags &= ~SEC_LOAD;
1184 output->bfd_section->flags |= SEC_NEVER_LOAD;
1185 break;
1188 /* Copy over SEC_SMALL_DATA. */
1189 if (section->flags & SEC_SMALL_DATA)
1190 section->output_section->flags |= SEC_SMALL_DATA;
1192 if (section->alignment_power > output->bfd_section->alignment_power)
1193 output->bfd_section->alignment_power = section->alignment_power;
1195 /* If supplied an aligment, then force it. */
1196 if (output->section_alignment != -1)
1197 output->bfd_section->alignment_power = output->section_alignment;
1199 if (section->flags & SEC_BLOCK)
1201 section->output_section->flags |= SEC_BLOCK;
1202 /* FIXME: This value should really be obtained from the bfd... */
1203 output->block_value = 128;
1208 /* Handle wildcard sorting. This returns the lang_input_section which
1209 should follow the one we are going to create for SECTION and FILE,
1210 based on the sorting requirements of WILD. It returns NULL if the
1211 new section should just go at the end of the current list. */
1213 static lang_statement_union_type *
1214 wild_sort (wild, file, section)
1215 lang_wild_statement_type *wild;
1216 lang_input_statement_type *file;
1217 asection *section;
1219 const char *section_name;
1220 lang_statement_union_type *l;
1222 if (! wild->filenames_sorted && ! wild->sections_sorted)
1223 return NULL;
1225 section_name = bfd_get_section_name (file->the_bfd, section);
1226 for (l = wild->children.head; l != NULL; l = l->next)
1228 lang_input_section_type *ls;
1230 if (l->header.type != lang_input_section_enum)
1231 continue;
1232 ls = &l->input_section;
1234 /* Sorting by filename takes precedence over sorting by section
1235 name. */
1237 if (wild->filenames_sorted)
1239 const char *fn, *ln;
1240 boolean fa, la;
1241 int i;
1243 /* The PE support for the .idata section as generated by
1244 dlltool assumes that files will be sorted by the name of
1245 the archive and then the name of the file within the
1246 archive. */
1248 if (file->the_bfd != NULL
1249 && bfd_my_archive (file->the_bfd) != NULL)
1251 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1252 fa = true;
1254 else
1256 fn = file->filename;
1257 fa = false;
1260 if (ls->ifile->the_bfd != NULL
1261 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1263 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1264 la = true;
1266 else
1268 ln = ls->ifile->filename;
1269 la = false;
1272 i = strcmp (fn, ln);
1273 if (i > 0)
1274 continue;
1275 else if (i < 0)
1276 break;
1278 if (fa || la)
1280 if (fa)
1281 fn = file->filename;
1282 if (la)
1283 ln = ls->ifile->filename;
1285 i = strcmp (fn, ln);
1286 if (i > 0)
1287 continue;
1288 else if (i < 0)
1289 break;
1293 /* Here either the files are not sorted by name, or we are
1294 looking at the sections for this file. */
1296 if (wild->sections_sorted)
1298 if (strcmp (section_name,
1299 bfd_get_section_name (ls->ifile->the_bfd,
1300 ls->section))
1301 < 0)
1302 break;
1306 return l;
1309 /* Expand a wild statement for a particular FILE. SECTION may be
1310 NULL, in which case it is a wild card. */
1312 static void
1313 output_section_callback (ptr, section, file, output)
1314 lang_wild_statement_type *ptr;
1315 asection *section;
1316 lang_input_statement_type *file;
1317 PTR output;
1319 lang_statement_union_type *before;
1321 /* If the wild pattern was marked KEEP, the member sections
1322 should be as well. */
1323 if (ptr->keep_sections)
1324 section->flags |= SEC_KEEP;
1326 before = wild_sort (ptr, file, section);
1328 /* Here BEFORE points to the lang_input_section which
1329 should follow the one we are about to add. If BEFORE
1330 is NULL, then the section should just go at the end
1331 of the current list. */
1333 if (before == NULL)
1334 wild_doit (&ptr->children, section,
1335 (lang_output_section_statement_type *) output,
1336 file);
1337 else
1339 lang_statement_list_type list;
1340 lang_statement_union_type **pp;
1342 lang_list_init (&list);
1343 wild_doit (&list, section,
1344 (lang_output_section_statement_type *) output,
1345 file);
1347 /* If we are discarding the section, LIST.HEAD will
1348 be NULL. */
1349 if (list.head != NULL)
1351 ASSERT (list.head->next == NULL);
1353 for (pp = &ptr->children.head;
1354 *pp != before;
1355 pp = &(*pp)->next)
1356 ASSERT (*pp != NULL);
1358 list.head->next = *pp;
1359 *pp = list.head;
1364 /* This is passed a file name which must have been seen already and
1365 added to the statement tree. We will see if it has been opened
1366 already and had its symbols read. If not then we'll read it. */
1368 static lang_input_statement_type *
1369 lookup_name (name)
1370 const char *name;
1372 lang_input_statement_type *search;
1374 for (search = (lang_input_statement_type *) input_file_chain.head;
1375 search != (lang_input_statement_type *) NULL;
1376 search = (lang_input_statement_type *) search->next_real_file)
1378 if (search->filename == (char *) NULL && name == (char *) NULL)
1379 return search;
1380 if (search->filename != (char *) NULL
1381 && name != (char *) NULL
1382 && strcmp (search->filename, name) == 0)
1383 break;
1386 if (search == (lang_input_statement_type *) NULL)
1387 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1388 false);
1390 /* If we have already added this file, or this file is not real
1391 (FIXME: can that ever actually happen?) or the name is NULL
1392 (FIXME: can that ever actually happen?) don't add this file. */
1393 if (search->loaded
1394 || ! search->real
1395 || search->filename == (const char *) NULL)
1396 return search;
1398 load_symbols (search, (lang_statement_list_type *) NULL);
1400 return search;
1403 /* Get the symbols for an input file. */
1405 static void
1406 load_symbols (entry, place)
1407 lang_input_statement_type *entry;
1408 lang_statement_list_type *place;
1410 char **matching;
1412 if (entry->loaded)
1413 return;
1415 ldfile_open_file (entry);
1417 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1418 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1420 bfd_error_type err;
1421 lang_statement_list_type *hold;
1423 err = bfd_get_error ();
1424 if (err == bfd_error_file_ambiguously_recognized)
1426 char **p;
1428 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1429 einfo (_("%B: matching formats:"), entry->the_bfd);
1430 for (p = matching; *p != NULL; p++)
1431 einfo (" %s", *p);
1432 einfo ("%F\n");
1434 else if (err != bfd_error_file_not_recognized
1435 || place == NULL)
1436 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1438 bfd_close (entry->the_bfd);
1439 entry->the_bfd = NULL;
1441 /* See if the emulation has some special knowledge. */
1443 if (ldemul_unrecognized_file (entry))
1444 return;
1446 /* Try to interpret the file as a linker script. */
1448 ldfile_open_command_file (entry->filename);
1450 hold = stat_ptr;
1451 stat_ptr = place;
1453 ldfile_assumed_script = true;
1454 parser_input = input_script;
1455 yyparse ();
1456 ldfile_assumed_script = false;
1458 stat_ptr = hold;
1460 return;
1463 if (ldemul_recognized_file (entry))
1464 return;
1466 /* We don't call ldlang_add_file for an archive. Instead, the
1467 add_symbols entry point will call ldlang_add_file, via the
1468 add_archive_element callback, for each element of the archive
1469 which is used. */
1470 switch (bfd_get_format (entry->the_bfd))
1472 default:
1473 break;
1475 case bfd_object:
1476 ldlang_add_file (entry);
1477 if (trace_files || trace_file_tries)
1478 info_msg ("%I\n", entry);
1479 break;
1481 case bfd_archive:
1482 if (entry->whole_archive)
1484 bfd *member = bfd_openr_next_archived_file (entry->the_bfd,
1485 (bfd *) NULL);
1486 while (member != NULL)
1488 if (! bfd_check_format (member, bfd_object))
1489 einfo (_("%F%B: object %B in archive is not object\n"),
1490 entry->the_bfd, member);
1491 if (! ((*link_info.callbacks->add_archive_element)
1492 (&link_info, member, "--whole-archive")))
1493 abort ();
1494 if (! bfd_link_add_symbols (member, &link_info))
1495 einfo (_("%F%B: could not read symbols: %E\n"), member);
1496 member = bfd_openr_next_archived_file (entry->the_bfd,
1497 member);
1500 entry->loaded = true;
1502 return;
1506 if (! bfd_link_add_symbols (entry->the_bfd, &link_info))
1507 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1509 entry->loaded = true;
1512 /* Handle a wild statement. SECTION or FILE or both may be NULL,
1513 indicating that it is a wildcard. Separate lang_input_section
1514 statements are created for each part of the expansion; they are
1515 added after the wild statement S. OUTPUT is the output section. */
1517 static void
1518 wild (s, section, file, target, output)
1519 lang_wild_statement_type *s;
1520 const char *section;
1521 const char *file;
1522 const char *target ATTRIBUTE_UNUSED;
1523 lang_output_section_statement_type *output;
1525 walk_wild (s, section, file, output_section_callback, (PTR) output);
1527 if (section != (char *) NULL
1528 && strcmp (section, "COMMON") == 0
1529 && default_common_section == NULL)
1531 /* Remember the section that common is going to in case we later
1532 get something which doesn't know where to put it. */
1533 default_common_section = output;
1537 /* Return true iff target is the sought target. */
1539 static int
1540 get_target (target, data)
1541 const bfd_target *target;
1542 PTR data;
1544 const char *sought = (const char *) data;
1546 return strcmp (target->name, sought) == 0;
1549 /* Like strcpy() but convert to lower case as well. */
1551 static void
1552 stricpy (dest, src)
1553 char *dest;
1554 char *src;
1556 char c;
1558 while ((c = *src++) != 0)
1560 if (isupper ((unsigned char) c))
1561 c = tolower (c);
1563 *dest++ = c;
1566 *dest = 0;
1569 /* Remove the first occurance of needle (if any) in haystack
1570 from haystack. */
1572 static void
1573 strcut (haystack, needle)
1574 char *haystack;
1575 char *needle;
1577 haystack = strstr (haystack, needle);
1579 if (haystack)
1581 char *src;
1583 for (src = haystack + strlen (needle); *src;)
1584 *haystack++ = *src++;
1586 *haystack = 0;
1590 /* Compare two target format name strings.
1591 Return a value indicating how "similar" they are. */
1593 static int
1594 name_compare (first, second)
1595 char *first;
1596 char *second;
1598 char *copy1;
1599 char *copy2;
1600 int result;
1602 copy1 = xmalloc (strlen (first) + 1);
1603 copy2 = xmalloc (strlen (second) + 1);
1605 /* Convert the names to lower case. */
1606 stricpy (copy1, first);
1607 stricpy (copy2, second);
1609 /* Remove and endian strings from the name. */
1610 strcut (copy1, "big");
1611 strcut (copy1, "little");
1612 strcut (copy2, "big");
1613 strcut (copy2, "little");
1615 /* Return a value based on how many characters match,
1616 starting from the beginning. If both strings are
1617 the same then return 10 * their length. */
1618 for (result = 0; copy1[result] == copy2[result]; result++)
1619 if (copy1[result] == 0)
1621 result *= 10;
1622 break;
1625 free (copy1);
1626 free (copy2);
1628 return result;
1631 /* Set by closest_target_match() below. */
1632 static const bfd_target *winner;
1634 /* Scan all the valid bfd targets looking for one that has the endianness
1635 requirement that was specified on the command line, and is the nearest
1636 match to the original output target. */
1638 static int
1639 closest_target_match (target, data)
1640 const bfd_target *target;
1641 PTR data;
1643 const bfd_target *original = (const bfd_target *) data;
1645 if (command_line.endian == ENDIAN_BIG
1646 && target->byteorder != BFD_ENDIAN_BIG)
1647 return 0;
1649 if (command_line.endian == ENDIAN_LITTLE
1650 && target->byteorder != BFD_ENDIAN_LITTLE)
1651 return 0;
1653 /* Must be the same flavour. */
1654 if (target->flavour != original->flavour)
1655 return 0;
1657 /* If we have not found a potential winner yet, then record this one. */
1658 if (winner == NULL)
1660 winner = target;
1661 return 0;
1664 /* Oh dear, we now have two potential candidates for a successful match.
1665 Compare their names and choose the better one. */
1666 if (name_compare (target->name, original->name) > name_compare (winner->name, original->name))
1667 winner = target;
1669 /* Keep on searching until wqe have checked them all. */
1670 return 0;
1673 /* Return the BFD target format of the first input file. */
1675 static char *
1676 get_first_input_target ()
1678 char *target = NULL;
1680 LANG_FOR_EACH_INPUT_STATEMENT (s)
1682 if (s->header.type == lang_input_statement_enum
1683 && s->real)
1685 ldfile_open_file (s);
1687 if (s->the_bfd != NULL
1688 && bfd_check_format (s->the_bfd, bfd_object))
1690 target = bfd_get_target (s->the_bfd);
1692 if (target != NULL)
1693 break;
1698 return target;
1701 /* Open the output file. */
1703 static bfd *
1704 open_output (name)
1705 const char *name;
1707 bfd *output;
1709 /* Has the user told us which output format to use? */
1710 if (output_target == (char *) NULL)
1712 /* No - has the current target been set to something other than
1713 the default? */
1714 if (current_target != default_target)
1715 output_target = current_target;
1717 /* No - can we determine the format of the first input file? */
1718 else
1720 output_target = get_first_input_target ();
1722 /* Failed - use the default output target. */
1723 if (output_target == NULL)
1724 output_target = default_target;
1728 /* Has the user requested a particular endianness on the command
1729 line? */
1730 if (command_line.endian != ENDIAN_UNSET)
1732 const bfd_target *target;
1733 enum bfd_endian desired_endian;
1735 /* Get the chosen target. */
1736 target = bfd_search_for_target (get_target, (PTR) output_target);
1738 /* If the target is not supported, we cannot do anything. */
1739 if (target != NULL)
1741 if (command_line.endian == ENDIAN_BIG)
1742 desired_endian = BFD_ENDIAN_BIG;
1743 else
1744 desired_endian = BFD_ENDIAN_LITTLE;
1746 /* See if the target has the wrong endianness. This should
1747 not happen if the linker script has provided big and
1748 little endian alternatives, but some scrips don't do
1749 this. */
1750 if (target->byteorder != desired_endian)
1752 /* If it does, then see if the target provides
1753 an alternative with the correct endianness. */
1754 if (target->alternative_target != NULL
1755 && (target->alternative_target->byteorder == desired_endian))
1756 output_target = target->alternative_target->name;
1757 else
1759 /* Try to find a target as similar as possible to
1760 the default target, but which has the desired
1761 endian characteristic. */
1762 (void) bfd_search_for_target (closest_target_match, (PTR) target);
1764 /* Oh dear - we could not find any targets that
1765 satisfy our requirements. */
1766 if (winner == NULL)
1767 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1768 else
1769 output_target = winner->name;
1775 output = bfd_openw (name, output_target);
1777 if (output == (bfd *) NULL)
1779 if (bfd_get_error () == bfd_error_invalid_target)
1780 einfo (_("%P%F: target %s not found\n"), output_target);
1782 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1785 delete_output_file_on_failure = true;
1787 #if 0
1788 output->flags |= D_PAGED;
1789 #endif
1791 if (! bfd_set_format (output, bfd_object))
1792 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1793 if (! bfd_set_arch_mach (output,
1794 ldfile_output_architecture,
1795 ldfile_output_machine))
1796 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1798 link_info.hash = bfd_link_hash_table_create (output);
1799 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1800 einfo (_("%P%F: can not create link hash table: %E\n"));
1802 bfd_set_gp_size (output, g_switch_value);
1803 return output;
1806 static void
1807 ldlang_open_output (statement)
1808 lang_statement_union_type *statement;
1810 switch (statement->header.type)
1812 case lang_output_statement_enum:
1813 ASSERT (output_bfd == (bfd *) NULL);
1814 output_bfd = open_output (statement->output_statement.name);
1815 ldemul_set_output_arch ();
1816 if (config.magic_demand_paged && !link_info.relocateable)
1817 output_bfd->flags |= D_PAGED;
1818 else
1819 output_bfd->flags &= ~D_PAGED;
1820 if (config.text_read_only)
1821 output_bfd->flags |= WP_TEXT;
1822 else
1823 output_bfd->flags &= ~WP_TEXT;
1824 if (link_info.traditional_format)
1825 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1826 else
1827 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1828 break;
1830 case lang_target_statement_enum:
1831 current_target = statement->target_statement.target;
1832 break;
1833 default:
1834 break;
1838 /* Open all the input files. */
1840 static void
1841 open_input_bfds (s, force)
1842 lang_statement_union_type *s;
1843 boolean force;
1845 for (; s != (lang_statement_union_type *) NULL; s = s->next)
1847 switch (s->header.type)
1849 case lang_constructors_statement_enum:
1850 open_input_bfds (constructor_list.head, force);
1851 break;
1852 case lang_output_section_statement_enum:
1853 open_input_bfds (s->output_section_statement.children.head, force);
1854 break;
1855 case lang_wild_statement_enum:
1856 /* Maybe we should load the file's symbols. */
1857 if (s->wild_statement.filename
1858 && ! wildcardp (s->wild_statement.filename))
1859 (void) lookup_name (s->wild_statement.filename);
1860 open_input_bfds (s->wild_statement.children.head, force);
1861 break;
1862 case lang_group_statement_enum:
1864 struct bfd_link_hash_entry *undefs;
1866 /* We must continually search the entries in the group
1867 until no new symbols are added to the list of undefined
1868 symbols. */
1872 undefs = link_info.hash->undefs_tail;
1873 open_input_bfds (s->group_statement.children.head, true);
1875 while (undefs != link_info.hash->undefs_tail);
1877 break;
1878 case lang_target_statement_enum:
1879 current_target = s->target_statement.target;
1880 break;
1881 case lang_input_statement_enum:
1882 if (s->input_statement.real)
1884 lang_statement_list_type add;
1886 s->input_statement.target = current_target;
1888 /* If we are being called from within a group, and this
1889 is an archive which has already been searched, then
1890 force it to be researched unless the whole archive
1891 has been loaded already. */
1892 if (force
1893 && !s->input_statement.whole_archive
1894 && s->input_statement.loaded
1895 && bfd_check_format (s->input_statement.the_bfd,
1896 bfd_archive))
1897 s->input_statement.loaded = false;
1899 lang_list_init (&add);
1901 load_symbols (&s->input_statement, &add);
1903 if (add.head != NULL)
1905 *add.tail = s->next;
1906 s->next = add.head;
1909 break;
1910 default:
1911 break;
1916 /* If there are [COMMONS] statements, put a wild one into the bss
1917 section. */
1919 static void
1920 lang_reasonable_defaults ()
1922 #if 0
1923 lang_output_section_statement_lookup (".text");
1924 lang_output_section_statement_lookup (".data");
1926 default_common_section = lang_output_section_statement_lookup (".bss");
1928 if (placed_commons == false)
1930 lang_wild_statement_type *new =
1931 new_stat (lang_wild_statement,
1932 &default_common_section->children);
1934 new->section_name = "COMMON";
1935 new->filename = (char *) NULL;
1936 lang_list_init (&new->children);
1938 #endif
1941 /* Add the supplied name to the symbol table as an undefined reference.
1942 Remove items from the chain as we open input bfds. */
1943 typedef struct ldlang_undef_chain_list
1945 struct ldlang_undef_chain_list *next;
1946 char *name;
1947 } ldlang_undef_chain_list_type;
1949 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
1951 void
1952 ldlang_add_undef (name)
1953 const char *const name;
1955 ldlang_undef_chain_list_type *new =
1956 ((ldlang_undef_chain_list_type *)
1957 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
1959 new->next = ldlang_undef_chain_list_head;
1960 ldlang_undef_chain_list_head = new;
1962 new->name = buystring (name);
1965 /* Run through the list of undefineds created above and place them
1966 into the linker hash table as undefined symbols belonging to the
1967 script file. */
1969 static void
1970 lang_place_undefineds ()
1972 ldlang_undef_chain_list_type *ptr;
1974 for (ptr = ldlang_undef_chain_list_head;
1975 ptr != (ldlang_undef_chain_list_type *) NULL;
1976 ptr = ptr->next)
1978 struct bfd_link_hash_entry *h;
1980 h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
1981 if (h == (struct bfd_link_hash_entry *) NULL)
1982 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1983 if (h->type == bfd_link_hash_new)
1985 h->type = bfd_link_hash_undefined;
1986 h->u.undef.abfd = NULL;
1987 bfd_link_add_undef (link_info.hash, h);
1992 /* Open input files and attatch to output sections. */
1994 static void
1995 map_input_to_output_sections (s, target, output_section_statement)
1996 lang_statement_union_type *s;
1997 const char *target;
1998 lang_output_section_statement_type *output_section_statement;
2000 for (; s != (lang_statement_union_type *) NULL; s = s->next)
2002 switch (s->header.type)
2005 case lang_wild_statement_enum:
2006 wild (&s->wild_statement, s->wild_statement.section_name,
2007 s->wild_statement.filename, target,
2008 output_section_statement);
2010 break;
2011 case lang_constructors_statement_enum:
2012 map_input_to_output_sections (constructor_list.head,
2013 target,
2014 output_section_statement);
2015 break;
2016 case lang_output_section_statement_enum:
2017 map_input_to_output_sections (s->output_section_statement.children.head,
2018 target,
2019 &s->output_section_statement);
2020 break;
2021 case lang_output_statement_enum:
2022 break;
2023 case lang_target_statement_enum:
2024 target = s->target_statement.target;
2025 break;
2026 case lang_group_statement_enum:
2027 map_input_to_output_sections (s->group_statement.children.head,
2028 target,
2029 output_section_statement);
2030 break;
2031 case lang_fill_statement_enum:
2032 case lang_input_section_enum:
2033 case lang_object_symbols_statement_enum:
2034 case lang_data_statement_enum:
2035 case lang_reloc_statement_enum:
2036 case lang_padding_statement_enum:
2037 case lang_input_statement_enum:
2038 if (output_section_statement != NULL
2039 && output_section_statement->bfd_section == NULL)
2040 init_os (output_section_statement);
2041 break;
2042 case lang_assignment_statement_enum:
2043 if (output_section_statement != NULL
2044 && output_section_statement->bfd_section == NULL)
2045 init_os (output_section_statement);
2047 /* Make sure that any sections mentioned in the assignment
2048 are initialized. */
2049 exp_init_os (s->assignment_statement.exp);
2050 break;
2051 case lang_afile_asection_pair_statement_enum:
2052 FAIL ();
2053 break;
2054 case lang_address_statement_enum:
2055 /* Mark the specified section with the supplied address. */
2057 lang_output_section_statement_type *os =
2058 lang_output_section_statement_lookup
2059 (s->address_statement.section_name);
2061 if (os->bfd_section == NULL)
2062 init_os (os);
2063 os->addr_tree = s->address_statement.address;
2065 break;
2070 static void
2071 print_output_section_statement (output_section_statement)
2072 lang_output_section_statement_type *output_section_statement;
2074 asection *section = output_section_statement->bfd_section;
2075 int len;
2077 if (output_section_statement != abs_output_section)
2079 minfo ("\n%s", output_section_statement->name);
2081 if (section != NULL)
2083 print_dot = section->vma;
2085 len = strlen (output_section_statement->name);
2086 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2088 print_nl ();
2089 len = 0;
2091 while (len < SECTION_NAME_MAP_LENGTH)
2093 print_space ();
2094 ++len;
2097 minfo ("0x%V %W", section->vma, section->_raw_size);
2099 if (output_section_statement->load_base != NULL)
2101 bfd_vma addr;
2103 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2104 "load base", lang_final_phase_enum);
2105 minfo (_(" load address 0x%V"), addr);
2109 print_nl ();
2112 print_statement_list (output_section_statement->children.head,
2113 output_section_statement);
2116 static void
2117 print_assignment (assignment, output_section)
2118 lang_assignment_statement_type *assignment;
2119 lang_output_section_statement_type *output_section;
2121 int i;
2122 etree_value_type result;
2124 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2125 print_space ();
2127 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2128 lang_final_phase_enum, print_dot, &print_dot);
2129 if (result.valid_p)
2130 minfo ("0x%V", result.value + result.section->bfd_section->vma);
2131 else
2133 minfo ("*undef* ");
2134 #ifdef BFD64
2135 minfo (" ");
2136 #endif
2139 minfo (" ");
2141 exp_print_tree (assignment->exp);
2143 print_nl ();
2146 static void
2147 print_input_statement (statm)
2148 lang_input_statement_type *statm;
2150 if (statm->filename != (char *) NULL)
2152 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2156 /* Print all symbols defined in a particular section. This is called
2157 via bfd_link_hash_traverse. */
2159 static boolean
2160 print_one_symbol (hash_entry, ptr)
2161 struct bfd_link_hash_entry *hash_entry;
2162 PTR ptr;
2164 asection *sec = (asection *) ptr;
2166 if ((hash_entry->type == bfd_link_hash_defined
2167 || hash_entry->type == bfd_link_hash_defweak)
2168 && sec == hash_entry->u.def.section)
2170 int i;
2172 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2173 print_space ();
2174 minfo ("0x%V ",
2175 (hash_entry->u.def.value
2176 + hash_entry->u.def.section->output_offset
2177 + hash_entry->u.def.section->output_section->vma));
2179 minfo (" %T\n", hash_entry->root.string);
2182 return true;
2185 /* Print information about an input section to the map file. */
2187 static void
2188 print_input_section (in)
2189 lang_input_section_type *in;
2191 asection *i = in->section;
2192 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
2193 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2194 ldfile_output_machine);
2195 if (size != 0)
2197 print_space ();
2199 minfo ("%s", i->name);
2201 if (i->output_section != NULL)
2203 int len;
2205 len = 1 + strlen (i->name);
2206 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2208 print_nl ();
2209 len = 0;
2211 while (len < SECTION_NAME_MAP_LENGTH)
2213 print_space ();
2214 ++len;
2217 minfo ("0x%V %W %B\n",
2218 i->output_section->vma + i->output_offset, size / opb,
2219 i->owner);
2221 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2223 len = SECTION_NAME_MAP_LENGTH + 3;
2224 #ifdef BFD64
2225 len += 16;
2226 #else
2227 len += 8;
2228 #endif
2229 while (len > 0)
2231 print_space ();
2232 --len;
2235 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2238 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2240 print_dot = i->output_section->vma + i->output_offset + size / opb;
2245 static void
2246 print_fill_statement (fill)
2247 lang_fill_statement_type *fill;
2249 fprintf (config.map_file, " FILL mask 0x%x\n", fill->fill);
2252 static void
2253 print_data_statement (data)
2254 lang_data_statement_type *data;
2256 int i;
2257 bfd_vma addr;
2258 bfd_size_type size;
2259 const char *name;
2260 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2261 ldfile_output_machine);
2263 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2264 print_space ();
2266 addr = data->output_vma;
2267 if (data->output_section != NULL)
2268 addr += data->output_section->vma;
2270 switch (data->type)
2272 default:
2273 abort ();
2274 case BYTE:
2275 size = BYTE_SIZE;
2276 name = "BYTE";
2277 break;
2278 case SHORT:
2279 size = SHORT_SIZE;
2280 name = "SHORT";
2281 break;
2282 case LONG:
2283 size = LONG_SIZE;
2284 name = "LONG";
2285 break;
2286 case QUAD:
2287 size = QUAD_SIZE;
2288 name = "QUAD";
2289 break;
2290 case SQUAD:
2291 size = QUAD_SIZE;
2292 name = "SQUAD";
2293 break;
2296 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2298 if (data->exp->type.node_class != etree_value)
2300 print_space ();
2301 exp_print_tree (data->exp);
2304 print_nl ();
2306 print_dot = addr + size / opb;
2310 /* Print an address statement. These are generated by options like
2311 -Ttext. */
2313 static void
2314 print_address_statement (address)
2315 lang_address_statement_type *address;
2317 minfo (_("Address of section %s set to "), address->section_name);
2318 exp_print_tree (address->address);
2319 print_nl ();
2322 /* Print a reloc statement. */
2324 static void
2325 print_reloc_statement (reloc)
2326 lang_reloc_statement_type *reloc;
2328 int i;
2329 bfd_vma addr;
2330 bfd_size_type size;
2331 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2332 ldfile_output_machine);
2334 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2335 print_space ();
2337 addr = reloc->output_vma;
2338 if (reloc->output_section != NULL)
2339 addr += reloc->output_section->vma;
2341 size = bfd_get_reloc_size (reloc->howto);
2343 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2345 if (reloc->name != NULL)
2346 minfo ("%s+", reloc->name);
2347 else
2348 minfo ("%s+", reloc->section->name);
2350 exp_print_tree (reloc->addend_exp);
2352 print_nl ();
2354 print_dot = addr + size / opb;
2357 static void
2358 print_padding_statement (s)
2359 lang_padding_statement_type *s;
2361 int len;
2362 bfd_vma addr;
2363 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2364 ldfile_output_machine);
2366 minfo (" *fill*");
2368 len = sizeof " *fill*" - 1;
2369 while (len < SECTION_NAME_MAP_LENGTH)
2371 print_space ();
2372 ++len;
2375 addr = s->output_offset;
2376 if (s->output_section != NULL)
2377 addr += s->output_section->vma;
2378 minfo ("0x%V %W", addr, s->size);
2380 if (s->fill != 0)
2381 minfo (" %u", s->fill);
2383 print_nl ();
2385 print_dot = addr + s->size / opb;
2388 static void
2389 print_wild_statement (w, os)
2390 lang_wild_statement_type *w;
2391 lang_output_section_statement_type *os;
2393 print_space ();
2395 if (w->filenames_sorted)
2396 minfo ("SORT(");
2397 if (w->exclude_filename_list != NULL)
2399 name_list *tmp;
2400 minfo ("EXCLUDE_FILE ( %s", w->exclude_filename_list->name);
2401 for (tmp = w->exclude_filename_list->next; tmp; tmp = tmp->next)
2402 minfo (", %s", tmp->name);
2403 minfo (")");
2405 if (w->filename != NULL)
2406 minfo ("%s", w->filename);
2407 else
2408 minfo ("*");
2409 if (w->filenames_sorted)
2410 minfo (")");
2412 minfo ("(");
2413 if (w->sections_sorted)
2414 minfo ("SORT(");
2415 if (w->section_name != NULL)
2416 minfo ("%s", w->section_name);
2417 else
2418 minfo ("*");
2419 if (w->sections_sorted)
2420 minfo (")");
2421 minfo (")");
2423 print_nl ();
2425 print_statement_list (w->children.head, os);
2428 /* Print a group statement. */
2430 static void
2431 print_group (s, os)
2432 lang_group_statement_type *s;
2433 lang_output_section_statement_type *os;
2435 fprintf (config.map_file, "START GROUP\n");
2436 print_statement_list (s->children.head, os);
2437 fprintf (config.map_file, "END GROUP\n");
2440 /* Print the list of statements in S.
2441 This can be called for any statement type. */
2443 static void
2444 print_statement_list (s, os)
2445 lang_statement_union_type *s;
2446 lang_output_section_statement_type *os;
2448 while (s != NULL)
2450 print_statement (s, os);
2451 s = s->next;
2455 /* Print the first statement in statement list S.
2456 This can be called for any statement type. */
2458 static void
2459 print_statement (s, os)
2460 lang_statement_union_type *s;
2461 lang_output_section_statement_type *os;
2463 switch (s->header.type)
2465 default:
2466 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2467 FAIL ();
2468 break;
2469 case lang_constructors_statement_enum:
2470 if (constructor_list.head != NULL)
2472 if (constructors_sorted)
2473 minfo (" SORT (CONSTRUCTORS)\n");
2474 else
2475 minfo (" CONSTRUCTORS\n");
2476 print_statement_list (constructor_list.head, os);
2478 break;
2479 case lang_wild_statement_enum:
2480 print_wild_statement (&s->wild_statement, os);
2481 break;
2482 case lang_address_statement_enum:
2483 print_address_statement (&s->address_statement);
2484 break;
2485 case lang_object_symbols_statement_enum:
2486 minfo (" CREATE_OBJECT_SYMBOLS\n");
2487 break;
2488 case lang_fill_statement_enum:
2489 print_fill_statement (&s->fill_statement);
2490 break;
2491 case lang_data_statement_enum:
2492 print_data_statement (&s->data_statement);
2493 break;
2494 case lang_reloc_statement_enum:
2495 print_reloc_statement (&s->reloc_statement);
2496 break;
2497 case lang_input_section_enum:
2498 print_input_section (&s->input_section);
2499 break;
2500 case lang_padding_statement_enum:
2501 print_padding_statement (&s->padding_statement);
2502 break;
2503 case lang_output_section_statement_enum:
2504 print_output_section_statement (&s->output_section_statement);
2505 break;
2506 case lang_assignment_statement_enum:
2507 print_assignment (&s->assignment_statement, os);
2508 break;
2509 case lang_target_statement_enum:
2510 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2511 break;
2512 case lang_output_statement_enum:
2513 minfo ("OUTPUT(%s", s->output_statement.name);
2514 if (output_target != NULL)
2515 minfo (" %s", output_target);
2516 minfo (")\n");
2517 break;
2518 case lang_input_statement_enum:
2519 print_input_statement (&s->input_statement);
2520 break;
2521 case lang_group_statement_enum:
2522 print_group (&s->group_statement, os);
2523 break;
2524 case lang_afile_asection_pair_statement_enum:
2525 FAIL ();
2526 break;
2530 static void
2531 print_statements ()
2533 print_statement_list (statement_list.head, abs_output_section);
2536 /* Print the first N statements in statement list S to STDERR.
2537 If N == 0, nothing is printed.
2538 If N < 0, the entire list is printed.
2539 Intended to be called from GDB. */
2541 void
2542 dprint_statement (s, n)
2543 lang_statement_union_type *s;
2544 int n;
2546 FILE *map_save = config.map_file;
2548 config.map_file = stderr;
2550 if (n < 0)
2551 print_statement_list (s, abs_output_section);
2552 else
2554 while (s && --n >= 0)
2556 print_statement (s, abs_output_section);
2557 s = s->next;
2561 config.map_file = map_save;
2564 static bfd_vma
2565 insert_pad (this_ptr, fill, power, output_section_statement, dot)
2566 lang_statement_union_type **this_ptr;
2567 fill_type fill;
2568 unsigned int power;
2569 asection *output_section_statement;
2570 bfd_vma dot;
2572 /* Align this section first to the
2573 input sections requirement, then
2574 to the output section's requirement.
2575 If this alignment is > than any seen before,
2576 then record it too. Perform the alignment by
2577 inserting a magic 'padding' statement. */
2579 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2580 ldfile_output_machine);
2581 unsigned int alignment_needed = align_power (dot, power) - dot;
2583 if (alignment_needed != 0)
2585 lang_statement_union_type *new =
2586 ((lang_statement_union_type *)
2587 stat_alloc (sizeof (lang_padding_statement_type)));
2589 /* Link into existing chain. */
2590 new->header.next = *this_ptr;
2591 *this_ptr = new;
2592 new->header.type = lang_padding_statement_enum;
2593 new->padding_statement.output_section = output_section_statement;
2594 new->padding_statement.output_offset =
2595 dot - output_section_statement->vma;
2596 new->padding_statement.fill = fill;
2597 new->padding_statement.size = alignment_needed * opb;
2600 /* Remember the most restrictive alignment. */
2601 if (power > output_section_statement->alignment_power)
2603 output_section_statement->alignment_power = power;
2605 output_section_statement->_raw_size += alignment_needed * opb;
2607 return dot + alignment_needed;
2610 /* Work out how much this section will move the dot point. */
2612 static bfd_vma
2613 size_input_section (this_ptr, output_section_statement, fill, dot, relax)
2614 lang_statement_union_type **this_ptr;
2615 lang_output_section_statement_type *output_section_statement;
2616 fill_type fill;
2617 bfd_vma dot;
2618 boolean relax ATTRIBUTE_UNUSED;
2620 lang_input_section_type *is = &((*this_ptr)->input_section);
2621 asection *i = is->section;
2622 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2623 ldfile_output_machine);
2625 if (is->ifile->just_syms_flag == false)
2627 if (output_section_statement->subsection_alignment != -1)
2628 i->alignment_power =
2629 output_section_statement->subsection_alignment;
2631 dot = insert_pad (this_ptr, fill, i->alignment_power,
2632 output_section_statement->bfd_section, dot);
2634 /* Remember where in the output section this input section goes. */
2636 i->output_offset = dot - output_section_statement->bfd_section->vma;
2638 /* Mark how big the output section must be to contain this now. */
2639 if (i->_cooked_size != 0)
2640 dot += i->_cooked_size / opb;
2641 else
2642 dot += i->_raw_size / opb;
2643 output_section_statement->bfd_section->_raw_size =
2644 (dot - output_section_statement->bfd_section->vma) * opb;
2646 else
2648 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2651 return dot;
2654 #define IGNORE_SECTION(bfd, s) \
2655 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) != (SEC_ALLOC | SEC_LOAD)) \
2656 || bfd_section_size (bfd, s) == 0)
2658 /* Check to see if any allocated sections overlap with other allocated
2659 sections. This can happen when the linker script specifically specifies
2660 the output section addresses of the two sections. */
2662 static void
2663 lang_check_section_addresses ()
2665 asection *s;
2666 unsigned opb = bfd_octets_per_byte (output_bfd);
2668 /* Scan all sections in the output list. */
2669 for (s = output_bfd->sections; s != NULL; s = s->next)
2671 asection *os;
2673 /* Ignore sections which are not loaded or which have no contents. */
2674 if (IGNORE_SECTION (output_bfd, s))
2675 continue;
2677 /* Once we reach section 's' stop our seach. This prevents two
2678 warning messages from being produced, one for 'section A overlaps
2679 section B' and one for 'section B overlaps section A'. */
2680 for (os = output_bfd->sections; os != s; os = os->next)
2682 bfd_vma s_start;
2683 bfd_vma s_end;
2684 bfd_vma os_start;
2685 bfd_vma os_end;
2687 /* Only consider loadable sections with real contents. */
2688 if (IGNORE_SECTION (output_bfd, os))
2689 continue;
2691 /* We must check the sections' LMA addresses not their
2692 VMA addresses because overlay sections can have
2693 overlapping VMAs but they must have distinct LMAs. */
2694 s_start = bfd_section_lma (output_bfd, s);
2695 os_start = bfd_section_lma (output_bfd, os);
2696 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2697 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
2699 /* Look for an overlap. */
2700 if ((s_end < os_start) || (s_start > os_end))
2701 continue;
2703 einfo (
2704 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2705 s->name, s_start, s_end, os->name, os_start, os_end);
2707 /* Once we have found one overlap for this section,
2708 stop looking for others. */
2709 break;
2714 /* This variable indicates whether bfd_relax_section should be called
2715 again. */
2717 static boolean relax_again;
2719 /* Make sure the new address is within the region. We explicitly permit the
2720 current address to be at the exact end of the region when the address is
2721 non-zero, in case the region is at the end of addressable memory and the
2722 calculation wraps around. */
2724 static void
2725 os_region_check (os, region, tree, base)
2726 lang_output_section_statement_type *os;
2727 struct memory_region_struct *region;
2728 etree_type *tree;
2729 bfd_vma base;
2731 if ((region->current < region->origin
2732 || (region->current - region->origin > region->length))
2733 && ((region->current != region->origin + region->length)
2734 || base == 0))
2736 if (tree != (etree_type *) NULL)
2738 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2739 region->current,
2740 os->bfd_section->owner,
2741 os->bfd_section->name,
2742 region->name);
2744 else
2746 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2747 region->name,
2748 os->bfd_section->owner,
2749 os->bfd_section->name);
2751 /* Reset the region pointer. */
2752 region->current = region->origin;
2756 /* Set the sizes for all the output sections. */
2758 bfd_vma
2759 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
2760 lang_statement_union_type *s;
2761 lang_output_section_statement_type *output_section_statement;
2762 lang_statement_union_type **prev;
2763 fill_type fill;
2764 bfd_vma dot;
2765 boolean relax;
2767 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2768 ldfile_output_machine);
2770 /* Size up the sections from their constituent parts. */
2771 for (; s != (lang_statement_union_type *) NULL; s = s->next)
2773 switch (s->header.type)
2775 case lang_output_section_statement_enum:
2777 bfd_vma after;
2778 lang_output_section_statement_type *os = &s->output_section_statement;
2780 if (os->bfd_section == NULL)
2781 /* This section was never actually created. */
2782 break;
2784 /* If this is a COFF shared library section, use the size and
2785 address from the input section. FIXME: This is COFF
2786 specific; it would be cleaner if there were some other way
2787 to do this, but nothing simple comes to mind. */
2788 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2790 asection *input;
2792 if (os->children.head == NULL
2793 || os->children.head->next != NULL
2794 || os->children.head->header.type != lang_input_section_enum)
2795 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2796 os->name);
2798 input = os->children.head->input_section.section;
2799 bfd_set_section_vma (os->bfd_section->owner,
2800 os->bfd_section,
2801 bfd_section_vma (input->owner, input));
2802 os->bfd_section->_raw_size = input->_raw_size;
2803 break;
2806 if (bfd_is_abs_section (os->bfd_section))
2808 /* No matter what happens, an abs section starts at zero. */
2809 ASSERT (os->bfd_section->vma == 0);
2811 else
2813 if (os->addr_tree == (etree_type *) NULL)
2815 /* No address specified for this section, get one
2816 from the region specification. */
2817 if (os->region == (lang_memory_region_type *) NULL
2818 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2819 & (SEC_ALLOC | SEC_LOAD)) != 0)
2820 && os->region->name[0] == '*'
2821 && strcmp (os->region->name, "*default*") == 0))
2823 os->region = lang_memory_default (os->bfd_section);
2826 /* If a loadable section is using the default memory
2827 region, and some non default memory regions were
2828 defined, issue a warning. */
2829 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
2830 & (SEC_ALLOC | SEC_LOAD)) != 0
2831 && ! link_info.relocateable
2832 && strcmp (os->region->name, "*default*") == 0
2833 && lang_memory_region_list != NULL
2834 && (strcmp (lang_memory_region_list->name, "*default*") != 0
2835 || lang_memory_region_list->next != NULL))
2836 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2837 bfd_get_section_name (output_bfd, os->bfd_section));
2839 dot = os->region->current;
2841 if (os->section_alignment == -1)
2843 bfd_vma olddot;
2845 olddot = dot;
2846 dot = align_power (dot, os->bfd_section->alignment_power);
2848 if (dot != olddot && config.warn_section_align)
2849 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2850 os->name, (unsigned int) (dot - olddot));
2853 else
2855 etree_value_type r;
2857 r = exp_fold_tree (os->addr_tree,
2858 abs_output_section,
2859 lang_allocating_phase_enum,
2860 dot, &dot);
2861 if (r.valid_p == false)
2863 einfo (_("%F%S: non constant address expression for section %s\n"),
2864 os->name);
2866 dot = r.value + r.section->bfd_section->vma;
2869 /* The section starts here.
2870 First, align to what the section needs. */
2872 if (os->section_alignment != -1)
2873 dot = align_power (dot, os->section_alignment);
2875 bfd_set_section_vma (0, os->bfd_section, dot);
2877 os->bfd_section->output_offset = 0;
2880 (void) lang_size_sections (os->children.head, os,
2881 &os->children.head,
2882 os->fill, dot, relax);
2884 /* Put the section within the requested block size, or
2885 align at the block boundary. */
2886 after = ALIGN_N (os->bfd_section->vma
2887 + os->bfd_section->_raw_size / opb,
2888 /* The coercion here is important, see ld.h. */
2889 (bfd_vma) os->block_value);
2891 if (bfd_is_abs_section (os->bfd_section))
2892 ASSERT (after == os->bfd_section->vma);
2893 else
2894 os->bfd_section->_raw_size =
2895 (after - os->bfd_section->vma) * opb;
2896 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
2897 os->processed = true;
2899 /* Update dot in the region ?
2900 We only do this if the section is going to be allocated,
2901 since unallocated sections do not contribute to the region's
2902 overall size in memory.
2904 If the SEC_NEVER_LOAD bit is not set, it will affect the
2905 addresses of sections after it. We have to update
2906 dot. */
2907 if (os->region != (lang_memory_region_type *) NULL
2908 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
2909 & SEC_NEVER_LOAD) == 0
2910 || (bfd_get_section_flags (output_bfd, os->bfd_section)
2911 & (SEC_ALLOC | SEC_LOAD))))
2913 os->region->current = dot;
2915 /* Make sure the new address is within the region. */
2916 os_region_check (os, os->region, os->addr_tree,
2917 os->bfd_section->vma);
2919 /* If there's no load address specified, use the run
2920 region as the load region. */
2921 if (os->lma_region == NULL && os->load_base == NULL)
2922 os->lma_region = os->region;
2924 if (os->lma_region != NULL)
2926 if (os->load_base != NULL)
2928 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
2930 else
2932 /* Don't allocate twice. */
2933 if (os->lma_region != os->region)
2935 /* Set load_base, which will be handled later. */
2936 os->load_base =
2937 exp_intop (os->lma_region->current);
2938 os->lma_region->current +=
2939 os->bfd_section->_raw_size / opb;
2940 os_region_check (os, os->lma_region, NULL,
2941 os->bfd_section->lma);
2947 break;
2949 case lang_constructors_statement_enum:
2950 dot = lang_size_sections (constructor_list.head,
2951 output_section_statement,
2952 &s->wild_statement.children.head,
2953 fill,
2954 dot, relax);
2955 break;
2957 case lang_data_statement_enum:
2959 unsigned int size = 0;
2961 s->data_statement.output_vma =
2962 dot - output_section_statement->bfd_section->vma;
2963 s->data_statement.output_section =
2964 output_section_statement->bfd_section;
2966 switch (s->data_statement.type)
2968 default:
2969 abort ();
2970 case QUAD:
2971 case SQUAD:
2972 size = QUAD_SIZE;
2973 break;
2974 case LONG:
2975 size = LONG_SIZE;
2976 break;
2977 case SHORT:
2978 size = SHORT_SIZE;
2979 break;
2980 case BYTE:
2981 size = BYTE_SIZE;
2982 break;
2984 if (size < opb)
2985 size = opb;
2986 dot += size / opb;
2987 output_section_statement->bfd_section->_raw_size += size;
2988 /* The output section gets contents, and then we inspect for
2989 any flags set in the input script which override any ALLOC. */
2990 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
2991 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
2993 output_section_statement->bfd_section->flags |=
2994 SEC_ALLOC | SEC_LOAD;
2997 break;
2999 case lang_reloc_statement_enum:
3001 int size;
3003 s->reloc_statement.output_vma =
3004 dot - output_section_statement->bfd_section->vma;
3005 s->reloc_statement.output_section =
3006 output_section_statement->bfd_section;
3007 size = bfd_get_reloc_size (s->reloc_statement.howto);
3008 dot += size / opb;
3009 output_section_statement->bfd_section->_raw_size += size;
3011 break;
3013 case lang_wild_statement_enum:
3015 dot = lang_size_sections (s->wild_statement.children.head,
3016 output_section_statement,
3017 &s->wild_statement.children.head,
3018 fill, dot, relax);
3020 break;
3022 case lang_object_symbols_statement_enum:
3023 link_info.create_object_symbols_section =
3024 output_section_statement->bfd_section;
3025 break;
3026 case lang_output_statement_enum:
3027 case lang_target_statement_enum:
3028 break;
3029 case lang_input_section_enum:
3031 asection *i;
3033 i = (*prev)->input_section.section;
3034 if (! relax)
3036 if (i->_cooked_size == 0)
3037 i->_cooked_size = i->_raw_size;
3039 else
3041 boolean again;
3043 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3044 einfo (_("%P%F: can't relax section: %E\n"));
3045 if (again)
3046 relax_again = true;
3048 dot = size_input_section (prev,
3049 output_section_statement,
3050 output_section_statement->fill,
3051 dot, relax);
3053 break;
3054 case lang_input_statement_enum:
3055 break;
3056 case lang_fill_statement_enum:
3057 s->fill_statement.output_section =
3058 output_section_statement->bfd_section;
3060 fill = s->fill_statement.fill;
3061 break;
3062 case lang_assignment_statement_enum:
3064 bfd_vma newdot = dot;
3066 exp_fold_tree (s->assignment_statement.exp,
3067 output_section_statement,
3068 lang_allocating_phase_enum,
3069 dot,
3070 &newdot);
3072 if (newdot != dot)
3074 /* The assignment changed dot. Insert a pad. */
3075 if (output_section_statement == abs_output_section)
3077 /* If we don't have an output section, then just adjust
3078 the default memory address. */
3079 lang_memory_region_lookup ("*default*")->current = newdot;
3081 else if (!relax)
3083 lang_statement_union_type *new =
3084 ((lang_statement_union_type *)
3085 stat_alloc (sizeof (lang_padding_statement_type)));
3087 /* Link into existing chain. */
3088 new->header.next = *prev;
3089 *prev = new;
3090 new->header.type = lang_padding_statement_enum;
3091 new->padding_statement.output_section =
3092 output_section_statement->bfd_section;
3093 new->padding_statement.output_offset =
3094 dot - output_section_statement->bfd_section->vma;
3095 new->padding_statement.fill = fill;
3096 new->padding_statement.size = (newdot - dot) * opb;
3097 output_section_statement->bfd_section->_raw_size +=
3098 new->padding_statement.size;
3101 dot = newdot;
3104 break;
3106 case lang_padding_statement_enum:
3107 /* If we are relaxing, and this is not the first pass, some
3108 padding statements may have been inserted during previous
3109 passes. We may have to move the padding statement to a new
3110 location if dot has a different value at this point in this
3111 pass than it did at this point in the previous pass. */
3112 s->padding_statement.output_offset =
3113 dot - output_section_statement->bfd_section->vma;
3114 dot += s->padding_statement.size / opb;
3115 output_section_statement->bfd_section->_raw_size +=
3116 s->padding_statement.size;
3117 break;
3119 case lang_group_statement_enum:
3120 dot = lang_size_sections (s->group_statement.children.head,
3121 output_section_statement,
3122 &s->group_statement.children.head,
3123 fill, dot, relax);
3124 break;
3126 default:
3127 FAIL ();
3128 break;
3130 /* This can only get here when relaxing is turned on. */
3132 case lang_address_statement_enum:
3133 break;
3135 prev = &s->header.next;
3137 return dot;
3140 bfd_vma
3141 lang_do_assignments (s, output_section_statement, fill, dot)
3142 lang_statement_union_type *s;
3143 lang_output_section_statement_type *output_section_statement;
3144 fill_type fill;
3145 bfd_vma dot;
3147 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3148 ldfile_output_machine);
3150 for (; s != (lang_statement_union_type *) NULL; s = s->next)
3152 switch (s->header.type)
3154 case lang_constructors_statement_enum:
3155 dot = lang_do_assignments (constructor_list.head,
3156 output_section_statement,
3157 fill,
3158 dot);
3159 break;
3161 case lang_output_section_statement_enum:
3163 lang_output_section_statement_type *os =
3164 &(s->output_section_statement);
3166 if (os->bfd_section != NULL)
3168 dot = os->bfd_section->vma;
3169 (void) lang_do_assignments (os->children.head, os,
3170 os->fill, dot);
3171 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3174 if (os->load_base)
3176 /* If nothing has been placed into the output section then
3177 it won't have a bfd_section. */
3178 if (os->bfd_section)
3180 os->bfd_section->lma
3181 = exp_get_abs_int (os->load_base, 0, "load base",
3182 lang_final_phase_enum);
3186 break;
3187 case lang_wild_statement_enum:
3189 dot = lang_do_assignments (s->wild_statement.children.head,
3190 output_section_statement,
3191 fill, dot);
3193 break;
3195 case lang_object_symbols_statement_enum:
3196 case lang_output_statement_enum:
3197 case lang_target_statement_enum:
3198 #if 0
3199 case lang_common_statement_enum:
3200 #endif
3201 break;
3202 case lang_data_statement_enum:
3204 etree_value_type value;
3206 value = exp_fold_tree (s->data_statement.exp,
3207 abs_output_section,
3208 lang_final_phase_enum, dot, &dot);
3209 s->data_statement.value = value.value;
3210 if (value.valid_p == false)
3211 einfo (_("%F%P: invalid data statement\n"));
3214 unsigned int size;
3215 switch (s->data_statement.type)
3217 default:
3218 abort ();
3219 case QUAD:
3220 case SQUAD:
3221 size = QUAD_SIZE;
3222 break;
3223 case LONG:
3224 size = LONG_SIZE;
3225 break;
3226 case SHORT:
3227 size = SHORT_SIZE;
3228 break;
3229 case BYTE:
3230 size = BYTE_SIZE;
3231 break;
3233 if (size < opb)
3234 size = opb;
3235 dot += size / opb;
3237 break;
3239 case lang_reloc_statement_enum:
3241 etree_value_type value;
3243 value = exp_fold_tree (s->reloc_statement.addend_exp,
3244 abs_output_section,
3245 lang_final_phase_enum, dot, &dot);
3246 s->reloc_statement.addend_value = value.value;
3247 if (value.valid_p == false)
3248 einfo (_("%F%P: invalid reloc statement\n"));
3250 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
3251 break;
3253 case lang_input_section_enum:
3255 asection *in = s->input_section.section;
3257 if (in->_cooked_size != 0)
3258 dot += in->_cooked_size / opb;
3259 else
3260 dot += in->_raw_size / opb;
3262 break;
3264 case lang_input_statement_enum:
3265 break;
3266 case lang_fill_statement_enum:
3267 fill = s->fill_statement.fill;
3268 break;
3269 case lang_assignment_statement_enum:
3271 exp_fold_tree (s->assignment_statement.exp,
3272 output_section_statement,
3273 lang_final_phase_enum,
3274 dot,
3275 &dot);
3278 break;
3279 case lang_padding_statement_enum:
3280 dot += s->padding_statement.size / opb;
3281 break;
3283 case lang_group_statement_enum:
3284 dot = lang_do_assignments (s->group_statement.children.head,
3285 output_section_statement,
3286 fill, dot);
3288 break;
3290 default:
3291 FAIL ();
3292 break;
3293 case lang_address_statement_enum:
3294 break;
3298 return dot;
3301 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3302 operator .startof. (section_name), it produces an undefined symbol
3303 .startof.section_name. Similarly, when it sees
3304 .sizeof. (section_name), it produces an undefined symbol
3305 .sizeof.section_name. For all the output sections, we look for
3306 such symbols, and set them to the correct value. */
3308 static void
3309 lang_set_startof ()
3311 asection *s;
3313 if (link_info.relocateable)
3314 return;
3316 for (s = output_bfd->sections; s != NULL; s = s->next)
3318 const char *secname;
3319 char *buf;
3320 struct bfd_link_hash_entry *h;
3322 secname = bfd_get_section_name (output_bfd, s);
3323 buf = xmalloc (10 + strlen (secname));
3325 sprintf (buf, ".startof.%s", secname);
3326 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3327 if (h != NULL && h->type == bfd_link_hash_undefined)
3329 h->type = bfd_link_hash_defined;
3330 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3331 h->u.def.section = bfd_abs_section_ptr;
3334 sprintf (buf, ".sizeof.%s", secname);
3335 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3336 if (h != NULL && h->type == bfd_link_hash_undefined)
3338 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3339 ldfile_output_machine);
3340 h->type = bfd_link_hash_defined;
3341 if (s->_cooked_size != 0)
3342 h->u.def.value = s->_cooked_size / opb;
3343 else
3344 h->u.def.value = s->_raw_size / opb;
3345 h->u.def.section = bfd_abs_section_ptr;
3348 free (buf);
3352 static void
3353 lang_finish ()
3355 struct bfd_link_hash_entry *h;
3356 boolean warn;
3358 if (link_info.relocateable || link_info.shared)
3359 warn = false;
3360 else
3361 warn = true;
3363 if (entry_symbol == (char *) NULL)
3365 /* No entry has been specified. Look for start, but don't warn
3366 if we don't find it. */
3367 entry_symbol = "start";
3368 warn = false;
3371 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
3372 if (h != (struct bfd_link_hash_entry *) NULL
3373 && (h->type == bfd_link_hash_defined
3374 || h->type == bfd_link_hash_defweak)
3375 && h->u.def.section->output_section != NULL)
3377 bfd_vma val;
3379 val = (h->u.def.value
3380 + bfd_get_section_vma (output_bfd,
3381 h->u.def.section->output_section)
3382 + h->u.def.section->output_offset);
3383 if (! bfd_set_start_address (output_bfd, val))
3384 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol);
3386 else
3388 bfd_vma val;
3389 const char *send;
3391 /* We couldn't find the entry symbol. Try parsing it as a
3392 number. */
3393 val = bfd_scan_vma (entry_symbol, &send, 0);
3394 if (*send == '\0')
3396 if (! bfd_set_start_address (output_bfd, val))
3397 einfo (_("%P%F: can't set start address\n"));
3399 else
3401 asection *ts;
3403 /* Can't find the entry symbol, and it's not a number. Use
3404 the first address in the text section. */
3405 ts = bfd_get_section_by_name (output_bfd, ".text");
3406 if (ts != (asection *) NULL)
3408 if (warn)
3409 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3410 entry_symbol, bfd_get_section_vma (output_bfd, ts));
3411 if (! bfd_set_start_address (output_bfd,
3412 bfd_get_section_vma (output_bfd,
3413 ts)))
3414 einfo (_("%P%F: can't set start address\n"));
3416 else
3418 if (warn)
3419 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3420 entry_symbol);
3426 /* This is a small function used when we want to ignore errors from
3427 BFD. */
3429 static void
3430 #ifdef ANSI_PROTOTYPES
3431 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
3432 #else
3433 ignore_bfd_errors (s)
3434 const char *s ATTRIBUTE_UNUSED;
3435 #endif
3437 /* Don't do anything. */
3440 /* Check that the architecture of all the input files is compatible
3441 with the output file. Also call the backend to let it do any
3442 other checking that is needed. */
3444 static void
3445 lang_check ()
3447 lang_statement_union_type *file;
3448 bfd *input_bfd;
3449 const bfd_arch_info_type *compatible;
3451 for (file = file_chain.head;
3452 file != (lang_statement_union_type *) NULL;
3453 file = file->input_statement.next)
3455 input_bfd = file->input_statement.the_bfd;
3456 compatible = bfd_arch_get_compatible (input_bfd,
3457 output_bfd);
3458 if (compatible == NULL)
3460 if (command_line.warn_mismatch)
3461 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3462 bfd_printable_name (input_bfd), input_bfd,
3463 bfd_printable_name (output_bfd));
3465 else
3467 bfd_error_handler_type pfn = NULL;
3469 /* If we aren't supposed to warn about mismatched input
3470 files, temporarily set the BFD error handler to a
3471 function which will do nothing. We still want to call
3472 bfd_merge_private_bfd_data, since it may set up
3473 information which is needed in the output file. */
3474 if (! command_line.warn_mismatch)
3475 pfn = bfd_set_error_handler (ignore_bfd_errors);
3476 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3478 if (command_line.warn_mismatch)
3479 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3480 input_bfd);
3482 if (! command_line.warn_mismatch)
3483 bfd_set_error_handler (pfn);
3488 /* Look through all the global common symbols and attach them to the
3489 correct section. The -sort-common command line switch may be used
3490 to roughly sort the entries by size. */
3492 static void
3493 lang_common ()
3495 if (link_info.relocateable
3496 && ! command_line.force_common_definition)
3497 return;
3499 if (! config.sort_common)
3500 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3501 else
3503 int power;
3505 for (power = 4; power >= 0; power--)
3506 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3507 (PTR) &power);
3511 /* Place one common symbol in the correct section. */
3513 static boolean
3514 lang_one_common (h, info)
3515 struct bfd_link_hash_entry *h;
3516 PTR info;
3518 unsigned int power_of_two;
3519 bfd_vma size;
3520 asection *section;
3521 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3522 ldfile_output_machine);
3524 if (h->type != bfd_link_hash_common)
3525 return true;
3527 size = h->u.c.size;
3528 power_of_two = h->u.c.p->alignment_power;
3530 if (config.sort_common
3531 && power_of_two < (unsigned int) *(int *) info)
3532 return true;
3534 section = h->u.c.p->section;
3536 /* Increase the size of the section. */
3537 section->_cooked_size = ALIGN_N ((section->_cooked_size + opb - 1) / opb,
3538 (bfd_size_type) (1 << power_of_two)) * opb;
3540 /* Adjust the alignment if necessary. */
3541 if (power_of_two > section->alignment_power)
3542 section->alignment_power = power_of_two;
3544 /* Change the symbol from common to defined. */
3545 h->type = bfd_link_hash_defined;
3546 h->u.def.section = section;
3547 h->u.def.value = section->_cooked_size;
3549 /* Increase the size of the section. */
3550 section->_cooked_size += size;
3552 /* Make sure the section is allocated in memory, and make sure that
3553 it is no longer a common section. */
3554 section->flags |= SEC_ALLOC;
3555 section->flags &= ~SEC_IS_COMMON;
3557 if (config.map_file != NULL)
3559 static boolean header_printed;
3560 int len;
3561 char *name;
3562 char buf[50];
3564 if (! header_printed)
3566 minfo (_("\nAllocating common symbols\n"));
3567 minfo (_("Common symbol size file\n\n"));
3568 header_printed = true;
3571 name = demangle (h->root.string);
3572 minfo ("%s", name);
3573 len = strlen (name);
3574 free (name);
3576 if (len >= 19)
3578 print_nl ();
3579 len = 0;
3581 while (len < 20)
3583 print_space ();
3584 ++len;
3587 minfo ("0x");
3588 if (size <= 0xffffffff)
3589 sprintf (buf, "%lx", (unsigned long) size);
3590 else
3591 sprintf_vma (buf, size);
3592 minfo ("%s", buf);
3593 len = strlen (buf);
3595 while (len < 16)
3597 print_space ();
3598 ++len;
3601 minfo ("%B\n", section->owner);
3604 return true;
3607 /* Run through the input files and ensure that every input section has
3608 somewhere to go. If one is found without a destination then create
3609 an input request and place it into the statement tree. */
3611 static void
3612 lang_place_orphans ()
3614 LANG_FOR_EACH_INPUT_STATEMENT (file)
3616 asection *s;
3618 for (s = file->the_bfd->sections;
3619 s != (asection *) NULL;
3620 s = s->next)
3622 if (s->output_section == (asection *) NULL)
3624 /* This section of the file is not attatched, root
3625 around for a sensible place for it to go. */
3627 if (file->just_syms_flag)
3629 /* We are only retrieving symbol values from this
3630 file. We want the symbols to act as though the
3631 values in the file are absolute. */
3632 s->output_section = bfd_abs_section_ptr;
3633 s->output_offset = s->vma;
3635 else if (strcmp (s->name, "COMMON") == 0)
3637 /* This is a lonely common section which must have
3638 come from an archive. We attach to the section
3639 with the wildcard. */
3640 if (! link_info.relocateable
3641 || command_line.force_common_definition)
3643 if (default_common_section == NULL)
3645 #if 0
3646 /* This message happens when using the
3647 svr3.ifile linker script, so I have
3648 disabled it. */
3649 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3650 #endif
3651 default_common_section =
3652 lang_output_section_statement_lookup (".bss");
3655 wild_doit (&default_common_section->children, s,
3656 default_common_section, file);
3659 else if (ldemul_place_orphan (file, s))
3661 else
3663 lang_output_section_statement_type *os =
3664 lang_output_section_statement_lookup (s->name);
3666 wild_doit (&os->children, s, os, file);
3673 void
3674 lang_set_flags (ptr, flags, invert)
3675 lang_memory_region_type *ptr;
3676 const char *flags;
3677 int invert;
3679 flagword *ptr_flags;
3681 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
3682 while (*flags)
3684 switch (*flags)
3686 case 'A': case 'a':
3687 *ptr_flags |= SEC_ALLOC;
3688 break;
3690 case 'R': case 'r':
3691 *ptr_flags |= SEC_READONLY;
3692 break;
3694 case 'W': case 'w':
3695 *ptr_flags |= SEC_DATA;
3696 break;
3698 case 'X': case 'x':
3699 *ptr_flags |= SEC_CODE;
3700 break;
3702 case 'L': case 'l':
3703 case 'I': case 'i':
3704 *ptr_flags |= SEC_LOAD;
3705 break;
3707 default:
3708 einfo (_("%P%F: invalid syntax in flags\n"));
3709 break;
3711 flags++;
3715 /* Call a function on each input file. This function will be called
3716 on an archive, but not on the elements. */
3718 void
3719 lang_for_each_input_file (func)
3720 void (*func) PARAMS ((lang_input_statement_type *));
3722 lang_input_statement_type *f;
3724 for (f = (lang_input_statement_type *) input_file_chain.head;
3725 f != NULL;
3726 f = (lang_input_statement_type *) f->next_real_file)
3727 func (f);
3730 /* Call a function on each file. The function will be called on all
3731 the elements of an archive which are included in the link, but will
3732 not be called on the archive file itself. */
3734 void
3735 lang_for_each_file (func)
3736 void (*func) PARAMS ((lang_input_statement_type *));
3738 LANG_FOR_EACH_INPUT_STATEMENT (f)
3740 func (f);
3744 #if 0
3746 /* Not used. */
3748 void
3749 lang_for_each_input_section (func)
3750 void (*func) PARAMS ((bfd *ab, asection *as));
3752 LANG_FOR_EACH_INPUT_STATEMENT (f)
3754 asection *s;
3756 for (s = f->the_bfd->sections;
3757 s != (asection *) NULL;
3758 s = s->next)
3760 func (f->the_bfd, s);
3765 #endif
3767 void
3768 ldlang_add_file (entry)
3769 lang_input_statement_type *entry;
3771 bfd **pp;
3773 lang_statement_append (&file_chain,
3774 (lang_statement_union_type *) entry,
3775 &entry->next);
3777 /* The BFD linker needs to have a list of all input BFDs involved in
3778 a link. */
3779 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
3780 ASSERT (entry->the_bfd != output_bfd);
3781 for (pp = &link_info.input_bfds;
3782 *pp != (bfd *) NULL;
3783 pp = &(*pp)->link_next)
3785 *pp = entry->the_bfd;
3786 entry->the_bfd->usrdata = (PTR) entry;
3787 bfd_set_gp_size (entry->the_bfd, g_switch_value);
3789 /* Look through the sections and check for any which should not be
3790 included in the link. We need to do this now, so that we can
3791 notice when the backend linker tries to report multiple
3792 definition errors for symbols which are in sections we aren't
3793 going to link. FIXME: It might be better to entirely ignore
3794 symbols which are defined in sections which are going to be
3795 discarded. This would require modifying the backend linker for
3796 each backend which might set the SEC_LINK_ONCE flag. If we do
3797 this, we should probably handle SEC_EXCLUDE in the same way. */
3799 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
3802 void
3803 lang_add_output (name, from_script)
3804 const char *name;
3805 int from_script;
3807 /* Make -o on command line override OUTPUT in script. */
3808 if (had_output_filename == false || !from_script)
3810 output_filename = name;
3811 had_output_filename = true;
3815 static lang_output_section_statement_type *current_section;
3817 static int
3818 topower (x)
3819 int x;
3821 unsigned int i = 1;
3822 int l;
3824 if (x < 0)
3825 return -1;
3827 for (l = 0; l < 32; l++)
3829 if (i >= (unsigned int) x)
3830 return l;
3831 i <<= 1;
3834 return 0;
3837 lang_output_section_statement_type *
3838 lang_enter_output_section_statement (output_section_statement_name,
3839 address_exp, sectype, block_value,
3840 align, subalign, ebase)
3841 const char *output_section_statement_name;
3842 etree_type *address_exp;
3843 enum section_type sectype;
3844 bfd_vma block_value;
3845 etree_type *align;
3846 etree_type *subalign;
3847 etree_type *ebase;
3849 lang_output_section_statement_type *os;
3851 current_section =
3852 os =
3853 lang_output_section_statement_lookup (output_section_statement_name);
3855 /* Add this statement to tree. */
3856 #if 0
3857 add_statement (lang_output_section_statement_enum,
3858 output_section_statement);
3859 #endif
3860 /* Make next things chain into subchain of this. */
3862 if (os->addr_tree == (etree_type *) NULL)
3864 os->addr_tree = address_exp;
3866 os->sectype = sectype;
3867 if (sectype != noload_section)
3868 os->flags = SEC_NO_FLAGS;
3869 else
3870 os->flags = SEC_NEVER_LOAD;
3871 os->block_value = block_value ? block_value : 1;
3872 stat_ptr = &os->children;
3874 os->subsection_alignment =
3875 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
3876 os->section_alignment =
3877 topower (exp_get_value_int (align, -1, "section alignment", 0));
3879 os->load_base = ebase;
3880 return os;
3883 void
3884 lang_final ()
3886 lang_output_statement_type *new =
3887 new_stat (lang_output_statement, stat_ptr);
3889 new->name = output_filename;
3892 /* Reset the current counters in the regions. */
3894 static void
3895 reset_memory_regions ()
3897 lang_memory_region_type *p = lang_memory_region_list;
3899 for (p = lang_memory_region_list;
3900 p != (lang_memory_region_type *) NULL;
3901 p = p->next)
3903 p->old_length = (bfd_size_type) (p->current - p->origin);
3904 p->current = p->origin;
3908 /* Expand a wild statement for a particular FILE, marking its sections KEEP
3909 as needed. SECTION may be NULL, in which case it is a wild card. */
3911 static void
3912 gc_section_callback (ptr, section, file, data)
3913 lang_wild_statement_type *ptr;
3914 asection *section;
3915 lang_input_statement_type *file ATTRIBUTE_UNUSED;
3916 PTR data ATTRIBUTE_UNUSED;
3918 /* If the wild pattern was marked KEEP, the member sections
3919 should be as well. */
3920 if (ptr->keep_sections)
3921 section->flags |= SEC_KEEP;
3924 /* Handle a wild statement, marking it against GC. SECTION or FILE or both
3925 may be NULL, indicating that it is a wildcard. */
3927 static void
3928 lang_gc_wild (s, section, file)
3929 lang_wild_statement_type *s;
3930 const char *section;
3931 const char *file;
3933 walk_wild (s, section, file, gc_section_callback, NULL);
3936 /* Iterate over sections marking them against GC. */
3938 static void
3939 lang_gc_sections_1 (s)
3940 lang_statement_union_type *s;
3942 for (; s != (lang_statement_union_type *) NULL; s = s->next)
3944 switch (s->header.type)
3946 case lang_wild_statement_enum:
3947 lang_gc_wild (&s->wild_statement,
3948 s->wild_statement.section_name,
3949 s->wild_statement.filename);
3950 break;
3951 case lang_constructors_statement_enum:
3952 lang_gc_sections_1 (constructor_list.head);
3953 break;
3954 case lang_output_section_statement_enum:
3955 lang_gc_sections_1 (s->output_section_statement.children.head);
3956 break;
3957 case lang_group_statement_enum:
3958 lang_gc_sections_1 (s->group_statement.children.head);
3959 break;
3960 default:
3961 break;
3966 static void
3967 lang_gc_sections ()
3969 struct bfd_link_hash_entry *h;
3970 ldlang_undef_chain_list_type *ulist, fake_list_start;
3972 /* Keep all sections so marked in the link script. */
3974 lang_gc_sections_1 (statement_list.head);
3976 /* Keep all sections containing symbols undefined on the command-line.
3977 Handle the entry symbol at the same time. */
3979 if (entry_symbol != NULL)
3981 fake_list_start.next = ldlang_undef_chain_list_head;
3982 fake_list_start.name = (char *) entry_symbol;
3983 ulist = &fake_list_start;
3985 else
3986 ulist = ldlang_undef_chain_list_head;
3988 for (; ulist; ulist = ulist->next)
3990 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
3991 false, false, false);
3993 if (h != (struct bfd_link_hash_entry *) NULL
3994 && (h->type == bfd_link_hash_defined
3995 || h->type == bfd_link_hash_defweak)
3996 && ! bfd_is_abs_section (h->u.def.section))
3998 h->u.def.section->flags |= SEC_KEEP;
4002 bfd_gc_sections (output_bfd, &link_info);
4005 void
4006 lang_process ()
4008 lang_reasonable_defaults ();
4009 current_target = default_target;
4011 /* Open the output file. */
4012 lang_for_each_statement (ldlang_open_output);
4014 ldemul_create_output_section_statements ();
4016 /* Add to the hash table all undefineds on the command line. */
4017 lang_place_undefineds ();
4019 already_linked_table_init ();
4021 /* Create a bfd for each input file. */
4022 current_target = default_target;
4023 open_input_bfds (statement_list.head, false);
4025 ldemul_after_open ();
4027 already_linked_table_free ();
4029 /* Make sure that we're not mixing architectures. We call this
4030 after all the input files have been opened, but before we do any
4031 other processing, so that any operations merge_private_bfd_data
4032 does on the output file will be known during the rest of the
4033 link. */
4034 lang_check ();
4036 /* Handle .exports instead of a version script if we're told to do so. */
4037 if (command_line.version_exports_section)
4038 lang_do_version_exports_section ();
4040 /* Build all sets based on the information gathered from the input
4041 files. */
4042 ldctor_build_sets ();
4044 /* Remove unreferenced sections if asked to. */
4045 if (command_line.gc_sections)
4046 lang_gc_sections ();
4048 /* Size up the common data. */
4049 lang_common ();
4051 /* Run through the contours of the script and attach input sections
4052 to the correct output sections. */
4053 map_input_to_output_sections (statement_list.head, (char *) NULL,
4054 (lang_output_section_statement_type *) NULL);
4056 /* Find any sections not attached explicitly and handle them. */
4057 lang_place_orphans ();
4059 ldemul_before_allocation ();
4061 /* We must record the program headers before we try to fix the
4062 section positions, since they will affect SIZEOF_HEADERS. */
4063 lang_record_phdrs ();
4065 /* Now run around and relax if we can. */
4066 if (command_line.relax)
4068 /* First time round is a trial run to get the 'worst case'
4069 addresses of the objects if there was no relaxing. */
4070 lang_size_sections (statement_list.head,
4071 abs_output_section,
4072 &(statement_list.head), 0, (bfd_vma) 0, false);
4074 /* Keep relaxing until bfd_relax_section gives up. */
4077 reset_memory_regions ();
4079 relax_again = false;
4081 /* Note: pe-dll.c does something like this also. If you find
4082 you need to change this code, you probably need to change
4083 pe-dll.c also. DJ */
4085 /* Do all the assignments with our current guesses as to
4086 section sizes. */
4087 lang_do_assignments (statement_list.head,
4088 abs_output_section,
4089 (fill_type) 0, (bfd_vma) 0);
4091 /* Perform another relax pass - this time we know where the
4092 globals are, so can make better guess. */
4093 lang_size_sections (statement_list.head,
4094 abs_output_section,
4095 &(statement_list.head), 0, (bfd_vma) 0, true);
4097 while (relax_again);
4099 else
4101 /* Size up the sections. */
4102 lang_size_sections (statement_list.head,
4103 abs_output_section,
4104 &(statement_list.head), 0, (bfd_vma) 0, false);
4107 /* See if anything special should be done now we know how big
4108 everything is. */
4109 ldemul_after_allocation ();
4111 /* Fix any .startof. or .sizeof. symbols. */
4112 lang_set_startof ();
4114 /* Do all the assignments, now that we know the final resting places
4115 of all the symbols. */
4117 lang_do_assignments (statement_list.head,
4118 abs_output_section,
4119 (fill_type) 0, (bfd_vma) 0);
4121 /* Make sure that the section addresses make sense. */
4122 if (! link_info.relocateable
4123 && command_line.check_section_addresses)
4124 lang_check_section_addresses ();
4126 /* Final stuffs. */
4128 ldemul_finish ();
4129 lang_finish ();
4132 /* EXPORTED TO YACC */
4134 void
4135 lang_add_wild (section_name, sections_sorted, filename, filenames_sorted,
4136 keep_sections, exclude_filename_list)
4137 const char *const section_name;
4138 boolean sections_sorted;
4139 const char *const filename;
4140 boolean filenames_sorted;
4141 boolean keep_sections;
4142 struct name_list *exclude_filename_list;
4144 lang_wild_statement_type *new = new_stat (lang_wild_statement,
4145 stat_ptr);
4147 if (section_name != (char *) NULL && strcmp (section_name, "COMMON") == 0)
4149 placed_commons = true;
4151 if (filename != NULL && ! wildcardp (filename))
4153 lang_has_input_file = true;
4155 new->section_name = section_name;
4156 new->sections_sorted = sections_sorted;
4157 new->filename = filename;
4158 new->filenames_sorted = filenames_sorted;
4159 new->keep_sections = keep_sections;
4160 new->exclude_filename_list = exclude_filename_list;
4161 lang_list_init (&new->children);
4164 void
4165 lang_section_start (name, address)
4166 const char *name;
4167 etree_type *address;
4169 lang_address_statement_type *ad = new_stat (lang_address_statement, stat_ptr);
4171 ad->section_name = name;
4172 ad->address = address;
4175 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4176 because of a -e argument on the command line, or zero if this is
4177 called by ENTRY in a linker script. Command line arguments take
4178 precedence. */
4180 void
4181 lang_add_entry (name, cmdline)
4182 const char *name;
4183 boolean cmdline;
4185 if (entry_symbol == NULL
4186 || cmdline
4187 || ! entry_from_cmdline)
4189 entry_symbol = name;
4190 entry_from_cmdline = cmdline;
4194 void
4195 lang_add_target (name)
4196 const char *name;
4198 lang_target_statement_type *new = new_stat (lang_target_statement,
4199 stat_ptr);
4201 new->target = name;
4205 void
4206 lang_add_map (name)
4207 const char *name;
4209 while (*name)
4211 switch (*name)
4213 case 'F':
4214 map_option_f = true;
4215 break;
4217 name++;
4221 void
4222 lang_add_fill (exp)
4223 int exp;
4225 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4226 stat_ptr);
4228 new->fill = exp;
4231 void
4232 lang_add_data (type, exp)
4233 int type;
4234 union etree_union *exp;
4237 lang_data_statement_type *new = new_stat (lang_data_statement,
4238 stat_ptr);
4240 new->exp = exp;
4241 new->type = type;
4245 /* Create a new reloc statement. RELOC is the BFD relocation type to
4246 generate. HOWTO is the corresponding howto structure (we could
4247 look this up, but the caller has already done so). SECTION is the
4248 section to generate a reloc against, or NAME is the name of the
4249 symbol to generate a reloc against. Exactly one of SECTION and
4250 NAME must be NULL. ADDEND is an expression for the addend. */
4252 void
4253 lang_add_reloc (reloc, howto, section, name, addend)
4254 bfd_reloc_code_real_type reloc;
4255 reloc_howto_type *howto;
4256 asection *section;
4257 const char *name;
4258 union etree_union *addend;
4260 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
4262 p->reloc = reloc;
4263 p->howto = howto;
4264 p->section = section;
4265 p->name = name;
4266 p->addend_exp = addend;
4268 p->addend_value = 0;
4269 p->output_section = NULL;
4270 p->output_vma = 0;
4273 lang_assignment_statement_type *
4274 lang_add_assignment (exp)
4275 etree_type *exp;
4277 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4278 stat_ptr);
4280 new->exp = exp;
4281 return new;
4284 void
4285 lang_add_attribute (attribute)
4286 enum statement_enum attribute;
4288 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4291 void
4292 lang_startup (name)
4293 const char *name;
4295 if (startup_file != (char *) NULL)
4297 einfo (_("%P%Fmultiple STARTUP files\n"));
4299 first_file->filename = name;
4300 first_file->local_sym_name = name;
4301 first_file->real = true;
4303 startup_file = name;
4306 void
4307 lang_float (maybe)
4308 boolean maybe;
4310 lang_float_flag = maybe;
4313 void
4314 lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
4315 bfd_vma fill;
4316 const char *memspec;
4317 struct lang_output_section_phdr_list *phdrs;
4318 const char *lma_memspec;
4320 current_section->fill = fill;
4321 current_section->region = lang_memory_region_lookup (memspec);
4322 if (strcmp (lma_memspec, "*default*") != 0)
4324 current_section->lma_region = lang_memory_region_lookup (lma_memspec);
4325 /* If no runtime region has been given, but the load region has
4326 been, use the load region. */
4327 if (strcmp (memspec, "*default*") == 0)
4328 current_section->region = lang_memory_region_lookup (lma_memspec);
4330 current_section->phdrs = phdrs;
4331 stat_ptr = &statement_list;
4334 /* Create an absolute symbol with the given name with the value of the
4335 address of first byte of the section named.
4337 If the symbol already exists, then do nothing. */
4339 void
4340 lang_abs_symbol_at_beginning_of (secname, name)
4341 const char *secname;
4342 const char *name;
4344 struct bfd_link_hash_entry *h;
4346 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4347 if (h == (struct bfd_link_hash_entry *) NULL)
4348 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4350 if (h->type == bfd_link_hash_new
4351 || h->type == bfd_link_hash_undefined)
4353 asection *sec;
4355 h->type = bfd_link_hash_defined;
4357 sec = bfd_get_section_by_name (output_bfd, secname);
4358 if (sec == (asection *) NULL)
4359 h->u.def.value = 0;
4360 else
4361 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4363 h->u.def.section = bfd_abs_section_ptr;
4367 /* Create an absolute symbol with the given name with the value of the
4368 address of the first byte after the end of the section named.
4370 If the symbol already exists, then do nothing. */
4372 void
4373 lang_abs_symbol_at_end_of (secname, name)
4374 const char *secname;
4375 const char *name;
4377 struct bfd_link_hash_entry *h;
4379 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4380 if (h == (struct bfd_link_hash_entry *) NULL)
4381 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4383 if (h->type == bfd_link_hash_new
4384 || h->type == bfd_link_hash_undefined)
4386 asection *sec;
4388 h->type = bfd_link_hash_defined;
4390 sec = bfd_get_section_by_name (output_bfd, secname);
4391 if (sec == (asection *) NULL)
4392 h->u.def.value = 0;
4393 else
4394 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4395 + bfd_section_size (output_bfd, sec) /
4396 bfd_octets_per_byte (output_bfd));
4398 h->u.def.section = bfd_abs_section_ptr;
4402 void
4403 lang_statement_append (list, element, field)
4404 lang_statement_list_type *list;
4405 lang_statement_union_type *element;
4406 lang_statement_union_type **field;
4408 *(list->tail) = element;
4409 list->tail = field;
4412 /* Set the output format type. -oformat overrides scripts. */
4414 void
4415 lang_add_output_format (format, big, little, from_script)
4416 const char *format;
4417 const char *big;
4418 const char *little;
4419 int from_script;
4421 if (output_target == NULL || !from_script)
4423 if (command_line.endian == ENDIAN_BIG
4424 && big != NULL)
4425 format = big;
4426 else if (command_line.endian == ENDIAN_LITTLE
4427 && little != NULL)
4428 format = little;
4430 output_target = format;
4434 /* Enter a group. This creates a new lang_group_statement, and sets
4435 stat_ptr to build new statements within the group. */
4437 void
4438 lang_enter_group ()
4440 lang_group_statement_type *g;
4442 g = new_stat (lang_group_statement, stat_ptr);
4443 lang_list_init (&g->children);
4444 stat_ptr = &g->children;
4447 /* Leave a group. This just resets stat_ptr to start writing to the
4448 regular list of statements again. Note that this will not work if
4449 groups can occur inside anything else which can adjust stat_ptr,
4450 but currently they can't. */
4452 void
4453 lang_leave_group ()
4455 stat_ptr = &statement_list;
4458 /* Add a new program header. This is called for each entry in a PHDRS
4459 command in a linker script. */
4461 void
4462 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4463 const char *name;
4464 etree_type *type;
4465 boolean filehdr;
4466 boolean phdrs;
4467 etree_type *at;
4468 etree_type *flags;
4470 struct lang_phdr *n, **pp;
4472 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4473 n->next = NULL;
4474 n->name = name;
4475 n->type = exp_get_value_int (type, 0, "program header type",
4476 lang_final_phase_enum);
4477 n->filehdr = filehdr;
4478 n->phdrs = phdrs;
4479 n->at = at;
4480 n->flags = flags;
4482 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4484 *pp = n;
4487 /* Record the program header information in the output BFD. FIXME: We
4488 should not be calling an ELF specific function here. */
4490 static void
4491 lang_record_phdrs ()
4493 unsigned int alc;
4494 asection **secs;
4495 struct lang_output_section_phdr_list *last;
4496 struct lang_phdr *l;
4497 lang_statement_union_type *u;
4499 alc = 10;
4500 secs = (asection **) xmalloc (alc * sizeof (asection *));
4501 last = NULL;
4502 for (l = lang_phdr_list; l != NULL; l = l->next)
4504 unsigned int c;
4505 flagword flags;
4506 bfd_vma at;
4508 c = 0;
4509 for (u = lang_output_section_statement.head;
4510 u != NULL;
4511 u = u->output_section_statement.next)
4513 lang_output_section_statement_type *os;
4514 struct lang_output_section_phdr_list *pl;
4516 os = &u->output_section_statement;
4518 pl = os->phdrs;
4519 if (pl != NULL)
4520 last = pl;
4521 else
4523 if (os->sectype == noload_section
4524 || os->bfd_section == NULL
4525 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4526 continue;
4527 pl = last;
4530 if (os->bfd_section == NULL)
4531 continue;
4533 for (; pl != NULL; pl = pl->next)
4535 if (strcmp (pl->name, l->name) == 0)
4537 if (c >= alc)
4539 alc *= 2;
4540 secs = ((asection **)
4541 xrealloc (secs, alc * sizeof (asection *)));
4543 secs[c] = os->bfd_section;
4544 ++c;
4545 pl->used = true;
4550 if (l->flags == NULL)
4551 flags = 0;
4552 else
4553 flags = exp_get_vma (l->flags, 0, "phdr flags",
4554 lang_final_phase_enum);
4556 if (l->at == NULL)
4557 at = 0;
4558 else
4559 at = exp_get_vma (l->at, 0, "phdr load address",
4560 lang_final_phase_enum);
4562 if (! bfd_record_phdr (output_bfd, l->type,
4563 l->flags == NULL ? false : true,
4564 flags,
4565 l->at == NULL ? false : true,
4566 at, l->filehdr, l->phdrs, c, secs))
4567 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4570 free (secs);
4572 /* Make sure all the phdr assignments succeeded. */
4573 for (u = lang_output_section_statement.head;
4574 u != NULL;
4575 u = u->output_section_statement.next)
4577 struct lang_output_section_phdr_list *pl;
4579 if (u->output_section_statement.bfd_section == NULL)
4580 continue;
4582 for (pl = u->output_section_statement.phdrs;
4583 pl != NULL;
4584 pl = pl->next)
4585 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4586 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4587 u->output_section_statement.name, pl->name);
4591 /* Record a list of sections which may not be cross referenced. */
4593 void
4594 lang_add_nocrossref (l)
4595 struct lang_nocrossref *l;
4597 struct lang_nocrossrefs *n;
4599 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4600 n->next = nocrossref_list;
4601 n->list = l;
4602 nocrossref_list = n;
4604 /* Set notice_all so that we get informed about all symbols. */
4605 link_info.notice_all = true;
4608 /* Overlay handling. We handle overlays with some static variables. */
4610 /* The overlay virtual address. */
4611 static etree_type *overlay_vma;
4613 /* The overlay load address. */
4614 static etree_type *overlay_lma;
4616 /* Whether nocrossrefs is set for this overlay. */
4617 static int overlay_nocrossrefs;
4619 /* An expression for the maximum section size seen so far. */
4620 static etree_type *overlay_max;
4622 /* A list of all the sections in this overlay. */
4624 struct overlay_list {
4625 struct overlay_list *next;
4626 lang_output_section_statement_type *os;
4629 static struct overlay_list *overlay_list;
4631 /* Start handling an overlay. */
4633 void
4634 lang_enter_overlay (vma_expr, lma_expr, nocrossrefs)
4635 etree_type *vma_expr;
4636 etree_type *lma_expr;
4637 int nocrossrefs;
4639 /* The grammar should prevent nested overlays from occurring. */
4640 ASSERT (overlay_vma == NULL
4641 && overlay_lma == NULL
4642 && overlay_list == NULL
4643 && overlay_max == NULL);
4645 overlay_vma = vma_expr;
4646 overlay_lma = lma_expr;
4647 overlay_nocrossrefs = nocrossrefs;
4650 /* Start a section in an overlay. We handle this by calling
4651 lang_enter_output_section_statement with the correct VMA and LMA. */
4653 void
4654 lang_enter_overlay_section (name)
4655 const char *name;
4657 struct overlay_list *n;
4658 etree_type *size;
4660 lang_enter_output_section_statement (name, overlay_vma, normal_section,
4661 0, 0, 0, overlay_lma);
4663 /* If this is the first section, then base the VMA and LMA of future
4664 sections on this one. This will work correctly even if `.' is
4665 used in the addresses. */
4666 if (overlay_list == NULL)
4668 overlay_vma = exp_nameop (ADDR, name);
4669 overlay_lma = exp_nameop (LOADADDR, name);
4672 /* Remember the section. */
4673 n = (struct overlay_list *) xmalloc (sizeof *n);
4674 n->os = current_section;
4675 n->next = overlay_list;
4676 overlay_list = n;
4678 size = exp_nameop (SIZEOF, name);
4680 /* Adjust the LMA for the next section. */
4681 overlay_lma = exp_binop ('+', overlay_lma, size);
4683 /* Arrange to work out the maximum section end address. */
4684 if (overlay_max == NULL)
4685 overlay_max = size;
4686 else
4687 overlay_max = exp_binop (MAX_K, overlay_max, size);
4690 /* Finish a section in an overlay. There isn't any special to do
4691 here. */
4693 void
4694 lang_leave_overlay_section (fill, phdrs)
4695 bfd_vma fill;
4696 struct lang_output_section_phdr_list *phdrs;
4698 const char *name;
4699 char *clean, *s2;
4700 const char *s1;
4701 char *buf;
4703 name = current_section->name;
4705 lang_leave_output_section_statement (fill, "*default*",
4706 phdrs, "*default*");
4708 /* Define the magic symbols. */
4710 clean = xmalloc (strlen (name) + 1);
4711 s2 = clean;
4712 for (s1 = name; *s1 != '\0'; s1++)
4713 if (isalnum ((unsigned char) *s1) || *s1 == '_')
4714 *s2++ = *s1;
4715 *s2 = '\0';
4717 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4718 sprintf (buf, "__load_start_%s", clean);
4719 lang_add_assignment (exp_assop ('=', buf,
4720 exp_nameop (LOADADDR, name)));
4722 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4723 sprintf (buf, "__load_stop_%s", clean);
4724 lang_add_assignment (exp_assop ('=', buf,
4725 exp_binop ('+',
4726 exp_nameop (LOADADDR, name),
4727 exp_nameop (SIZEOF, name))));
4729 free (clean);
4732 /* Finish an overlay. If there are any overlay wide settings, this
4733 looks through all the sections in the overlay and sets them. */
4735 void
4736 lang_leave_overlay (fill, memspec, phdrs, lma_memspec)
4737 bfd_vma fill;
4738 const char *memspec;
4739 struct lang_output_section_phdr_list *phdrs;
4740 const char *lma_memspec;
4742 lang_memory_region_type *region;
4743 lang_memory_region_type *lma_region;
4744 struct overlay_list *l;
4745 struct lang_nocrossref *nocrossref;
4747 if (memspec == NULL)
4748 region = NULL;
4749 else
4750 region = lang_memory_region_lookup (memspec);
4752 if (lma_memspec == NULL)
4753 lma_region = NULL;
4754 else
4755 lma_region = lang_memory_region_lookup (lma_memspec);
4757 nocrossref = NULL;
4759 l = overlay_list;
4760 while (l != NULL)
4762 struct overlay_list *next;
4764 if (fill != 0 && l->os->fill == 0)
4765 l->os->fill = fill;
4766 if (region != NULL && l->os->region == NULL)
4767 l->os->region = region;
4768 if (lma_region != NULL && l->os->lma_region == NULL)
4769 l->os->lma_region = lma_region;
4770 if (phdrs != NULL && l->os->phdrs == NULL)
4771 l->os->phdrs = phdrs;
4773 if (overlay_nocrossrefs)
4775 struct lang_nocrossref *nc;
4777 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
4778 nc->name = l->os->name;
4779 nc->next = nocrossref;
4780 nocrossref = nc;
4783 next = l->next;
4784 free (l);
4785 l = next;
4788 if (nocrossref != NULL)
4789 lang_add_nocrossref (nocrossref);
4791 /* Update . for the end of the overlay. */
4792 lang_add_assignment (exp_assop ('=', ".",
4793 exp_binop ('+', overlay_vma, overlay_max)));
4795 overlay_vma = NULL;
4796 overlay_lma = NULL;
4797 overlay_nocrossrefs = 0;
4798 overlay_list = NULL;
4799 overlay_max = NULL;
4802 /* Version handling. This is only useful for ELF. */
4804 /* This global variable holds the version tree that we build. */
4806 struct bfd_elf_version_tree *lang_elf_version_info;
4808 static int
4809 lang_vers_match_lang_c (expr, sym)
4810 struct bfd_elf_version_expr *expr;
4811 const char *sym;
4813 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4814 return 1;
4815 return fnmatch (expr->pattern, sym, 0) == 0;
4818 static int
4819 lang_vers_match_lang_cplusplus (expr, sym)
4820 struct bfd_elf_version_expr *expr;
4821 const char *sym;
4823 char *alt_sym;
4824 int result;
4826 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4827 return 1;
4829 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
4830 if (!alt_sym)
4832 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
4833 Should we early out false in this case? */
4834 result = fnmatch (expr->pattern, sym, 0) == 0;
4836 else
4838 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
4839 free (alt_sym);
4842 return result;
4845 static int
4846 lang_vers_match_lang_java (expr, sym)
4847 struct bfd_elf_version_expr *expr;
4848 const char *sym;
4850 char *alt_sym;
4851 int result;
4853 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4854 return 1;
4856 alt_sym = cplus_demangle (sym, DMGL_JAVA);
4857 if (!alt_sym)
4859 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
4860 Should we early out false in this case? */
4861 result = fnmatch (expr->pattern, sym, 0) == 0;
4863 else
4865 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
4866 free (alt_sym);
4869 return result;
4872 /* This is called for each variable name or match expression. */
4874 struct bfd_elf_version_expr *
4875 lang_new_vers_regex (orig, new, lang)
4876 struct bfd_elf_version_expr *orig;
4877 const char *new;
4878 const char *lang;
4880 struct bfd_elf_version_expr *ret;
4882 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
4883 ret->next = orig;
4884 ret->pattern = new;
4886 if (lang == NULL || strcasecmp (lang, "C") == 0)
4887 ret->match = lang_vers_match_lang_c;
4888 else if (strcasecmp (lang, "C++") == 0)
4889 ret->match = lang_vers_match_lang_cplusplus;
4890 else if (strcasecmp (lang, "Java") == 0)
4891 ret->match = lang_vers_match_lang_java;
4892 else
4894 einfo (_("%X%P: unknown language `%s' in version information\n"),
4895 lang);
4896 ret->match = lang_vers_match_lang_c;
4899 return ret;
4902 /* This is called for each set of variable names and match
4903 expressions. */
4905 struct bfd_elf_version_tree *
4906 lang_new_vers_node (globals, locals)
4907 struct bfd_elf_version_expr *globals;
4908 struct bfd_elf_version_expr *locals;
4910 struct bfd_elf_version_tree *ret;
4912 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
4913 ret->next = NULL;
4914 ret->name = NULL;
4915 ret->vernum = 0;
4916 ret->globals = globals;
4917 ret->locals = locals;
4918 ret->deps = NULL;
4919 ret->name_indx = (unsigned int) -1;
4920 ret->used = 0;
4921 return ret;
4924 /* This static variable keeps track of version indices. */
4926 static int version_index;
4928 /* This is called when we know the name and dependencies of the
4929 version. */
4931 void
4932 lang_register_vers_node (name, version, deps)
4933 const char *name;
4934 struct bfd_elf_version_tree *version;
4935 struct bfd_elf_version_deps *deps;
4937 struct bfd_elf_version_tree *t, **pp;
4938 struct bfd_elf_version_expr *e1;
4940 /* Make sure this node has a unique name. */
4941 for (t = lang_elf_version_info; t != NULL; t = t->next)
4942 if (strcmp (t->name, name) == 0)
4943 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
4945 /* Check the global and local match names, and make sure there
4946 aren't any duplicates. */
4948 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
4950 for (t = lang_elf_version_info; t != NULL; t = t->next)
4952 struct bfd_elf_version_expr *e2;
4954 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
4955 if (strcmp (e1->pattern, e2->pattern) == 0)
4956 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4957 e1->pattern);
4961 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
4963 for (t = lang_elf_version_info; t != NULL; t = t->next)
4965 struct bfd_elf_version_expr *e2;
4967 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
4968 if (strcmp (e1->pattern, e2->pattern) == 0)
4969 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
4970 e1->pattern);
4974 version->deps = deps;
4975 version->name = name;
4976 ++version_index;
4977 version->vernum = version_index;
4979 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
4981 *pp = version;
4984 /* This is called when we see a version dependency. */
4986 struct bfd_elf_version_deps *
4987 lang_add_vers_depend (list, name)
4988 struct bfd_elf_version_deps *list;
4989 const char *name;
4991 struct bfd_elf_version_deps *ret;
4992 struct bfd_elf_version_tree *t;
4994 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
4995 ret->next = list;
4997 for (t = lang_elf_version_info; t != NULL; t = t->next)
4999 if (strcmp (t->name, name) == 0)
5001 ret->version_needed = t;
5002 return ret;
5006 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5008 return ret;
5011 static void
5012 lang_do_version_exports_section ()
5014 struct bfd_elf_version_expr *greg = NULL, *lreg;
5016 LANG_FOR_EACH_INPUT_STATEMENT (is)
5018 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5019 char *contents, *p;
5020 bfd_size_type len;
5022 if (sec == NULL)
5023 continue;
5025 len = bfd_section_size (is->the_bfd, sec);
5026 contents = xmalloc (len);
5027 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
5028 einfo (_("%X%P: unable to read .exports section contents"), sec);
5030 p = contents;
5031 while (p < contents + len)
5033 greg = lang_new_vers_regex (greg, p, NULL);
5034 p = strchr (p, '\0') + 1;
5037 /* Do not free the contents, as we used them creating the regex. */
5039 /* Do not include this section in the link. */
5040 bfd_set_section_flags (is->the_bfd, sec,
5041 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5044 lreg = lang_new_vers_regex (NULL, "*", NULL);
5045 lang_register_vers_node (command_line.version_exports_section,
5046 lang_new_vers_node (greg, lreg), NULL);