* config/tc-alpha.c (alpha_force_relocation): Don't assert that
[binutils.git] / ld / ldlang.c
blob456bc7fab04540c285fc86bf2e33c586839210c1
1 /* Linker command language support.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA. */
23 #include "bfd.h"
24 #include "sysdep.h"
25 #include "libiberty.h"
26 #include "safe-ctype.h"
27 #include "obstack.h"
28 #include "bfdlink.h"
30 #include "ld.h"
31 #include "ldmain.h"
32 #include "ldgram.h"
33 #include "ldexp.h"
34 #include "ldlang.h"
35 #include "ldlex.h"
36 #include "ldmisc.h"
37 #include "ldctor.h"
38 #include "ldfile.h"
39 #include "ldemul.h"
40 #include "fnmatch.h"
41 #include "demangle.h"
43 /* FORWARDS */
44 static lang_statement_union_type *new_statement
45 PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
47 /* LOCALS */
48 static struct obstack stat_obstack;
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52 static const char *startup_file;
53 static lang_statement_list_type input_file_chain;
54 static boolean placed_commons = false;
55 static lang_output_section_statement_type *default_common_section;
56 static boolean map_option_f;
57 static bfd_vma print_dot;
58 static lang_input_statement_type *first_file;
59 static const char *current_target;
60 static const char *output_target;
61 static lang_statement_list_type statement_list;
62 static struct lang_phdr *lang_phdr_list;
64 static void lang_for_each_statement_worker
65 PARAMS ((void (*) (lang_statement_union_type *),
66 lang_statement_union_type *));
67 static lang_input_statement_type *new_afile
68 PARAMS ((const char *, lang_input_file_enum_type, const char *, boolean));
69 static lang_memory_region_type *lang_memory_default PARAMS ((asection *));
70 static void lang_map_flags PARAMS ((flagword));
71 static void init_os PARAMS ((lang_output_section_statement_type *));
72 static void exp_init_os PARAMS ((etree_type *));
73 static void section_already_linked PARAMS ((bfd *, asection *, PTR));
74 static struct bfd_hash_entry *already_linked_newfunc
75 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
76 static void already_linked_table_init PARAMS ((void));
77 static void already_linked_table_free PARAMS ((void));
78 static boolean wildcardp PARAMS ((const char *));
79 static lang_statement_union_type *wild_sort
80 PARAMS ((lang_wild_statement_type *, struct wildcard_list *,
81 lang_input_statement_type *, asection *));
82 static void output_section_callback
83 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
84 lang_input_statement_type *, PTR));
85 static lang_input_statement_type *lookup_name PARAMS ((const char *));
86 static boolean load_symbols
87 PARAMS ((lang_input_statement_type *, lang_statement_list_type *));
88 static void wild
89 PARAMS ((lang_wild_statement_type *,
90 const char *, lang_output_section_statement_type *));
91 static bfd *open_output PARAMS ((const char *));
92 static void ldlang_open_output PARAMS ((lang_statement_union_type *));
93 static void open_input_bfds PARAMS ((lang_statement_union_type *, boolean));
94 static void lang_reasonable_defaults PARAMS ((void));
95 static void lang_place_undefineds PARAMS ((void));
96 static void map_input_to_output_sections
97 PARAMS ((lang_statement_union_type *, const char *,
98 lang_output_section_statement_type *));
99 static void print_output_section_statement
100 PARAMS ((lang_output_section_statement_type *));
101 static void print_assignment
102 PARAMS ((lang_assignment_statement_type *,
103 lang_output_section_statement_type *));
104 static void print_input_statement PARAMS ((lang_input_statement_type *));
105 static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
106 static void print_input_section PARAMS ((lang_input_section_type *));
107 static void print_fill_statement PARAMS ((lang_fill_statement_type *));
108 static void print_data_statement PARAMS ((lang_data_statement_type *));
109 static void print_address_statement PARAMS ((lang_address_statement_type *));
110 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
111 static void print_padding_statement PARAMS ((lang_padding_statement_type *));
112 static void print_wild_statement
113 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
114 static void print_group
115 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
116 static void print_statement
117 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
118 static void print_statement_list
119 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
120 static void print_statements PARAMS ((void));
121 static void insert_pad
122 PARAMS ((lang_statement_union_type **, fill_type,
123 unsigned int, asection *, bfd_vma));
124 static bfd_vma size_input_section
125 PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
126 fill_type, bfd_vma));
127 static void lang_finish PARAMS ((void));
128 static void ignore_bfd_errors PARAMS ((const char *, ...));
129 static void lang_check PARAMS ((void));
130 static void lang_common PARAMS ((void));
131 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
132 static void lang_place_orphans PARAMS ((void));
133 static int topower PARAMS ((int));
134 static void lang_set_startof PARAMS ((void));
135 static void gc_section_callback
136 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
137 lang_input_statement_type *, PTR));
138 static void lang_record_phdrs PARAMS ((void));
139 static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
140 static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
141 static void lang_gc_sections PARAMS ((void));
142 static int lang_vers_match_lang_c
143 PARAMS ((struct bfd_elf_version_expr *, const char *));
144 static int lang_vers_match_lang_cplusplus
145 PARAMS ((struct bfd_elf_version_expr *, const char *));
146 static int lang_vers_match_lang_java
147 PARAMS ((struct bfd_elf_version_expr *, const char *));
148 static void lang_do_version_exports_section PARAMS ((void));
149 static void lang_check_section_addresses PARAMS ((void));
150 static void os_region_check
151 PARAMS ((lang_output_section_statement_type *,
152 struct memory_region_struct *, etree_type *, bfd_vma));
154 typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
155 struct wildcard_list *,
156 asection *,
157 lang_input_statement_type *,
158 PTR));
159 static void walk_wild
160 PARAMS ((lang_wild_statement_type *, callback_t, PTR));
161 static void walk_wild_section
162 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
163 callback_t, PTR));
164 static void walk_wild_file
165 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
166 callback_t, PTR));
168 static int get_target PARAMS ((const bfd_target *, PTR));
169 static void stricpy PARAMS ((char *, char *));
170 static void strcut PARAMS ((char *, char *));
171 static int name_compare PARAMS ((char *, char *));
172 static int closest_target_match PARAMS ((const bfd_target *, PTR));
173 static char * get_first_input_target PARAMS ((void));
175 /* EXPORTS */
176 lang_output_section_statement_type *abs_output_section;
177 lang_statement_list_type lang_output_section_statement;
178 lang_statement_list_type *stat_ptr = &statement_list;
179 lang_statement_list_type file_chain = { NULL, NULL };
180 const char *entry_symbol = NULL;
181 boolean entry_from_cmdline;
182 boolean lang_has_input_file = false;
183 boolean had_output_filename = false;
184 boolean lang_float_flag = false;
185 boolean delete_output_file_on_failure = false;
186 struct lang_nocrossrefs *nocrossref_list;
187 struct unique_sections *unique_section_list;
189 etree_type *base; /* Relocation base - or null */
191 #if defined (__STDC__) || defined (ALMOST_STDC)
192 #define cat(a,b) a##b
193 #else
194 #define cat(a,b) a/**/b
195 #endif
197 /* Don't beautify the line below with "innocent" whitespace, it breaks
198 the K&R C preprocessor! */
199 #define new_stat(x, y) \
200 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
202 #define outside_section_address(q) \
203 ((q)->output_offset + (q)->output_section->vma)
205 #define outside_symbol_address(q) \
206 ((q)->value + outside_section_address (q->section))
208 #define SECTION_NAME_MAP_LENGTH (16)
211 stat_alloc (size)
212 size_t size;
214 return obstack_alloc (&stat_obstack, size);
217 boolean
218 unique_section_p (secnam)
219 const char *secnam;
221 struct unique_sections *unam;
223 for (unam = unique_section_list; unam; unam = unam->next)
224 if (wildcardp (unam->name)
225 ? fnmatch (unam->name, secnam, 0) == 0
226 : strcmp (unam->name, secnam) == 0)
228 return true;
231 return false;
234 /* Generic traversal routines for finding matching sections. */
236 static void
237 walk_wild_section (ptr, file, callback, data)
238 lang_wild_statement_type *ptr;
239 lang_input_statement_type *file;
240 callback_t callback;
241 PTR data;
243 asection *s;
245 if (file->just_syms_flag)
246 return;
248 for (s = file->the_bfd->sections; s != NULL; s = s->next)
250 struct wildcard_list *sec;
252 sec = ptr->section_list;
253 if (sec == NULL)
254 (*callback) (ptr, sec, s, file, data);
256 while (sec != NULL)
258 boolean skip = false;
259 struct name_list *list_tmp;
261 /* Don't process sections from files which were
262 excluded. */
263 for (list_tmp = sec->spec.exclude_name_list;
264 list_tmp;
265 list_tmp = list_tmp->next)
267 if (wildcardp (list_tmp->name))
268 skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
269 else
270 skip = strcmp (list_tmp->name, file->filename) == 0;
272 /* If this file is part of an archive, and the archive is
273 excluded, exclude this file. */
274 if (! skip && file->the_bfd != NULL
275 && file->the_bfd->my_archive != NULL
276 && file->the_bfd->my_archive->filename != NULL)
278 if (wildcardp (list_tmp->name))
279 skip = fnmatch (list_tmp->name,
280 file->the_bfd->my_archive->filename,
281 0) == 0;
282 else
283 skip = strcmp (list_tmp->name,
284 file->the_bfd->my_archive->filename) == 0;
287 if (skip)
288 break;
291 if (!skip && sec->spec.name != NULL)
293 const char *sname = bfd_get_section_name (file->the_bfd, s);
295 if (wildcardp (sec->spec.name))
296 skip = fnmatch (sec->spec.name, sname, 0) != 0;
297 else
298 skip = strcmp (sec->spec.name, sname) != 0;
301 if (!skip)
302 (*callback) (ptr, sec, s, file, data);
304 sec = sec->next;
309 /* Handle a wild statement for a single file F. */
311 static void
312 walk_wild_file (s, f, callback, data)
313 lang_wild_statement_type *s;
314 lang_input_statement_type *f;
315 callback_t callback;
316 PTR data;
318 if (f->the_bfd == NULL
319 || ! bfd_check_format (f->the_bfd, bfd_archive))
320 walk_wild_section (s, f, callback, data);
321 else
323 bfd *member;
325 /* This is an archive file. We must map each member of the
326 archive separately. */
327 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
328 while (member != NULL)
330 /* When lookup_name is called, it will call the add_symbols
331 entry point for the archive. For each element of the
332 archive which is included, BFD will call ldlang_add_file,
333 which will set the usrdata field of the member to the
334 lang_input_statement. */
335 if (member->usrdata != NULL)
337 walk_wild_section (s,
338 (lang_input_statement_type *) member->usrdata,
339 callback, data);
342 member = bfd_openr_next_archived_file (f->the_bfd, member);
347 static void
348 walk_wild (s, callback, data)
349 lang_wild_statement_type *s;
350 callback_t callback;
351 PTR data;
353 const char *file_spec = s->filename;
355 if (file_spec == NULL)
357 /* Perform the iteration over all files in the list. */
358 LANG_FOR_EACH_INPUT_STATEMENT (f)
360 walk_wild_file (s, f, callback, data);
363 else if (wildcardp (file_spec))
365 LANG_FOR_EACH_INPUT_STATEMENT (f)
367 if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
368 walk_wild_file (s, f, callback, data);
371 else
373 lang_input_statement_type *f;
375 /* Perform the iteration over a single file. */
376 f = lookup_name (file_spec);
377 if (f)
378 walk_wild_file (s, f, callback, data);
382 /* lang_for_each_statement walks the parse tree and calls the provided
383 function for each node. */
385 static void
386 lang_for_each_statement_worker (func, s)
387 void (*func) PARAMS ((lang_statement_union_type *));
388 lang_statement_union_type *s;
390 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
392 func (s);
394 switch (s->header.type)
396 case lang_constructors_statement_enum:
397 lang_for_each_statement_worker (func, constructor_list.head);
398 break;
399 case lang_output_section_statement_enum:
400 lang_for_each_statement_worker
401 (func,
402 s->output_section_statement.children.head);
403 break;
404 case lang_wild_statement_enum:
405 lang_for_each_statement_worker
406 (func,
407 s->wild_statement.children.head);
408 break;
409 case lang_group_statement_enum:
410 lang_for_each_statement_worker (func,
411 s->group_statement.children.head);
412 break;
413 case lang_data_statement_enum:
414 case lang_reloc_statement_enum:
415 case lang_object_symbols_statement_enum:
416 case lang_output_statement_enum:
417 case lang_target_statement_enum:
418 case lang_input_section_enum:
419 case lang_input_statement_enum:
420 case lang_assignment_statement_enum:
421 case lang_padding_statement_enum:
422 case lang_address_statement_enum:
423 case lang_fill_statement_enum:
424 break;
425 default:
426 FAIL ();
427 break;
432 void
433 lang_for_each_statement (func)
434 void (*func) PARAMS ((lang_statement_union_type *));
436 lang_for_each_statement_worker (func, statement_list.head);
439 /*----------------------------------------------------------------------*/
441 void
442 lang_list_init (list)
443 lang_statement_list_type *list;
445 list->head = (lang_statement_union_type *) NULL;
446 list->tail = &list->head;
449 /* Build a new statement node for the parse tree. */
451 static lang_statement_union_type *
452 new_statement (type, size, list)
453 enum statement_enum type;
454 size_t size;
455 lang_statement_list_type *list;
457 lang_statement_union_type *new = (lang_statement_union_type *)
458 stat_alloc (size);
460 new->header.type = type;
461 new->header.next = (lang_statement_union_type *) NULL;
462 lang_statement_append (list, new, &new->header.next);
463 return new;
466 /* Build a new input file node for the language. There are several
467 ways in which we treat an input file, eg, we only look at symbols,
468 or prefix it with a -l etc.
470 We can be supplied with requests for input files more than once;
471 they may, for example be split over serveral lines like foo.o(.text)
472 foo.o(.data) etc, so when asked for a file we check that we haven't
473 got it already so we don't duplicate the bfd. */
475 static lang_input_statement_type *
476 new_afile (name, file_type, target, add_to_list)
477 const char *name;
478 lang_input_file_enum_type file_type;
479 const char *target;
480 boolean add_to_list;
482 lang_input_statement_type *p;
484 if (add_to_list)
485 p = new_stat (lang_input_statement, stat_ptr);
486 else
488 p = ((lang_input_statement_type *)
489 stat_alloc (sizeof (lang_input_statement_type)));
490 p->header.next = NULL;
493 lang_has_input_file = true;
494 p->target = target;
495 switch (file_type)
497 case lang_input_file_is_symbols_only_enum:
498 p->filename = name;
499 p->is_archive = false;
500 p->real = true;
501 p->local_sym_name = name;
502 p->just_syms_flag = true;
503 p->search_dirs_flag = false;
504 break;
505 case lang_input_file_is_fake_enum:
506 p->filename = name;
507 p->is_archive = false;
508 p->real = false;
509 p->local_sym_name = name;
510 p->just_syms_flag = false;
511 p->search_dirs_flag = false;
512 break;
513 case lang_input_file_is_l_enum:
514 p->is_archive = true;
515 p->filename = name;
516 p->real = true;
517 p->local_sym_name = concat ("-l", name, (const char *) NULL);
518 p->just_syms_flag = false;
519 p->search_dirs_flag = true;
520 break;
521 case lang_input_file_is_marker_enum:
522 p->filename = name;
523 p->is_archive = false;
524 p->real = false;
525 p->local_sym_name = name;
526 p->just_syms_flag = false;
527 p->search_dirs_flag = true;
528 break;
529 case lang_input_file_is_search_file_enum:
530 p->filename = name;
531 p->is_archive = false;
532 p->real = true;
533 p->local_sym_name = name;
534 p->just_syms_flag = false;
535 p->search_dirs_flag = true;
536 break;
537 case lang_input_file_is_file_enum:
538 p->filename = name;
539 p->is_archive = false;
540 p->real = true;
541 p->local_sym_name = name;
542 p->just_syms_flag = false;
543 p->search_dirs_flag = false;
544 break;
545 default:
546 FAIL ();
548 p->the_bfd = (bfd *) NULL;
549 p->asymbols = (asymbol **) NULL;
550 p->next_real_file = (lang_statement_union_type *) NULL;
551 p->next = (lang_statement_union_type *) NULL;
552 p->symbol_count = 0;
553 p->dynamic = config.dynamic_link;
554 p->whole_archive = whole_archive;
555 p->loaded = false;
556 lang_statement_append (&input_file_chain,
557 (lang_statement_union_type *) p,
558 &p->next_real_file);
559 return p;
562 lang_input_statement_type *
563 lang_add_input_file (name, file_type, target)
564 const char *name;
565 lang_input_file_enum_type file_type;
566 const char *target;
568 lang_has_input_file = true;
569 return new_afile (name, file_type, target, true);
572 /* Build enough state so that the parser can build its tree. */
574 void
575 lang_init ()
577 obstack_begin (&stat_obstack, 1000);
579 stat_ptr = &statement_list;
581 lang_list_init (stat_ptr);
583 lang_list_init (&input_file_chain);
584 lang_list_init (&lang_output_section_statement);
585 lang_list_init (&file_chain);
586 first_file = lang_add_input_file ((char *) NULL,
587 lang_input_file_is_marker_enum,
588 (char *) NULL);
589 abs_output_section =
590 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
592 abs_output_section->bfd_section = bfd_abs_section_ptr;
596 /*----------------------------------------------------------------------
597 A region is an area of memory declared with the
598 MEMORY { name:org=exp, len=exp ... }
599 syntax.
601 We maintain a list of all the regions here.
603 If no regions are specified in the script, then the default is used
604 which is created when looked up to be the entire data space. */
606 static lang_memory_region_type *lang_memory_region_list;
607 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
609 lang_memory_region_type *
610 lang_memory_region_lookup (name)
611 const char *const name;
613 lang_memory_region_type *p;
615 for (p = lang_memory_region_list;
616 p != (lang_memory_region_type *) NULL;
617 p = p->next)
619 if (strcmp (p->name, name) == 0)
621 return p;
625 #if 0
626 /* This code used to always use the first region in the list as the
627 default region. I changed it to instead use a region
628 encompassing all of memory as the default region. This permits
629 NOLOAD sections to work reasonably without requiring a region.
630 People should specify what region they mean, if they really want
631 a region. */
632 if (strcmp (name, "*default*") == 0)
634 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
636 return lang_memory_region_list;
639 #endif
642 lang_memory_region_type *new =
643 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
645 new->name = xstrdup (name);
646 new->next = (lang_memory_region_type *) NULL;
648 *lang_memory_region_list_tail = new;
649 lang_memory_region_list_tail = &new->next;
650 new->origin = 0;
651 new->flags = 0;
652 new->not_flags = 0;
653 new->length = ~(bfd_size_type) 0;
654 new->current = 0;
655 new->had_full_message = false;
657 return new;
661 static lang_memory_region_type *
662 lang_memory_default (section)
663 asection *section;
665 lang_memory_region_type *p;
667 flagword sec_flags = section->flags;
669 /* Override SEC_DATA to mean a writable section. */
670 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
671 sec_flags |= SEC_DATA;
673 for (p = lang_memory_region_list;
674 p != (lang_memory_region_type *) NULL;
675 p = p->next)
677 if ((p->flags & sec_flags) != 0
678 && (p->not_flags & sec_flags) == 0)
680 return p;
683 return lang_memory_region_lookup ("*default*");
686 lang_output_section_statement_type *
687 lang_output_section_find (name)
688 const char *const name;
690 lang_statement_union_type *u;
691 lang_output_section_statement_type *lookup;
693 for (u = lang_output_section_statement.head;
694 u != (lang_statement_union_type *) NULL;
695 u = lookup->next)
697 lookup = &u->output_section_statement;
698 if (strcmp (name, lookup->name) == 0)
700 return lookup;
703 return (lang_output_section_statement_type *) NULL;
706 lang_output_section_statement_type *
707 lang_output_section_statement_lookup (name)
708 const char *const name;
710 lang_output_section_statement_type *lookup;
712 lookup = lang_output_section_find (name);
713 if (lookup == (lang_output_section_statement_type *) NULL)
716 lookup = (lang_output_section_statement_type *)
717 new_stat (lang_output_section_statement, stat_ptr);
718 lookup->region = (lang_memory_region_type *) NULL;
719 lookup->lma_region = (lang_memory_region_type *) NULL;
720 lookup->fill = 0;
721 lookup->block_value = 1;
722 lookup->name = name;
724 lookup->next = (lang_statement_union_type *) NULL;
725 lookup->bfd_section = (asection *) NULL;
726 lookup->processed = false;
727 lookup->sectype = normal_section;
728 lookup->addr_tree = (etree_type *) NULL;
729 lang_list_init (&lookup->children);
731 lookup->memspec = (const char *) NULL;
732 lookup->flags = 0;
733 lookup->subsection_alignment = -1;
734 lookup->section_alignment = -1;
735 lookup->load_base = (union etree_union *) NULL;
736 lookup->phdrs = NULL;
738 lang_statement_append (&lang_output_section_statement,
739 (lang_statement_union_type *) lookup,
740 &lookup->next);
742 return lookup;
745 static void
746 lang_map_flags (flag)
747 flagword flag;
749 if (flag & SEC_ALLOC)
750 minfo ("a");
752 if (flag & SEC_CODE)
753 minfo ("x");
755 if (flag & SEC_READONLY)
756 minfo ("r");
758 if (flag & SEC_DATA)
759 minfo ("w");
761 if (flag & SEC_LOAD)
762 minfo ("l");
765 void
766 lang_map ()
768 lang_memory_region_type *m;
770 minfo (_("\nMemory Configuration\n\n"));
771 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
772 _("Name"), _("Origin"), _("Length"), _("Attributes"));
774 for (m = lang_memory_region_list;
775 m != (lang_memory_region_type *) NULL;
776 m = m->next)
778 char buf[100];
779 int len;
781 fprintf (config.map_file, "%-16s ", m->name);
783 sprintf_vma (buf, m->origin);
784 minfo ("0x%s ", buf);
785 len = strlen (buf);
786 while (len < 16)
788 print_space ();
789 ++len;
792 minfo ("0x%V", m->length);
793 if (m->flags || m->not_flags)
795 #ifndef BFD64
796 minfo (" ");
797 #endif
798 if (m->flags)
800 print_space ();
801 lang_map_flags (m->flags);
804 if (m->not_flags)
806 minfo (" !");
807 lang_map_flags (m->not_flags);
811 print_nl ();
814 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
816 print_statements ();
819 /* Initialize an output section. */
821 static void
822 init_os (s)
823 lang_output_section_statement_type *s;
825 section_userdata_type *new;
827 if (s->bfd_section != NULL)
828 return;
830 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
831 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
833 new = ((section_userdata_type *)
834 stat_alloc (sizeof (section_userdata_type)));
836 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
837 if (s->bfd_section == (asection *) NULL)
838 s->bfd_section = bfd_make_section (output_bfd, s->name);
839 if (s->bfd_section == (asection *) NULL)
841 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
842 output_bfd->xvec->name, s->name);
844 s->bfd_section->output_section = s->bfd_section;
846 /* We initialize an output sections output offset to minus its own
847 vma to allow us to output a section through itself. */
848 s->bfd_section->output_offset = 0;
849 get_userdata (s->bfd_section) = (PTR) new;
851 /* If there is a base address, make sure that any sections it might
852 mention are initialized. */
853 if (s->addr_tree != NULL)
854 exp_init_os (s->addr_tree);
857 /* Make sure that all output sections mentioned in an expression are
858 initialized. */
860 static void
861 exp_init_os (exp)
862 etree_type *exp;
864 switch (exp->type.node_class)
866 case etree_assign:
867 exp_init_os (exp->assign.src);
868 break;
870 case etree_binary:
871 exp_init_os (exp->binary.lhs);
872 exp_init_os (exp->binary.rhs);
873 break;
875 case etree_trinary:
876 exp_init_os (exp->trinary.cond);
877 exp_init_os (exp->trinary.lhs);
878 exp_init_os (exp->trinary.rhs);
879 break;
881 case etree_unary:
882 exp_init_os (exp->unary.child);
883 break;
885 case etree_name:
886 switch (exp->type.node_code)
888 case ADDR:
889 case LOADADDR:
890 case SIZEOF:
892 lang_output_section_statement_type *os;
894 os = lang_output_section_find (exp->name.name);
895 if (os != NULL && os->bfd_section == NULL)
896 init_os (os);
899 break;
901 default:
902 break;
906 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
907 once into the output. This routine checks each section, and
908 arrange to discard it if a section of the same name has already
909 been linked. If the section has COMDAT information, then it uses
910 that to decide whether the section should be included. This code
911 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
912 that is, it does not depend solely upon the section name.
913 section_already_linked is called via bfd_map_over_sections. */
915 /* This is the shape of the elements inside the already_linked hash
916 table. It maps a name onto a list of already_linked elements with
917 the same name. It's possible to get more than one element in a
918 list if the COMDAT sections have different names. */
920 struct already_linked_hash_entry
922 struct bfd_hash_entry root;
923 struct already_linked *entry;
926 struct already_linked
928 struct already_linked *next;
929 asection *sec;
932 /* The hash table. */
934 static struct bfd_hash_table already_linked_table;
936 static void
937 section_already_linked (abfd, sec, data)
938 bfd *abfd;
939 asection *sec;
940 PTR data;
942 lang_input_statement_type *entry = (lang_input_statement_type *) data;
943 flagword flags;
944 const char *name;
945 struct already_linked *l;
946 struct already_linked_hash_entry *already_linked_list;
948 /* If we are only reading symbols from this object, then we want to
949 discard all sections. */
950 if (entry->just_syms_flag)
952 sec->output_section = bfd_abs_section_ptr;
953 sec->output_offset = sec->vma;
954 return;
957 flags = bfd_get_section_flags (abfd, sec);
959 if ((flags & SEC_LINK_ONCE) == 0)
960 return;
962 /* FIXME: When doing a relocatable link, we may have trouble
963 copying relocations in other sections that refer to local symbols
964 in the section being discarded. Those relocations will have to
965 be converted somehow; as of this writing I'm not sure that any of
966 the backends handle that correctly.
968 It is tempting to instead not discard link once sections when
969 doing a relocatable link (technically, they should be discarded
970 whenever we are building constructors). However, that fails,
971 because the linker winds up combining all the link once sections
972 into a single large link once section, which defeats the purpose
973 of having link once sections in the first place.
975 Also, not merging link once sections in a relocatable link
976 causes trouble for MIPS ELF, which relies in link once semantics
977 to handle the .reginfo section correctly. */
979 name = bfd_get_section_name (abfd, sec);
981 already_linked_list =
982 ((struct already_linked_hash_entry *)
983 bfd_hash_lookup (&already_linked_table, name, true, false));
985 for (l = already_linked_list->entry; l != NULL; l = l->next)
987 if (sec->comdat == NULL
988 || l->sec->comdat == NULL
989 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
991 /* The section has already been linked. See if we should
992 issue a warning. */
993 switch (flags & SEC_LINK_DUPLICATES)
995 default:
996 abort ();
998 case SEC_LINK_DUPLICATES_DISCARD:
999 break;
1001 case SEC_LINK_DUPLICATES_ONE_ONLY:
1002 if (sec->comdat == NULL)
1003 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1004 abfd, name);
1005 else
1006 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1007 abfd, name, sec->comdat->name);
1008 break;
1010 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
1011 /* FIXME: We should really dig out the contents of both
1012 sections and memcmp them. The COFF/PE spec says that
1013 the Microsoft linker does not implement this
1014 correctly, so I'm not going to bother doing it
1015 either. */
1016 /* Fall through. */
1017 case SEC_LINK_DUPLICATES_SAME_SIZE:
1018 if (bfd_section_size (abfd, sec)
1019 != bfd_section_size (l->sec->owner, l->sec))
1020 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1021 abfd, name);
1022 break;
1025 /* Set the output_section field so that lang_add_section
1026 does not create a lang_input_section structure for this
1027 section. */
1028 sec->output_section = bfd_abs_section_ptr;
1030 return;
1034 /* This is the first section with this name. Record it. Allocate
1035 the memory from the same obstack as the hash table is kept in. */
1037 l = ((struct already_linked *)
1038 bfd_hash_allocate (&already_linked_table, sizeof *l));
1040 l->sec = sec;
1041 l->next = already_linked_list->entry;
1042 already_linked_list->entry = l;
1045 /* Support routines for the hash table used by section_already_linked,
1046 initialize the table, fill in an entry and remove the table. */
1048 static struct bfd_hash_entry *
1049 already_linked_newfunc (entry, table, string)
1050 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1051 struct bfd_hash_table *table;
1052 const char *string ATTRIBUTE_UNUSED;
1054 struct already_linked_hash_entry *ret =
1055 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1057 ret->entry = NULL;
1059 return (struct bfd_hash_entry *) ret;
1062 static void
1063 already_linked_table_init ()
1065 if (! bfd_hash_table_init_n (&already_linked_table,
1066 already_linked_newfunc,
1067 42))
1068 einfo (_("%P%F: Failed to create hash table\n"));
1071 static void
1072 already_linked_table_free ()
1074 bfd_hash_table_free (&already_linked_table);
1077 /* The wild routines.
1079 These expand statements like *(.text) and foo.o to a list of
1080 explicit actions, like foo.o(.text), bar.o(.text) and
1081 foo.o(.text, .data). */
1083 /* Return true if the PATTERN argument is a wildcard pattern.
1084 Although backslashes are treated specially if a pattern contains
1085 wildcards, we do not consider the mere presence of a backslash to
1086 be enough to cause the pattern to be treated as a wildcard.
1087 That lets us handle DOS filenames more naturally. */
1089 static boolean
1090 wildcardp (pattern)
1091 const char *pattern;
1093 const char *s;
1095 for (s = pattern; *s != '\0'; ++s)
1096 if (*s == '?'
1097 || *s == '*'
1098 || *s == '[')
1099 return true;
1100 return false;
1103 /* Add SECTION to the output section OUTPUT. Do this by creating a
1104 lang_input_section statement which is placed at PTR. FILE is the
1105 input file which holds SECTION. */
1107 void
1108 lang_add_section (ptr, section, output, file)
1109 lang_statement_list_type *ptr;
1110 asection *section;
1111 lang_output_section_statement_type *output;
1112 lang_input_statement_type *file;
1114 flagword flags;
1115 boolean discard;
1117 flags = bfd_get_section_flags (section->owner, section);
1119 discard = false;
1121 /* If we are doing a final link, discard sections marked with
1122 SEC_EXCLUDE. */
1123 if (! link_info.relocateable
1124 && (flags & SEC_EXCLUDE) != 0)
1125 discard = true;
1127 /* Discard input sections which are assigned to a section named
1128 DISCARD_SECTION_NAME. */
1129 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1130 discard = true;
1132 /* Discard debugging sections if we are stripping debugging
1133 information. */
1134 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1135 && (flags & SEC_DEBUGGING) != 0)
1136 discard = true;
1138 if (discard)
1140 if (section->output_section == NULL)
1142 /* This prevents future calls from assigning this section. */
1143 section->output_section = bfd_abs_section_ptr;
1145 return;
1148 if (section->output_section == NULL)
1150 boolean first;
1151 lang_input_section_type *new;
1152 flagword flags;
1154 if (output->bfd_section == NULL)
1155 init_os (output);
1157 first = ! output->bfd_section->linker_has_input;
1158 output->bfd_section->linker_has_input = 1;
1160 /* Add a section reference to the list. */
1161 new = new_stat (lang_input_section, ptr);
1163 new->section = section;
1164 new->ifile = file;
1165 section->output_section = output->bfd_section;
1167 flags = section->flags;
1169 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1170 to an output section, because we want to be able to include a
1171 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1172 section (I don't know why we want to do this, but we do).
1173 build_link_order in ldwrite.c handles this case by turning
1174 the embedded SEC_NEVER_LOAD section into a fill. */
1176 flags &= ~ SEC_NEVER_LOAD;
1178 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1179 already been processed. One reason to do this is that on pe
1180 format targets, .text$foo sections go into .text and it's odd
1181 to see .text with SEC_LINK_ONCE set. */
1183 if (! link_info.relocateable)
1184 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1186 /* If this is not the first input section, and the SEC_READONLY
1187 flag is not currently set, then don't set it just because the
1188 input section has it set. */
1190 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1191 flags &= ~ SEC_READONLY;
1193 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1194 if (! first
1195 && ((section->output_section->flags & (SEC_MERGE | SEC_STRINGS))
1196 != (flags & (SEC_MERGE | SEC_STRINGS))
1197 || ((flags & SEC_MERGE)
1198 && section->output_section->entsize != section->entsize)))
1200 section->output_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1201 flags &= ~ (SEC_MERGE | SEC_STRINGS);
1204 section->output_section->flags |= flags;
1206 if (flags & SEC_MERGE)
1207 section->output_section->entsize = section->entsize;
1209 /* If SEC_READONLY is not set in the input section, then clear
1210 it from the output section. */
1211 if ((section->flags & SEC_READONLY) == 0)
1212 section->output_section->flags &= ~SEC_READONLY;
1214 switch (output->sectype)
1216 case normal_section:
1217 break;
1218 case dsect_section:
1219 case copy_section:
1220 case info_section:
1221 case overlay_section:
1222 output->bfd_section->flags &= ~SEC_ALLOC;
1223 break;
1224 case noload_section:
1225 output->bfd_section->flags &= ~SEC_LOAD;
1226 output->bfd_section->flags |= SEC_NEVER_LOAD;
1227 break;
1230 /* Copy over SEC_SMALL_DATA. */
1231 if (section->flags & SEC_SMALL_DATA)
1232 section->output_section->flags |= SEC_SMALL_DATA;
1234 if (section->alignment_power > output->bfd_section->alignment_power)
1235 output->bfd_section->alignment_power = section->alignment_power;
1237 /* If supplied an aligment, then force it. */
1238 if (output->section_alignment != -1)
1239 output->bfd_section->alignment_power = output->section_alignment;
1241 if (section->flags & SEC_BLOCK)
1243 section->output_section->flags |= SEC_BLOCK;
1244 /* FIXME: This value should really be obtained from the bfd... */
1245 output->block_value = 128;
1250 /* Handle wildcard sorting. This returns the lang_input_section which
1251 should follow the one we are going to create for SECTION and FILE,
1252 based on the sorting requirements of WILD. It returns NULL if the
1253 new section should just go at the end of the current list. */
1255 static lang_statement_union_type *
1256 wild_sort (wild, sec, file, section)
1257 lang_wild_statement_type *wild;
1258 struct wildcard_list *sec;
1259 lang_input_statement_type *file;
1260 asection *section;
1262 const char *section_name;
1263 lang_statement_union_type *l;
1265 if (!wild->filenames_sorted && (sec == NULL || !sec->spec.sorted))
1266 return NULL;
1268 section_name = bfd_get_section_name (file->the_bfd, section);
1269 for (l = wild->children.head; l != NULL; l = l->header.next)
1271 lang_input_section_type *ls;
1273 if (l->header.type != lang_input_section_enum)
1274 continue;
1275 ls = &l->input_section;
1277 /* Sorting by filename takes precedence over sorting by section
1278 name. */
1280 if (wild->filenames_sorted)
1282 const char *fn, *ln;
1283 boolean fa, la;
1284 int i;
1286 /* The PE support for the .idata section as generated by
1287 dlltool assumes that files will be sorted by the name of
1288 the archive and then the name of the file within the
1289 archive. */
1291 if (file->the_bfd != NULL
1292 && bfd_my_archive (file->the_bfd) != NULL)
1294 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1295 fa = true;
1297 else
1299 fn = file->filename;
1300 fa = false;
1303 if (ls->ifile->the_bfd != NULL
1304 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1306 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1307 la = true;
1309 else
1311 ln = ls->ifile->filename;
1312 la = false;
1315 i = strcmp (fn, ln);
1316 if (i > 0)
1317 continue;
1318 else if (i < 0)
1319 break;
1321 if (fa || la)
1323 if (fa)
1324 fn = file->filename;
1325 if (la)
1326 ln = ls->ifile->filename;
1328 i = strcmp (fn, ln);
1329 if (i > 0)
1330 continue;
1331 else if (i < 0)
1332 break;
1336 /* Here either the files are not sorted by name, or we are
1337 looking at the sections for this file. */
1339 if (sec != NULL && sec->spec.sorted)
1341 if (strcmp (section_name,
1342 bfd_get_section_name (ls->ifile->the_bfd,
1343 ls->section))
1344 < 0)
1345 break;
1349 return l;
1352 /* Expand a wild statement for a particular FILE. SECTION may be
1353 NULL, in which case it is a wild card. */
1355 static void
1356 output_section_callback (ptr, sec, section, file, output)
1357 lang_wild_statement_type *ptr;
1358 struct wildcard_list *sec;
1359 asection *section;
1360 lang_input_statement_type *file;
1361 PTR output;
1363 lang_statement_union_type *before;
1365 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1366 if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
1367 return;
1369 /* If the wild pattern was marked KEEP, the member sections
1370 should be as well. */
1371 if (ptr->keep_sections)
1372 section->flags |= SEC_KEEP;
1374 before = wild_sort (ptr, sec, file, section);
1376 /* Here BEFORE points to the lang_input_section which
1377 should follow the one we are about to add. If BEFORE
1378 is NULL, then the section should just go at the end
1379 of the current list. */
1381 if (before == NULL)
1382 lang_add_section (&ptr->children, section,
1383 (lang_output_section_statement_type *) output,
1384 file);
1385 else
1387 lang_statement_list_type list;
1388 lang_statement_union_type **pp;
1390 lang_list_init (&list);
1391 lang_add_section (&list, section,
1392 (lang_output_section_statement_type *) output,
1393 file);
1395 /* If we are discarding the section, LIST.HEAD will
1396 be NULL. */
1397 if (list.head != NULL)
1399 ASSERT (list.head->header.next == NULL);
1401 for (pp = &ptr->children.head;
1402 *pp != before;
1403 pp = &(*pp)->header.next)
1404 ASSERT (*pp != NULL);
1406 list.head->header.next = *pp;
1407 *pp = list.head;
1412 /* This is passed a file name which must have been seen already and
1413 added to the statement tree. We will see if it has been opened
1414 already and had its symbols read. If not then we'll read it. */
1416 static lang_input_statement_type *
1417 lookup_name (name)
1418 const char *name;
1420 lang_input_statement_type *search;
1422 for (search = (lang_input_statement_type *) input_file_chain.head;
1423 search != (lang_input_statement_type *) NULL;
1424 search = (lang_input_statement_type *) search->next_real_file)
1426 if (search->filename == (char *) NULL && name == (char *) NULL)
1427 return search;
1428 if (search->filename != (char *) NULL
1429 && name != (char *) NULL
1430 && strcmp (search->filename, name) == 0)
1431 break;
1434 if (search == (lang_input_statement_type *) NULL)
1435 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1436 false);
1438 /* If we have already added this file, or this file is not real
1439 (FIXME: can that ever actually happen?) or the name is NULL
1440 (FIXME: can that ever actually happen?) don't add this file. */
1441 if (search->loaded
1442 || ! search->real
1443 || search->filename == (const char *) NULL)
1444 return search;
1446 if (! load_symbols (search, (lang_statement_list_type *) NULL))
1447 return NULL;
1449 return search;
1452 /* Get the symbols for an input file. */
1454 static boolean
1455 load_symbols (entry, place)
1456 lang_input_statement_type *entry;
1457 lang_statement_list_type *place;
1459 char **matching;
1461 if (entry->loaded)
1462 return true;
1464 ldfile_open_file (entry);
1466 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1467 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1469 bfd_error_type err;
1470 lang_statement_list_type *hold;
1471 boolean bad_load = true;
1473 err = bfd_get_error ();
1475 /* See if the emulation has some special knowledge. */
1476 if (ldemul_unrecognized_file (entry))
1477 return true;
1479 if (err == bfd_error_file_ambiguously_recognized)
1481 char **p;
1483 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1484 einfo (_("%B: matching formats:"), entry->the_bfd);
1485 for (p = matching; *p != NULL; p++)
1486 einfo (" %s", *p);
1487 einfo ("%F\n");
1489 else if (err != bfd_error_file_not_recognized
1490 || place == NULL)
1491 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1492 else
1493 bad_load = false;
1495 bfd_close (entry->the_bfd);
1496 entry->the_bfd = NULL;
1498 /* Try to interpret the file as a linker script. */
1499 ldfile_open_command_file (entry->filename);
1501 hold = stat_ptr;
1502 stat_ptr = place;
1504 ldfile_assumed_script = true;
1505 parser_input = input_script;
1506 yyparse ();
1507 ldfile_assumed_script = false;
1509 stat_ptr = hold;
1511 return ! bad_load;
1514 if (ldemul_recognized_file (entry))
1515 return true;
1517 /* We don't call ldlang_add_file for an archive. Instead, the
1518 add_symbols entry point will call ldlang_add_file, via the
1519 add_archive_element callback, for each element of the archive
1520 which is used. */
1521 switch (bfd_get_format (entry->the_bfd))
1523 default:
1524 break;
1526 case bfd_object:
1527 ldlang_add_file (entry);
1528 if (trace_files || trace_file_tries)
1529 info_msg ("%I\n", entry);
1530 break;
1532 case bfd_archive:
1533 if (entry->whole_archive)
1535 bfd * member = NULL;
1536 boolean loaded = true;
1538 for (;;)
1540 member = bfd_openr_next_archived_file (entry->the_bfd, member);
1542 if (member == NULL)
1543 break;
1545 if (! bfd_check_format (member, bfd_object))
1547 einfo (_("%F%B: member %B in archive is not an object\n"),
1548 entry->the_bfd, member);
1549 loaded = false;
1552 if (! ((*link_info.callbacks->add_archive_element)
1553 (&link_info, member, "--whole-archive")))
1554 abort ();
1556 if (! bfd_link_add_symbols (member, &link_info))
1558 einfo (_("%F%B: could not read symbols: %E\n"), member);
1559 loaded = false;
1563 entry->loaded = loaded;
1564 return loaded;
1566 break;
1569 if (bfd_link_add_symbols (entry->the_bfd, &link_info))
1570 entry->loaded = true;
1571 else
1572 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1574 return entry->loaded;
1577 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1578 may be NULL, indicating that it is a wildcard. Separate
1579 lang_input_section statements are created for each part of the
1580 expansion; they are added after the wild statement S. OUTPUT is
1581 the output section. */
1583 static void
1584 wild (s, target, output)
1585 lang_wild_statement_type *s;
1586 const char *target ATTRIBUTE_UNUSED;
1587 lang_output_section_statement_type *output;
1589 struct wildcard_list *sec;
1591 walk_wild (s, output_section_callback, (PTR) output);
1593 for (sec = s->section_list; sec != NULL; sec = sec->next)
1595 if (default_common_section != NULL)
1596 break;
1597 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
1599 /* Remember the section that common is going to in case we
1600 later get something which doesn't know where to put it. */
1601 default_common_section = output;
1606 /* Return true iff target is the sought target. */
1608 static int
1609 get_target (target, data)
1610 const bfd_target *target;
1611 PTR data;
1613 const char *sought = (const char *) data;
1615 return strcmp (target->name, sought) == 0;
1618 /* Like strcpy() but convert to lower case as well. */
1620 static void
1621 stricpy (dest, src)
1622 char *dest;
1623 char *src;
1625 char c;
1627 while ((c = *src++) != 0)
1628 *dest++ = TOLOWER (c);
1630 *dest = 0;
1633 /* Remove the first occurance of needle (if any) in haystack
1634 from haystack. */
1636 static void
1637 strcut (haystack, needle)
1638 char *haystack;
1639 char *needle;
1641 haystack = strstr (haystack, needle);
1643 if (haystack)
1645 char *src;
1647 for (src = haystack + strlen (needle); *src;)
1648 *haystack++ = *src++;
1650 *haystack = 0;
1654 /* Compare two target format name strings.
1655 Return a value indicating how "similar" they are. */
1657 static int
1658 name_compare (first, second)
1659 char *first;
1660 char *second;
1662 char *copy1;
1663 char *copy2;
1664 int result;
1666 copy1 = xmalloc (strlen (first) + 1);
1667 copy2 = xmalloc (strlen (second) + 1);
1669 /* Convert the names to lower case. */
1670 stricpy (copy1, first);
1671 stricpy (copy2, second);
1673 /* Remove and endian strings from the name. */
1674 strcut (copy1, "big");
1675 strcut (copy1, "little");
1676 strcut (copy2, "big");
1677 strcut (copy2, "little");
1679 /* Return a value based on how many characters match,
1680 starting from the beginning. If both strings are
1681 the same then return 10 * their length. */
1682 for (result = 0; copy1[result] == copy2[result]; result++)
1683 if (copy1[result] == 0)
1685 result *= 10;
1686 break;
1689 free (copy1);
1690 free (copy2);
1692 return result;
1695 /* Set by closest_target_match() below. */
1696 static const bfd_target *winner;
1698 /* Scan all the valid bfd targets looking for one that has the endianness
1699 requirement that was specified on the command line, and is the nearest
1700 match to the original output target. */
1702 static int
1703 closest_target_match (target, data)
1704 const bfd_target *target;
1705 PTR data;
1707 const bfd_target *original = (const bfd_target *) data;
1709 if (command_line.endian == ENDIAN_BIG
1710 && target->byteorder != BFD_ENDIAN_BIG)
1711 return 0;
1713 if (command_line.endian == ENDIAN_LITTLE
1714 && target->byteorder != BFD_ENDIAN_LITTLE)
1715 return 0;
1717 /* Must be the same flavour. */
1718 if (target->flavour != original->flavour)
1719 return 0;
1721 /* If we have not found a potential winner yet, then record this one. */
1722 if (winner == NULL)
1724 winner = target;
1725 return 0;
1728 /* Oh dear, we now have two potential candidates for a successful match.
1729 Compare their names and choose the better one. */
1730 if (name_compare (target->name, original->name)
1731 > name_compare (winner->name, original->name))
1732 winner = target;
1734 /* Keep on searching until wqe have checked them all. */
1735 return 0;
1738 /* Return the BFD target format of the first input file. */
1740 static char *
1741 get_first_input_target ()
1743 char *target = NULL;
1745 LANG_FOR_EACH_INPUT_STATEMENT (s)
1747 if (s->header.type == lang_input_statement_enum
1748 && s->real)
1750 ldfile_open_file (s);
1752 if (s->the_bfd != NULL
1753 && bfd_check_format (s->the_bfd, bfd_object))
1755 target = bfd_get_target (s->the_bfd);
1757 if (target != NULL)
1758 break;
1763 return target;
1766 /* Open the output file. */
1768 static bfd *
1769 open_output (name)
1770 const char *name;
1772 bfd *output;
1774 /* Has the user told us which output format to use? */
1775 if (output_target == (char *) NULL)
1777 /* No - has the current target been set to something other than
1778 the default? */
1779 if (current_target != default_target)
1780 output_target = current_target;
1782 /* No - can we determine the format of the first input file? */
1783 else
1785 output_target = get_first_input_target ();
1787 /* Failed - use the default output target. */
1788 if (output_target == NULL)
1789 output_target = default_target;
1793 /* Has the user requested a particular endianness on the command
1794 line? */
1795 if (command_line.endian != ENDIAN_UNSET)
1797 const bfd_target *target;
1798 enum bfd_endian desired_endian;
1800 /* Get the chosen target. */
1801 target = bfd_search_for_target (get_target, (PTR) output_target);
1803 /* If the target is not supported, we cannot do anything. */
1804 if (target != NULL)
1806 if (command_line.endian == ENDIAN_BIG)
1807 desired_endian = BFD_ENDIAN_BIG;
1808 else
1809 desired_endian = BFD_ENDIAN_LITTLE;
1811 /* See if the target has the wrong endianness. This should
1812 not happen if the linker script has provided big and
1813 little endian alternatives, but some scrips don't do
1814 this. */
1815 if (target->byteorder != desired_endian)
1817 /* If it does, then see if the target provides
1818 an alternative with the correct endianness. */
1819 if (target->alternative_target != NULL
1820 && (target->alternative_target->byteorder == desired_endian))
1821 output_target = target->alternative_target->name;
1822 else
1824 /* Try to find a target as similar as possible to
1825 the default target, but which has the desired
1826 endian characteristic. */
1827 (void) bfd_search_for_target (closest_target_match,
1828 (PTR) target);
1830 /* Oh dear - we could not find any targets that
1831 satisfy our requirements. */
1832 if (winner == NULL)
1833 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1834 else
1835 output_target = winner->name;
1841 output = bfd_openw (name, output_target);
1843 if (output == (bfd *) NULL)
1845 if (bfd_get_error () == bfd_error_invalid_target)
1846 einfo (_("%P%F: target %s not found\n"), output_target);
1848 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1851 delete_output_file_on_failure = true;
1853 #if 0
1854 output->flags |= D_PAGED;
1855 #endif
1857 if (! bfd_set_format (output, bfd_object))
1858 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1859 if (! bfd_set_arch_mach (output,
1860 ldfile_output_architecture,
1861 ldfile_output_machine))
1862 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1864 link_info.hash = bfd_link_hash_table_create (output);
1865 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1866 einfo (_("%P%F: can not create link hash table: %E\n"));
1868 bfd_set_gp_size (output, g_switch_value);
1869 return output;
1872 static void
1873 ldlang_open_output (statement)
1874 lang_statement_union_type *statement;
1876 switch (statement->header.type)
1878 case lang_output_statement_enum:
1879 ASSERT (output_bfd == (bfd *) NULL);
1880 output_bfd = open_output (statement->output_statement.name);
1881 ldemul_set_output_arch ();
1882 if (config.magic_demand_paged && !link_info.relocateable)
1883 output_bfd->flags |= D_PAGED;
1884 else
1885 output_bfd->flags &= ~D_PAGED;
1886 if (config.text_read_only)
1887 output_bfd->flags |= WP_TEXT;
1888 else
1889 output_bfd->flags &= ~WP_TEXT;
1890 if (link_info.traditional_format)
1891 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1892 else
1893 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1894 break;
1896 case lang_target_statement_enum:
1897 current_target = statement->target_statement.target;
1898 break;
1899 default:
1900 break;
1904 /* Open all the input files. */
1906 static void
1907 open_input_bfds (s, force)
1908 lang_statement_union_type *s;
1909 boolean force;
1911 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
1913 switch (s->header.type)
1915 case lang_constructors_statement_enum:
1916 open_input_bfds (constructor_list.head, force);
1917 break;
1918 case lang_output_section_statement_enum:
1919 open_input_bfds (s->output_section_statement.children.head, force);
1920 break;
1921 case lang_wild_statement_enum:
1922 /* Maybe we should load the file's symbols. */
1923 if (s->wild_statement.filename
1924 && ! wildcardp (s->wild_statement.filename))
1925 (void) lookup_name (s->wild_statement.filename);
1926 open_input_bfds (s->wild_statement.children.head, force);
1927 break;
1928 case lang_group_statement_enum:
1930 struct bfd_link_hash_entry *undefs;
1932 /* We must continually search the entries in the group
1933 until no new symbols are added to the list of undefined
1934 symbols. */
1938 undefs = link_info.hash->undefs_tail;
1939 open_input_bfds (s->group_statement.children.head, true);
1941 while (undefs != link_info.hash->undefs_tail);
1943 break;
1944 case lang_target_statement_enum:
1945 current_target = s->target_statement.target;
1946 break;
1947 case lang_input_statement_enum:
1948 if (s->input_statement.real)
1950 lang_statement_list_type add;
1952 s->input_statement.target = current_target;
1954 /* If we are being called from within a group, and this
1955 is an archive which has already been searched, then
1956 force it to be researched unless the whole archive
1957 has been loaded already. */
1958 if (force
1959 && !s->input_statement.whole_archive
1960 && s->input_statement.loaded
1961 && bfd_check_format (s->input_statement.the_bfd,
1962 bfd_archive))
1963 s->input_statement.loaded = false;
1965 lang_list_init (&add);
1967 if (! load_symbols (&s->input_statement, &add))
1968 config.make_executable = false;
1970 if (add.head != NULL)
1972 *add.tail = s->header.next;
1973 s->header.next = add.head;
1976 break;
1977 default:
1978 break;
1983 /* If there are [COMMONS] statements, put a wild one into the bss
1984 section. */
1986 static void
1987 lang_reasonable_defaults ()
1989 #if 0
1990 lang_output_section_statement_lookup (".text");
1991 lang_output_section_statement_lookup (".data");
1993 default_common_section = lang_output_section_statement_lookup (".bss");
1995 if (placed_commons == false)
1997 lang_wild_statement_type *new =
1998 new_stat (lang_wild_statement,
1999 &default_common_section->children);
2001 new->section_name = "COMMON";
2002 new->filename = (char *) NULL;
2003 lang_list_init (&new->children);
2005 #endif
2008 /* Add the supplied name to the symbol table as an undefined reference.
2009 Remove items from the chain as we open input bfds. */
2010 typedef struct ldlang_undef_chain_list
2012 struct ldlang_undef_chain_list *next;
2013 char *name;
2014 } ldlang_undef_chain_list_type;
2016 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
2018 void
2019 ldlang_add_undef (name)
2020 const char *const name;
2022 ldlang_undef_chain_list_type *new =
2023 ((ldlang_undef_chain_list_type *)
2024 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
2026 new->next = ldlang_undef_chain_list_head;
2027 ldlang_undef_chain_list_head = new;
2029 new->name = xstrdup (name);
2032 /* Run through the list of undefineds created above and place them
2033 into the linker hash table as undefined symbols belonging to the
2034 script file. */
2036 static void
2037 lang_place_undefineds ()
2039 ldlang_undef_chain_list_type *ptr;
2041 for (ptr = ldlang_undef_chain_list_head;
2042 ptr != (ldlang_undef_chain_list_type *) NULL;
2043 ptr = ptr->next)
2045 struct bfd_link_hash_entry *h;
2047 h = bfd_link_hash_lookup (link_info.hash, ptr->name, true, false, true);
2048 if (h == (struct bfd_link_hash_entry *) NULL)
2049 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2050 if (h->type == bfd_link_hash_new)
2052 h->type = bfd_link_hash_undefined;
2053 h->u.undef.abfd = NULL;
2054 bfd_link_add_undef (link_info.hash, h);
2059 /* Open input files and attatch to output sections. */
2061 static void
2062 map_input_to_output_sections (s, target, output_section_statement)
2063 lang_statement_union_type *s;
2064 const char *target;
2065 lang_output_section_statement_type *output_section_statement;
2067 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2069 switch (s->header.type)
2071 case lang_wild_statement_enum:
2072 wild (&s->wild_statement, target, output_section_statement);
2073 break;
2074 case lang_constructors_statement_enum:
2075 map_input_to_output_sections (constructor_list.head,
2076 target,
2077 output_section_statement);
2078 break;
2079 case lang_output_section_statement_enum:
2080 map_input_to_output_sections (s->output_section_statement.children.head,
2081 target,
2082 &s->output_section_statement);
2083 break;
2084 case lang_output_statement_enum:
2085 break;
2086 case lang_target_statement_enum:
2087 target = s->target_statement.target;
2088 break;
2089 case lang_group_statement_enum:
2090 map_input_to_output_sections (s->group_statement.children.head,
2091 target,
2092 output_section_statement);
2093 break;
2094 case lang_fill_statement_enum:
2095 case lang_input_section_enum:
2096 case lang_object_symbols_statement_enum:
2097 case lang_data_statement_enum:
2098 case lang_reloc_statement_enum:
2099 case lang_padding_statement_enum:
2100 case lang_input_statement_enum:
2101 if (output_section_statement != NULL
2102 && output_section_statement->bfd_section == NULL)
2103 init_os (output_section_statement);
2104 break;
2105 case lang_assignment_statement_enum:
2106 if (output_section_statement != NULL
2107 && output_section_statement->bfd_section == NULL)
2108 init_os (output_section_statement);
2110 /* Make sure that any sections mentioned in the assignment
2111 are initialized. */
2112 exp_init_os (s->assignment_statement.exp);
2113 break;
2114 case lang_afile_asection_pair_statement_enum:
2115 FAIL ();
2116 break;
2117 case lang_address_statement_enum:
2118 /* Mark the specified section with the supplied address. */
2120 lang_output_section_statement_type *os =
2121 lang_output_section_statement_lookup
2122 (s->address_statement.section_name);
2124 if (os->bfd_section == NULL)
2125 init_os (os);
2126 os->addr_tree = s->address_statement.address;
2128 break;
2133 static void
2134 print_output_section_statement (output_section_statement)
2135 lang_output_section_statement_type *output_section_statement;
2137 asection *section = output_section_statement->bfd_section;
2138 int len;
2140 if (output_section_statement != abs_output_section)
2142 minfo ("\n%s", output_section_statement->name);
2144 if (section != NULL)
2146 print_dot = section->vma;
2148 len = strlen (output_section_statement->name);
2149 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2151 print_nl ();
2152 len = 0;
2154 while (len < SECTION_NAME_MAP_LENGTH)
2156 print_space ();
2157 ++len;
2160 minfo ("0x%V %W", section->vma, section->_raw_size);
2162 if (output_section_statement->load_base != NULL)
2164 bfd_vma addr;
2166 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2167 "load base", lang_final_phase_enum);
2168 minfo (_(" load address 0x%V"), addr);
2172 print_nl ();
2175 print_statement_list (output_section_statement->children.head,
2176 output_section_statement);
2179 static void
2180 print_assignment (assignment, output_section)
2181 lang_assignment_statement_type *assignment;
2182 lang_output_section_statement_type *output_section;
2184 int i;
2185 etree_value_type result;
2187 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2188 print_space ();
2190 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2191 lang_final_phase_enum, print_dot, &print_dot);
2192 if (result.valid_p)
2193 minfo ("0x%V", result.value + result.section->bfd_section->vma);
2194 else
2196 minfo ("*undef* ");
2197 #ifdef BFD64
2198 minfo (" ");
2199 #endif
2202 minfo (" ");
2204 exp_print_tree (assignment->exp);
2206 print_nl ();
2209 static void
2210 print_input_statement (statm)
2211 lang_input_statement_type *statm;
2213 if (statm->filename != (char *) NULL)
2215 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2219 /* Print all symbols defined in a particular section. This is called
2220 via bfd_link_hash_traverse. */
2222 static boolean
2223 print_one_symbol (hash_entry, ptr)
2224 struct bfd_link_hash_entry *hash_entry;
2225 PTR ptr;
2227 asection *sec = (asection *) ptr;
2229 if ((hash_entry->type == bfd_link_hash_defined
2230 || hash_entry->type == bfd_link_hash_defweak)
2231 && sec == hash_entry->u.def.section)
2233 int i;
2235 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2236 print_space ();
2237 minfo ("0x%V ",
2238 (hash_entry->u.def.value
2239 + hash_entry->u.def.section->output_offset
2240 + hash_entry->u.def.section->output_section->vma));
2242 minfo (" %T\n", hash_entry->root.string);
2245 return true;
2248 /* Print information about an input section to the map file. */
2250 static void
2251 print_input_section (in)
2252 lang_input_section_type *in;
2254 asection *i = in->section;
2255 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
2256 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2257 ldfile_output_machine);
2258 if (size != 0)
2260 print_space ();
2262 minfo ("%s", i->name);
2264 if (i->output_section != NULL)
2266 int len;
2268 len = 1 + strlen (i->name);
2269 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2271 print_nl ();
2272 len = 0;
2274 while (len < SECTION_NAME_MAP_LENGTH)
2276 print_space ();
2277 ++len;
2280 minfo ("0x%V %W %B\n",
2281 i->output_section->vma + i->output_offset, size / opb,
2282 i->owner);
2284 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2286 len = SECTION_NAME_MAP_LENGTH + 3;
2287 #ifdef BFD64
2288 len += 16;
2289 #else
2290 len += 8;
2291 #endif
2292 while (len > 0)
2294 print_space ();
2295 --len;
2298 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2301 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2303 print_dot = i->output_section->vma + i->output_offset + size / opb;
2308 static void
2309 print_fill_statement (fill)
2310 lang_fill_statement_type *fill;
2312 fprintf (config.map_file, " FILL mask 0x%x\n", fill->fill);
2315 static void
2316 print_data_statement (data)
2317 lang_data_statement_type *data;
2319 int i;
2320 bfd_vma addr;
2321 bfd_size_type size;
2322 const char *name;
2323 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2324 ldfile_output_machine);
2326 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2327 print_space ();
2329 addr = data->output_vma;
2330 if (data->output_section != NULL)
2331 addr += data->output_section->vma;
2333 switch (data->type)
2335 default:
2336 abort ();
2337 case BYTE:
2338 size = BYTE_SIZE;
2339 name = "BYTE";
2340 break;
2341 case SHORT:
2342 size = SHORT_SIZE;
2343 name = "SHORT";
2344 break;
2345 case LONG:
2346 size = LONG_SIZE;
2347 name = "LONG";
2348 break;
2349 case QUAD:
2350 size = QUAD_SIZE;
2351 name = "QUAD";
2352 break;
2353 case SQUAD:
2354 size = QUAD_SIZE;
2355 name = "SQUAD";
2356 break;
2359 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2361 if (data->exp->type.node_class != etree_value)
2363 print_space ();
2364 exp_print_tree (data->exp);
2367 print_nl ();
2369 print_dot = addr + size / opb;
2373 /* Print an address statement. These are generated by options like
2374 -Ttext. */
2376 static void
2377 print_address_statement (address)
2378 lang_address_statement_type *address;
2380 minfo (_("Address of section %s set to "), address->section_name);
2381 exp_print_tree (address->address);
2382 print_nl ();
2385 /* Print a reloc statement. */
2387 static void
2388 print_reloc_statement (reloc)
2389 lang_reloc_statement_type *reloc;
2391 int i;
2392 bfd_vma addr;
2393 bfd_size_type size;
2394 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2395 ldfile_output_machine);
2397 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2398 print_space ();
2400 addr = reloc->output_vma;
2401 if (reloc->output_section != NULL)
2402 addr += reloc->output_section->vma;
2404 size = bfd_get_reloc_size (reloc->howto);
2406 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2408 if (reloc->name != NULL)
2409 minfo ("%s+", reloc->name);
2410 else
2411 minfo ("%s+", reloc->section->name);
2413 exp_print_tree (reloc->addend_exp);
2415 print_nl ();
2417 print_dot = addr + size / opb;
2420 static void
2421 print_padding_statement (s)
2422 lang_padding_statement_type *s;
2424 int len;
2425 bfd_vma addr;
2426 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2427 ldfile_output_machine);
2429 minfo (" *fill*");
2431 len = sizeof " *fill*" - 1;
2432 while (len < SECTION_NAME_MAP_LENGTH)
2434 print_space ();
2435 ++len;
2438 addr = s->output_offset;
2439 if (s->output_section != NULL)
2440 addr += s->output_section->vma;
2441 minfo ("0x%V %W", addr, s->size);
2443 if (s->fill != 0)
2444 minfo (" %u", s->fill);
2446 print_nl ();
2448 print_dot = addr + s->size / opb;
2451 static void
2452 print_wild_statement (w, os)
2453 lang_wild_statement_type *w;
2454 lang_output_section_statement_type *os;
2456 struct wildcard_list *sec;
2458 print_space ();
2460 if (w->filenames_sorted)
2461 minfo ("SORT(");
2462 if (w->filename != NULL)
2463 minfo ("%s", w->filename);
2464 else
2465 minfo ("*");
2466 if (w->filenames_sorted)
2467 minfo (")");
2469 minfo ("(");
2470 for (sec = w->section_list; sec; sec = sec->next)
2472 if (sec->spec.sorted)
2473 minfo ("SORT(");
2474 if (sec->spec.exclude_name_list != NULL)
2476 name_list *tmp;
2477 minfo ("EXCLUDE_FILE ( %s", sec->spec.exclude_name_list->name);
2478 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
2479 minfo (", %s", tmp->name);
2480 minfo (")");
2482 if (sec->spec.name != NULL)
2483 minfo ("%s", sec->spec.name);
2484 else
2485 minfo ("*");
2486 if (sec->spec.sorted)
2487 minfo (")");
2489 minfo (")");
2491 print_nl ();
2493 print_statement_list (w->children.head, os);
2496 /* Print a group statement. */
2498 static void
2499 print_group (s, os)
2500 lang_group_statement_type *s;
2501 lang_output_section_statement_type *os;
2503 fprintf (config.map_file, "START GROUP\n");
2504 print_statement_list (s->children.head, os);
2505 fprintf (config.map_file, "END GROUP\n");
2508 /* Print the list of statements in S.
2509 This can be called for any statement type. */
2511 static void
2512 print_statement_list (s, os)
2513 lang_statement_union_type *s;
2514 lang_output_section_statement_type *os;
2516 while (s != NULL)
2518 print_statement (s, os);
2519 s = s->header.next;
2523 /* Print the first statement in statement list S.
2524 This can be called for any statement type. */
2526 static void
2527 print_statement (s, os)
2528 lang_statement_union_type *s;
2529 lang_output_section_statement_type *os;
2531 switch (s->header.type)
2533 default:
2534 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2535 FAIL ();
2536 break;
2537 case lang_constructors_statement_enum:
2538 if (constructor_list.head != NULL)
2540 if (constructors_sorted)
2541 minfo (" SORT (CONSTRUCTORS)\n");
2542 else
2543 minfo (" CONSTRUCTORS\n");
2544 print_statement_list (constructor_list.head, os);
2546 break;
2547 case lang_wild_statement_enum:
2548 print_wild_statement (&s->wild_statement, os);
2549 break;
2550 case lang_address_statement_enum:
2551 print_address_statement (&s->address_statement);
2552 break;
2553 case lang_object_symbols_statement_enum:
2554 minfo (" CREATE_OBJECT_SYMBOLS\n");
2555 break;
2556 case lang_fill_statement_enum:
2557 print_fill_statement (&s->fill_statement);
2558 break;
2559 case lang_data_statement_enum:
2560 print_data_statement (&s->data_statement);
2561 break;
2562 case lang_reloc_statement_enum:
2563 print_reloc_statement (&s->reloc_statement);
2564 break;
2565 case lang_input_section_enum:
2566 print_input_section (&s->input_section);
2567 break;
2568 case lang_padding_statement_enum:
2569 print_padding_statement (&s->padding_statement);
2570 break;
2571 case lang_output_section_statement_enum:
2572 print_output_section_statement (&s->output_section_statement);
2573 break;
2574 case lang_assignment_statement_enum:
2575 print_assignment (&s->assignment_statement, os);
2576 break;
2577 case lang_target_statement_enum:
2578 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2579 break;
2580 case lang_output_statement_enum:
2581 minfo ("OUTPUT(%s", s->output_statement.name);
2582 if (output_target != NULL)
2583 minfo (" %s", output_target);
2584 minfo (")\n");
2585 break;
2586 case lang_input_statement_enum:
2587 print_input_statement (&s->input_statement);
2588 break;
2589 case lang_group_statement_enum:
2590 print_group (&s->group_statement, os);
2591 break;
2592 case lang_afile_asection_pair_statement_enum:
2593 FAIL ();
2594 break;
2598 static void
2599 print_statements ()
2601 print_statement_list (statement_list.head, abs_output_section);
2604 /* Print the first N statements in statement list S to STDERR.
2605 If N == 0, nothing is printed.
2606 If N < 0, the entire list is printed.
2607 Intended to be called from GDB. */
2609 void
2610 dprint_statement (s, n)
2611 lang_statement_union_type *s;
2612 int n;
2614 FILE *map_save = config.map_file;
2616 config.map_file = stderr;
2618 if (n < 0)
2619 print_statement_list (s, abs_output_section);
2620 else
2622 while (s && --n >= 0)
2624 print_statement (s, abs_output_section);
2625 s = s->header.next;
2629 config.map_file = map_save;
2632 static void
2633 insert_pad (ptr, fill, alignment_needed, output_section, dot)
2634 lang_statement_union_type **ptr;
2635 fill_type fill;
2636 unsigned int alignment_needed;
2637 asection *output_section;
2638 bfd_vma dot;
2640 lang_statement_union_type *pad;
2642 pad = ((lang_statement_union_type *)
2643 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
2644 if (ptr != &statement_list.head
2645 && pad->header.type == lang_padding_statement_enum
2646 && pad->padding_statement.output_section == output_section)
2648 /* Use the existing pad statement. The above test on output
2649 section is probably redundant, but it doesn't hurt to check. */
2651 else
2653 /* Make a new padding statement, linked into existing chain. */
2654 pad = ((lang_statement_union_type *)
2655 stat_alloc (sizeof (lang_padding_statement_type)));
2656 pad->header.next = *ptr;
2657 *ptr = pad;
2658 pad->header.type = lang_padding_statement_enum;
2659 pad->padding_statement.output_section = output_section;
2660 pad->padding_statement.fill = fill;
2662 pad->padding_statement.output_offset = dot - output_section->vma;
2663 pad->padding_statement.size = alignment_needed;
2664 output_section->_raw_size += alignment_needed;
2667 /* Work out how much this section will move the dot point. */
2669 static bfd_vma
2670 size_input_section (this_ptr, output_section_statement, fill, dot)
2671 lang_statement_union_type **this_ptr;
2672 lang_output_section_statement_type *output_section_statement;
2673 fill_type fill;
2674 bfd_vma dot;
2676 lang_input_section_type *is = &((*this_ptr)->input_section);
2677 asection *i = is->section;
2679 if (is->ifile->just_syms_flag == false)
2681 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2682 ldfile_output_machine);
2683 unsigned int alignment_needed;
2684 asection *o;
2686 /* Align this section first to the input sections requirement,
2687 then to the output section's requirement. If this alignment
2688 is greater than any seen before, then record it too. Perform
2689 the alignment by inserting a magic 'padding' statement. */
2691 if (output_section_statement->subsection_alignment != -1)
2692 i->alignment_power = output_section_statement->subsection_alignment;
2694 o = output_section_statement->bfd_section;
2695 if (o->alignment_power < i->alignment_power)
2696 o->alignment_power = i->alignment_power;
2698 alignment_needed = align_power (dot, i->alignment_power) - dot;
2700 if (alignment_needed != 0)
2702 insert_pad (this_ptr, fill, alignment_needed * opb, o, dot);
2703 dot += alignment_needed;
2706 /* Remember where in the output section this input section goes. */
2708 i->output_offset = dot - o->vma;
2710 /* Mark how big the output section must be to contain this now. */
2711 if (i->_cooked_size != 0)
2712 dot += i->_cooked_size / opb;
2713 else
2714 dot += i->_raw_size / opb;
2715 o->_raw_size = (dot - o->vma) * opb;
2717 else
2719 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2722 return dot;
2725 #define IGNORE_SECTION(bfd, s) \
2726 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2727 != (SEC_ALLOC | SEC_LOAD)) \
2728 || bfd_section_size (bfd, s) == 0)
2730 /* Check to see if any allocated sections overlap with other allocated
2731 sections. This can happen when the linker script specifically specifies
2732 the output section addresses of the two sections. */
2734 static void
2735 lang_check_section_addresses ()
2737 asection *s;
2738 unsigned opb = bfd_octets_per_byte (output_bfd);
2740 /* Scan all sections in the output list. */
2741 for (s = output_bfd->sections; s != NULL; s = s->next)
2743 asection *os;
2745 /* Ignore sections which are not loaded or which have no contents. */
2746 if (IGNORE_SECTION (output_bfd, s))
2747 continue;
2749 /* Once we reach section 's' stop our seach. This prevents two
2750 warning messages from being produced, one for 'section A overlaps
2751 section B' and one for 'section B overlaps section A'. */
2752 for (os = output_bfd->sections; os != s; os = os->next)
2754 bfd_vma s_start;
2755 bfd_vma s_end;
2756 bfd_vma os_start;
2757 bfd_vma os_end;
2759 /* Only consider loadable sections with real contents. */
2760 if (IGNORE_SECTION (output_bfd, os))
2761 continue;
2763 /* We must check the sections' LMA addresses not their
2764 VMA addresses because overlay sections can have
2765 overlapping VMAs but they must have distinct LMAs. */
2766 s_start = bfd_section_lma (output_bfd, s);
2767 os_start = bfd_section_lma (output_bfd, os);
2768 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2769 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
2771 /* Look for an overlap. */
2772 if ((s_end < os_start) || (s_start > os_end))
2773 continue;
2775 einfo (
2776 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2777 s->name, s_start, s_end, os->name, os_start, os_end);
2779 /* Once we have found one overlap for this section,
2780 stop looking for others. */
2781 break;
2786 /* Make sure the new address is within the region. We explicitly permit the
2787 current address to be at the exact end of the region when the address is
2788 non-zero, in case the region is at the end of addressable memory and the
2789 calculation wraps around. */
2791 static void
2792 os_region_check (os, region, tree, base)
2793 lang_output_section_statement_type *os;
2794 struct memory_region_struct *region;
2795 etree_type *tree;
2796 bfd_vma base;
2798 if ((region->current < region->origin
2799 || (region->current - region->origin > region->length))
2800 && ((region->current != region->origin + region->length)
2801 || base == 0))
2803 if (tree != (etree_type *) NULL)
2805 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2806 region->current,
2807 os->bfd_section->owner,
2808 os->bfd_section->name,
2809 region->name);
2811 else
2813 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2814 region->name,
2815 os->bfd_section->owner,
2816 os->bfd_section->name);
2818 /* Reset the region pointer. */
2819 region->current = region->origin;
2823 /* Set the sizes for all the output sections. */
2825 bfd_vma
2826 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
2827 lang_statement_union_type *s;
2828 lang_output_section_statement_type *output_section_statement;
2829 lang_statement_union_type **prev;
2830 fill_type fill;
2831 bfd_vma dot;
2832 boolean *relax;
2834 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2835 ldfile_output_machine);
2837 /* Size up the sections from their constituent parts. */
2838 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2840 switch (s->header.type)
2842 case lang_output_section_statement_enum:
2844 bfd_vma after;
2845 lang_output_section_statement_type *os;
2847 os = &s->output_section_statement;
2848 if (os->bfd_section == NULL)
2849 /* This section was never actually created. */
2850 break;
2852 /* If this is a COFF shared library section, use the size and
2853 address from the input section. FIXME: This is COFF
2854 specific; it would be cleaner if there were some other way
2855 to do this, but nothing simple comes to mind. */
2856 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2858 asection *input;
2860 if (os->children.head == NULL
2861 || os->children.head->header.next != NULL
2862 || os->children.head->header.type != lang_input_section_enum)
2863 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2864 os->name);
2866 input = os->children.head->input_section.section;
2867 bfd_set_section_vma (os->bfd_section->owner,
2868 os->bfd_section,
2869 bfd_section_vma (input->owner, input));
2870 os->bfd_section->_raw_size = input->_raw_size;
2871 break;
2874 if (bfd_is_abs_section (os->bfd_section))
2876 /* No matter what happens, an abs section starts at zero. */
2877 ASSERT (os->bfd_section->vma == 0);
2879 else
2881 if (os->addr_tree == (etree_type *) NULL)
2883 /* No address specified for this section, get one
2884 from the region specification. */
2885 if (os->region == (lang_memory_region_type *) NULL
2886 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2887 & (SEC_ALLOC | SEC_LOAD)) != 0)
2888 && os->region->name[0] == '*'
2889 && strcmp (os->region->name, "*default*") == 0))
2891 os->region = lang_memory_default (os->bfd_section);
2894 /* If a loadable section is using the default memory
2895 region, and some non default memory regions were
2896 defined, issue a warning. */
2897 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
2898 & (SEC_ALLOC | SEC_LOAD)) != 0
2899 && ! link_info.relocateable
2900 && strcmp (os->region->name, "*default*") == 0
2901 && lang_memory_region_list != NULL
2902 && (strcmp (lang_memory_region_list->name,
2903 "*default*") != 0
2904 || lang_memory_region_list->next != NULL))
2905 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2906 bfd_get_section_name (output_bfd,
2907 os->bfd_section));
2909 dot = os->region->current;
2911 if (os->section_alignment == -1)
2913 bfd_vma olddot;
2915 olddot = dot;
2916 dot = align_power (dot,
2917 os->bfd_section->alignment_power);
2919 if (dot != olddot && config.warn_section_align)
2920 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2921 os->name, (unsigned int) (dot - olddot));
2924 else
2926 etree_value_type r;
2928 r = exp_fold_tree (os->addr_tree,
2929 abs_output_section,
2930 lang_allocating_phase_enum,
2931 dot, &dot);
2932 if (r.valid_p == false)
2934 einfo (_("%F%S: non constant address expression for section %s\n"),
2935 os->name);
2937 dot = r.value + r.section->bfd_section->vma;
2940 /* The section starts here.
2941 First, align to what the section needs. */
2943 if (os->section_alignment != -1)
2944 dot = align_power (dot, os->section_alignment);
2946 bfd_set_section_vma (0, os->bfd_section, dot);
2948 os->bfd_section->output_offset = 0;
2951 lang_size_sections (os->children.head, os, &os->children.head,
2952 os->fill, dot, relax);
2954 /* Put the section within the requested block size, or
2955 align at the block boundary. */
2956 after = ALIGN_N (os->bfd_section->vma
2957 + os->bfd_section->_raw_size / opb,
2958 /* The coercion here is important, see ld.h. */
2959 (bfd_vma) os->block_value);
2961 if (bfd_is_abs_section (os->bfd_section))
2962 ASSERT (after == os->bfd_section->vma);
2963 else
2964 os->bfd_section->_raw_size =
2965 (after - os->bfd_section->vma) * opb;
2966 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
2967 os->processed = true;
2969 /* Update dot in the region ?
2970 We only do this if the section is going to be allocated,
2971 since unallocated sections do not contribute to the region's
2972 overall size in memory.
2974 If the SEC_NEVER_LOAD bit is not set, it will affect the
2975 addresses of sections after it. We have to update
2976 dot. */
2977 if (os->region != (lang_memory_region_type *) NULL
2978 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
2979 & SEC_NEVER_LOAD) == 0
2980 || (bfd_get_section_flags (output_bfd, os->bfd_section)
2981 & (SEC_ALLOC | SEC_LOAD))))
2983 os->region->current = dot;
2985 /* Make sure the new address is within the region. */
2986 os_region_check (os, os->region, os->addr_tree,
2987 os->bfd_section->vma);
2989 /* If there's no load address specified, use the run
2990 region as the load region. */
2991 if (os->lma_region == NULL && os->load_base == NULL)
2992 os->lma_region = os->region;
2994 if (os->lma_region != NULL)
2996 if (os->load_base != NULL)
2998 einfo (_("%X%P: use an absolute load address or a load memory region, not both\n"));
3000 else
3002 /* Don't allocate twice. */
3003 if (os->lma_region != os->region)
3005 /* Set load_base, which will be handled later. */
3006 os->load_base =
3007 exp_intop (os->lma_region->current);
3008 os->lma_region->current +=
3009 os->bfd_section->_raw_size / opb;
3010 os_region_check (os, os->lma_region, NULL,
3011 os->bfd_section->lma);
3017 break;
3019 case lang_constructors_statement_enum:
3020 dot = lang_size_sections (constructor_list.head,
3021 output_section_statement,
3022 &s->wild_statement.children.head,
3023 fill, dot, relax);
3024 break;
3026 case lang_data_statement_enum:
3028 unsigned int size = 0;
3030 s->data_statement.output_vma =
3031 dot - output_section_statement->bfd_section->vma;
3032 s->data_statement.output_section =
3033 output_section_statement->bfd_section;
3035 switch (s->data_statement.type)
3037 default:
3038 abort ();
3039 case QUAD:
3040 case SQUAD:
3041 size = QUAD_SIZE;
3042 break;
3043 case LONG:
3044 size = LONG_SIZE;
3045 break;
3046 case SHORT:
3047 size = SHORT_SIZE;
3048 break;
3049 case BYTE:
3050 size = BYTE_SIZE;
3051 break;
3053 if (size < opb)
3054 size = opb;
3055 dot += size / opb;
3056 output_section_statement->bfd_section->_raw_size += size;
3057 /* The output section gets contents, and then we inspect for
3058 any flags set in the input script which override any ALLOC. */
3059 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
3060 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
3062 output_section_statement->bfd_section->flags |=
3063 SEC_ALLOC | SEC_LOAD;
3066 break;
3068 case lang_reloc_statement_enum:
3070 int size;
3072 s->reloc_statement.output_vma =
3073 dot - output_section_statement->bfd_section->vma;
3074 s->reloc_statement.output_section =
3075 output_section_statement->bfd_section;
3076 size = bfd_get_reloc_size (s->reloc_statement.howto);
3077 dot += size / opb;
3078 output_section_statement->bfd_section->_raw_size += size;
3080 break;
3082 case lang_wild_statement_enum:
3084 dot = lang_size_sections (s->wild_statement.children.head,
3085 output_section_statement,
3086 &s->wild_statement.children.head,
3087 fill, dot, relax);
3089 break;
3091 case lang_object_symbols_statement_enum:
3092 link_info.create_object_symbols_section =
3093 output_section_statement->bfd_section;
3094 break;
3095 case lang_output_statement_enum:
3096 case lang_target_statement_enum:
3097 break;
3098 case lang_input_section_enum:
3100 asection *i;
3102 i = (*prev)->input_section.section;
3103 if (! relax)
3105 if (i->_cooked_size == 0)
3106 i->_cooked_size = i->_raw_size;
3108 else
3110 boolean again;
3112 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3113 einfo (_("%P%F: can't relax section: %E\n"));
3114 if (again)
3115 *relax = true;
3117 dot = size_input_section (prev, output_section_statement,
3118 output_section_statement->fill, dot);
3120 break;
3121 case lang_input_statement_enum:
3122 break;
3123 case lang_fill_statement_enum:
3124 s->fill_statement.output_section =
3125 output_section_statement->bfd_section;
3127 fill = s->fill_statement.fill;
3128 break;
3129 case lang_assignment_statement_enum:
3131 bfd_vma newdot = dot;
3133 exp_fold_tree (s->assignment_statement.exp,
3134 output_section_statement,
3135 lang_allocating_phase_enum,
3136 dot,
3137 &newdot);
3139 if (newdot != dot)
3141 if (output_section_statement == abs_output_section)
3143 /* If we don't have an output section, then just adjust
3144 the default memory address. */
3145 lang_memory_region_lookup ("*default*")->current = newdot;
3147 else
3149 /* Insert a pad after this statement. We can't
3150 put the pad before when relaxing, in case the
3151 assignment references dot. */
3152 insert_pad (&s->header.next, fill, (newdot - dot) * opb,
3153 output_section_statement->bfd_section, dot);
3155 /* Don't neuter the pad below when relaxing. */
3156 s = s->header.next;
3159 dot = newdot;
3162 break;
3164 case lang_padding_statement_enum:
3165 /* If this is the first time lang_size_sections is called,
3166 we won't have any padding statements. If this is the
3167 second or later passes when relaxing, we should allow
3168 padding to shrink. If padding is needed on this pass, it
3169 will be added back in. */
3170 s->padding_statement.size = 0;
3172 /* Make sure output_offset is valid. If relaxation shrinks
3173 the section and this pad isn't needed, it's possible to
3174 have output_offset larger than the final size of the
3175 section. bfd_set_section_contents will complain even for
3176 a pad size of zero. */
3177 s->padding_statement.output_offset
3178 = dot - output_section_statement->bfd_section->vma;
3179 break;
3181 case lang_group_statement_enum:
3182 dot = lang_size_sections (s->group_statement.children.head,
3183 output_section_statement,
3184 &s->group_statement.children.head,
3185 fill, dot, relax);
3186 break;
3188 default:
3189 FAIL ();
3190 break;
3192 /* We can only get here when relaxing is turned on. */
3193 case lang_address_statement_enum:
3194 break;
3196 prev = &s->header.next;
3198 return dot;
3201 bfd_vma
3202 lang_do_assignments (s, output_section_statement, fill, dot)
3203 lang_statement_union_type *s;
3204 lang_output_section_statement_type *output_section_statement;
3205 fill_type fill;
3206 bfd_vma dot;
3208 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3209 ldfile_output_machine);
3211 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3213 switch (s->header.type)
3215 case lang_constructors_statement_enum:
3216 dot = lang_do_assignments (constructor_list.head,
3217 output_section_statement,
3218 fill,
3219 dot);
3220 break;
3222 case lang_output_section_statement_enum:
3224 lang_output_section_statement_type *os;
3226 os = &(s->output_section_statement);
3227 if (os->bfd_section != NULL)
3229 dot = os->bfd_section->vma;
3230 (void) lang_do_assignments (os->children.head, os,
3231 os->fill, dot);
3232 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3235 if (os->load_base)
3237 /* If nothing has been placed into the output section then
3238 it won't have a bfd_section. */
3239 if (os->bfd_section)
3241 os->bfd_section->lma
3242 = exp_get_abs_int (os->load_base, 0, "load base",
3243 lang_final_phase_enum);
3247 break;
3248 case lang_wild_statement_enum:
3250 dot = lang_do_assignments (s->wild_statement.children.head,
3251 output_section_statement,
3252 fill, dot);
3254 break;
3256 case lang_object_symbols_statement_enum:
3257 case lang_output_statement_enum:
3258 case lang_target_statement_enum:
3259 #if 0
3260 case lang_common_statement_enum:
3261 #endif
3262 break;
3263 case lang_data_statement_enum:
3265 etree_value_type value;
3267 value = exp_fold_tree (s->data_statement.exp,
3268 abs_output_section,
3269 lang_final_phase_enum, dot, &dot);
3270 s->data_statement.value = value.value;
3271 if (value.valid_p == false)
3272 einfo (_("%F%P: invalid data statement\n"));
3275 unsigned int size;
3276 switch (s->data_statement.type)
3278 default:
3279 abort ();
3280 case QUAD:
3281 case SQUAD:
3282 size = QUAD_SIZE;
3283 break;
3284 case LONG:
3285 size = LONG_SIZE;
3286 break;
3287 case SHORT:
3288 size = SHORT_SIZE;
3289 break;
3290 case BYTE:
3291 size = BYTE_SIZE;
3292 break;
3294 if (size < opb)
3295 size = opb;
3296 dot += size / opb;
3298 break;
3300 case lang_reloc_statement_enum:
3302 etree_value_type value;
3304 value = exp_fold_tree (s->reloc_statement.addend_exp,
3305 abs_output_section,
3306 lang_final_phase_enum, dot, &dot);
3307 s->reloc_statement.addend_value = value.value;
3308 if (value.valid_p == false)
3309 einfo (_("%F%P: invalid reloc statement\n"));
3311 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
3312 break;
3314 case lang_input_section_enum:
3316 asection *in = s->input_section.section;
3318 if (in->_cooked_size != 0)
3319 dot += in->_cooked_size / opb;
3320 else
3321 dot += in->_raw_size / opb;
3323 break;
3325 case lang_input_statement_enum:
3326 break;
3327 case lang_fill_statement_enum:
3328 fill = s->fill_statement.fill;
3329 break;
3330 case lang_assignment_statement_enum:
3332 exp_fold_tree (s->assignment_statement.exp,
3333 output_section_statement,
3334 lang_final_phase_enum,
3335 dot,
3336 &dot);
3339 break;
3340 case lang_padding_statement_enum:
3341 dot += s->padding_statement.size / opb;
3342 break;
3344 case lang_group_statement_enum:
3345 dot = lang_do_assignments (s->group_statement.children.head,
3346 output_section_statement,
3347 fill, dot);
3349 break;
3351 default:
3352 FAIL ();
3353 break;
3354 case lang_address_statement_enum:
3355 break;
3359 return dot;
3362 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3363 operator .startof. (section_name), it produces an undefined symbol
3364 .startof.section_name. Similarly, when it sees
3365 .sizeof. (section_name), it produces an undefined symbol
3366 .sizeof.section_name. For all the output sections, we look for
3367 such symbols, and set them to the correct value. */
3369 static void
3370 lang_set_startof ()
3372 asection *s;
3374 if (link_info.relocateable)
3375 return;
3377 for (s = output_bfd->sections; s != NULL; s = s->next)
3379 const char *secname;
3380 char *buf;
3381 struct bfd_link_hash_entry *h;
3383 secname = bfd_get_section_name (output_bfd, s);
3384 buf = xmalloc (10 + strlen (secname));
3386 sprintf (buf, ".startof.%s", secname);
3387 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3388 if (h != NULL && h->type == bfd_link_hash_undefined)
3390 h->type = bfd_link_hash_defined;
3391 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3392 h->u.def.section = bfd_abs_section_ptr;
3395 sprintf (buf, ".sizeof.%s", secname);
3396 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3397 if (h != NULL && h->type == bfd_link_hash_undefined)
3399 unsigned opb;
3401 opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3402 ldfile_output_machine);
3403 h->type = bfd_link_hash_defined;
3404 if (s->_cooked_size != 0)
3405 h->u.def.value = s->_cooked_size / opb;
3406 else
3407 h->u.def.value = s->_raw_size / opb;
3408 h->u.def.section = bfd_abs_section_ptr;
3411 free (buf);
3415 static void
3416 lang_finish ()
3418 struct bfd_link_hash_entry *h;
3419 boolean warn;
3421 if (link_info.relocateable || link_info.shared)
3422 warn = false;
3423 else
3424 warn = true;
3426 if (entry_symbol == (char *) NULL)
3428 /* No entry has been specified. Look for start, but don't warn
3429 if we don't find it. */
3430 entry_symbol = "start";
3431 warn = false;
3434 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
3435 if (h != (struct bfd_link_hash_entry *) NULL
3436 && (h->type == bfd_link_hash_defined
3437 || h->type == bfd_link_hash_defweak)
3438 && h->u.def.section->output_section != NULL)
3440 bfd_vma val;
3442 val = (h->u.def.value
3443 + bfd_get_section_vma (output_bfd,
3444 h->u.def.section->output_section)
3445 + h->u.def.section->output_offset);
3446 if (! bfd_set_start_address (output_bfd, val))
3447 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol);
3449 else
3451 bfd_vma val;
3452 const char *send;
3454 /* We couldn't find the entry symbol. Try parsing it as a
3455 number. */
3456 val = bfd_scan_vma (entry_symbol, &send, 0);
3457 if (*send == '\0')
3459 if (! bfd_set_start_address (output_bfd, val))
3460 einfo (_("%P%F: can't set start address\n"));
3462 else
3464 asection *ts;
3466 /* Can't find the entry symbol, and it's not a number. Use
3467 the first address in the text section. */
3468 ts = bfd_get_section_by_name (output_bfd, ".text");
3469 if (ts != (asection *) NULL)
3471 if (warn)
3472 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3473 entry_symbol, bfd_get_section_vma (output_bfd, ts));
3474 if (! bfd_set_start_address (output_bfd,
3475 bfd_get_section_vma (output_bfd,
3476 ts)))
3477 einfo (_("%P%F: can't set start address\n"));
3479 else
3481 if (warn)
3482 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3483 entry_symbol);
3489 /* This is a small function used when we want to ignore errors from
3490 BFD. */
3492 static void
3493 #ifdef ANSI_PROTOTYPES
3494 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
3495 #else
3496 ignore_bfd_errors (s)
3497 const char *s ATTRIBUTE_UNUSED;
3498 #endif
3500 /* Don't do anything. */
3503 /* Check that the architecture of all the input files is compatible
3504 with the output file. Also call the backend to let it do any
3505 other checking that is needed. */
3507 static void
3508 lang_check ()
3510 lang_statement_union_type *file;
3511 bfd *input_bfd;
3512 const bfd_arch_info_type *compatible;
3514 for (file = file_chain.head;
3515 file != (lang_statement_union_type *) NULL;
3516 file = file->input_statement.next)
3518 input_bfd = file->input_statement.the_bfd;
3519 compatible = bfd_arch_get_compatible (input_bfd,
3520 output_bfd);
3521 if (compatible == NULL)
3523 if (command_line.warn_mismatch)
3524 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3525 bfd_printable_name (input_bfd), input_bfd,
3526 bfd_printable_name (output_bfd));
3528 else if (link_info.relocateable
3529 /* In general it is not possible to perform a relocatable
3530 link between differing object formats when the input
3531 file has relocations, because the relocations in the
3532 input format may not have equivalent representations in
3533 the output format (and besides BFD does not translate
3534 relocs for other link purposes than a final link). */
3535 && bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd)
3536 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
3537 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3538 bfd_get_target (input_bfd), input_bfd,
3539 bfd_get_target (output_bfd), output_bfd);
3540 else if (bfd_count_sections (input_bfd))
3542 /* If the input bfd has no contents, it shouldn't set the
3543 private data of the output bfd. */
3545 bfd_error_handler_type pfn = NULL;
3547 /* If we aren't supposed to warn about mismatched input
3548 files, temporarily set the BFD error handler to a
3549 function which will do nothing. We still want to call
3550 bfd_merge_private_bfd_data, since it may set up
3551 information which is needed in the output file. */
3552 if (! command_line.warn_mismatch)
3553 pfn = bfd_set_error_handler (ignore_bfd_errors);
3554 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3556 if (command_line.warn_mismatch)
3557 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3558 input_bfd);
3560 if (! command_line.warn_mismatch)
3561 bfd_set_error_handler (pfn);
3566 /* Look through all the global common symbols and attach them to the
3567 correct section. The -sort-common command line switch may be used
3568 to roughly sort the entries by size. */
3570 static void
3571 lang_common ()
3573 if (command_line.inhibit_common_definition)
3574 return;
3575 if (link_info.relocateable
3576 && ! command_line.force_common_definition)
3577 return;
3579 if (! config.sort_common)
3580 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3581 else
3583 int power;
3585 for (power = 4; power >= 0; power--)
3586 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3587 (PTR) &power);
3591 /* Place one common symbol in the correct section. */
3593 static boolean
3594 lang_one_common (h, info)
3595 struct bfd_link_hash_entry *h;
3596 PTR info;
3598 unsigned int power_of_two;
3599 bfd_vma size;
3600 asection *section;
3601 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3602 ldfile_output_machine);
3604 if (h->type != bfd_link_hash_common)
3605 return true;
3607 size = h->u.c.size;
3608 power_of_two = h->u.c.p->alignment_power;
3610 if (config.sort_common
3611 && power_of_two < (unsigned int) *(int *) info)
3612 return true;
3614 section = h->u.c.p->section;
3616 /* Increase the size of the section. */
3617 section->_cooked_size = ALIGN_N ((section->_cooked_size + opb - 1) / opb,
3618 (bfd_size_type) (1 << power_of_two)) * opb;
3620 /* Adjust the alignment if necessary. */
3621 if (power_of_two > section->alignment_power)
3622 section->alignment_power = power_of_two;
3624 /* Change the symbol from common to defined. */
3625 h->type = bfd_link_hash_defined;
3626 h->u.def.section = section;
3627 h->u.def.value = section->_cooked_size;
3629 /* Increase the size of the section. */
3630 section->_cooked_size += size;
3632 /* Make sure the section is allocated in memory, and make sure that
3633 it is no longer a common section. */
3634 section->flags |= SEC_ALLOC;
3635 section->flags &= ~SEC_IS_COMMON;
3637 if (config.map_file != NULL)
3639 static boolean header_printed;
3640 int len;
3641 char *name;
3642 char buf[50];
3644 if (! header_printed)
3646 minfo (_("\nAllocating common symbols\n"));
3647 minfo (_("Common symbol size file\n\n"));
3648 header_printed = true;
3651 name = demangle (h->root.string);
3652 minfo ("%s", name);
3653 len = strlen (name);
3654 free (name);
3656 if (len >= 19)
3658 print_nl ();
3659 len = 0;
3661 while (len < 20)
3663 print_space ();
3664 ++len;
3667 minfo ("0x");
3668 if (size <= 0xffffffff)
3669 sprintf (buf, "%lx", (unsigned long) size);
3670 else
3671 sprintf_vma (buf, size);
3672 minfo ("%s", buf);
3673 len = strlen (buf);
3675 while (len < 16)
3677 print_space ();
3678 ++len;
3681 minfo ("%B\n", section->owner);
3684 return true;
3687 /* Run through the input files and ensure that every input section has
3688 somewhere to go. If one is found without a destination then create
3689 an input request and place it into the statement tree. */
3691 static void
3692 lang_place_orphans ()
3694 LANG_FOR_EACH_INPUT_STATEMENT (file)
3696 asection *s;
3698 for (s = file->the_bfd->sections;
3699 s != (asection *) NULL;
3700 s = s->next)
3702 if (s->output_section == (asection *) NULL)
3704 /* This section of the file is not attatched, root
3705 around for a sensible place for it to go. */
3707 if (file->just_syms_flag)
3709 /* We are only retrieving symbol values from this
3710 file. We want the symbols to act as though the
3711 values in the file are absolute. */
3712 s->output_section = bfd_abs_section_ptr;
3713 s->output_offset = s->vma;
3715 else if (strcmp (s->name, "COMMON") == 0)
3717 /* This is a lonely common section which must have
3718 come from an archive. We attach to the section
3719 with the wildcard. */
3720 if (! link_info.relocateable
3721 || command_line.force_common_definition)
3723 if (default_common_section == NULL)
3725 #if 0
3726 /* This message happens when using the
3727 svr3.ifile linker script, so I have
3728 disabled it. */
3729 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3730 #endif
3731 default_common_section =
3732 lang_output_section_statement_lookup (".bss");
3735 lang_add_section (&default_common_section->children, s,
3736 default_common_section, file);
3739 else if (ldemul_place_orphan (file, s))
3741 else
3743 lang_output_section_statement_type *os;
3745 os = lang_output_section_statement_lookup (s->name);
3746 lang_add_section (&os->children, s, os, file);
3753 void
3754 lang_set_flags (ptr, flags, invert)
3755 lang_memory_region_type *ptr;
3756 const char *flags;
3757 int invert;
3759 flagword *ptr_flags;
3761 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
3762 while (*flags)
3764 switch (*flags)
3766 case 'A': case 'a':
3767 *ptr_flags |= SEC_ALLOC;
3768 break;
3770 case 'R': case 'r':
3771 *ptr_flags |= SEC_READONLY;
3772 break;
3774 case 'W': case 'w':
3775 *ptr_flags |= SEC_DATA;
3776 break;
3778 case 'X': case 'x':
3779 *ptr_flags |= SEC_CODE;
3780 break;
3782 case 'L': case 'l':
3783 case 'I': case 'i':
3784 *ptr_flags |= SEC_LOAD;
3785 break;
3787 default:
3788 einfo (_("%P%F: invalid syntax in flags\n"));
3789 break;
3791 flags++;
3795 /* Call a function on each input file. This function will be called
3796 on an archive, but not on the elements. */
3798 void
3799 lang_for_each_input_file (func)
3800 void (*func) PARAMS ((lang_input_statement_type *));
3802 lang_input_statement_type *f;
3804 for (f = (lang_input_statement_type *) input_file_chain.head;
3805 f != NULL;
3806 f = (lang_input_statement_type *) f->next_real_file)
3807 func (f);
3810 /* Call a function on each file. The function will be called on all
3811 the elements of an archive which are included in the link, but will
3812 not be called on the archive file itself. */
3814 void
3815 lang_for_each_file (func)
3816 void (*func) PARAMS ((lang_input_statement_type *));
3818 LANG_FOR_EACH_INPUT_STATEMENT (f)
3820 func (f);
3824 #if 0
3826 /* Not used. */
3828 void
3829 lang_for_each_input_section (func)
3830 void (*func) PARAMS ((bfd *ab, asection *as));
3832 LANG_FOR_EACH_INPUT_STATEMENT (f)
3834 asection *s;
3836 for (s = f->the_bfd->sections;
3837 s != (asection *) NULL;
3838 s = s->next)
3840 func (f->the_bfd, s);
3845 #endif
3847 void
3848 ldlang_add_file (entry)
3849 lang_input_statement_type *entry;
3851 bfd **pp;
3853 lang_statement_append (&file_chain,
3854 (lang_statement_union_type *) entry,
3855 &entry->next);
3857 /* The BFD linker needs to have a list of all input BFDs involved in
3858 a link. */
3859 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
3860 ASSERT (entry->the_bfd != output_bfd);
3861 for (pp = &link_info.input_bfds;
3862 *pp != (bfd *) NULL;
3863 pp = &(*pp)->link_next)
3865 *pp = entry->the_bfd;
3866 entry->the_bfd->usrdata = (PTR) entry;
3867 bfd_set_gp_size (entry->the_bfd, g_switch_value);
3869 /* Look through the sections and check for any which should not be
3870 included in the link. We need to do this now, so that we can
3871 notice when the backend linker tries to report multiple
3872 definition errors for symbols which are in sections we aren't
3873 going to link. FIXME: It might be better to entirely ignore
3874 symbols which are defined in sections which are going to be
3875 discarded. This would require modifying the backend linker for
3876 each backend which might set the SEC_LINK_ONCE flag. If we do
3877 this, we should probably handle SEC_EXCLUDE in the same way. */
3879 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
3882 void
3883 lang_add_output (name, from_script)
3884 const char *name;
3885 int from_script;
3887 /* Make -o on command line override OUTPUT in script. */
3888 if (had_output_filename == false || !from_script)
3890 output_filename = name;
3891 had_output_filename = true;
3895 static lang_output_section_statement_type *current_section;
3897 static int
3898 topower (x)
3899 int x;
3901 unsigned int i = 1;
3902 int l;
3904 if (x < 0)
3905 return -1;
3907 for (l = 0; l < 32; l++)
3909 if (i >= (unsigned int) x)
3910 return l;
3911 i <<= 1;
3914 return 0;
3917 lang_output_section_statement_type *
3918 lang_enter_output_section_statement (output_section_statement_name,
3919 address_exp, sectype, block_value,
3920 align, subalign, ebase)
3921 const char *output_section_statement_name;
3922 etree_type *address_exp;
3923 enum section_type sectype;
3924 bfd_vma block_value;
3925 etree_type *align;
3926 etree_type *subalign;
3927 etree_type *ebase;
3929 lang_output_section_statement_type *os;
3931 current_section =
3932 os =
3933 lang_output_section_statement_lookup (output_section_statement_name);
3935 /* Add this statement to tree. */
3936 #if 0
3937 add_statement (lang_output_section_statement_enum,
3938 output_section_statement);
3939 #endif
3940 /* Make next things chain into subchain of this. */
3942 if (os->addr_tree == (etree_type *) NULL)
3944 os->addr_tree = address_exp;
3946 os->sectype = sectype;
3947 if (sectype != noload_section)
3948 os->flags = SEC_NO_FLAGS;
3949 else
3950 os->flags = SEC_NEVER_LOAD;
3951 os->block_value = block_value ? block_value : 1;
3952 stat_ptr = &os->children;
3954 os->subsection_alignment =
3955 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
3956 os->section_alignment =
3957 topower (exp_get_value_int (align, -1, "section alignment", 0));
3959 os->load_base = ebase;
3960 return os;
3963 void
3964 lang_final ()
3966 lang_output_statement_type *new =
3967 new_stat (lang_output_statement, stat_ptr);
3969 new->name = output_filename;
3972 /* Reset the current counters in the regions. */
3974 void
3975 lang_reset_memory_regions ()
3977 lang_memory_region_type *p = lang_memory_region_list;
3978 asection *o;
3980 for (p = lang_memory_region_list;
3981 p != (lang_memory_region_type *) NULL;
3982 p = p->next)
3984 p->old_length = (bfd_size_type) (p->current - p->origin);
3985 p->current = p->origin;
3988 for (o = output_bfd->sections; o != NULL; o = o->next)
3989 o->_raw_size = 0;
3992 /* If the wild pattern was marked KEEP, the member sections
3993 should be as well. */
3995 static void
3996 gc_section_callback (ptr, sec, section, file, data)
3997 lang_wild_statement_type *ptr;
3998 struct wildcard_list *sec ATTRIBUTE_UNUSED;
3999 asection *section;
4000 lang_input_statement_type *file ATTRIBUTE_UNUSED;
4001 PTR data ATTRIBUTE_UNUSED;
4003 if (ptr->keep_sections)
4004 section->flags |= SEC_KEEP;
4007 /* Handle a wild statement, marking it against GC. */
4009 static void
4010 lang_gc_wild (s)
4011 lang_wild_statement_type *s;
4013 walk_wild (s, gc_section_callback, NULL);
4016 /* Iterate over sections marking them against GC. */
4018 static void
4019 lang_gc_sections_1 (s)
4020 lang_statement_union_type *s;
4022 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
4024 switch (s->header.type)
4026 case lang_wild_statement_enum:
4027 lang_gc_wild (&s->wild_statement);
4028 break;
4029 case lang_constructors_statement_enum:
4030 lang_gc_sections_1 (constructor_list.head);
4031 break;
4032 case lang_output_section_statement_enum:
4033 lang_gc_sections_1 (s->output_section_statement.children.head);
4034 break;
4035 case lang_group_statement_enum:
4036 lang_gc_sections_1 (s->group_statement.children.head);
4037 break;
4038 default:
4039 break;
4044 static void
4045 lang_gc_sections ()
4047 struct bfd_link_hash_entry *h;
4048 ldlang_undef_chain_list_type *ulist, fake_list_start;
4050 /* Keep all sections so marked in the link script. */
4052 lang_gc_sections_1 (statement_list.head);
4054 /* Keep all sections containing symbols undefined on the command-line.
4055 Handle the entry symbol at the same time. */
4057 if (entry_symbol != NULL)
4059 fake_list_start.next = ldlang_undef_chain_list_head;
4060 fake_list_start.name = (char *) entry_symbol;
4061 ulist = &fake_list_start;
4063 else
4064 ulist = ldlang_undef_chain_list_head;
4066 for (; ulist; ulist = ulist->next)
4068 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
4069 false, false, false);
4071 if (h != (struct bfd_link_hash_entry *) NULL
4072 && (h->type == bfd_link_hash_defined
4073 || h->type == bfd_link_hash_defweak)
4074 && ! bfd_is_abs_section (h->u.def.section))
4076 h->u.def.section->flags |= SEC_KEEP;
4080 bfd_gc_sections (output_bfd, &link_info);
4083 void
4084 lang_process ()
4086 lang_reasonable_defaults ();
4087 current_target = default_target;
4089 /* Open the output file. */
4090 lang_for_each_statement (ldlang_open_output);
4092 ldemul_create_output_section_statements ();
4094 /* Add to the hash table all undefineds on the command line. */
4095 lang_place_undefineds ();
4097 already_linked_table_init ();
4099 /* Create a bfd for each input file. */
4100 current_target = default_target;
4101 open_input_bfds (statement_list.head, false);
4103 ldemul_after_open ();
4105 already_linked_table_free ();
4107 /* Make sure that we're not mixing architectures. We call this
4108 after all the input files have been opened, but before we do any
4109 other processing, so that any operations merge_private_bfd_data
4110 does on the output file will be known during the rest of the
4111 link. */
4112 lang_check ();
4114 /* Handle .exports instead of a version script if we're told to do so. */
4115 if (command_line.version_exports_section)
4116 lang_do_version_exports_section ();
4118 /* Build all sets based on the information gathered from the input
4119 files. */
4120 ldctor_build_sets ();
4122 /* Remove unreferenced sections if asked to. */
4123 if (command_line.gc_sections)
4124 lang_gc_sections ();
4126 /* If there were any SEC_MERGE sections, finish their merging, so that
4127 section sizes can be computed. This has to be done after GC of sections,
4128 so that GCed sections are not merged, but before assigning output
4129 sections, since removing whole input sections is hard then. */
4130 bfd_merge_sections (output_bfd, &link_info);
4132 /* Size up the common data. */
4133 lang_common ();
4135 /* Run through the contours of the script and attach input sections
4136 to the correct output sections. */
4137 map_input_to_output_sections (statement_list.head, (char *) NULL,
4138 (lang_output_section_statement_type *) NULL);
4140 /* Find any sections not attached explicitly and handle them. */
4141 lang_place_orphans ();
4143 ldemul_before_allocation ();
4145 /* We must record the program headers before we try to fix the
4146 section positions, since they will affect SIZEOF_HEADERS. */
4147 lang_record_phdrs ();
4149 /* Size up the sections. */
4150 lang_size_sections (statement_list.head,
4151 abs_output_section,
4152 &statement_list.head, 0, (bfd_vma) 0, NULL);
4154 /* Now run around and relax if we can. */
4155 if (command_line.relax)
4157 /* Keep relaxing until bfd_relax_section gives up. */
4158 boolean relax_again;
4162 lang_reset_memory_regions ();
4164 relax_again = false;
4166 /* Note: pe-dll.c does something like this also. If you find
4167 you need to change this code, you probably need to change
4168 pe-dll.c also. DJ */
4170 /* Do all the assignments with our current guesses as to
4171 section sizes. */
4172 lang_do_assignments (statement_list.head,
4173 abs_output_section,
4174 (fill_type) 0, (bfd_vma) 0);
4176 /* Perform another relax pass - this time we know where the
4177 globals are, so can make better guess. */
4178 lang_size_sections (statement_list.head,
4179 abs_output_section,
4180 &(statement_list.head), 0, (bfd_vma) 0,
4181 &relax_again);
4183 while (relax_again);
4186 /* See if anything special should be done now we know how big
4187 everything is. */
4188 ldemul_after_allocation ();
4190 /* Fix any .startof. or .sizeof. symbols. */
4191 lang_set_startof ();
4193 /* Do all the assignments, now that we know the final resting places
4194 of all the symbols. */
4196 lang_do_assignments (statement_list.head,
4197 abs_output_section,
4198 (fill_type) 0, (bfd_vma) 0);
4200 /* Make sure that the section addresses make sense. */
4201 if (! link_info.relocateable
4202 && command_line.check_section_addresses)
4203 lang_check_section_addresses ();
4205 /* Final stuffs. */
4207 ldemul_finish ();
4208 lang_finish ();
4211 /* EXPORTED TO YACC */
4213 void
4214 lang_add_wild (filespec, section_list, keep_sections)
4215 struct wildcard_spec *filespec;
4216 struct wildcard_list *section_list;
4217 boolean keep_sections;
4219 struct wildcard_list *curr, *next;
4220 lang_wild_statement_type *new;
4222 /* Reverse the list as the parser puts it back to front. */
4223 for (curr = section_list, section_list = NULL;
4224 curr != NULL;
4225 section_list = curr, curr = next)
4227 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
4228 placed_commons = true;
4230 next = curr->next;
4231 curr->next = section_list;
4234 if (filespec != NULL && filespec->name != NULL)
4236 if (strcmp (filespec->name, "*") == 0)
4237 filespec->name = NULL;
4238 else if (! wildcardp (filespec->name))
4239 lang_has_input_file = true;
4242 new = new_stat (lang_wild_statement, stat_ptr);
4243 new->filename = NULL;
4244 new->filenames_sorted = false;
4245 if (filespec != NULL)
4247 new->filename = filespec->name;
4248 new->filenames_sorted = filespec->sorted;
4250 new->section_list = section_list;
4251 new->keep_sections = keep_sections;
4252 lang_list_init (&new->children);
4255 void
4256 lang_section_start (name, address)
4257 const char *name;
4258 etree_type *address;
4260 lang_address_statement_type *ad;
4262 ad = new_stat (lang_address_statement, stat_ptr);
4263 ad->section_name = name;
4264 ad->address = address;
4267 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4268 because of a -e argument on the command line, or zero if this is
4269 called by ENTRY in a linker script. Command line arguments take
4270 precedence. */
4272 void
4273 lang_add_entry (name, cmdline)
4274 const char *name;
4275 boolean cmdline;
4277 if (entry_symbol == NULL
4278 || cmdline
4279 || ! entry_from_cmdline)
4281 entry_symbol = name;
4282 entry_from_cmdline = cmdline;
4286 void
4287 lang_add_target (name)
4288 const char *name;
4290 lang_target_statement_type *new = new_stat (lang_target_statement,
4291 stat_ptr);
4293 new->target = name;
4297 void
4298 lang_add_map (name)
4299 const char *name;
4301 while (*name)
4303 switch (*name)
4305 case 'F':
4306 map_option_f = true;
4307 break;
4309 name++;
4313 void
4314 lang_add_fill (exp)
4315 int exp;
4317 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4318 stat_ptr);
4320 new->fill = exp;
4323 void
4324 lang_add_data (type, exp)
4325 int type;
4326 union etree_union *exp;
4329 lang_data_statement_type *new = new_stat (lang_data_statement,
4330 stat_ptr);
4332 new->exp = exp;
4333 new->type = type;
4337 /* Create a new reloc statement. RELOC is the BFD relocation type to
4338 generate. HOWTO is the corresponding howto structure (we could
4339 look this up, but the caller has already done so). SECTION is the
4340 section to generate a reloc against, or NAME is the name of the
4341 symbol to generate a reloc against. Exactly one of SECTION and
4342 NAME must be NULL. ADDEND is an expression for the addend. */
4344 void
4345 lang_add_reloc (reloc, howto, section, name, addend)
4346 bfd_reloc_code_real_type reloc;
4347 reloc_howto_type *howto;
4348 asection *section;
4349 const char *name;
4350 union etree_union *addend;
4352 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
4354 p->reloc = reloc;
4355 p->howto = howto;
4356 p->section = section;
4357 p->name = name;
4358 p->addend_exp = addend;
4360 p->addend_value = 0;
4361 p->output_section = NULL;
4362 p->output_vma = 0;
4365 lang_assignment_statement_type *
4366 lang_add_assignment (exp)
4367 etree_type *exp;
4369 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4370 stat_ptr);
4372 new->exp = exp;
4373 return new;
4376 void
4377 lang_add_attribute (attribute)
4378 enum statement_enum attribute;
4380 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4383 void
4384 lang_startup (name)
4385 const char *name;
4387 if (startup_file != (char *) NULL)
4389 einfo (_("%P%Fmultiple STARTUP files\n"));
4391 first_file->filename = name;
4392 first_file->local_sym_name = name;
4393 first_file->real = true;
4395 startup_file = name;
4398 void
4399 lang_float (maybe)
4400 boolean maybe;
4402 lang_float_flag = maybe;
4405 void
4406 lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
4407 bfd_vma fill;
4408 const char *memspec;
4409 struct lang_output_section_phdr_list *phdrs;
4410 const char *lma_memspec;
4412 current_section->fill = fill;
4413 current_section->region = lang_memory_region_lookup (memspec);
4414 if (strcmp (lma_memspec, "*default*") != 0)
4416 current_section->lma_region = lang_memory_region_lookup (lma_memspec);
4417 /* If no runtime region has been given, but the load region has
4418 been, use the load region. */
4419 if (strcmp (memspec, "*default*") == 0)
4420 current_section->region = lang_memory_region_lookup (lma_memspec);
4422 current_section->phdrs = phdrs;
4423 stat_ptr = &statement_list;
4426 /* Create an absolute symbol with the given name with the value of the
4427 address of first byte of the section named.
4429 If the symbol already exists, then do nothing. */
4431 void
4432 lang_abs_symbol_at_beginning_of (secname, name)
4433 const char *secname;
4434 const char *name;
4436 struct bfd_link_hash_entry *h;
4438 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4439 if (h == (struct bfd_link_hash_entry *) NULL)
4440 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4442 if (h->type == bfd_link_hash_new
4443 || h->type == bfd_link_hash_undefined)
4445 asection *sec;
4447 h->type = bfd_link_hash_defined;
4449 sec = bfd_get_section_by_name (output_bfd, secname);
4450 if (sec == (asection *) NULL)
4451 h->u.def.value = 0;
4452 else
4453 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4455 h->u.def.section = bfd_abs_section_ptr;
4459 /* Create an absolute symbol with the given name with the value of the
4460 address of the first byte after the end of the section named.
4462 If the symbol already exists, then do nothing. */
4464 void
4465 lang_abs_symbol_at_end_of (secname, name)
4466 const char *secname;
4467 const char *name;
4469 struct bfd_link_hash_entry *h;
4471 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4472 if (h == (struct bfd_link_hash_entry *) NULL)
4473 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4475 if (h->type == bfd_link_hash_new
4476 || h->type == bfd_link_hash_undefined)
4478 asection *sec;
4480 h->type = bfd_link_hash_defined;
4482 sec = bfd_get_section_by_name (output_bfd, secname);
4483 if (sec == (asection *) NULL)
4484 h->u.def.value = 0;
4485 else
4486 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4487 + bfd_section_size (output_bfd, sec) /
4488 bfd_octets_per_byte (output_bfd));
4490 h->u.def.section = bfd_abs_section_ptr;
4494 void
4495 lang_statement_append (list, element, field)
4496 lang_statement_list_type *list;
4497 lang_statement_union_type *element;
4498 lang_statement_union_type **field;
4500 *(list->tail) = element;
4501 list->tail = field;
4504 /* Set the output format type. -oformat overrides scripts. */
4506 void
4507 lang_add_output_format (format, big, little, from_script)
4508 const char *format;
4509 const char *big;
4510 const char *little;
4511 int from_script;
4513 if (output_target == NULL || !from_script)
4515 if (command_line.endian == ENDIAN_BIG
4516 && big != NULL)
4517 format = big;
4518 else if (command_line.endian == ENDIAN_LITTLE
4519 && little != NULL)
4520 format = little;
4522 output_target = format;
4526 /* Enter a group. This creates a new lang_group_statement, and sets
4527 stat_ptr to build new statements within the group. */
4529 void
4530 lang_enter_group ()
4532 lang_group_statement_type *g;
4534 g = new_stat (lang_group_statement, stat_ptr);
4535 lang_list_init (&g->children);
4536 stat_ptr = &g->children;
4539 /* Leave a group. This just resets stat_ptr to start writing to the
4540 regular list of statements again. Note that this will not work if
4541 groups can occur inside anything else which can adjust stat_ptr,
4542 but currently they can't. */
4544 void
4545 lang_leave_group ()
4547 stat_ptr = &statement_list;
4550 /* Add a new program header. This is called for each entry in a PHDRS
4551 command in a linker script. */
4553 void
4554 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4555 const char *name;
4556 etree_type *type;
4557 boolean filehdr;
4558 boolean phdrs;
4559 etree_type *at;
4560 etree_type *flags;
4562 struct lang_phdr *n, **pp;
4564 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4565 n->next = NULL;
4566 n->name = name;
4567 n->type = exp_get_value_int (type, 0, "program header type",
4568 lang_final_phase_enum);
4569 n->filehdr = filehdr;
4570 n->phdrs = phdrs;
4571 n->at = at;
4572 n->flags = flags;
4574 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4576 *pp = n;
4579 /* Record the program header information in the output BFD. FIXME: We
4580 should not be calling an ELF specific function here. */
4582 static void
4583 lang_record_phdrs ()
4585 unsigned int alc;
4586 asection **secs;
4587 struct lang_output_section_phdr_list *last;
4588 struct lang_phdr *l;
4589 lang_statement_union_type *u;
4591 alc = 10;
4592 secs = (asection **) xmalloc (alc * sizeof (asection *));
4593 last = NULL;
4594 for (l = lang_phdr_list; l != NULL; l = l->next)
4596 unsigned int c;
4597 flagword flags;
4598 bfd_vma at;
4600 c = 0;
4601 for (u = lang_output_section_statement.head;
4602 u != NULL;
4603 u = u->output_section_statement.next)
4605 lang_output_section_statement_type *os;
4606 struct lang_output_section_phdr_list *pl;
4608 os = &u->output_section_statement;
4610 pl = os->phdrs;
4611 if (pl != NULL)
4612 last = pl;
4613 else
4615 if (os->sectype == noload_section
4616 || os->bfd_section == NULL
4617 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4618 continue;
4619 pl = last;
4622 if (os->bfd_section == NULL)
4623 continue;
4625 for (; pl != NULL; pl = pl->next)
4627 if (strcmp (pl->name, l->name) == 0)
4629 if (c >= alc)
4631 alc *= 2;
4632 secs = ((asection **)
4633 xrealloc (secs, alc * sizeof (asection *)));
4635 secs[c] = os->bfd_section;
4636 ++c;
4637 pl->used = true;
4642 if (l->flags == NULL)
4643 flags = 0;
4644 else
4645 flags = exp_get_vma (l->flags, 0, "phdr flags",
4646 lang_final_phase_enum);
4648 if (l->at == NULL)
4649 at = 0;
4650 else
4651 at = exp_get_vma (l->at, 0, "phdr load address",
4652 lang_final_phase_enum);
4654 if (! bfd_record_phdr (output_bfd, l->type,
4655 l->flags != NULL, flags, l->at != NULL,
4656 at, l->filehdr, l->phdrs, c, secs))
4657 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4660 free (secs);
4662 /* Make sure all the phdr assignments succeeded. */
4663 for (u = lang_output_section_statement.head;
4664 u != NULL;
4665 u = u->output_section_statement.next)
4667 struct lang_output_section_phdr_list *pl;
4669 if (u->output_section_statement.bfd_section == NULL)
4670 continue;
4672 for (pl = u->output_section_statement.phdrs;
4673 pl != NULL;
4674 pl = pl->next)
4675 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4676 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4677 u->output_section_statement.name, pl->name);
4681 /* Record a list of sections which may not be cross referenced. */
4683 void
4684 lang_add_nocrossref (l)
4685 struct lang_nocrossref *l;
4687 struct lang_nocrossrefs *n;
4689 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4690 n->next = nocrossref_list;
4691 n->list = l;
4692 nocrossref_list = n;
4694 /* Set notice_all so that we get informed about all symbols. */
4695 link_info.notice_all = true;
4698 /* Overlay handling. We handle overlays with some static variables. */
4700 /* The overlay virtual address. */
4701 static etree_type *overlay_vma;
4703 /* The overlay load address. */
4704 static etree_type *overlay_lma;
4706 /* Whether nocrossrefs is set for this overlay. */
4707 static int overlay_nocrossrefs;
4709 /* An expression for the maximum section size seen so far. */
4710 static etree_type *overlay_max;
4712 /* A list of all the sections in this overlay. */
4714 struct overlay_list {
4715 struct overlay_list *next;
4716 lang_output_section_statement_type *os;
4719 static struct overlay_list *overlay_list;
4721 /* Start handling an overlay. */
4723 void
4724 lang_enter_overlay (vma_expr, lma_expr, nocrossrefs)
4725 etree_type *vma_expr;
4726 etree_type *lma_expr;
4727 int nocrossrefs;
4729 /* The grammar should prevent nested overlays from occurring. */
4730 ASSERT (overlay_vma == NULL
4731 && overlay_lma == NULL
4732 && overlay_list == NULL
4733 && overlay_max == NULL);
4735 overlay_vma = vma_expr;
4736 overlay_lma = lma_expr;
4737 overlay_nocrossrefs = nocrossrefs;
4740 /* Start a section in an overlay. We handle this by calling
4741 lang_enter_output_section_statement with the correct VMA and LMA. */
4743 void
4744 lang_enter_overlay_section (name)
4745 const char *name;
4747 struct overlay_list *n;
4748 etree_type *size;
4750 lang_enter_output_section_statement (name, overlay_vma, normal_section,
4751 0, 0, 0, overlay_lma);
4753 /* If this is the first section, then base the VMA and LMA of future
4754 sections on this one. This will work correctly even if `.' is
4755 used in the addresses. */
4756 if (overlay_list == NULL)
4758 overlay_vma = exp_nameop (ADDR, name);
4759 overlay_lma = exp_nameop (LOADADDR, name);
4762 /* Remember the section. */
4763 n = (struct overlay_list *) xmalloc (sizeof *n);
4764 n->os = current_section;
4765 n->next = overlay_list;
4766 overlay_list = n;
4768 size = exp_nameop (SIZEOF, name);
4770 /* Adjust the LMA for the next section. */
4771 overlay_lma = exp_binop ('+', overlay_lma, size);
4773 /* Arrange to work out the maximum section end address. */
4774 if (overlay_max == NULL)
4775 overlay_max = size;
4776 else
4777 overlay_max = exp_binop (MAX_K, overlay_max, size);
4780 /* Finish a section in an overlay. There isn't any special to do
4781 here. */
4783 void
4784 lang_leave_overlay_section (fill, phdrs)
4785 bfd_vma fill;
4786 struct lang_output_section_phdr_list *phdrs;
4788 const char *name;
4789 char *clean, *s2;
4790 const char *s1;
4791 char *buf;
4793 name = current_section->name;
4795 lang_leave_output_section_statement (fill, "*default*",
4796 phdrs, "*default*");
4798 /* Define the magic symbols. */
4800 clean = xmalloc (strlen (name) + 1);
4801 s2 = clean;
4802 for (s1 = name; *s1 != '\0'; s1++)
4803 if (ISALNUM (*s1) || *s1 == '_')
4804 *s2++ = *s1;
4805 *s2 = '\0';
4807 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4808 sprintf (buf, "__load_start_%s", clean);
4809 lang_add_assignment (exp_assop ('=', buf,
4810 exp_nameop (LOADADDR, name)));
4812 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4813 sprintf (buf, "__load_stop_%s", clean);
4814 lang_add_assignment (exp_assop ('=', buf,
4815 exp_binop ('+',
4816 exp_nameop (LOADADDR, name),
4817 exp_nameop (SIZEOF, name))));
4819 free (clean);
4822 /* Finish an overlay. If there are any overlay wide settings, this
4823 looks through all the sections in the overlay and sets them. */
4825 void
4826 lang_leave_overlay (fill, memspec, phdrs, lma_memspec)
4827 bfd_vma fill;
4828 const char *memspec;
4829 struct lang_output_section_phdr_list *phdrs;
4830 const char *lma_memspec;
4832 lang_memory_region_type *region;
4833 lang_memory_region_type * default_region;
4834 lang_memory_region_type *lma_region;
4835 struct overlay_list *l;
4836 struct lang_nocrossref *nocrossref;
4838 default_region = lang_memory_region_lookup ("*default*");
4840 if (memspec == NULL)
4841 region = NULL;
4842 else
4843 region = lang_memory_region_lookup (memspec);
4845 if (lma_memspec == NULL)
4846 lma_region = NULL;
4847 else
4848 lma_region = lang_memory_region_lookup (lma_memspec);
4850 nocrossref = NULL;
4852 l = overlay_list;
4853 while (l != NULL)
4855 struct overlay_list *next;
4857 if (fill != 0 && l->os->fill == 0)
4858 l->os->fill = fill;
4860 /* Assign a region to the sections, if one has been specified.
4861 Override the assignment of the default section, but not
4862 other sections. */
4863 if (region != NULL &&
4864 (l->os->region == NULL ||
4865 l->os->region == default_region))
4866 l->os->region = region;
4868 /* We only set lma_region for the first overlay section, as
4869 subsequent overlay sections will have load_base set relative
4870 to the first section. Also, don't set lma_region if
4871 load_base is specified. FIXME: There should really be a test
4872 that `AT ( LDADDR )' doesn't conflict with `AT >LMA_REGION'
4873 rather than letting LDADDR simply override LMA_REGION. */
4874 if (lma_region != NULL && l->os->lma_region == NULL
4875 && l->next == NULL && l->os->load_base == NULL)
4876 l->os->lma_region = lma_region;
4878 if (phdrs != NULL && l->os->phdrs == NULL)
4879 l->os->phdrs = phdrs;
4881 if (overlay_nocrossrefs)
4883 struct lang_nocrossref *nc;
4885 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
4886 nc->name = l->os->name;
4887 nc->next = nocrossref;
4888 nocrossref = nc;
4891 next = l->next;
4892 free (l);
4893 l = next;
4896 if (nocrossref != NULL)
4897 lang_add_nocrossref (nocrossref);
4899 /* Update . for the end of the overlay. */
4900 lang_add_assignment (exp_assop ('=', ".",
4901 exp_binop ('+', overlay_vma, overlay_max)));
4903 overlay_vma = NULL;
4904 overlay_lma = NULL;
4905 overlay_nocrossrefs = 0;
4906 overlay_list = NULL;
4907 overlay_max = NULL;
4910 /* Version handling. This is only useful for ELF. */
4912 /* This global variable holds the version tree that we build. */
4914 struct bfd_elf_version_tree *lang_elf_version_info;
4916 static int
4917 lang_vers_match_lang_c (expr, sym)
4918 struct bfd_elf_version_expr *expr;
4919 const char *sym;
4921 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4922 return 1;
4923 return fnmatch (expr->pattern, sym, 0) == 0;
4926 static int
4927 lang_vers_match_lang_cplusplus (expr, sym)
4928 struct bfd_elf_version_expr *expr;
4929 const char *sym;
4931 char *alt_sym;
4932 int result;
4934 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4935 return 1;
4937 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
4938 if (!alt_sym)
4940 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
4941 Should we early out false in this case? */
4942 result = fnmatch (expr->pattern, sym, 0) == 0;
4944 else
4946 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
4947 free (alt_sym);
4950 return result;
4953 static int
4954 lang_vers_match_lang_java (expr, sym)
4955 struct bfd_elf_version_expr *expr;
4956 const char *sym;
4958 char *alt_sym;
4959 int result;
4961 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
4962 return 1;
4964 alt_sym = cplus_demangle (sym, DMGL_JAVA);
4965 if (!alt_sym)
4967 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
4968 Should we early out false in this case? */
4969 result = fnmatch (expr->pattern, sym, 0) == 0;
4971 else
4973 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
4974 free (alt_sym);
4977 return result;
4980 /* This is called for each variable name or match expression. */
4982 struct bfd_elf_version_expr *
4983 lang_new_vers_regex (orig, new, lang)
4984 struct bfd_elf_version_expr *orig;
4985 const char *new;
4986 const char *lang;
4988 struct bfd_elf_version_expr *ret;
4990 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
4991 ret->next = orig;
4992 ret->pattern = new;
4994 if (lang == NULL || strcasecmp (lang, "C") == 0)
4995 ret->match = lang_vers_match_lang_c;
4996 else if (strcasecmp (lang, "C++") == 0)
4997 ret->match = lang_vers_match_lang_cplusplus;
4998 else if (strcasecmp (lang, "Java") == 0)
4999 ret->match = lang_vers_match_lang_java;
5000 else
5002 einfo (_("%X%P: unknown language `%s' in version information\n"),
5003 lang);
5004 ret->match = lang_vers_match_lang_c;
5007 return ret;
5010 /* This is called for each set of variable names and match
5011 expressions. */
5013 struct bfd_elf_version_tree *
5014 lang_new_vers_node (globals, locals)
5015 struct bfd_elf_version_expr *globals;
5016 struct bfd_elf_version_expr *locals;
5018 struct bfd_elf_version_tree *ret;
5020 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
5021 ret->next = NULL;
5022 ret->name = NULL;
5023 ret->vernum = 0;
5024 ret->globals = globals;
5025 ret->locals = locals;
5026 ret->deps = NULL;
5027 ret->name_indx = (unsigned int) -1;
5028 ret->used = 0;
5029 return ret;
5032 /* This static variable keeps track of version indices. */
5034 static int version_index;
5036 /* This is called when we know the name and dependencies of the
5037 version. */
5039 void
5040 lang_register_vers_node (name, version, deps)
5041 const char *name;
5042 struct bfd_elf_version_tree *version;
5043 struct bfd_elf_version_deps *deps;
5045 struct bfd_elf_version_tree *t, **pp;
5046 struct bfd_elf_version_expr *e1;
5048 if (name == NULL)
5049 name = "";
5051 if ((name[0] == '\0' && lang_elf_version_info != NULL)
5052 || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
5054 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5055 return;
5058 /* Make sure this node has a unique name. */
5059 for (t = lang_elf_version_info; t != NULL; t = t->next)
5060 if (strcmp (t->name, name) == 0)
5061 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
5063 /* Check the global and local match names, and make sure there
5064 aren't any duplicates. */
5066 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
5068 for (t = lang_elf_version_info; t != NULL; t = t->next)
5070 struct bfd_elf_version_expr *e2;
5072 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
5073 if (strcmp (e1->pattern, e2->pattern) == 0)
5074 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5075 e1->pattern);
5079 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
5081 for (t = lang_elf_version_info; t != NULL; t = t->next)
5083 struct bfd_elf_version_expr *e2;
5085 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
5086 if (strcmp (e1->pattern, e2->pattern) == 0)
5087 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5088 e1->pattern);
5092 version->deps = deps;
5093 version->name = name;
5094 if (name[0] != '\0')
5096 ++version_index;
5097 version->vernum = version_index;
5099 else
5100 version->vernum = 0;
5102 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
5104 *pp = version;
5107 /* This is called when we see a version dependency. */
5109 struct bfd_elf_version_deps *
5110 lang_add_vers_depend (list, name)
5111 struct bfd_elf_version_deps *list;
5112 const char *name;
5114 struct bfd_elf_version_deps *ret;
5115 struct bfd_elf_version_tree *t;
5117 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
5118 ret->next = list;
5120 for (t = lang_elf_version_info; t != NULL; t = t->next)
5122 if (strcmp (t->name, name) == 0)
5124 ret->version_needed = t;
5125 return ret;
5129 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5131 return ret;
5134 static void
5135 lang_do_version_exports_section ()
5137 struct bfd_elf_version_expr *greg = NULL, *lreg;
5139 LANG_FOR_EACH_INPUT_STATEMENT (is)
5141 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5142 char *contents, *p;
5143 bfd_size_type len;
5145 if (sec == NULL)
5146 continue;
5148 len = bfd_section_size (is->the_bfd, sec);
5149 contents = xmalloc (len);
5150 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
5151 einfo (_("%X%P: unable to read .exports section contents\n"), sec);
5153 p = contents;
5154 while (p < contents + len)
5156 greg = lang_new_vers_regex (greg, p, NULL);
5157 p = strchr (p, '\0') + 1;
5160 /* Do not free the contents, as we used them creating the regex. */
5162 /* Do not include this section in the link. */
5163 bfd_set_section_flags (is->the_bfd, sec,
5164 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5167 lreg = lang_new_vers_regex (NULL, "*", NULL);
5168 lang_register_vers_node (command_line.version_exports_section,
5169 lang_new_vers_node (greg, lreg), NULL);
5172 void
5173 lang_add_unique (name)
5174 const char *name;
5176 struct unique_sections *ent;
5178 for (ent = unique_section_list; ent; ent = ent->next)
5179 if (strcmp (ent->name, name) == 0)
5180 return;
5182 ent = (struct unique_sections *) xmalloc (sizeof *ent);
5183 ent->name = xstrdup (name);
5184 ent->next = unique_section_list;
5185 unique_section_list = ent;