Set the FSR and FAR registers if a Data Abort is detected.
[deliverable/binutils-gdb.git] / ld / ldlang.c
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.
5
6 This file is part of GLD, the Gnu Linker.
7
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.
12
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.
17
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. */
22
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"
29
30 #include "ld.h"
31 #include "ldmain.h"
32 #include "ldexp.h"
33 #include "ldlang.h"
34 #include "ldgram.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"
42
43 /* FORWARDS */
44 static lang_statement_union_type *new_statement
45 PARAMS ((enum statement_enum, size_t, lang_statement_list_type *));
46
47 /* LOCALS */
48 static struct obstack stat_obstack;
49
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;
63
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 insert_undefined PARAMS ((const char *));
96 static void lang_place_undefineds PARAMS ((void));
97 static void map_input_to_output_sections
98 PARAMS ((lang_statement_union_type *, const char *,
99 lang_output_section_statement_type *));
100 static void print_output_section_statement
101 PARAMS ((lang_output_section_statement_type *));
102 static void print_assignment
103 PARAMS ((lang_assignment_statement_type *,
104 lang_output_section_statement_type *));
105 static void print_input_statement PARAMS ((lang_input_statement_type *));
106 static boolean print_one_symbol PARAMS ((struct bfd_link_hash_entry *, PTR));
107 static void print_input_section PARAMS ((lang_input_section_type *));
108 static void print_fill_statement PARAMS ((lang_fill_statement_type *));
109 static void print_data_statement PARAMS ((lang_data_statement_type *));
110 static void print_address_statement PARAMS ((lang_address_statement_type *));
111 static void print_reloc_statement PARAMS ((lang_reloc_statement_type *));
112 static void print_padding_statement PARAMS ((lang_padding_statement_type *));
113 static void print_wild_statement
114 PARAMS ((lang_wild_statement_type *, lang_output_section_statement_type *));
115 static void print_group
116 PARAMS ((lang_group_statement_type *, lang_output_section_statement_type *));
117 static void print_statement
118 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
119 static void print_statement_list
120 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *));
121 static void print_statements PARAMS ((void));
122 static void insert_pad
123 PARAMS ((lang_statement_union_type **, fill_type *,
124 unsigned int, asection *, bfd_vma));
125 static bfd_vma size_input_section
126 PARAMS ((lang_statement_union_type **, lang_output_section_statement_type *,
127 fill_type *, bfd_vma));
128 static void lang_finish PARAMS ((void));
129 static void ignore_bfd_errors PARAMS ((const char *, ...));
130 static void lang_check PARAMS ((void));
131 static void lang_common PARAMS ((void));
132 static boolean lang_one_common PARAMS ((struct bfd_link_hash_entry *, PTR));
133 static void lang_place_orphans PARAMS ((void));
134 static int topower PARAMS ((int));
135 static void lang_set_startof PARAMS ((void));
136 static void gc_section_callback
137 PARAMS ((lang_wild_statement_type *, struct wildcard_list *, asection *,
138 lang_input_statement_type *, PTR));
139 static void lang_get_regions PARAMS ((struct memory_region_struct **,
140 struct memory_region_struct **,
141 const char *, const char *, int));
142 static void lang_record_phdrs PARAMS ((void));
143 static void lang_gc_wild PARAMS ((lang_wild_statement_type *));
144 static void lang_gc_sections_1 PARAMS ((lang_statement_union_type *));
145 static void lang_gc_sections PARAMS ((void));
146 static int lang_vers_match_lang_c
147 PARAMS ((struct bfd_elf_version_expr *, const char *));
148 static int lang_vers_match_lang_cplusplus
149 PARAMS ((struct bfd_elf_version_expr *, const char *));
150 static int lang_vers_match_lang_java
151 PARAMS ((struct bfd_elf_version_expr *, const char *));
152 static void lang_do_version_exports_section PARAMS ((void));
153 static void lang_check_section_addresses PARAMS ((void));
154 static void os_region_check
155 PARAMS ((lang_output_section_statement_type *,
156 struct memory_region_struct *, etree_type *, bfd_vma));
157 static bfd_vma lang_size_sections_1
158 PARAMS ((lang_statement_union_type *, lang_output_section_statement_type *,
159 lang_statement_union_type **, fill_type *, bfd_vma, boolean *));
160
161 typedef void (*callback_t) PARAMS ((lang_wild_statement_type *,
162 struct wildcard_list *,
163 asection *,
164 lang_input_statement_type *,
165 PTR));
166 static void walk_wild
167 PARAMS ((lang_wild_statement_type *, callback_t, PTR));
168 static void walk_wild_section
169 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
170 callback_t, PTR));
171 static void walk_wild_file
172 PARAMS ((lang_wild_statement_type *, lang_input_statement_type *,
173 callback_t, PTR));
174
175 static int get_target PARAMS ((const bfd_target *, PTR));
176 static void stricpy PARAMS ((char *, char *));
177 static void strcut PARAMS ((char *, char *));
178 static int name_compare PARAMS ((char *, char *));
179 static int closest_target_match PARAMS ((const bfd_target *, PTR));
180 static char * get_first_input_target PARAMS ((void));
181
182 /* EXPORTS */
183 lang_output_section_statement_type *abs_output_section;
184 lang_statement_list_type lang_output_section_statement;
185 lang_statement_list_type *stat_ptr = &statement_list;
186 lang_statement_list_type file_chain = { NULL, NULL };
187 const char *entry_symbol = NULL;
188 const char *entry_section = ".text";
189 boolean entry_from_cmdline;
190 boolean lang_has_input_file = false;
191 boolean had_output_filename = false;
192 boolean lang_float_flag = false;
193 boolean delete_output_file_on_failure = false;
194 struct lang_nocrossrefs *nocrossref_list;
195 struct unique_sections *unique_section_list;
196
197 etree_type *base; /* Relocation base - or null */
198
199 #if defined (__STDC__) || defined (ALMOST_STDC)
200 #define cat(a,b) a##b
201 #else
202 #define cat(a,b) a/**/b
203 #endif
204
205 /* Don't beautify the line below with "innocent" whitespace, it breaks
206 the K&R C preprocessor! */
207 #define new_stat(x, y) \
208 (cat (x,_type)*) new_statement (cat (x,_enum), sizeof (cat (x,_type)), y)
209
210 #define outside_section_address(q) \
211 ((q)->output_offset + (q)->output_section->vma)
212
213 #define outside_symbol_address(q) \
214 ((q)->value + outside_section_address (q->section))
215
216 #define SECTION_NAME_MAP_LENGTH (16)
217
218 PTR
219 stat_alloc (size)
220 size_t size;
221 {
222 return obstack_alloc (&stat_obstack, size);
223 }
224
225 boolean
226 unique_section_p (secnam)
227 const char *secnam;
228 {
229 struct unique_sections *unam;
230
231 for (unam = unique_section_list; unam; unam = unam->next)
232 if (wildcardp (unam->name)
233 ? fnmatch (unam->name, secnam, 0) == 0
234 : strcmp (unam->name, secnam) == 0)
235 {
236 return true;
237 }
238
239 return false;
240 }
241
242 /* Generic traversal routines for finding matching sections. */
243
244 static void
245 walk_wild_section (ptr, file, callback, data)
246 lang_wild_statement_type *ptr;
247 lang_input_statement_type *file;
248 callback_t callback;
249 PTR data;
250 {
251 asection *s;
252
253 if (file->just_syms_flag)
254 return;
255
256 for (s = file->the_bfd->sections; s != NULL; s = s->next)
257 {
258 struct wildcard_list *sec;
259
260 sec = ptr->section_list;
261 if (sec == NULL)
262 (*callback) (ptr, sec, s, file, data);
263
264 while (sec != NULL)
265 {
266 boolean skip = false;
267 struct name_list *list_tmp;
268
269 /* Don't process sections from files which were
270 excluded. */
271 for (list_tmp = sec->spec.exclude_name_list;
272 list_tmp;
273 list_tmp = list_tmp->next)
274 {
275 if (wildcardp (list_tmp->name))
276 skip = fnmatch (list_tmp->name, file->filename, 0) == 0;
277 else
278 skip = strcmp (list_tmp->name, file->filename) == 0;
279
280 /* If this file is part of an archive, and the archive is
281 excluded, exclude this file. */
282 if (! skip && file->the_bfd != NULL
283 && file->the_bfd->my_archive != NULL
284 && file->the_bfd->my_archive->filename != NULL)
285 {
286 if (wildcardp (list_tmp->name))
287 skip = fnmatch (list_tmp->name,
288 file->the_bfd->my_archive->filename,
289 0) == 0;
290 else
291 skip = strcmp (list_tmp->name,
292 file->the_bfd->my_archive->filename) == 0;
293 }
294
295 if (skip)
296 break;
297 }
298
299 if (!skip && sec->spec.name != NULL)
300 {
301 const char *sname = bfd_get_section_name (file->the_bfd, s);
302
303 if (wildcardp (sec->spec.name))
304 skip = fnmatch (sec->spec.name, sname, 0) != 0;
305 else
306 skip = strcmp (sec->spec.name, sname) != 0;
307 }
308
309 if (!skip)
310 (*callback) (ptr, sec, s, file, data);
311
312 sec = sec->next;
313 }
314 }
315 }
316
317 /* Handle a wild statement for a single file F. */
318
319 static void
320 walk_wild_file (s, f, callback, data)
321 lang_wild_statement_type *s;
322 lang_input_statement_type *f;
323 callback_t callback;
324 PTR data;
325 {
326 if (f->the_bfd == NULL
327 || ! bfd_check_format (f->the_bfd, bfd_archive))
328 walk_wild_section (s, f, callback, data);
329 else
330 {
331 bfd *member;
332
333 /* This is an archive file. We must map each member of the
334 archive separately. */
335 member = bfd_openr_next_archived_file (f->the_bfd, (bfd *) NULL);
336 while (member != NULL)
337 {
338 /* When lookup_name is called, it will call the add_symbols
339 entry point for the archive. For each element of the
340 archive which is included, BFD will call ldlang_add_file,
341 which will set the usrdata field of the member to the
342 lang_input_statement. */
343 if (member->usrdata != NULL)
344 {
345 walk_wild_section (s,
346 (lang_input_statement_type *) member->usrdata,
347 callback, data);
348 }
349
350 member = bfd_openr_next_archived_file (f->the_bfd, member);
351 }
352 }
353 }
354
355 static void
356 walk_wild (s, callback, data)
357 lang_wild_statement_type *s;
358 callback_t callback;
359 PTR data;
360 {
361 const char *file_spec = s->filename;
362
363 if (file_spec == NULL)
364 {
365 /* Perform the iteration over all files in the list. */
366 LANG_FOR_EACH_INPUT_STATEMENT (f)
367 {
368 walk_wild_file (s, f, callback, data);
369 }
370 }
371 else if (wildcardp (file_spec))
372 {
373 LANG_FOR_EACH_INPUT_STATEMENT (f)
374 {
375 if (fnmatch (file_spec, f->filename, FNM_FILE_NAME) == 0)
376 walk_wild_file (s, f, callback, data);
377 }
378 }
379 else
380 {
381 lang_input_statement_type *f;
382
383 /* Perform the iteration over a single file. */
384 f = lookup_name (file_spec);
385 if (f)
386 walk_wild_file (s, f, callback, data);
387 }
388 }
389
390 /* lang_for_each_statement walks the parse tree and calls the provided
391 function for each node. */
392
393 static void
394 lang_for_each_statement_worker (func, s)
395 void (*func) PARAMS ((lang_statement_union_type *));
396 lang_statement_union_type *s;
397 {
398 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
399 {
400 func (s);
401
402 switch (s->header.type)
403 {
404 case lang_constructors_statement_enum:
405 lang_for_each_statement_worker (func, constructor_list.head);
406 break;
407 case lang_output_section_statement_enum:
408 lang_for_each_statement_worker
409 (func,
410 s->output_section_statement.children.head);
411 break;
412 case lang_wild_statement_enum:
413 lang_for_each_statement_worker
414 (func,
415 s->wild_statement.children.head);
416 break;
417 case lang_group_statement_enum:
418 lang_for_each_statement_worker (func,
419 s->group_statement.children.head);
420 break;
421 case lang_data_statement_enum:
422 case lang_reloc_statement_enum:
423 case lang_object_symbols_statement_enum:
424 case lang_output_statement_enum:
425 case lang_target_statement_enum:
426 case lang_input_section_enum:
427 case lang_input_statement_enum:
428 case lang_assignment_statement_enum:
429 case lang_padding_statement_enum:
430 case lang_address_statement_enum:
431 case lang_fill_statement_enum:
432 break;
433 default:
434 FAIL ();
435 break;
436 }
437 }
438 }
439
440 void
441 lang_for_each_statement (func)
442 void (*func) PARAMS ((lang_statement_union_type *));
443 {
444 lang_for_each_statement_worker (func, statement_list.head);
445 }
446
447 /*----------------------------------------------------------------------*/
448
449 void
450 lang_list_init (list)
451 lang_statement_list_type *list;
452 {
453 list->head = (lang_statement_union_type *) NULL;
454 list->tail = &list->head;
455 }
456
457 /* Build a new statement node for the parse tree. */
458
459 static lang_statement_union_type *
460 new_statement (type, size, list)
461 enum statement_enum type;
462 size_t size;
463 lang_statement_list_type *list;
464 {
465 lang_statement_union_type *new = (lang_statement_union_type *)
466 stat_alloc (size);
467
468 new->header.type = type;
469 new->header.next = (lang_statement_union_type *) NULL;
470 lang_statement_append (list, new, &new->header.next);
471 return new;
472 }
473
474 /* Build a new input file node for the language. There are several
475 ways in which we treat an input file, eg, we only look at symbols,
476 or prefix it with a -l etc.
477
478 We can be supplied with requests for input files more than once;
479 they may, for example be split over serveral lines like foo.o(.text)
480 foo.o(.data) etc, so when asked for a file we check that we haven't
481 got it already so we don't duplicate the bfd. */
482
483 static lang_input_statement_type *
484 new_afile (name, file_type, target, add_to_list)
485 const char *name;
486 lang_input_file_enum_type file_type;
487 const char *target;
488 boolean add_to_list;
489 {
490 lang_input_statement_type *p;
491
492 if (add_to_list)
493 p = new_stat (lang_input_statement, stat_ptr);
494 else
495 {
496 p = ((lang_input_statement_type *)
497 stat_alloc (sizeof (lang_input_statement_type)));
498 p->header.next = NULL;
499 }
500
501 lang_has_input_file = true;
502 p->target = target;
503 switch (file_type)
504 {
505 case lang_input_file_is_symbols_only_enum:
506 p->filename = name;
507 p->is_archive = false;
508 p->real = true;
509 p->local_sym_name = name;
510 p->just_syms_flag = true;
511 p->search_dirs_flag = false;
512 break;
513 case lang_input_file_is_fake_enum:
514 p->filename = name;
515 p->is_archive = false;
516 p->real = false;
517 p->local_sym_name = name;
518 p->just_syms_flag = false;
519 p->search_dirs_flag = false;
520 break;
521 case lang_input_file_is_l_enum:
522 p->is_archive = true;
523 p->filename = name;
524 p->real = true;
525 p->local_sym_name = concat ("-l", name, (const char *) NULL);
526 p->just_syms_flag = false;
527 p->search_dirs_flag = true;
528 break;
529 case lang_input_file_is_marker_enum:
530 p->filename = name;
531 p->is_archive = false;
532 p->real = false;
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_search_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 = true;
544 break;
545 case lang_input_file_is_file_enum:
546 p->filename = name;
547 p->is_archive = false;
548 p->real = true;
549 p->local_sym_name = name;
550 p->just_syms_flag = false;
551 p->search_dirs_flag = false;
552 break;
553 default:
554 FAIL ();
555 }
556 p->the_bfd = (bfd *) NULL;
557 p->asymbols = (asymbol **) NULL;
558 p->next_real_file = (lang_statement_union_type *) NULL;
559 p->next = (lang_statement_union_type *) NULL;
560 p->symbol_count = 0;
561 p->dynamic = config.dynamic_link;
562 p->whole_archive = whole_archive;
563 p->loaded = false;
564 lang_statement_append (&input_file_chain,
565 (lang_statement_union_type *) p,
566 &p->next_real_file);
567 return p;
568 }
569
570 lang_input_statement_type *
571 lang_add_input_file (name, file_type, target)
572 const char *name;
573 lang_input_file_enum_type file_type;
574 const char *target;
575 {
576 lang_has_input_file = true;
577 return new_afile (name, file_type, target, true);
578 }
579
580 /* Build enough state so that the parser can build its tree. */
581
582 void
583 lang_init ()
584 {
585 obstack_begin (&stat_obstack, 1000);
586
587 stat_ptr = &statement_list;
588
589 lang_list_init (stat_ptr);
590
591 lang_list_init (&input_file_chain);
592 lang_list_init (&lang_output_section_statement);
593 lang_list_init (&file_chain);
594 first_file = lang_add_input_file ((char *) NULL,
595 lang_input_file_is_marker_enum,
596 (char *) NULL);
597 abs_output_section =
598 lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME);
599
600 abs_output_section->bfd_section = bfd_abs_section_ptr;
601
602 }
603
604 /*----------------------------------------------------------------------
605 A region is an area of memory declared with the
606 MEMORY { name:org=exp, len=exp ... }
607 syntax.
608
609 We maintain a list of all the regions here.
610
611 If no regions are specified in the script, then the default is used
612 which is created when looked up to be the entire data space. */
613
614 static lang_memory_region_type *lang_memory_region_list;
615 static lang_memory_region_type **lang_memory_region_list_tail = &lang_memory_region_list;
616
617 lang_memory_region_type *
618 lang_memory_region_lookup (name)
619 const char *const name;
620 {
621 lang_memory_region_type *p;
622
623 /* NAME is NULL for LMA memspecs if no region was specified. */
624 if (name == NULL)
625 return NULL;
626
627 for (p = lang_memory_region_list;
628 p != (lang_memory_region_type *) NULL;
629 p = p->next)
630 {
631 if (strcmp (p->name, name) == 0)
632 {
633 return p;
634 }
635 }
636
637 #if 0
638 /* This code used to always use the first region in the list as the
639 default region. I changed it to instead use a region
640 encompassing all of memory as the default region. This permits
641 NOLOAD sections to work reasonably without requiring a region.
642 People should specify what region they mean, if they really want
643 a region. */
644 if (strcmp (name, "*default*") == 0)
645 {
646 if (lang_memory_region_list != (lang_memory_region_type *) NULL)
647 {
648 return lang_memory_region_list;
649 }
650 }
651 #endif
652
653 {
654 lang_memory_region_type *new =
655 (lang_memory_region_type *) stat_alloc (sizeof (lang_memory_region_type));
656
657 new->name = xstrdup (name);
658 new->next = (lang_memory_region_type *) NULL;
659
660 *lang_memory_region_list_tail = new;
661 lang_memory_region_list_tail = &new->next;
662 new->origin = 0;
663 new->flags = 0;
664 new->not_flags = 0;
665 new->length = ~(bfd_size_type) 0;
666 new->current = 0;
667 new->had_full_message = false;
668
669 return new;
670 }
671 }
672
673 static lang_memory_region_type *
674 lang_memory_default (section)
675 asection *section;
676 {
677 lang_memory_region_type *p;
678
679 flagword sec_flags = section->flags;
680
681 /* Override SEC_DATA to mean a writable section. */
682 if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
683 sec_flags |= SEC_DATA;
684
685 for (p = lang_memory_region_list;
686 p != (lang_memory_region_type *) NULL;
687 p = p->next)
688 {
689 if ((p->flags & sec_flags) != 0
690 && (p->not_flags & sec_flags) == 0)
691 {
692 return p;
693 }
694 }
695 return lang_memory_region_lookup ("*default*");
696 }
697
698 lang_output_section_statement_type *
699 lang_output_section_find (name)
700 const char *const name;
701 {
702 lang_statement_union_type *u;
703 lang_output_section_statement_type *lookup;
704
705 for (u = lang_output_section_statement.head;
706 u != (lang_statement_union_type *) NULL;
707 u = lookup->next)
708 {
709 lookup = &u->output_section_statement;
710 if (strcmp (name, lookup->name) == 0)
711 {
712 return lookup;
713 }
714 }
715 return (lang_output_section_statement_type *) NULL;
716 }
717
718 lang_output_section_statement_type *
719 lang_output_section_statement_lookup (name)
720 const char *const name;
721 {
722 lang_output_section_statement_type *lookup;
723
724 lookup = lang_output_section_find (name);
725 if (lookup == (lang_output_section_statement_type *) NULL)
726 {
727
728 lookup = (lang_output_section_statement_type *)
729 new_stat (lang_output_section_statement, stat_ptr);
730 lookup->region = (lang_memory_region_type *) NULL;
731 lookup->lma_region = (lang_memory_region_type *) NULL;
732 lookup->fill = (fill_type *) 0;
733 lookup->block_value = 1;
734 lookup->name = name;
735
736 lookup->next = (lang_statement_union_type *) NULL;
737 lookup->bfd_section = (asection *) NULL;
738 lookup->processed = false;
739 lookup->sectype = normal_section;
740 lookup->addr_tree = (etree_type *) NULL;
741 lang_list_init (&lookup->children);
742
743 lookup->memspec = (const char *) NULL;
744 lookup->flags = 0;
745 lookup->subsection_alignment = -1;
746 lookup->section_alignment = -1;
747 lookup->load_base = (union etree_union *) NULL;
748 lookup->update_dot_tree = NULL;
749 lookup->phdrs = NULL;
750
751 lang_statement_append (&lang_output_section_statement,
752 (lang_statement_union_type *) lookup,
753 &lookup->next);
754 }
755 return lookup;
756 }
757
758 static void
759 lang_map_flags (flag)
760 flagword flag;
761 {
762 if (flag & SEC_ALLOC)
763 minfo ("a");
764
765 if (flag & SEC_CODE)
766 minfo ("x");
767
768 if (flag & SEC_READONLY)
769 minfo ("r");
770
771 if (flag & SEC_DATA)
772 minfo ("w");
773
774 if (flag & SEC_LOAD)
775 minfo ("l");
776 }
777
778 void
779 lang_map ()
780 {
781 lang_memory_region_type *m;
782
783 minfo (_("\nMemory Configuration\n\n"));
784 fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
785 _("Name"), _("Origin"), _("Length"), _("Attributes"));
786
787 for (m = lang_memory_region_list;
788 m != (lang_memory_region_type *) NULL;
789 m = m->next)
790 {
791 char buf[100];
792 int len;
793
794 fprintf (config.map_file, "%-16s ", m->name);
795
796 sprintf_vma (buf, m->origin);
797 minfo ("0x%s ", buf);
798 len = strlen (buf);
799 while (len < 16)
800 {
801 print_space ();
802 ++len;
803 }
804
805 minfo ("0x%V", m->length);
806 if (m->flags || m->not_flags)
807 {
808 #ifndef BFD64
809 minfo (" ");
810 #endif
811 if (m->flags)
812 {
813 print_space ();
814 lang_map_flags (m->flags);
815 }
816
817 if (m->not_flags)
818 {
819 minfo (" !");
820 lang_map_flags (m->not_flags);
821 }
822 }
823
824 print_nl ();
825 }
826
827 fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
828
829 print_statements ();
830 }
831
832 /* Initialize an output section. */
833
834 static void
835 init_os (s)
836 lang_output_section_statement_type *s;
837 {
838 section_userdata_type *new;
839
840 if (s->bfd_section != NULL)
841 return;
842
843 if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
844 einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
845
846 new = ((section_userdata_type *)
847 stat_alloc (sizeof (section_userdata_type)));
848
849 s->bfd_section = bfd_get_section_by_name (output_bfd, s->name);
850 if (s->bfd_section == (asection *) NULL)
851 s->bfd_section = bfd_make_section (output_bfd, s->name);
852 if (s->bfd_section == (asection *) NULL)
853 {
854 einfo (_("%P%F: output format %s cannot represent section called %s\n"),
855 output_bfd->xvec->name, s->name);
856 }
857 s->bfd_section->output_section = s->bfd_section;
858
859 /* We initialize an output sections output offset to minus its own
860 vma to allow us to output a section through itself. */
861 s->bfd_section->output_offset = 0;
862 get_userdata (s->bfd_section) = (PTR) new;
863
864 /* If there is a base address, make sure that any sections it might
865 mention are initialized. */
866 if (s->addr_tree != NULL)
867 exp_init_os (s->addr_tree);
868 }
869
870 /* Make sure that all output sections mentioned in an expression are
871 initialized. */
872
873 static void
874 exp_init_os (exp)
875 etree_type *exp;
876 {
877 switch (exp->type.node_class)
878 {
879 case etree_assign:
880 exp_init_os (exp->assign.src);
881 break;
882
883 case etree_binary:
884 exp_init_os (exp->binary.lhs);
885 exp_init_os (exp->binary.rhs);
886 break;
887
888 case etree_trinary:
889 exp_init_os (exp->trinary.cond);
890 exp_init_os (exp->trinary.lhs);
891 exp_init_os (exp->trinary.rhs);
892 break;
893
894 case etree_unary:
895 exp_init_os (exp->unary.child);
896 break;
897
898 case etree_name:
899 switch (exp->type.node_code)
900 {
901 case ADDR:
902 case LOADADDR:
903 case SIZEOF:
904 {
905 lang_output_section_statement_type *os;
906
907 os = lang_output_section_find (exp->name.name);
908 if (os != NULL && os->bfd_section == NULL)
909 init_os (os);
910 }
911 }
912 break;
913
914 default:
915 break;
916 }
917 }
918 \f
919 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
920 once into the output. This routine checks each section, and
921 arrange to discard it if a section of the same name has already
922 been linked. If the section has COMDAT information, then it uses
923 that to decide whether the section should be included. This code
924 assumes that all relevant sections have the SEC_LINK_ONCE flag set;
925 that is, it does not depend solely upon the section name.
926 section_already_linked is called via bfd_map_over_sections. */
927
928 /* This is the shape of the elements inside the already_linked hash
929 table. It maps a name onto a list of already_linked elements with
930 the same name. It's possible to get more than one element in a
931 list if the COMDAT sections have different names. */
932
933 struct already_linked_hash_entry
934 {
935 struct bfd_hash_entry root;
936 struct already_linked *entry;
937 };
938
939 struct already_linked
940 {
941 struct already_linked *next;
942 asection *sec;
943 };
944
945 /* The hash table. */
946
947 static struct bfd_hash_table already_linked_table;
948
949 static void
950 section_already_linked (abfd, sec, data)
951 bfd *abfd;
952 asection *sec;
953 PTR data;
954 {
955 lang_input_statement_type *entry = (lang_input_statement_type *) data;
956 flagword flags;
957 const char *name;
958 struct already_linked *l;
959 struct already_linked_hash_entry *already_linked_list;
960
961 /* If we are only reading symbols from this object, then we want to
962 discard all sections. */
963 if (entry->just_syms_flag)
964 {
965 bfd_link_just_syms (sec, &link_info);
966 return;
967 }
968
969 flags = bfd_get_section_flags (abfd, sec);
970
971 if ((flags & SEC_LINK_ONCE) == 0)
972 return;
973
974 /* FIXME: When doing a relocatable link, we may have trouble
975 copying relocations in other sections that refer to local symbols
976 in the section being discarded. Those relocations will have to
977 be converted somehow; as of this writing I'm not sure that any of
978 the backends handle that correctly.
979
980 It is tempting to instead not discard link once sections when
981 doing a relocatable link (technically, they should be discarded
982 whenever we are building constructors). However, that fails,
983 because the linker winds up combining all the link once sections
984 into a single large link once section, which defeats the purpose
985 of having link once sections in the first place.
986
987 Also, not merging link once sections in a relocatable link
988 causes trouble for MIPS ELF, which relies in link once semantics
989 to handle the .reginfo section correctly. */
990
991 name = bfd_get_section_name (abfd, sec);
992
993 already_linked_list =
994 ((struct already_linked_hash_entry *)
995 bfd_hash_lookup (&already_linked_table, name, true, false));
996
997 for (l = already_linked_list->entry; l != NULL; l = l->next)
998 {
999 if (sec->comdat == NULL
1000 || l->sec->comdat == NULL
1001 || strcmp (sec->comdat->name, l->sec->comdat->name) == 0)
1002 {
1003 /* The section has already been linked. See if we should
1004 issue a warning. */
1005 switch (flags & SEC_LINK_DUPLICATES)
1006 {
1007 default:
1008 abort ();
1009
1010 case SEC_LINK_DUPLICATES_DISCARD:
1011 break;
1012
1013 case SEC_LINK_DUPLICATES_ONE_ONLY:
1014 if (sec->comdat == NULL)
1015 einfo (_("%P: %B: warning: ignoring duplicate section `%s'\n"),
1016 abfd, name);
1017 else
1018 einfo (_("%P: %B: warning: ignoring duplicate `%s' section symbol `%s'\n"),
1019 abfd, name, sec->comdat->name);
1020 break;
1021
1022 case SEC_LINK_DUPLICATES_SAME_CONTENTS:
1023 /* FIXME: We should really dig out the contents of both
1024 sections and memcmp them. The COFF/PE spec says that
1025 the Microsoft linker does not implement this
1026 correctly, so I'm not going to bother doing it
1027 either. */
1028 /* Fall through. */
1029 case SEC_LINK_DUPLICATES_SAME_SIZE:
1030 if (bfd_section_size (abfd, sec)
1031 != bfd_section_size (l->sec->owner, l->sec))
1032 einfo (_("%P: %B: warning: duplicate section `%s' has different size\n"),
1033 abfd, name);
1034 break;
1035 }
1036
1037 /* Set the output_section field so that lang_add_section
1038 does not create a lang_input_section structure for this
1039 section. */
1040 sec->output_section = bfd_abs_section_ptr;
1041
1042 return;
1043 }
1044 }
1045
1046 /* This is the first section with this name. Record it. Allocate
1047 the memory from the same obstack as the hash table is kept in. */
1048
1049 l = ((struct already_linked *)
1050 bfd_hash_allocate (&already_linked_table, sizeof *l));
1051
1052 l->sec = sec;
1053 l->next = already_linked_list->entry;
1054 already_linked_list->entry = l;
1055 }
1056
1057 /* Support routines for the hash table used by section_already_linked,
1058 initialize the table, fill in an entry and remove the table. */
1059
1060 static struct bfd_hash_entry *
1061 already_linked_newfunc (entry, table, string)
1062 struct bfd_hash_entry *entry ATTRIBUTE_UNUSED;
1063 struct bfd_hash_table *table;
1064 const char *string ATTRIBUTE_UNUSED;
1065 {
1066 struct already_linked_hash_entry *ret =
1067 bfd_hash_allocate (table, sizeof (struct already_linked_hash_entry));
1068
1069 ret->entry = NULL;
1070
1071 return (struct bfd_hash_entry *) ret;
1072 }
1073
1074 static void
1075 already_linked_table_init ()
1076 {
1077 if (! bfd_hash_table_init_n (&already_linked_table,
1078 already_linked_newfunc,
1079 42))
1080 einfo (_("%P%F: Failed to create hash table\n"));
1081 }
1082
1083 static void
1084 already_linked_table_free ()
1085 {
1086 bfd_hash_table_free (&already_linked_table);
1087 }
1088 \f
1089 /* The wild routines.
1090
1091 These expand statements like *(.text) and foo.o to a list of
1092 explicit actions, like foo.o(.text), bar.o(.text) and
1093 foo.o(.text, .data). */
1094
1095 /* Return true if the PATTERN argument is a wildcard pattern.
1096 Although backslashes are treated specially if a pattern contains
1097 wildcards, we do not consider the mere presence of a backslash to
1098 be enough to cause the pattern to be treated as a wildcard.
1099 That lets us handle DOS filenames more naturally. */
1100
1101 static boolean
1102 wildcardp (pattern)
1103 const char *pattern;
1104 {
1105 const char *s;
1106
1107 for (s = pattern; *s != '\0'; ++s)
1108 if (*s == '?'
1109 || *s == '*'
1110 || *s == '[')
1111 return true;
1112 return false;
1113 }
1114
1115 /* Add SECTION to the output section OUTPUT. Do this by creating a
1116 lang_input_section statement which is placed at PTR. FILE is the
1117 input file which holds SECTION. */
1118
1119 void
1120 lang_add_section (ptr, section, output, file)
1121 lang_statement_list_type *ptr;
1122 asection *section;
1123 lang_output_section_statement_type *output;
1124 lang_input_statement_type *file;
1125 {
1126 flagword flags;
1127 boolean discard;
1128
1129 flags = bfd_get_section_flags (section->owner, section);
1130
1131 discard = false;
1132
1133 /* If we are doing a final link, discard sections marked with
1134 SEC_EXCLUDE. */
1135 if (! link_info.relocateable
1136 && (flags & SEC_EXCLUDE) != 0)
1137 discard = true;
1138
1139 /* Discard input sections which are assigned to a section named
1140 DISCARD_SECTION_NAME. */
1141 if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
1142 discard = true;
1143
1144 /* Discard debugging sections if we are stripping debugging
1145 information. */
1146 if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
1147 && (flags & SEC_DEBUGGING) != 0)
1148 discard = true;
1149
1150 if (discard)
1151 {
1152 if (section->output_section == NULL)
1153 {
1154 /* This prevents future calls from assigning this section. */
1155 section->output_section = bfd_abs_section_ptr;
1156 }
1157 return;
1158 }
1159
1160 if (section->output_section == NULL)
1161 {
1162 boolean first;
1163 lang_input_section_type *new;
1164 flagword flags;
1165
1166 if (output->bfd_section == NULL)
1167 init_os (output);
1168
1169 first = ! output->bfd_section->linker_has_input;
1170 output->bfd_section->linker_has_input = 1;
1171
1172 /* Add a section reference to the list. */
1173 new = new_stat (lang_input_section, ptr);
1174
1175 new->section = section;
1176 new->ifile = file;
1177 section->output_section = output->bfd_section;
1178
1179 flags = section->flags;
1180
1181 /* We don't copy the SEC_NEVER_LOAD flag from an input section
1182 to an output section, because we want to be able to include a
1183 SEC_NEVER_LOAD section in the middle of an otherwise loaded
1184 section (I don't know why we want to do this, but we do).
1185 build_link_order in ldwrite.c handles this case by turning
1186 the embedded SEC_NEVER_LOAD section into a fill. */
1187
1188 flags &= ~ SEC_NEVER_LOAD;
1189
1190 /* If final link, don't copy the SEC_LINK_ONCE flags, they've
1191 already been processed. One reason to do this is that on pe
1192 format targets, .text$foo sections go into .text and it's odd
1193 to see .text with SEC_LINK_ONCE set. */
1194
1195 if (! link_info.relocateable)
1196 flags &= ~ (SEC_LINK_ONCE | SEC_LINK_DUPLICATES);
1197
1198 /* If this is not the first input section, and the SEC_READONLY
1199 flag is not currently set, then don't set it just because the
1200 input section has it set. */
1201
1202 if (! first && (section->output_section->flags & SEC_READONLY) == 0)
1203 flags &= ~ SEC_READONLY;
1204
1205 /* Keep SEC_MERGE and SEC_STRINGS only if they are the same. */
1206 if (! first
1207 && ((section->output_section->flags & (SEC_MERGE | SEC_STRINGS))
1208 != (flags & (SEC_MERGE | SEC_STRINGS))
1209 || ((flags & SEC_MERGE)
1210 && section->output_section->entsize != section->entsize)))
1211 {
1212 section->output_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
1213 flags &= ~ (SEC_MERGE | SEC_STRINGS);
1214 }
1215
1216 /* For now make .tbss normal section. */
1217 if (flags & SEC_THREAD_LOCAL)
1218 flags |= SEC_LOAD;
1219
1220 section->output_section->flags |= flags;
1221
1222 if (flags & SEC_MERGE)
1223 section->output_section->entsize = section->entsize;
1224
1225 /* If SEC_READONLY is not set in the input section, then clear
1226 it from the output section. */
1227 if ((section->flags & SEC_READONLY) == 0)
1228 section->output_section->flags &= ~SEC_READONLY;
1229
1230 switch (output->sectype)
1231 {
1232 case normal_section:
1233 break;
1234 case dsect_section:
1235 case copy_section:
1236 case info_section:
1237 case overlay_section:
1238 output->bfd_section->flags &= ~SEC_ALLOC;
1239 break;
1240 case noload_section:
1241 output->bfd_section->flags &= ~SEC_LOAD;
1242 output->bfd_section->flags |= SEC_NEVER_LOAD;
1243 break;
1244 }
1245
1246 /* Copy over SEC_SMALL_DATA. */
1247 if (section->flags & SEC_SMALL_DATA)
1248 section->output_section->flags |= SEC_SMALL_DATA;
1249
1250 if (section->alignment_power > output->bfd_section->alignment_power)
1251 output->bfd_section->alignment_power = section->alignment_power;
1252
1253 /* If supplied an aligment, then force it. */
1254 if (output->section_alignment != -1)
1255 output->bfd_section->alignment_power = output->section_alignment;
1256
1257 if (section->flags & SEC_BLOCK)
1258 {
1259 section->output_section->flags |= SEC_BLOCK;
1260 /* FIXME: This value should really be obtained from the bfd... */
1261 output->block_value = 128;
1262 }
1263 }
1264 }
1265
1266 /* Handle wildcard sorting. This returns the lang_input_section which
1267 should follow the one we are going to create for SECTION and FILE,
1268 based on the sorting requirements of WILD. It returns NULL if the
1269 new section should just go at the end of the current list. */
1270
1271 static lang_statement_union_type *
1272 wild_sort (wild, sec, file, section)
1273 lang_wild_statement_type *wild;
1274 struct wildcard_list *sec;
1275 lang_input_statement_type *file;
1276 asection *section;
1277 {
1278 const char *section_name;
1279 lang_statement_union_type *l;
1280
1281 if (!wild->filenames_sorted && (sec == NULL || !sec->spec.sorted))
1282 return NULL;
1283
1284 section_name = bfd_get_section_name (file->the_bfd, section);
1285 for (l = wild->children.head; l != NULL; l = l->header.next)
1286 {
1287 lang_input_section_type *ls;
1288
1289 if (l->header.type != lang_input_section_enum)
1290 continue;
1291 ls = &l->input_section;
1292
1293 /* Sorting by filename takes precedence over sorting by section
1294 name. */
1295
1296 if (wild->filenames_sorted)
1297 {
1298 const char *fn, *ln;
1299 boolean fa, la;
1300 int i;
1301
1302 /* The PE support for the .idata section as generated by
1303 dlltool assumes that files will be sorted by the name of
1304 the archive and then the name of the file within the
1305 archive. */
1306
1307 if (file->the_bfd != NULL
1308 && bfd_my_archive (file->the_bfd) != NULL)
1309 {
1310 fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
1311 fa = true;
1312 }
1313 else
1314 {
1315 fn = file->filename;
1316 fa = false;
1317 }
1318
1319 if (ls->ifile->the_bfd != NULL
1320 && bfd_my_archive (ls->ifile->the_bfd) != NULL)
1321 {
1322 ln = bfd_get_filename (bfd_my_archive (ls->ifile->the_bfd));
1323 la = true;
1324 }
1325 else
1326 {
1327 ln = ls->ifile->filename;
1328 la = false;
1329 }
1330
1331 i = strcmp (fn, ln);
1332 if (i > 0)
1333 continue;
1334 else if (i < 0)
1335 break;
1336
1337 if (fa || la)
1338 {
1339 if (fa)
1340 fn = file->filename;
1341 if (la)
1342 ln = ls->ifile->filename;
1343
1344 i = strcmp (fn, ln);
1345 if (i > 0)
1346 continue;
1347 else if (i < 0)
1348 break;
1349 }
1350 }
1351
1352 /* Here either the files are not sorted by name, or we are
1353 looking at the sections for this file. */
1354
1355 if (sec != NULL && sec->spec.sorted)
1356 {
1357 if (strcmp (section_name,
1358 bfd_get_section_name (ls->ifile->the_bfd,
1359 ls->section))
1360 < 0)
1361 break;
1362 }
1363 }
1364
1365 return l;
1366 }
1367
1368 /* Expand a wild statement for a particular FILE. SECTION may be
1369 NULL, in which case it is a wild card. */
1370
1371 static void
1372 output_section_callback (ptr, sec, section, file, output)
1373 lang_wild_statement_type *ptr;
1374 struct wildcard_list *sec;
1375 asection *section;
1376 lang_input_statement_type *file;
1377 PTR output;
1378 {
1379 lang_statement_union_type *before;
1380
1381 /* Exclude sections that match UNIQUE_SECTION_LIST. */
1382 if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
1383 return;
1384
1385 /* If the wild pattern was marked KEEP, the member sections
1386 should be as well. */
1387 if (ptr->keep_sections)
1388 section->flags |= SEC_KEEP;
1389
1390 before = wild_sort (ptr, sec, file, section);
1391
1392 /* Here BEFORE points to the lang_input_section which
1393 should follow the one we are about to add. If BEFORE
1394 is NULL, then the section should just go at the end
1395 of the current list. */
1396
1397 if (before == NULL)
1398 lang_add_section (&ptr->children, section,
1399 (lang_output_section_statement_type *) output,
1400 file);
1401 else
1402 {
1403 lang_statement_list_type list;
1404 lang_statement_union_type **pp;
1405
1406 lang_list_init (&list);
1407 lang_add_section (&list, section,
1408 (lang_output_section_statement_type *) output,
1409 file);
1410
1411 /* If we are discarding the section, LIST.HEAD will
1412 be NULL. */
1413 if (list.head != NULL)
1414 {
1415 ASSERT (list.head->header.next == NULL);
1416
1417 for (pp = &ptr->children.head;
1418 *pp != before;
1419 pp = &(*pp)->header.next)
1420 ASSERT (*pp != NULL);
1421
1422 list.head->header.next = *pp;
1423 *pp = list.head;
1424 }
1425 }
1426 }
1427
1428 /* This is passed a file name which must have been seen already and
1429 added to the statement tree. We will see if it has been opened
1430 already and had its symbols read. If not then we'll read it. */
1431
1432 static lang_input_statement_type *
1433 lookup_name (name)
1434 const char *name;
1435 {
1436 lang_input_statement_type *search;
1437
1438 for (search = (lang_input_statement_type *) input_file_chain.head;
1439 search != (lang_input_statement_type *) NULL;
1440 search = (lang_input_statement_type *) search->next_real_file)
1441 {
1442 if (search->filename == (char *) NULL && name == (char *) NULL)
1443 return search;
1444 if (search->filename != (char *) NULL
1445 && name != (char *) NULL
1446 && strcmp (search->filename, name) == 0)
1447 break;
1448 }
1449
1450 if (search == (lang_input_statement_type *) NULL)
1451 search = new_afile (name, lang_input_file_is_file_enum, default_target,
1452 false);
1453
1454 /* If we have already added this file, or this file is not real
1455 (FIXME: can that ever actually happen?) or the name is NULL
1456 (FIXME: can that ever actually happen?) don't add this file. */
1457 if (search->loaded
1458 || ! search->real
1459 || search->filename == (const char *) NULL)
1460 return search;
1461
1462 if (! load_symbols (search, (lang_statement_list_type *) NULL))
1463 return NULL;
1464
1465 return search;
1466 }
1467
1468 /* Get the symbols for an input file. */
1469
1470 static boolean
1471 load_symbols (entry, place)
1472 lang_input_statement_type *entry;
1473 lang_statement_list_type *place;
1474 {
1475 char **matching;
1476
1477 if (entry->loaded)
1478 return true;
1479
1480 ldfile_open_file (entry);
1481
1482 if (! bfd_check_format (entry->the_bfd, bfd_archive)
1483 && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
1484 {
1485 bfd_error_type err;
1486 lang_statement_list_type *hold;
1487 boolean bad_load = true;
1488
1489 err = bfd_get_error ();
1490
1491 /* See if the emulation has some special knowledge. */
1492 if (ldemul_unrecognized_file (entry))
1493 return true;
1494
1495 if (err == bfd_error_file_ambiguously_recognized)
1496 {
1497 char **p;
1498
1499 einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
1500 einfo (_("%B: matching formats:"), entry->the_bfd);
1501 for (p = matching; *p != NULL; p++)
1502 einfo (" %s", *p);
1503 einfo ("%F\n");
1504 }
1505 else if (err != bfd_error_file_not_recognized
1506 || place == NULL)
1507 einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
1508 else
1509 bad_load = false;
1510
1511 bfd_close (entry->the_bfd);
1512 entry->the_bfd = NULL;
1513
1514 /* Try to interpret the file as a linker script. */
1515 ldfile_open_command_file (entry->filename);
1516
1517 hold = stat_ptr;
1518 stat_ptr = place;
1519
1520 ldfile_assumed_script = true;
1521 parser_input = input_script;
1522 yyparse ();
1523 ldfile_assumed_script = false;
1524
1525 stat_ptr = hold;
1526
1527 return ! bad_load;
1528 }
1529
1530 if (ldemul_recognized_file (entry))
1531 return true;
1532
1533 /* We don't call ldlang_add_file for an archive. Instead, the
1534 add_symbols entry point will call ldlang_add_file, via the
1535 add_archive_element callback, for each element of the archive
1536 which is used. */
1537 switch (bfd_get_format (entry->the_bfd))
1538 {
1539 default:
1540 break;
1541
1542 case bfd_object:
1543 ldlang_add_file (entry);
1544 if (trace_files || trace_file_tries)
1545 info_msg ("%I\n", entry);
1546 break;
1547
1548 case bfd_archive:
1549 if (entry->whole_archive)
1550 {
1551 bfd *member = NULL;
1552 boolean loaded = true;
1553
1554 for (;;)
1555 {
1556 member = bfd_openr_next_archived_file (entry->the_bfd, member);
1557
1558 if (member == NULL)
1559 break;
1560
1561 if (! bfd_check_format (member, bfd_object))
1562 {
1563 einfo (_("%F%B: member %B in archive is not an object\n"),
1564 entry->the_bfd, member);
1565 loaded = false;
1566 }
1567
1568 if (! ((*link_info.callbacks->add_archive_element)
1569 (&link_info, member, "--whole-archive")))
1570 abort ();
1571
1572 if (! bfd_link_add_symbols (member, &link_info))
1573 {
1574 einfo (_("%F%B: could not read symbols: %E\n"), member);
1575 loaded = false;
1576 }
1577 }
1578
1579 entry->loaded = loaded;
1580 return loaded;
1581 }
1582 break;
1583 }
1584
1585 if (bfd_link_add_symbols (entry->the_bfd, &link_info))
1586 entry->loaded = true;
1587 else
1588 einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
1589
1590 return entry->loaded;
1591 }
1592
1593 /* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
1594 may be NULL, indicating that it is a wildcard. Separate
1595 lang_input_section statements are created for each part of the
1596 expansion; they are added after the wild statement S. OUTPUT is
1597 the output section. */
1598
1599 static void
1600 wild (s, target, output)
1601 lang_wild_statement_type *s;
1602 const char *target ATTRIBUTE_UNUSED;
1603 lang_output_section_statement_type *output;
1604 {
1605 struct wildcard_list *sec;
1606
1607 walk_wild (s, output_section_callback, (PTR) output);
1608
1609 for (sec = s->section_list; sec != NULL; sec = sec->next)
1610 {
1611 if (default_common_section != NULL)
1612 break;
1613 if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
1614 {
1615 /* Remember the section that common is going to in case we
1616 later get something which doesn't know where to put it. */
1617 default_common_section = output;
1618 }
1619 }
1620 }
1621
1622 /* Return true iff target is the sought target. */
1623
1624 static int
1625 get_target (target, data)
1626 const bfd_target *target;
1627 PTR data;
1628 {
1629 const char *sought = (const char *) data;
1630
1631 return strcmp (target->name, sought) == 0;
1632 }
1633
1634 /* Like strcpy() but convert to lower case as well. */
1635
1636 static void
1637 stricpy (dest, src)
1638 char *dest;
1639 char *src;
1640 {
1641 char c;
1642
1643 while ((c = *src++) != 0)
1644 *dest++ = TOLOWER (c);
1645
1646 *dest = 0;
1647 }
1648
1649 /* Remove the first occurance of needle (if any) in haystack
1650 from haystack. */
1651
1652 static void
1653 strcut (haystack, needle)
1654 char *haystack;
1655 char *needle;
1656 {
1657 haystack = strstr (haystack, needle);
1658
1659 if (haystack)
1660 {
1661 char *src;
1662
1663 for (src = haystack + strlen (needle); *src;)
1664 *haystack++ = *src++;
1665
1666 *haystack = 0;
1667 }
1668 }
1669
1670 /* Compare two target format name strings.
1671 Return a value indicating how "similar" they are. */
1672
1673 static int
1674 name_compare (first, second)
1675 char *first;
1676 char *second;
1677 {
1678 char *copy1;
1679 char *copy2;
1680 int result;
1681
1682 copy1 = xmalloc (strlen (first) + 1);
1683 copy2 = xmalloc (strlen (second) + 1);
1684
1685 /* Convert the names to lower case. */
1686 stricpy (copy1, first);
1687 stricpy (copy2, second);
1688
1689 /* Remove and endian strings from the name. */
1690 strcut (copy1, "big");
1691 strcut (copy1, "little");
1692 strcut (copy2, "big");
1693 strcut (copy2, "little");
1694
1695 /* Return a value based on how many characters match,
1696 starting from the beginning. If both strings are
1697 the same then return 10 * their length. */
1698 for (result = 0; copy1[result] == copy2[result]; result++)
1699 if (copy1[result] == 0)
1700 {
1701 result *= 10;
1702 break;
1703 }
1704
1705 free (copy1);
1706 free (copy2);
1707
1708 return result;
1709 }
1710
1711 /* Set by closest_target_match() below. */
1712 static const bfd_target *winner;
1713
1714 /* Scan all the valid bfd targets looking for one that has the endianness
1715 requirement that was specified on the command line, and is the nearest
1716 match to the original output target. */
1717
1718 static int
1719 closest_target_match (target, data)
1720 const bfd_target *target;
1721 PTR data;
1722 {
1723 const bfd_target *original = (const bfd_target *) data;
1724
1725 if (command_line.endian == ENDIAN_BIG
1726 && target->byteorder != BFD_ENDIAN_BIG)
1727 return 0;
1728
1729 if (command_line.endian == ENDIAN_LITTLE
1730 && target->byteorder != BFD_ENDIAN_LITTLE)
1731 return 0;
1732
1733 /* Must be the same flavour. */
1734 if (target->flavour != original->flavour)
1735 return 0;
1736
1737 /* If we have not found a potential winner yet, then record this one. */
1738 if (winner == NULL)
1739 {
1740 winner = target;
1741 return 0;
1742 }
1743
1744 /* Oh dear, we now have two potential candidates for a successful match.
1745 Compare their names and choose the better one. */
1746 if (name_compare (target->name, original->name)
1747 > name_compare (winner->name, original->name))
1748 winner = target;
1749
1750 /* Keep on searching until wqe have checked them all. */
1751 return 0;
1752 }
1753
1754 /* Return the BFD target format of the first input file. */
1755
1756 static char *
1757 get_first_input_target ()
1758 {
1759 char *target = NULL;
1760
1761 LANG_FOR_EACH_INPUT_STATEMENT (s)
1762 {
1763 if (s->header.type == lang_input_statement_enum
1764 && s->real)
1765 {
1766 ldfile_open_file (s);
1767
1768 if (s->the_bfd != NULL
1769 && bfd_check_format (s->the_bfd, bfd_object))
1770 {
1771 target = bfd_get_target (s->the_bfd);
1772
1773 if (target != NULL)
1774 break;
1775 }
1776 }
1777 }
1778
1779 return target;
1780 }
1781
1782 /* Open the output file. */
1783
1784 static bfd *
1785 open_output (name)
1786 const char *name;
1787 {
1788 bfd *output;
1789
1790 /* Has the user told us which output format to use? */
1791 if (output_target == (char *) NULL)
1792 {
1793 /* No - has the current target been set to something other than
1794 the default? */
1795 if (current_target != default_target)
1796 output_target = current_target;
1797
1798 /* No - can we determine the format of the first input file? */
1799 else
1800 {
1801 output_target = get_first_input_target ();
1802
1803 /* Failed - use the default output target. */
1804 if (output_target == NULL)
1805 output_target = default_target;
1806 }
1807 }
1808
1809 /* Has the user requested a particular endianness on the command
1810 line? */
1811 if (command_line.endian != ENDIAN_UNSET)
1812 {
1813 const bfd_target *target;
1814 enum bfd_endian desired_endian;
1815
1816 /* Get the chosen target. */
1817 target = bfd_search_for_target (get_target, (PTR) output_target);
1818
1819 /* If the target is not supported, we cannot do anything. */
1820 if (target != NULL)
1821 {
1822 if (command_line.endian == ENDIAN_BIG)
1823 desired_endian = BFD_ENDIAN_BIG;
1824 else
1825 desired_endian = BFD_ENDIAN_LITTLE;
1826
1827 /* See if the target has the wrong endianness. This should
1828 not happen if the linker script has provided big and
1829 little endian alternatives, but some scrips don't do
1830 this. */
1831 if (target->byteorder != desired_endian)
1832 {
1833 /* If it does, then see if the target provides
1834 an alternative with the correct endianness. */
1835 if (target->alternative_target != NULL
1836 && (target->alternative_target->byteorder == desired_endian))
1837 output_target = target->alternative_target->name;
1838 else
1839 {
1840 /* Try to find a target as similar as possible to
1841 the default target, but which has the desired
1842 endian characteristic. */
1843 (void) bfd_search_for_target (closest_target_match,
1844 (PTR) target);
1845
1846 /* Oh dear - we could not find any targets that
1847 satisfy our requirements. */
1848 if (winner == NULL)
1849 einfo (_("%P: warning: could not find any targets that match endianness requirement\n"));
1850 else
1851 output_target = winner->name;
1852 }
1853 }
1854 }
1855 }
1856
1857 output = bfd_openw (name, output_target);
1858
1859 if (output == (bfd *) NULL)
1860 {
1861 if (bfd_get_error () == bfd_error_invalid_target)
1862 einfo (_("%P%F: target %s not found\n"), output_target);
1863
1864 einfo (_("%P%F: cannot open output file %s: %E\n"), name);
1865 }
1866
1867 delete_output_file_on_failure = true;
1868
1869 #if 0
1870 output->flags |= D_PAGED;
1871 #endif
1872
1873 if (! bfd_set_format (output, bfd_object))
1874 einfo (_("%P%F:%s: can not make object file: %E\n"), name);
1875 if (! bfd_set_arch_mach (output,
1876 ldfile_output_architecture,
1877 ldfile_output_machine))
1878 einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
1879
1880 link_info.hash = bfd_link_hash_table_create (output);
1881 if (link_info.hash == (struct bfd_link_hash_table *) NULL)
1882 einfo (_("%P%F: can not create link hash table: %E\n"));
1883
1884 bfd_set_gp_size (output, g_switch_value);
1885 return output;
1886 }
1887
1888 static void
1889 ldlang_open_output (statement)
1890 lang_statement_union_type *statement;
1891 {
1892 switch (statement->header.type)
1893 {
1894 case lang_output_statement_enum:
1895 ASSERT (output_bfd == (bfd *) NULL);
1896 output_bfd = open_output (statement->output_statement.name);
1897 ldemul_set_output_arch ();
1898 if (config.magic_demand_paged && !link_info.relocateable)
1899 output_bfd->flags |= D_PAGED;
1900 else
1901 output_bfd->flags &= ~D_PAGED;
1902 if (config.text_read_only)
1903 output_bfd->flags |= WP_TEXT;
1904 else
1905 output_bfd->flags &= ~WP_TEXT;
1906 if (link_info.traditional_format)
1907 output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
1908 else
1909 output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
1910 break;
1911
1912 case lang_target_statement_enum:
1913 current_target = statement->target_statement.target;
1914 break;
1915 default:
1916 break;
1917 }
1918 }
1919
1920 /* Open all the input files. */
1921
1922 static void
1923 open_input_bfds (s, force)
1924 lang_statement_union_type *s;
1925 boolean force;
1926 {
1927 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
1928 {
1929 switch (s->header.type)
1930 {
1931 case lang_constructors_statement_enum:
1932 open_input_bfds (constructor_list.head, force);
1933 break;
1934 case lang_output_section_statement_enum:
1935 open_input_bfds (s->output_section_statement.children.head, force);
1936 break;
1937 case lang_wild_statement_enum:
1938 /* Maybe we should load the file's symbols. */
1939 if (s->wild_statement.filename
1940 && ! wildcardp (s->wild_statement.filename))
1941 (void) lookup_name (s->wild_statement.filename);
1942 open_input_bfds (s->wild_statement.children.head, force);
1943 break;
1944 case lang_group_statement_enum:
1945 {
1946 struct bfd_link_hash_entry *undefs;
1947
1948 /* We must continually search the entries in the group
1949 until no new symbols are added to the list of undefined
1950 symbols. */
1951
1952 do
1953 {
1954 undefs = link_info.hash->undefs_tail;
1955 open_input_bfds (s->group_statement.children.head, true);
1956 }
1957 while (undefs != link_info.hash->undefs_tail);
1958 }
1959 break;
1960 case lang_target_statement_enum:
1961 current_target = s->target_statement.target;
1962 break;
1963 case lang_input_statement_enum:
1964 if (s->input_statement.real)
1965 {
1966 lang_statement_list_type add;
1967
1968 s->input_statement.target = current_target;
1969
1970 /* If we are being called from within a group, and this
1971 is an archive which has already been searched, then
1972 force it to be researched unless the whole archive
1973 has been loaded already. */
1974 if (force
1975 && !s->input_statement.whole_archive
1976 && s->input_statement.loaded
1977 && bfd_check_format (s->input_statement.the_bfd,
1978 bfd_archive))
1979 s->input_statement.loaded = false;
1980
1981 lang_list_init (&add);
1982
1983 if (! load_symbols (&s->input_statement, &add))
1984 config.make_executable = false;
1985
1986 if (add.head != NULL)
1987 {
1988 *add.tail = s->header.next;
1989 s->header.next = add.head;
1990 }
1991 }
1992 break;
1993 default:
1994 break;
1995 }
1996 }
1997 }
1998
1999 /* If there are [COMMONS] statements, put a wild one into the bss
2000 section. */
2001
2002 static void
2003 lang_reasonable_defaults ()
2004 {
2005 #if 0
2006 lang_output_section_statement_lookup (".text");
2007 lang_output_section_statement_lookup (".data");
2008
2009 default_common_section = lang_output_section_statement_lookup (".bss");
2010
2011 if (placed_commons == false)
2012 {
2013 lang_wild_statement_type *new =
2014 new_stat (lang_wild_statement,
2015 &default_common_section->children);
2016
2017 new->section_name = "COMMON";
2018 new->filename = (char *) NULL;
2019 lang_list_init (&new->children);
2020 }
2021 #endif
2022 }
2023
2024 /* Add the supplied name to the symbol table as an undefined reference.
2025 This is a two step process as the symbol table doesn't even exist at
2026 the time the ld command line is processed. First we put the name
2027 on a list, then, once the output file has been opened, transfer the
2028 name to the symbol table. */
2029
2030 typedef struct ldlang_undef_chain_list
2031 {
2032 struct ldlang_undef_chain_list *next;
2033 char *name;
2034 } ldlang_undef_chain_list_type;
2035
2036 static ldlang_undef_chain_list_type *ldlang_undef_chain_list_head;
2037
2038 void
2039 ldlang_add_undef (name)
2040 const char *const name;
2041 {
2042 ldlang_undef_chain_list_type *new =
2043 ((ldlang_undef_chain_list_type *)
2044 stat_alloc (sizeof (ldlang_undef_chain_list_type)));
2045
2046 new->next = ldlang_undef_chain_list_head;
2047 ldlang_undef_chain_list_head = new;
2048
2049 new->name = xstrdup (name);
2050
2051 if (output_bfd != NULL)
2052 insert_undefined (new->name);
2053 }
2054
2055 /* Insert NAME as undefined in the symbol table. */
2056
2057 static void
2058 insert_undefined (name)
2059 const char *name;
2060 {
2061 struct bfd_link_hash_entry *h;
2062
2063 h = bfd_link_hash_lookup (link_info.hash, name, true, false, true);
2064 if (h == (struct bfd_link_hash_entry *) NULL)
2065 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
2066 if (h->type == bfd_link_hash_new)
2067 {
2068 h->type = bfd_link_hash_undefined;
2069 h->u.undef.abfd = NULL;
2070 bfd_link_add_undef (link_info.hash, h);
2071 }
2072 }
2073
2074 /* Run through the list of undefineds created above and place them
2075 into the linker hash table as undefined symbols belonging to the
2076 script file. */
2077
2078 static void
2079 lang_place_undefineds ()
2080 {
2081 ldlang_undef_chain_list_type *ptr;
2082
2083 for (ptr = ldlang_undef_chain_list_head;
2084 ptr != (ldlang_undef_chain_list_type *) NULL;
2085 ptr = ptr->next)
2086 {
2087 insert_undefined (ptr->name);
2088 }
2089 }
2090
2091 /* Open input files and attatch to output sections. */
2092
2093 static void
2094 map_input_to_output_sections (s, target, output_section_statement)
2095 lang_statement_union_type *s;
2096 const char *target;
2097 lang_output_section_statement_type *output_section_statement;
2098 {
2099 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2100 {
2101 switch (s->header.type)
2102 {
2103 case lang_wild_statement_enum:
2104 wild (&s->wild_statement, target, output_section_statement);
2105 break;
2106 case lang_constructors_statement_enum:
2107 map_input_to_output_sections (constructor_list.head,
2108 target,
2109 output_section_statement);
2110 break;
2111 case lang_output_section_statement_enum:
2112 map_input_to_output_sections (s->output_section_statement.children.head,
2113 target,
2114 &s->output_section_statement);
2115 break;
2116 case lang_output_statement_enum:
2117 break;
2118 case lang_target_statement_enum:
2119 target = s->target_statement.target;
2120 break;
2121 case lang_group_statement_enum:
2122 map_input_to_output_sections (s->group_statement.children.head,
2123 target,
2124 output_section_statement);
2125 break;
2126 case lang_fill_statement_enum:
2127 case lang_input_section_enum:
2128 case lang_object_symbols_statement_enum:
2129 case lang_data_statement_enum:
2130 case lang_reloc_statement_enum:
2131 case lang_padding_statement_enum:
2132 case lang_input_statement_enum:
2133 if (output_section_statement != NULL
2134 && output_section_statement->bfd_section == NULL)
2135 init_os (output_section_statement);
2136 break;
2137 case lang_assignment_statement_enum:
2138 if (output_section_statement != NULL
2139 && output_section_statement->bfd_section == NULL)
2140 init_os (output_section_statement);
2141
2142 /* Make sure that any sections mentioned in the assignment
2143 are initialized. */
2144 exp_init_os (s->assignment_statement.exp);
2145 break;
2146 case lang_afile_asection_pair_statement_enum:
2147 FAIL ();
2148 break;
2149 case lang_address_statement_enum:
2150 /* Mark the specified section with the supplied address. */
2151 {
2152 lang_output_section_statement_type *os =
2153 lang_output_section_statement_lookup
2154 (s->address_statement.section_name);
2155
2156 if (os->bfd_section == NULL)
2157 init_os (os);
2158 os->addr_tree = s->address_statement.address;
2159 }
2160 break;
2161 }
2162 }
2163 }
2164
2165 static void
2166 print_output_section_statement (output_section_statement)
2167 lang_output_section_statement_type *output_section_statement;
2168 {
2169 asection *section = output_section_statement->bfd_section;
2170 int len;
2171
2172 if (output_section_statement != abs_output_section)
2173 {
2174 minfo ("\n%s", output_section_statement->name);
2175
2176 if (section != NULL)
2177 {
2178 print_dot = section->vma;
2179
2180 len = strlen (output_section_statement->name);
2181 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2182 {
2183 print_nl ();
2184 len = 0;
2185 }
2186 while (len < SECTION_NAME_MAP_LENGTH)
2187 {
2188 print_space ();
2189 ++len;
2190 }
2191
2192 minfo ("0x%V %W", section->vma, section->_raw_size);
2193
2194 if (output_section_statement->load_base != NULL)
2195 {
2196 bfd_vma addr;
2197
2198 addr = exp_get_abs_int (output_section_statement->load_base, 0,
2199 "load base", lang_final_phase_enum);
2200 minfo (_(" load address 0x%V"), addr);
2201 }
2202 }
2203
2204 print_nl ();
2205 }
2206
2207 print_statement_list (output_section_statement->children.head,
2208 output_section_statement);
2209 }
2210
2211 static void
2212 print_assignment (assignment, output_section)
2213 lang_assignment_statement_type *assignment;
2214 lang_output_section_statement_type *output_section;
2215 {
2216 int i;
2217 etree_value_type result;
2218
2219 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2220 print_space ();
2221
2222 result = exp_fold_tree (assignment->exp->assign.src, output_section,
2223 lang_final_phase_enum, print_dot, &print_dot);
2224 if (result.valid_p)
2225 {
2226 const char *dst;
2227 bfd_vma value;
2228
2229 value = result.value + result.section->bfd_section->vma;
2230 dst = assignment->exp->assign.dst;
2231
2232 minfo ("0x%V", value);
2233 if (dst[0] == '.' && dst[1] == 0)
2234 print_dot = value;
2235 }
2236 else
2237 {
2238 minfo ("*undef* ");
2239 #ifdef BFD64
2240 minfo (" ");
2241 #endif
2242 }
2243
2244 minfo (" ");
2245
2246 exp_print_tree (assignment->exp);
2247
2248 print_nl ();
2249 }
2250
2251 static void
2252 print_input_statement (statm)
2253 lang_input_statement_type *statm;
2254 {
2255 if (statm->filename != (char *) NULL)
2256 {
2257 fprintf (config.map_file, "LOAD %s\n", statm->filename);
2258 }
2259 }
2260
2261 /* Print all symbols defined in a particular section. This is called
2262 via bfd_link_hash_traverse. */
2263
2264 static boolean
2265 print_one_symbol (hash_entry, ptr)
2266 struct bfd_link_hash_entry *hash_entry;
2267 PTR ptr;
2268 {
2269 asection *sec = (asection *) ptr;
2270
2271 if ((hash_entry->type == bfd_link_hash_defined
2272 || hash_entry->type == bfd_link_hash_defweak)
2273 && sec == hash_entry->u.def.section)
2274 {
2275 int i;
2276
2277 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2278 print_space ();
2279 minfo ("0x%V ",
2280 (hash_entry->u.def.value
2281 + hash_entry->u.def.section->output_offset
2282 + hash_entry->u.def.section->output_section->vma));
2283
2284 minfo (" %T\n", hash_entry->root.string);
2285 }
2286
2287 return true;
2288 }
2289
2290 /* Print information about an input section to the map file. */
2291
2292 static void
2293 print_input_section (in)
2294 lang_input_section_type *in;
2295 {
2296 asection *i = in->section;
2297 bfd_size_type size = i->_cooked_size != 0 ? i->_cooked_size : i->_raw_size;
2298 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2299 ldfile_output_machine);
2300 if (size != 0)
2301 {
2302 print_space ();
2303
2304 minfo ("%s", i->name);
2305
2306 if (i->output_section != NULL)
2307 {
2308 int len;
2309
2310 len = 1 + strlen (i->name);
2311 if (len >= SECTION_NAME_MAP_LENGTH - 1)
2312 {
2313 print_nl ();
2314 len = 0;
2315 }
2316 while (len < SECTION_NAME_MAP_LENGTH)
2317 {
2318 print_space ();
2319 ++len;
2320 }
2321
2322 minfo ("0x%V %W %B\n",
2323 i->output_section->vma + i->output_offset, size / opb,
2324 i->owner);
2325
2326 if (i->_cooked_size != 0 && i->_cooked_size != i->_raw_size)
2327 {
2328 len = SECTION_NAME_MAP_LENGTH + 3;
2329 #ifdef BFD64
2330 len += 16;
2331 #else
2332 len += 8;
2333 #endif
2334 while (len > 0)
2335 {
2336 print_space ();
2337 --len;
2338 }
2339
2340 minfo (_("%W (size before relaxing)\n"), i->_raw_size);
2341 }
2342
2343 bfd_link_hash_traverse (link_info.hash, print_one_symbol, (PTR) i);
2344
2345 print_dot = i->output_section->vma + i->output_offset + size / opb;
2346 }
2347 }
2348 }
2349
2350 static void
2351 print_fill_statement (fill)
2352 lang_fill_statement_type *fill;
2353 {
2354 size_t size;
2355 unsigned char *p;
2356 fputs (" FILL mask 0x", config.map_file);
2357 for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
2358 fprintf (config.map_file, "%02x", *p);
2359 fputs ("\n", config.map_file);
2360 }
2361
2362 static void
2363 print_data_statement (data)
2364 lang_data_statement_type *data;
2365 {
2366 int i;
2367 bfd_vma addr;
2368 bfd_size_type size;
2369 const char *name;
2370 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2371 ldfile_output_machine);
2372
2373 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2374 print_space ();
2375
2376 addr = data->output_vma;
2377 if (data->output_section != NULL)
2378 addr += data->output_section->vma;
2379
2380 switch (data->type)
2381 {
2382 default:
2383 abort ();
2384 case BYTE:
2385 size = BYTE_SIZE;
2386 name = "BYTE";
2387 break;
2388 case SHORT:
2389 size = SHORT_SIZE;
2390 name = "SHORT";
2391 break;
2392 case LONG:
2393 size = LONG_SIZE;
2394 name = "LONG";
2395 break;
2396 case QUAD:
2397 size = QUAD_SIZE;
2398 name = "QUAD";
2399 break;
2400 case SQUAD:
2401 size = QUAD_SIZE;
2402 name = "SQUAD";
2403 break;
2404 }
2405
2406 minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
2407
2408 if (data->exp->type.node_class != etree_value)
2409 {
2410 print_space ();
2411 exp_print_tree (data->exp);
2412 }
2413
2414 print_nl ();
2415
2416 print_dot = addr + size / opb;
2417
2418 }
2419
2420 /* Print an address statement. These are generated by options like
2421 -Ttext. */
2422
2423 static void
2424 print_address_statement (address)
2425 lang_address_statement_type *address;
2426 {
2427 minfo (_("Address of section %s set to "), address->section_name);
2428 exp_print_tree (address->address);
2429 print_nl ();
2430 }
2431
2432 /* Print a reloc statement. */
2433
2434 static void
2435 print_reloc_statement (reloc)
2436 lang_reloc_statement_type *reloc;
2437 {
2438 int i;
2439 bfd_vma addr;
2440 bfd_size_type size;
2441 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2442 ldfile_output_machine);
2443
2444 for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
2445 print_space ();
2446
2447 addr = reloc->output_vma;
2448 if (reloc->output_section != NULL)
2449 addr += reloc->output_section->vma;
2450
2451 size = bfd_get_reloc_size (reloc->howto);
2452
2453 minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
2454
2455 if (reloc->name != NULL)
2456 minfo ("%s+", reloc->name);
2457 else
2458 minfo ("%s+", reloc->section->name);
2459
2460 exp_print_tree (reloc->addend_exp);
2461
2462 print_nl ();
2463
2464 print_dot = addr + size / opb;
2465 }
2466
2467 static void
2468 print_padding_statement (s)
2469 lang_padding_statement_type *s;
2470 {
2471 int len;
2472 bfd_vma addr;
2473 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2474 ldfile_output_machine);
2475
2476 minfo (" *fill*");
2477
2478 len = sizeof " *fill*" - 1;
2479 while (len < SECTION_NAME_MAP_LENGTH)
2480 {
2481 print_space ();
2482 ++len;
2483 }
2484
2485 addr = s->output_offset;
2486 if (s->output_section != NULL)
2487 addr += s->output_section->vma;
2488 minfo ("0x%V %W ", addr, s->size);
2489
2490 if (s->fill->size != 0)
2491 {
2492 size_t size;
2493 unsigned char *p;
2494 for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
2495 fprintf (config.map_file, "%02x", *p);
2496 }
2497
2498 print_nl ();
2499
2500 print_dot = addr + s->size / opb;
2501 }
2502
2503 static void
2504 print_wild_statement (w, os)
2505 lang_wild_statement_type *w;
2506 lang_output_section_statement_type *os;
2507 {
2508 struct wildcard_list *sec;
2509
2510 print_space ();
2511
2512 if (w->filenames_sorted)
2513 minfo ("SORT(");
2514 if (w->filename != NULL)
2515 minfo ("%s", w->filename);
2516 else
2517 minfo ("*");
2518 if (w->filenames_sorted)
2519 minfo (")");
2520
2521 minfo ("(");
2522 for (sec = w->section_list; sec; sec = sec->next)
2523 {
2524 if (sec->spec.sorted)
2525 minfo ("SORT(");
2526 if (sec->spec.exclude_name_list != NULL)
2527 {
2528 name_list *tmp;
2529 minfo ("EXCLUDE_FILE ( %s", sec->spec.exclude_name_list->name);
2530 for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
2531 minfo (", %s", tmp->name);
2532 minfo (")");
2533 }
2534 if (sec->spec.name != NULL)
2535 minfo ("%s", sec->spec.name);
2536 else
2537 minfo ("*");
2538 if (sec->spec.sorted)
2539 minfo (")");
2540 }
2541 minfo (")");
2542
2543 print_nl ();
2544
2545 print_statement_list (w->children.head, os);
2546 }
2547
2548 /* Print a group statement. */
2549
2550 static void
2551 print_group (s, os)
2552 lang_group_statement_type *s;
2553 lang_output_section_statement_type *os;
2554 {
2555 fprintf (config.map_file, "START GROUP\n");
2556 print_statement_list (s->children.head, os);
2557 fprintf (config.map_file, "END GROUP\n");
2558 }
2559
2560 /* Print the list of statements in S.
2561 This can be called for any statement type. */
2562
2563 static void
2564 print_statement_list (s, os)
2565 lang_statement_union_type *s;
2566 lang_output_section_statement_type *os;
2567 {
2568 while (s != NULL)
2569 {
2570 print_statement (s, os);
2571 s = s->header.next;
2572 }
2573 }
2574
2575 /* Print the first statement in statement list S.
2576 This can be called for any statement type. */
2577
2578 static void
2579 print_statement (s, os)
2580 lang_statement_union_type *s;
2581 lang_output_section_statement_type *os;
2582 {
2583 switch (s->header.type)
2584 {
2585 default:
2586 fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
2587 FAIL ();
2588 break;
2589 case lang_constructors_statement_enum:
2590 if (constructor_list.head != NULL)
2591 {
2592 if (constructors_sorted)
2593 minfo (" SORT (CONSTRUCTORS)\n");
2594 else
2595 minfo (" CONSTRUCTORS\n");
2596 print_statement_list (constructor_list.head, os);
2597 }
2598 break;
2599 case lang_wild_statement_enum:
2600 print_wild_statement (&s->wild_statement, os);
2601 break;
2602 case lang_address_statement_enum:
2603 print_address_statement (&s->address_statement);
2604 break;
2605 case lang_object_symbols_statement_enum:
2606 minfo (" CREATE_OBJECT_SYMBOLS\n");
2607 break;
2608 case lang_fill_statement_enum:
2609 print_fill_statement (&s->fill_statement);
2610 break;
2611 case lang_data_statement_enum:
2612 print_data_statement (&s->data_statement);
2613 break;
2614 case lang_reloc_statement_enum:
2615 print_reloc_statement (&s->reloc_statement);
2616 break;
2617 case lang_input_section_enum:
2618 print_input_section (&s->input_section);
2619 break;
2620 case lang_padding_statement_enum:
2621 print_padding_statement (&s->padding_statement);
2622 break;
2623 case lang_output_section_statement_enum:
2624 print_output_section_statement (&s->output_section_statement);
2625 break;
2626 case lang_assignment_statement_enum:
2627 print_assignment (&s->assignment_statement, os);
2628 break;
2629 case lang_target_statement_enum:
2630 fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
2631 break;
2632 case lang_output_statement_enum:
2633 minfo ("OUTPUT(%s", s->output_statement.name);
2634 if (output_target != NULL)
2635 minfo (" %s", output_target);
2636 minfo (")\n");
2637 break;
2638 case lang_input_statement_enum:
2639 print_input_statement (&s->input_statement);
2640 break;
2641 case lang_group_statement_enum:
2642 print_group (&s->group_statement, os);
2643 break;
2644 case lang_afile_asection_pair_statement_enum:
2645 FAIL ();
2646 break;
2647 }
2648 }
2649
2650 static void
2651 print_statements ()
2652 {
2653 print_statement_list (statement_list.head, abs_output_section);
2654 }
2655
2656 /* Print the first N statements in statement list S to STDERR.
2657 If N == 0, nothing is printed.
2658 If N < 0, the entire list is printed.
2659 Intended to be called from GDB. */
2660
2661 void
2662 dprint_statement (s, n)
2663 lang_statement_union_type *s;
2664 int n;
2665 {
2666 FILE *map_save = config.map_file;
2667
2668 config.map_file = stderr;
2669
2670 if (n < 0)
2671 print_statement_list (s, abs_output_section);
2672 else
2673 {
2674 while (s && --n >= 0)
2675 {
2676 print_statement (s, abs_output_section);
2677 s = s->header.next;
2678 }
2679 }
2680
2681 config.map_file = map_save;
2682 }
2683
2684 static void
2685 insert_pad (ptr, fill, alignment_needed, output_section, dot)
2686 lang_statement_union_type **ptr;
2687 fill_type *fill;
2688 unsigned int alignment_needed;
2689 asection *output_section;
2690 bfd_vma dot;
2691 {
2692 static fill_type zero_fill = { 1, { 0 } };
2693 lang_statement_union_type *pad;
2694
2695 pad = ((lang_statement_union_type *)
2696 ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
2697 if (ptr != &statement_list.head
2698 && pad->header.type == lang_padding_statement_enum
2699 && pad->padding_statement.output_section == output_section)
2700 {
2701 /* Use the existing pad statement. The above test on output
2702 section is probably redundant, but it doesn't hurt to check. */
2703 }
2704 else
2705 {
2706 /* Make a new padding statement, linked into existing chain. */
2707 pad = ((lang_statement_union_type *)
2708 stat_alloc (sizeof (lang_padding_statement_type)));
2709 pad->header.next = *ptr;
2710 *ptr = pad;
2711 pad->header.type = lang_padding_statement_enum;
2712 pad->padding_statement.output_section = output_section;
2713 if (fill == (fill_type *) 0)
2714 fill = &zero_fill;
2715 pad->padding_statement.fill = fill;
2716 }
2717 pad->padding_statement.output_offset = dot - output_section->vma;
2718 pad->padding_statement.size = alignment_needed;
2719 output_section->_raw_size += alignment_needed;
2720 }
2721
2722 /* Work out how much this section will move the dot point. */
2723
2724 static bfd_vma
2725 size_input_section (this_ptr, output_section_statement, fill, dot)
2726 lang_statement_union_type **this_ptr;
2727 lang_output_section_statement_type *output_section_statement;
2728 fill_type *fill;
2729 bfd_vma dot;
2730 {
2731 lang_input_section_type *is = &((*this_ptr)->input_section);
2732 asection *i = is->section;
2733
2734 if (is->ifile->just_syms_flag == false)
2735 {
2736 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2737 ldfile_output_machine);
2738 unsigned int alignment_needed;
2739 asection *o;
2740
2741 /* Align this section first to the input sections requirement,
2742 then to the output section's requirement. If this alignment
2743 is greater than any seen before, then record it too. Perform
2744 the alignment by inserting a magic 'padding' statement. */
2745
2746 if (output_section_statement->subsection_alignment != -1)
2747 i->alignment_power = output_section_statement->subsection_alignment;
2748
2749 o = output_section_statement->bfd_section;
2750 if (o->alignment_power < i->alignment_power)
2751 o->alignment_power = i->alignment_power;
2752
2753 alignment_needed = align_power (dot, i->alignment_power) - dot;
2754
2755 if (alignment_needed != 0)
2756 {
2757 insert_pad (this_ptr, fill, alignment_needed * opb, o, dot);
2758 dot += alignment_needed;
2759 }
2760
2761 /* Remember where in the output section this input section goes. */
2762
2763 i->output_offset = dot - o->vma;
2764
2765 /* Mark how big the output section must be to contain this now. */
2766 if (i->_cooked_size != 0)
2767 dot += i->_cooked_size / opb;
2768 else
2769 dot += i->_raw_size / opb;
2770 o->_raw_size = (dot - o->vma) * opb;
2771 }
2772 else
2773 {
2774 i->output_offset = i->vma - output_section_statement->bfd_section->vma;
2775 }
2776
2777 return dot;
2778 }
2779
2780 #define IGNORE_SECTION(bfd, s) \
2781 (((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_LOAD)) \
2782 != (SEC_ALLOC | SEC_LOAD)) \
2783 || bfd_section_size (bfd, s) == 0)
2784
2785 /* Check to see if any allocated sections overlap with other allocated
2786 sections. This can happen when the linker script specifically specifies
2787 the output section addresses of the two sections. */
2788
2789 static void
2790 lang_check_section_addresses ()
2791 {
2792 asection *s;
2793 unsigned opb = bfd_octets_per_byte (output_bfd);
2794
2795 /* Scan all sections in the output list. */
2796 for (s = output_bfd->sections; s != NULL; s = s->next)
2797 {
2798 asection *os;
2799
2800 /* Ignore sections which are not loaded or which have no contents. */
2801 if (IGNORE_SECTION (output_bfd, s))
2802 continue;
2803
2804 /* Once we reach section 's' stop our seach. This prevents two
2805 warning messages from being produced, one for 'section A overlaps
2806 section B' and one for 'section B overlaps section A'. */
2807 for (os = output_bfd->sections; os != s; os = os->next)
2808 {
2809 bfd_vma s_start;
2810 bfd_vma s_end;
2811 bfd_vma os_start;
2812 bfd_vma os_end;
2813
2814 /* Only consider loadable sections with real contents. */
2815 if (IGNORE_SECTION (output_bfd, os))
2816 continue;
2817
2818 /* We must check the sections' LMA addresses not their
2819 VMA addresses because overlay sections can have
2820 overlapping VMAs but they must have distinct LMAs. */
2821 s_start = bfd_section_lma (output_bfd, s);
2822 os_start = bfd_section_lma (output_bfd, os);
2823 s_end = s_start + bfd_section_size (output_bfd, s) / opb - 1;
2824 os_end = os_start + bfd_section_size (output_bfd, os) / opb - 1;
2825
2826 /* Look for an overlap. */
2827 if ((s_end < os_start) || (s_start > os_end))
2828 continue;
2829
2830 einfo (
2831 _("%X%P: section %s [%V -> %V] overlaps section %s [%V -> %V]\n"),
2832 s->name, s_start, s_end, os->name, os_start, os_end);
2833
2834 /* Once we have found one overlap for this section,
2835 stop looking for others. */
2836 break;
2837 }
2838 }
2839 }
2840
2841 /* Make sure the new address is within the region. We explicitly permit the
2842 current address to be at the exact end of the region when the address is
2843 non-zero, in case the region is at the end of addressable memory and the
2844 calculation wraps around. */
2845
2846 static void
2847 os_region_check (os, region, tree, base)
2848 lang_output_section_statement_type *os;
2849 struct memory_region_struct *region;
2850 etree_type *tree;
2851 bfd_vma base;
2852 {
2853 if ((region->current < region->origin
2854 || (region->current - region->origin > region->length))
2855 && ((region->current != region->origin + region->length)
2856 || base == 0))
2857 {
2858 if (tree != (etree_type *) NULL)
2859 {
2860 einfo (_("%X%P: address 0x%v of %B section %s is not within region %s\n"),
2861 region->current,
2862 os->bfd_section->owner,
2863 os->bfd_section->name,
2864 region->name);
2865 }
2866 else
2867 {
2868 einfo (_("%X%P: region %s is full (%B section %s)\n"),
2869 region->name,
2870 os->bfd_section->owner,
2871 os->bfd_section->name);
2872 }
2873 /* Reset the region pointer. */
2874 region->current = region->origin;
2875 }
2876 }
2877
2878 /* Set the sizes for all the output sections. */
2879
2880 static bfd_vma
2881 lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax)
2882 lang_statement_union_type *s;
2883 lang_output_section_statement_type *output_section_statement;
2884 lang_statement_union_type **prev;
2885 fill_type *fill;
2886 bfd_vma dot;
2887 boolean *relax;
2888 {
2889 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
2890 ldfile_output_machine);
2891
2892 /* Size up the sections from their constituent parts. */
2893 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
2894 {
2895 switch (s->header.type)
2896 {
2897 case lang_output_section_statement_enum:
2898 {
2899 bfd_vma after;
2900 lang_output_section_statement_type *os;
2901
2902 os = &s->output_section_statement;
2903 if (os->bfd_section == NULL)
2904 /* This section was never actually created. */
2905 break;
2906
2907 /* If this is a COFF shared library section, use the size and
2908 address from the input section. FIXME: This is COFF
2909 specific; it would be cleaner if there were some other way
2910 to do this, but nothing simple comes to mind. */
2911 if ((os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
2912 {
2913 asection *input;
2914
2915 if (os->children.head == NULL
2916 || os->children.head->header.next != NULL
2917 || os->children.head->header.type != lang_input_section_enum)
2918 einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
2919 os->name);
2920
2921 input = os->children.head->input_section.section;
2922 bfd_set_section_vma (os->bfd_section->owner,
2923 os->bfd_section,
2924 bfd_section_vma (input->owner, input));
2925 os->bfd_section->_raw_size = input->_raw_size;
2926 break;
2927 }
2928
2929 if (bfd_is_abs_section (os->bfd_section))
2930 {
2931 /* No matter what happens, an abs section starts at zero. */
2932 ASSERT (os->bfd_section->vma == 0);
2933 }
2934 else
2935 {
2936 if (os->addr_tree == (etree_type *) NULL)
2937 {
2938 /* No address specified for this section, get one
2939 from the region specification. */
2940 if (os->region == (lang_memory_region_type *) NULL
2941 || (((bfd_get_section_flags (output_bfd, os->bfd_section)
2942 & (SEC_ALLOC | SEC_LOAD)) != 0)
2943 && os->region->name[0] == '*'
2944 && strcmp (os->region->name, "*default*") == 0))
2945 {
2946 os->region = lang_memory_default (os->bfd_section);
2947 }
2948
2949 /* If a loadable section is using the default memory
2950 region, and some non default memory regions were
2951 defined, issue a warning. */
2952 if ((bfd_get_section_flags (output_bfd, os->bfd_section)
2953 & (SEC_ALLOC | SEC_LOAD)) != 0
2954 && (bfd_get_section_flags (output_bfd, os->bfd_section)
2955 & SEC_NEVER_LOAD) == 0
2956 && ! link_info.relocateable
2957 && strcmp (os->region->name, "*default*") == 0
2958 && lang_memory_region_list != NULL
2959 && (strcmp (lang_memory_region_list->name,
2960 "*default*") != 0
2961 || lang_memory_region_list->next != NULL))
2962 einfo (_("%P: warning: no memory region specified for section `%s'\n"),
2963 bfd_get_section_name (output_bfd,
2964 os->bfd_section));
2965
2966 dot = os->region->current;
2967
2968 if (os->section_alignment == -1)
2969 {
2970 bfd_vma olddot;
2971
2972 olddot = dot;
2973 dot = align_power (dot,
2974 os->bfd_section->alignment_power);
2975
2976 if (dot != olddot && config.warn_section_align)
2977 einfo (_("%P: warning: changing start of section %s by %u bytes\n"),
2978 os->name, (unsigned int) (dot - olddot));
2979 }
2980 }
2981 else
2982 {
2983 etree_value_type r;
2984
2985 r = exp_fold_tree (os->addr_tree,
2986 abs_output_section,
2987 lang_allocating_phase_enum,
2988 dot, &dot);
2989 if (r.valid_p == false)
2990 {
2991 einfo (_("%F%S: non constant address expression for section %s\n"),
2992 os->name);
2993 }
2994 dot = r.value + r.section->bfd_section->vma;
2995 }
2996
2997 /* The section starts here.
2998 First, align to what the section needs. */
2999
3000 if (os->section_alignment != -1)
3001 dot = align_power (dot, os->section_alignment);
3002
3003 bfd_set_section_vma (0, os->bfd_section, dot);
3004
3005 os->bfd_section->output_offset = 0;
3006 }
3007
3008 lang_size_sections_1 (os->children.head, os, &os->children.head,
3009 os->fill, dot, relax);
3010
3011 /* Put the section within the requested block size, or
3012 align at the block boundary. */
3013 after = ALIGN_N (os->bfd_section->vma
3014 + os->bfd_section->_raw_size / opb,
3015 /* The coercion here is important, see ld.h. */
3016 (bfd_vma) os->block_value);
3017
3018 if (bfd_is_abs_section (os->bfd_section))
3019 ASSERT (after == os->bfd_section->vma);
3020 else if ((os->bfd_section->flags & SEC_HAS_CONTENTS) == 0
3021 && (os->bfd_section->flags & SEC_THREAD_LOCAL))
3022 os->bfd_section->_raw_size = 0;
3023 else
3024 os->bfd_section->_raw_size =
3025 (after - os->bfd_section->vma) * opb;
3026
3027 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3028 os->processed = true;
3029
3030 if (os->update_dot_tree != 0)
3031 exp_fold_tree (os->update_dot_tree, abs_output_section,
3032 lang_allocating_phase_enum, dot, &dot);
3033
3034 /* Update dot in the region ?
3035 We only do this if the section is going to be allocated,
3036 since unallocated sections do not contribute to the region's
3037 overall size in memory.
3038
3039 If the SEC_NEVER_LOAD bit is not set, it will affect the
3040 addresses of sections after it. We have to update
3041 dot. */
3042 if (os->region != (lang_memory_region_type *) NULL
3043 && ((bfd_get_section_flags (output_bfd, os->bfd_section)
3044 & SEC_NEVER_LOAD) == 0
3045 || (bfd_get_section_flags (output_bfd, os->bfd_section)
3046 & (SEC_ALLOC | SEC_LOAD))))
3047 {
3048 os->region->current = dot;
3049
3050 /* Make sure the new address is within the region. */
3051 os_region_check (os, os->region, os->addr_tree,
3052 os->bfd_section->vma);
3053
3054 /* If there's no load address specified, use the run
3055 region as the load region. */
3056 if (os->lma_region == NULL && os->load_base == NULL)
3057 os->lma_region = os->region;
3058
3059 if (os->lma_region != NULL && os->lma_region != os->region)
3060 {
3061 /* Set load_base, which will be handled later. */
3062 os->load_base = exp_intop (os->lma_region->current);
3063 os->lma_region->current +=
3064 os->bfd_section->_raw_size / opb;
3065 os_region_check (os, os->lma_region, NULL,
3066 os->bfd_section->lma);
3067 }
3068 }
3069 }
3070 break;
3071
3072 case lang_constructors_statement_enum:
3073 dot = lang_size_sections_1 (constructor_list.head,
3074 output_section_statement,
3075 &s->wild_statement.children.head,
3076 fill, dot, relax);
3077 break;
3078
3079 case lang_data_statement_enum:
3080 {
3081 unsigned int size = 0;
3082
3083 s->data_statement.output_vma =
3084 dot - output_section_statement->bfd_section->vma;
3085 s->data_statement.output_section =
3086 output_section_statement->bfd_section;
3087
3088 switch (s->data_statement.type)
3089 {
3090 default:
3091 abort ();
3092 case QUAD:
3093 case SQUAD:
3094 size = QUAD_SIZE;
3095 break;
3096 case LONG:
3097 size = LONG_SIZE;
3098 break;
3099 case SHORT:
3100 size = SHORT_SIZE;
3101 break;
3102 case BYTE:
3103 size = BYTE_SIZE;
3104 break;
3105 }
3106 if (size < opb)
3107 size = opb;
3108 dot += size / opb;
3109 output_section_statement->bfd_section->_raw_size += size;
3110 /* The output section gets contents, and then we inspect for
3111 any flags set in the input script which override any ALLOC. */
3112 output_section_statement->bfd_section->flags |= SEC_HAS_CONTENTS;
3113 if (!(output_section_statement->flags & SEC_NEVER_LOAD))
3114 {
3115 output_section_statement->bfd_section->flags |=
3116 SEC_ALLOC | SEC_LOAD;
3117 }
3118 }
3119 break;
3120
3121 case lang_reloc_statement_enum:
3122 {
3123 int size;
3124
3125 s->reloc_statement.output_vma =
3126 dot - output_section_statement->bfd_section->vma;
3127 s->reloc_statement.output_section =
3128 output_section_statement->bfd_section;
3129 size = bfd_get_reloc_size (s->reloc_statement.howto);
3130 dot += size / opb;
3131 output_section_statement->bfd_section->_raw_size += size;
3132 }
3133 break;
3134
3135 case lang_wild_statement_enum:
3136
3137 dot = lang_size_sections_1 (s->wild_statement.children.head,
3138 output_section_statement,
3139 &s->wild_statement.children.head,
3140 fill, dot, relax);
3141
3142 break;
3143
3144 case lang_object_symbols_statement_enum:
3145 link_info.create_object_symbols_section =
3146 output_section_statement->bfd_section;
3147 break;
3148 case lang_output_statement_enum:
3149 case lang_target_statement_enum:
3150 break;
3151 case lang_input_section_enum:
3152 {
3153 asection *i;
3154
3155 i = (*prev)->input_section.section;
3156 if (! relax)
3157 {
3158 if (i->_cooked_size == 0)
3159 i->_cooked_size = i->_raw_size;
3160 }
3161 else
3162 {
3163 boolean again;
3164
3165 if (! bfd_relax_section (i->owner, i, &link_info, &again))
3166 einfo (_("%P%F: can't relax section: %E\n"));
3167 if (again)
3168 *relax = true;
3169 }
3170 dot = size_input_section (prev, output_section_statement,
3171 output_section_statement->fill, dot);
3172 }
3173 break;
3174 case lang_input_statement_enum:
3175 break;
3176 case lang_fill_statement_enum:
3177 s->fill_statement.output_section =
3178 output_section_statement->bfd_section;
3179
3180 fill = s->fill_statement.fill;
3181 break;
3182 case lang_assignment_statement_enum:
3183 {
3184 bfd_vma newdot = dot;
3185
3186 exp_fold_tree (s->assignment_statement.exp,
3187 output_section_statement,
3188 lang_allocating_phase_enum,
3189 dot,
3190 &newdot);
3191
3192 if (newdot != dot)
3193 {
3194 if (output_section_statement == abs_output_section)
3195 {
3196 /* If we don't have an output section, then just adjust
3197 the default memory address. */
3198 lang_memory_region_lookup ("*default*")->current = newdot;
3199 }
3200 else
3201 {
3202 /* Insert a pad after this statement. We can't
3203 put the pad before when relaxing, in case the
3204 assignment references dot. */
3205 insert_pad (&s->header.next, fill, (newdot - dot) * opb,
3206 output_section_statement->bfd_section, dot);
3207
3208 /* Don't neuter the pad below when relaxing. */
3209 s = s->header.next;
3210 }
3211
3212 dot = newdot;
3213 }
3214 }
3215 break;
3216
3217 case lang_padding_statement_enum:
3218 /* If this is the first time lang_size_sections is called,
3219 we won't have any padding statements. If this is the
3220 second or later passes when relaxing, we should allow
3221 padding to shrink. If padding is needed on this pass, it
3222 will be added back in. */
3223 s->padding_statement.size = 0;
3224
3225 /* Make sure output_offset is valid. If relaxation shrinks
3226 the section and this pad isn't needed, it's possible to
3227 have output_offset larger than the final size of the
3228 section. bfd_set_section_contents will complain even for
3229 a pad size of zero. */
3230 s->padding_statement.output_offset
3231 = dot - output_section_statement->bfd_section->vma;
3232 break;
3233
3234 case lang_group_statement_enum:
3235 dot = lang_size_sections_1 (s->group_statement.children.head,
3236 output_section_statement,
3237 &s->group_statement.children.head,
3238 fill, dot, relax);
3239 break;
3240
3241 default:
3242 FAIL ();
3243 break;
3244
3245 /* We can only get here when relaxing is turned on. */
3246 case lang_address_statement_enum:
3247 break;
3248 }
3249 prev = &s->header.next;
3250 }
3251 return dot;
3252 }
3253
3254 bfd_vma
3255 lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
3256 lang_statement_union_type *s;
3257 lang_output_section_statement_type *output_section_statement;
3258 lang_statement_union_type **prev;
3259 fill_type *fill;
3260 bfd_vma dot;
3261 boolean *relax;
3262 {
3263 bfd_vma result;
3264
3265 exp_data_seg.phase = exp_dataseg_none;
3266 result = lang_size_sections_1 (s, output_section_statement, prev, fill,
3267 dot, relax);
3268 if (exp_data_seg.phase == exp_dataseg_end_seen)
3269 {
3270 /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
3271 a page could be saved in the data segment. */
3272 bfd_vma first, last;
3273
3274 first = -exp_data_seg.base & (exp_data_seg.pagesize - 1);
3275 last = exp_data_seg.end & (exp_data_seg.pagesize - 1);
3276 if (first && last
3277 && ((exp_data_seg.base & ~(exp_data_seg.pagesize - 1))
3278 != (exp_data_seg.end & ~(exp_data_seg.pagesize - 1)))
3279 && first + last <= exp_data_seg.pagesize)
3280 {
3281 exp_data_seg.phase = exp_dataseg_adjust;
3282 result = lang_size_sections_1 (s, output_section_statement, prev,
3283 fill, dot, relax);
3284 }
3285 }
3286
3287 return result;
3288 }
3289
3290 bfd_vma
3291 lang_do_assignments (s, output_section_statement, fill, dot)
3292 lang_statement_union_type *s;
3293 lang_output_section_statement_type *output_section_statement;
3294 fill_type *fill;
3295 bfd_vma dot;
3296 {
3297 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3298 ldfile_output_machine);
3299
3300 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3301 {
3302 switch (s->header.type)
3303 {
3304 case lang_constructors_statement_enum:
3305 dot = lang_do_assignments (constructor_list.head,
3306 output_section_statement,
3307 fill,
3308 dot);
3309 break;
3310
3311 case lang_output_section_statement_enum:
3312 {
3313 lang_output_section_statement_type *os;
3314
3315 os = &(s->output_section_statement);
3316 if (os->bfd_section != NULL)
3317 {
3318 dot = os->bfd_section->vma;
3319 (void) lang_do_assignments (os->children.head, os,
3320 os->fill, dot);
3321 dot = os->bfd_section->vma + os->bfd_section->_raw_size / opb;
3322
3323 }
3324 if (os->load_base)
3325 {
3326 /* If nothing has been placed into the output section then
3327 it won't have a bfd_section. */
3328 if (os->bfd_section)
3329 {
3330 os->bfd_section->lma
3331 = exp_get_abs_int (os->load_base, 0, "load base",
3332 lang_final_phase_enum);
3333 }
3334 }
3335 }
3336 break;
3337 case lang_wild_statement_enum:
3338
3339 dot = lang_do_assignments (s->wild_statement.children.head,
3340 output_section_statement,
3341 fill, dot);
3342
3343 break;
3344
3345 case lang_object_symbols_statement_enum:
3346 case lang_output_statement_enum:
3347 case lang_target_statement_enum:
3348 #if 0
3349 case lang_common_statement_enum:
3350 #endif
3351 break;
3352 case lang_data_statement_enum:
3353 {
3354 etree_value_type value;
3355
3356 value = exp_fold_tree (s->data_statement.exp,
3357 abs_output_section,
3358 lang_final_phase_enum, dot, &dot);
3359 s->data_statement.value = value.value;
3360 if (value.valid_p == false)
3361 einfo (_("%F%P: invalid data statement\n"));
3362 }
3363 {
3364 unsigned int size;
3365 switch (s->data_statement.type)
3366 {
3367 default:
3368 abort ();
3369 case QUAD:
3370 case SQUAD:
3371 size = QUAD_SIZE;
3372 break;
3373 case LONG:
3374 size = LONG_SIZE;
3375 break;
3376 case SHORT:
3377 size = SHORT_SIZE;
3378 break;
3379 case BYTE:
3380 size = BYTE_SIZE;
3381 break;
3382 }
3383 if (size < opb)
3384 size = opb;
3385 dot += size / opb;
3386 }
3387 break;
3388
3389 case lang_reloc_statement_enum:
3390 {
3391 etree_value_type value;
3392
3393 value = exp_fold_tree (s->reloc_statement.addend_exp,
3394 abs_output_section,
3395 lang_final_phase_enum, dot, &dot);
3396 s->reloc_statement.addend_value = value.value;
3397 if (value.valid_p == false)
3398 einfo (_("%F%P: invalid reloc statement\n"));
3399 }
3400 dot += bfd_get_reloc_size (s->reloc_statement.howto) / opb;
3401 break;
3402
3403 case lang_input_section_enum:
3404 {
3405 asection *in = s->input_section.section;
3406
3407 if (in->_cooked_size != 0)
3408 dot += in->_cooked_size / opb;
3409 else
3410 dot += in->_raw_size / opb;
3411 }
3412 break;
3413
3414 case lang_input_statement_enum:
3415 break;
3416 case lang_fill_statement_enum:
3417 fill = s->fill_statement.fill;
3418 break;
3419 case lang_assignment_statement_enum:
3420 {
3421 exp_fold_tree (s->assignment_statement.exp,
3422 output_section_statement,
3423 lang_final_phase_enum,
3424 dot,
3425 &dot);
3426 }
3427
3428 break;
3429 case lang_padding_statement_enum:
3430 dot += s->padding_statement.size / opb;
3431 break;
3432
3433 case lang_group_statement_enum:
3434 dot = lang_do_assignments (s->group_statement.children.head,
3435 output_section_statement,
3436 fill, dot);
3437
3438 break;
3439
3440 default:
3441 FAIL ();
3442 break;
3443 case lang_address_statement_enum:
3444 break;
3445 }
3446
3447 }
3448 return dot;
3449 }
3450
3451 /* Fix any .startof. or .sizeof. symbols. When the assemblers see the
3452 operator .startof. (section_name), it produces an undefined symbol
3453 .startof.section_name. Similarly, when it sees
3454 .sizeof. (section_name), it produces an undefined symbol
3455 .sizeof.section_name. For all the output sections, we look for
3456 such symbols, and set them to the correct value. */
3457
3458 static void
3459 lang_set_startof ()
3460 {
3461 asection *s;
3462
3463 if (link_info.relocateable)
3464 return;
3465
3466 for (s = output_bfd->sections; s != NULL; s = s->next)
3467 {
3468 const char *secname;
3469 char *buf;
3470 struct bfd_link_hash_entry *h;
3471
3472 secname = bfd_get_section_name (output_bfd, s);
3473 buf = xmalloc (10 + strlen (secname));
3474
3475 sprintf (buf, ".startof.%s", secname);
3476 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3477 if (h != NULL && h->type == bfd_link_hash_undefined)
3478 {
3479 h->type = bfd_link_hash_defined;
3480 h->u.def.value = bfd_get_section_vma (output_bfd, s);
3481 h->u.def.section = bfd_abs_section_ptr;
3482 }
3483
3484 sprintf (buf, ".sizeof.%s", secname);
3485 h = bfd_link_hash_lookup (link_info.hash, buf, false, false, true);
3486 if (h != NULL && h->type == bfd_link_hash_undefined)
3487 {
3488 unsigned opb;
3489
3490 opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3491 ldfile_output_machine);
3492 h->type = bfd_link_hash_defined;
3493 if (s->_cooked_size != 0)
3494 h->u.def.value = s->_cooked_size / opb;
3495 else
3496 h->u.def.value = s->_raw_size / opb;
3497 h->u.def.section = bfd_abs_section_ptr;
3498 }
3499
3500 free (buf);
3501 }
3502 }
3503
3504 static void
3505 lang_finish ()
3506 {
3507 struct bfd_link_hash_entry *h;
3508 boolean warn;
3509
3510 if (link_info.relocateable || link_info.shared)
3511 warn = false;
3512 else
3513 warn = true;
3514
3515 if (entry_symbol == (char *) NULL)
3516 {
3517 /* No entry has been specified. Look for start, but don't warn
3518 if we don't find it. */
3519 entry_symbol = "start";
3520 warn = false;
3521 }
3522
3523 h = bfd_link_hash_lookup (link_info.hash, entry_symbol, false, false, true);
3524 if (h != (struct bfd_link_hash_entry *) NULL
3525 && (h->type == bfd_link_hash_defined
3526 || h->type == bfd_link_hash_defweak)
3527 && h->u.def.section->output_section != NULL)
3528 {
3529 bfd_vma val;
3530
3531 val = (h->u.def.value
3532 + bfd_get_section_vma (output_bfd,
3533 h->u.def.section->output_section)
3534 + h->u.def.section->output_offset);
3535 if (! bfd_set_start_address (output_bfd, val))
3536 einfo (_("%P%F:%s: can't set start address\n"), entry_symbol);
3537 }
3538 else
3539 {
3540 bfd_vma val;
3541 const char *send;
3542
3543 /* We couldn't find the entry symbol. Try parsing it as a
3544 number. */
3545 val = bfd_scan_vma (entry_symbol, &send, 0);
3546 if (*send == '\0')
3547 {
3548 if (! bfd_set_start_address (output_bfd, val))
3549 einfo (_("%P%F: can't set start address\n"));
3550 }
3551 else
3552 {
3553 asection *ts;
3554
3555 /* Can't find the entry symbol, and it's not a number. Use
3556 the first address in the text section. */
3557 ts = bfd_get_section_by_name (output_bfd, entry_section);
3558 if (ts != (asection *) NULL)
3559 {
3560 if (warn)
3561 einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
3562 entry_symbol, bfd_get_section_vma (output_bfd, ts));
3563 if (! bfd_set_start_address (output_bfd,
3564 bfd_get_section_vma (output_bfd,
3565 ts)))
3566 einfo (_("%P%F: can't set start address\n"));
3567 }
3568 else
3569 {
3570 if (warn)
3571 einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
3572 entry_symbol);
3573 }
3574 }
3575 }
3576 }
3577
3578 /* This is a small function used when we want to ignore errors from
3579 BFD. */
3580
3581 static void
3582 #ifdef ANSI_PROTOTYPES
3583 ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
3584 #else
3585 ignore_bfd_errors (s)
3586 const char *s ATTRIBUTE_UNUSED;
3587 #endif
3588 {
3589 /* Don't do anything. */
3590 }
3591
3592 /* Check that the architecture of all the input files is compatible
3593 with the output file. Also call the backend to let it do any
3594 other checking that is needed. */
3595
3596 static void
3597 lang_check ()
3598 {
3599 lang_statement_union_type *file;
3600 bfd *input_bfd;
3601 const bfd_arch_info_type *compatible;
3602
3603 for (file = file_chain.head;
3604 file != (lang_statement_union_type *) NULL;
3605 file = file->input_statement.next)
3606 {
3607 input_bfd = file->input_statement.the_bfd;
3608 compatible = bfd_arch_get_compatible (input_bfd, output_bfd);
3609
3610 /* In general it is not possible to perform a relocatable
3611 link between differing object formats when the input
3612 file has relocations, because the relocations in the
3613 input format may not have equivalent representations in
3614 the output format (and besides BFD does not translate
3615 relocs for other link purposes than a final link). */
3616 if ((link_info.relocateable || link_info.emitrelocations)
3617 && (compatible == NULL
3618 || bfd_get_flavour (input_bfd) != bfd_get_flavour (output_bfd))
3619 && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
3620 {
3621 einfo (_("%P%F: Relocatable linking with relocations from format %s (%B) to format %s (%B) is not supported\n"),
3622 bfd_get_target (input_bfd), input_bfd,
3623 bfd_get_target (output_bfd), output_bfd);
3624 /* einfo with %F exits. */
3625 }
3626
3627 if (compatible == NULL)
3628 {
3629 if (command_line.warn_mismatch)
3630 einfo (_("%P: warning: %s architecture of input file `%B' is incompatible with %s output\n"),
3631 bfd_printable_name (input_bfd), input_bfd,
3632 bfd_printable_name (output_bfd));
3633 }
3634 else if (bfd_count_sections (input_bfd))
3635 {
3636 /* If the input bfd has no contents, it shouldn't set the
3637 private data of the output bfd. */
3638
3639 bfd_error_handler_type pfn = NULL;
3640
3641 /* If we aren't supposed to warn about mismatched input
3642 files, temporarily set the BFD error handler to a
3643 function which will do nothing. We still want to call
3644 bfd_merge_private_bfd_data, since it may set up
3645 information which is needed in the output file. */
3646 if (! command_line.warn_mismatch)
3647 pfn = bfd_set_error_handler (ignore_bfd_errors);
3648 if (! bfd_merge_private_bfd_data (input_bfd, output_bfd))
3649 {
3650 if (command_line.warn_mismatch)
3651 einfo (_("%E%X: failed to merge target specific data of file %B\n"),
3652 input_bfd);
3653 }
3654 if (! command_line.warn_mismatch)
3655 bfd_set_error_handler (pfn);
3656 }
3657 }
3658 }
3659
3660 /* Look through all the global common symbols and attach them to the
3661 correct section. The -sort-common command line switch may be used
3662 to roughly sort the entries by size. */
3663
3664 static void
3665 lang_common ()
3666 {
3667 if (command_line.inhibit_common_definition)
3668 return;
3669 if (link_info.relocateable
3670 && ! command_line.force_common_definition)
3671 return;
3672
3673 if (! config.sort_common)
3674 bfd_link_hash_traverse (link_info.hash, lang_one_common, (PTR) NULL);
3675 else
3676 {
3677 int power;
3678
3679 for (power = 4; power >= 0; power--)
3680 bfd_link_hash_traverse (link_info.hash, lang_one_common,
3681 (PTR) &power);
3682 }
3683 }
3684
3685 /* Place one common symbol in the correct section. */
3686
3687 static boolean
3688 lang_one_common (h, info)
3689 struct bfd_link_hash_entry *h;
3690 PTR info;
3691 {
3692 unsigned int power_of_two;
3693 bfd_vma size;
3694 asection *section;
3695 unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3696 ldfile_output_machine);
3697
3698 if (h->type != bfd_link_hash_common)
3699 return true;
3700
3701 size = h->u.c.size;
3702 power_of_two = h->u.c.p->alignment_power;
3703
3704 if (config.sort_common
3705 && power_of_two < (unsigned int) *(int *) info)
3706 return true;
3707
3708 section = h->u.c.p->section;
3709
3710 /* Increase the size of the section. */
3711 section->_cooked_size = ALIGN_N ((section->_cooked_size + opb - 1) / opb,
3712 (bfd_size_type) (1 << power_of_two)) * opb;
3713
3714 /* Adjust the alignment if necessary. */
3715 if (power_of_two > section->alignment_power)
3716 section->alignment_power = power_of_two;
3717
3718 /* Change the symbol from common to defined. */
3719 h->type = bfd_link_hash_defined;
3720 h->u.def.section = section;
3721 h->u.def.value = section->_cooked_size;
3722
3723 /* Increase the size of the section. */
3724 section->_cooked_size += size;
3725
3726 /* Make sure the section is allocated in memory, and make sure that
3727 it is no longer a common section. */
3728 section->flags |= SEC_ALLOC;
3729 section->flags &= ~SEC_IS_COMMON;
3730
3731 if (config.map_file != NULL)
3732 {
3733 static boolean header_printed;
3734 int len;
3735 char *name;
3736 char buf[50];
3737
3738 if (! header_printed)
3739 {
3740 minfo (_("\nAllocating common symbols\n"));
3741 minfo (_("Common symbol size file\n\n"));
3742 header_printed = true;
3743 }
3744
3745 name = demangle (h->root.string);
3746 minfo ("%s", name);
3747 len = strlen (name);
3748 free (name);
3749
3750 if (len >= 19)
3751 {
3752 print_nl ();
3753 len = 0;
3754 }
3755 while (len < 20)
3756 {
3757 print_space ();
3758 ++len;
3759 }
3760
3761 minfo ("0x");
3762 if (size <= 0xffffffff)
3763 sprintf (buf, "%lx", (unsigned long) size);
3764 else
3765 sprintf_vma (buf, size);
3766 minfo ("%s", buf);
3767 len = strlen (buf);
3768
3769 while (len < 16)
3770 {
3771 print_space ();
3772 ++len;
3773 }
3774
3775 minfo ("%B\n", section->owner);
3776 }
3777
3778 return true;
3779 }
3780
3781 /* Run through the input files and ensure that every input section has
3782 somewhere to go. If one is found without a destination then create
3783 an input request and place it into the statement tree. */
3784
3785 static void
3786 lang_place_orphans ()
3787 {
3788 LANG_FOR_EACH_INPUT_STATEMENT (file)
3789 {
3790 asection *s;
3791
3792 for (s = file->the_bfd->sections;
3793 s != (asection *) NULL;
3794 s = s->next)
3795 {
3796 if (s->output_section == (asection *) NULL)
3797 {
3798 /* This section of the file is not attatched, root
3799 around for a sensible place for it to go. */
3800
3801 if (file->just_syms_flag)
3802 {
3803 abort ();
3804 }
3805 else if (strcmp (s->name, "COMMON") == 0)
3806 {
3807 /* This is a lonely common section which must have
3808 come from an archive. We attach to the section
3809 with the wildcard. */
3810 if (! link_info.relocateable
3811 || command_line.force_common_definition)
3812 {
3813 if (default_common_section == NULL)
3814 {
3815 #if 0
3816 /* This message happens when using the
3817 svr3.ifile linker script, so I have
3818 disabled it. */
3819 info_msg (_("%P: no [COMMON] command, defaulting to .bss\n"));
3820 #endif
3821 default_common_section =
3822 lang_output_section_statement_lookup (".bss");
3823
3824 }
3825 lang_add_section (&default_common_section->children, s,
3826 default_common_section, file);
3827 }
3828 }
3829 else if (ldemul_place_orphan (file, s))
3830 ;
3831 else
3832 {
3833 lang_output_section_statement_type *os;
3834
3835 os = lang_output_section_statement_lookup (s->name);
3836 lang_add_section (&os->children, s, os, file);
3837 }
3838 }
3839 }
3840 }
3841 }
3842
3843 void
3844 lang_set_flags (ptr, flags, invert)
3845 lang_memory_region_type *ptr;
3846 const char *flags;
3847 int invert;
3848 {
3849 flagword *ptr_flags;
3850
3851 ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
3852 while (*flags)
3853 {
3854 switch (*flags)
3855 {
3856 case 'A': case 'a':
3857 *ptr_flags |= SEC_ALLOC;
3858 break;
3859
3860 case 'R': case 'r':
3861 *ptr_flags |= SEC_READONLY;
3862 break;
3863
3864 case 'W': case 'w':
3865 *ptr_flags |= SEC_DATA;
3866 break;
3867
3868 case 'X': case 'x':
3869 *ptr_flags |= SEC_CODE;
3870 break;
3871
3872 case 'L': case 'l':
3873 case 'I': case 'i':
3874 *ptr_flags |= SEC_LOAD;
3875 break;
3876
3877 default:
3878 einfo (_("%P%F: invalid syntax in flags\n"));
3879 break;
3880 }
3881 flags++;
3882 }
3883 }
3884
3885 /* Call a function on each input file. This function will be called
3886 on an archive, but not on the elements. */
3887
3888 void
3889 lang_for_each_input_file (func)
3890 void (*func) PARAMS ((lang_input_statement_type *));
3891 {
3892 lang_input_statement_type *f;
3893
3894 for (f = (lang_input_statement_type *) input_file_chain.head;
3895 f != NULL;
3896 f = (lang_input_statement_type *) f->next_real_file)
3897 func (f);
3898 }
3899
3900 /* Call a function on each file. The function will be called on all
3901 the elements of an archive which are included in the link, but will
3902 not be called on the archive file itself. */
3903
3904 void
3905 lang_for_each_file (func)
3906 void (*func) PARAMS ((lang_input_statement_type *));
3907 {
3908 LANG_FOR_EACH_INPUT_STATEMENT (f)
3909 {
3910 func (f);
3911 }
3912 }
3913
3914 #if 0
3915
3916 /* Not used. */
3917
3918 void
3919 lang_for_each_input_section (func)
3920 void (*func) PARAMS ((bfd *ab, asection *as));
3921 {
3922 LANG_FOR_EACH_INPUT_STATEMENT (f)
3923 {
3924 asection *s;
3925
3926 for (s = f->the_bfd->sections;
3927 s != (asection *) NULL;
3928 s = s->next)
3929 {
3930 func (f->the_bfd, s);
3931 }
3932 }
3933 }
3934
3935 #endif
3936
3937 void
3938 ldlang_add_file (entry)
3939 lang_input_statement_type *entry;
3940 {
3941 bfd **pp;
3942
3943 lang_statement_append (&file_chain,
3944 (lang_statement_union_type *) entry,
3945 &entry->next);
3946
3947 /* The BFD linker needs to have a list of all input BFDs involved in
3948 a link. */
3949 ASSERT (entry->the_bfd->link_next == (bfd *) NULL);
3950 ASSERT (entry->the_bfd != output_bfd);
3951 for (pp = &link_info.input_bfds;
3952 *pp != (bfd *) NULL;
3953 pp = &(*pp)->link_next)
3954 ;
3955 *pp = entry->the_bfd;
3956 entry->the_bfd->usrdata = (PTR) entry;
3957 bfd_set_gp_size (entry->the_bfd, g_switch_value);
3958
3959 /* Look through the sections and check for any which should not be
3960 included in the link. We need to do this now, so that we can
3961 notice when the backend linker tries to report multiple
3962 definition errors for symbols which are in sections we aren't
3963 going to link. FIXME: It might be better to entirely ignore
3964 symbols which are defined in sections which are going to be
3965 discarded. This would require modifying the backend linker for
3966 each backend which might set the SEC_LINK_ONCE flag. If we do
3967 this, we should probably handle SEC_EXCLUDE in the same way. */
3968
3969 bfd_map_over_sections (entry->the_bfd, section_already_linked, (PTR) entry);
3970 }
3971
3972 void
3973 lang_add_output (name, from_script)
3974 const char *name;
3975 int from_script;
3976 {
3977 /* Make -o on command line override OUTPUT in script. */
3978 if (had_output_filename == false || !from_script)
3979 {
3980 output_filename = name;
3981 had_output_filename = true;
3982 }
3983 }
3984
3985 static lang_output_section_statement_type *current_section;
3986
3987 static int
3988 topower (x)
3989 int x;
3990 {
3991 unsigned int i = 1;
3992 int l;
3993
3994 if (x < 0)
3995 return -1;
3996
3997 for (l = 0; l < 32; l++)
3998 {
3999 if (i >= (unsigned int) x)
4000 return l;
4001 i <<= 1;
4002 }
4003
4004 return 0;
4005 }
4006
4007 lang_output_section_statement_type *
4008 lang_enter_output_section_statement (output_section_statement_name,
4009 address_exp, sectype, block_value,
4010 align, subalign, ebase)
4011 const char *output_section_statement_name;
4012 etree_type *address_exp;
4013 enum section_type sectype;
4014 bfd_vma block_value;
4015 etree_type *align;
4016 etree_type *subalign;
4017 etree_type *ebase;
4018 {
4019 lang_output_section_statement_type *os;
4020
4021 current_section =
4022 os =
4023 lang_output_section_statement_lookup (output_section_statement_name);
4024
4025 /* Add this statement to tree. */
4026 #if 0
4027 add_statement (lang_output_section_statement_enum,
4028 output_section_statement);
4029 #endif
4030 /* Make next things chain into subchain of this. */
4031
4032 if (os->addr_tree == (etree_type *) NULL)
4033 {
4034 os->addr_tree = address_exp;
4035 }
4036 os->sectype = sectype;
4037 if (sectype != noload_section)
4038 os->flags = SEC_NO_FLAGS;
4039 else
4040 os->flags = SEC_NEVER_LOAD;
4041 os->block_value = block_value ? block_value : 1;
4042 stat_ptr = &os->children;
4043
4044 os->subsection_alignment =
4045 topower (exp_get_value_int (subalign, -1, "subsection alignment", 0));
4046 os->section_alignment =
4047 topower (exp_get_value_int (align, -1, "section alignment", 0));
4048
4049 os->load_base = ebase;
4050 return os;
4051 }
4052
4053 void
4054 lang_final ()
4055 {
4056 lang_output_statement_type *new =
4057 new_stat (lang_output_statement, stat_ptr);
4058
4059 new->name = output_filename;
4060 }
4061
4062 /* Reset the current counters in the regions. */
4063
4064 void
4065 lang_reset_memory_regions ()
4066 {
4067 lang_memory_region_type *p = lang_memory_region_list;
4068 asection *o;
4069
4070 for (p = lang_memory_region_list;
4071 p != (lang_memory_region_type *) NULL;
4072 p = p->next)
4073 {
4074 p->old_length = (bfd_size_type) (p->current - p->origin);
4075 p->current = p->origin;
4076 }
4077
4078 for (o = output_bfd->sections; o != NULL; o = o->next)
4079 o->_raw_size = 0;
4080 }
4081
4082 /* If the wild pattern was marked KEEP, the member sections
4083 should be as well. */
4084
4085 static void
4086 gc_section_callback (ptr, sec, section, file, data)
4087 lang_wild_statement_type *ptr;
4088 struct wildcard_list *sec ATTRIBUTE_UNUSED;
4089 asection *section;
4090 lang_input_statement_type *file ATTRIBUTE_UNUSED;
4091 PTR data ATTRIBUTE_UNUSED;
4092 {
4093 if (ptr->keep_sections)
4094 section->flags |= SEC_KEEP;
4095 }
4096
4097 /* Handle a wild statement, marking it against GC. */
4098
4099 static void
4100 lang_gc_wild (s)
4101 lang_wild_statement_type *s;
4102 {
4103 walk_wild (s, gc_section_callback, NULL);
4104 }
4105
4106 /* Iterate over sections marking them against GC. */
4107
4108 static void
4109 lang_gc_sections_1 (s)
4110 lang_statement_union_type *s;
4111 {
4112 for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
4113 {
4114 switch (s->header.type)
4115 {
4116 case lang_wild_statement_enum:
4117 lang_gc_wild (&s->wild_statement);
4118 break;
4119 case lang_constructors_statement_enum:
4120 lang_gc_sections_1 (constructor_list.head);
4121 break;
4122 case lang_output_section_statement_enum:
4123 lang_gc_sections_1 (s->output_section_statement.children.head);
4124 break;
4125 case lang_group_statement_enum:
4126 lang_gc_sections_1 (s->group_statement.children.head);
4127 break;
4128 default:
4129 break;
4130 }
4131 }
4132 }
4133
4134 static void
4135 lang_gc_sections ()
4136 {
4137 struct bfd_link_hash_entry *h;
4138 ldlang_undef_chain_list_type *ulist, fake_list_start;
4139
4140 /* Keep all sections so marked in the link script. */
4141
4142 lang_gc_sections_1 (statement_list.head);
4143
4144 /* Keep all sections containing symbols undefined on the command-line.
4145 Handle the entry symbol at the same time. */
4146
4147 if (entry_symbol != NULL)
4148 {
4149 fake_list_start.next = ldlang_undef_chain_list_head;
4150 fake_list_start.name = (char *) entry_symbol;
4151 ulist = &fake_list_start;
4152 }
4153 else
4154 ulist = ldlang_undef_chain_list_head;
4155
4156 for (; ulist; ulist = ulist->next)
4157 {
4158 h = bfd_link_hash_lookup (link_info.hash, ulist->name,
4159 false, false, false);
4160
4161 if (h != (struct bfd_link_hash_entry *) NULL
4162 && (h->type == bfd_link_hash_defined
4163 || h->type == bfd_link_hash_defweak)
4164 && ! bfd_is_abs_section (h->u.def.section))
4165 {
4166 h->u.def.section->flags |= SEC_KEEP;
4167 }
4168 }
4169
4170 bfd_gc_sections (output_bfd, &link_info);
4171 }
4172
4173 void
4174 lang_process ()
4175 {
4176 lang_reasonable_defaults ();
4177 current_target = default_target;
4178
4179 /* Open the output file. */
4180 lang_for_each_statement (ldlang_open_output);
4181
4182 ldemul_create_output_section_statements ();
4183
4184 /* Add to the hash table all undefineds on the command line. */
4185 lang_place_undefineds ();
4186
4187 already_linked_table_init ();
4188
4189 /* Create a bfd for each input file. */
4190 current_target = default_target;
4191 open_input_bfds (statement_list.head, false);
4192
4193 ldemul_after_open ();
4194
4195 already_linked_table_free ();
4196
4197 /* Make sure that we're not mixing architectures. We call this
4198 after all the input files have been opened, but before we do any
4199 other processing, so that any operations merge_private_bfd_data
4200 does on the output file will be known during the rest of the
4201 link. */
4202 lang_check ();
4203
4204 /* Handle .exports instead of a version script if we're told to do so. */
4205 if (command_line.version_exports_section)
4206 lang_do_version_exports_section ();
4207
4208 /* Build all sets based on the information gathered from the input
4209 files. */
4210 ldctor_build_sets ();
4211
4212 /* Remove unreferenced sections if asked to. */
4213 if (command_line.gc_sections)
4214 lang_gc_sections ();
4215
4216 /* If there were any SEC_MERGE sections, finish their merging, so that
4217 section sizes can be computed. This has to be done after GC of sections,
4218 so that GCed sections are not merged, but before assigning output
4219 sections, since removing whole input sections is hard then. */
4220 bfd_merge_sections (output_bfd, &link_info);
4221
4222 /* Size up the common data. */
4223 lang_common ();
4224
4225 /* Run through the contours of the script and attach input sections
4226 to the correct output sections. */
4227 map_input_to_output_sections (statement_list.head, (char *) NULL,
4228 (lang_output_section_statement_type *) NULL);
4229
4230 /* Find any sections not attached explicitly and handle them. */
4231 lang_place_orphans ();
4232
4233 if (! link_info.relocateable)
4234 {
4235 /* Look for a text section and set the readonly attribute in it. */
4236 asection *found = bfd_get_section_by_name (output_bfd, ".text");
4237
4238 if (found != (asection *) NULL)
4239 {
4240 if (config.text_read_only)
4241 found->flags |= SEC_READONLY;
4242 else
4243 found->flags &= ~SEC_READONLY;
4244 }
4245 }
4246
4247 /* Do anything special before sizing sections. This is where ELF
4248 and other back-ends size dynamic sections. */
4249 ldemul_before_allocation ();
4250
4251 /* We must record the program headers before we try to fix the
4252 section positions, since they will affect SIZEOF_HEADERS. */
4253 lang_record_phdrs ();
4254
4255 /* Size up the sections. */
4256 lang_size_sections (statement_list.head,
4257 abs_output_section,
4258 &statement_list.head, 0, (bfd_vma) 0, NULL);
4259
4260 /* Now run around and relax if we can. */
4261 if (command_line.relax)
4262 {
4263 /* Keep relaxing until bfd_relax_section gives up. */
4264 boolean relax_again;
4265
4266 do
4267 {
4268 lang_reset_memory_regions ();
4269
4270 relax_again = false;
4271
4272 /* Note: pe-dll.c does something like this also. If you find
4273 you need to change this code, you probably need to change
4274 pe-dll.c also. DJ */
4275
4276 /* Do all the assignments with our current guesses as to
4277 section sizes. */
4278 lang_do_assignments (statement_list.head,
4279 abs_output_section,
4280 (fill_type *) 0, (bfd_vma) 0);
4281
4282 /* Perform another relax pass - this time we know where the
4283 globals are, so can make a better guess. */
4284 lang_size_sections (statement_list.head,
4285 abs_output_section,
4286 &statement_list.head, 0, (bfd_vma) 0,
4287 &relax_again);
4288 }
4289 while (relax_again);
4290 }
4291
4292 /* See if anything special should be done now we know how big
4293 everything is. */
4294 ldemul_after_allocation ();
4295
4296 /* Fix any .startof. or .sizeof. symbols. */
4297 lang_set_startof ();
4298
4299 /* Do all the assignments, now that we know the final resting places
4300 of all the symbols. */
4301
4302 lang_do_assignments (statement_list.head,
4303 abs_output_section,
4304 (fill_type *) 0, (bfd_vma) 0);
4305
4306 /* Make sure that the section addresses make sense. */
4307 if (! link_info.relocateable
4308 && command_line.check_section_addresses)
4309 lang_check_section_addresses ();
4310
4311 /* Final stuffs. */
4312
4313 ldemul_finish ();
4314 lang_finish ();
4315 }
4316
4317 /* EXPORTED TO YACC */
4318
4319 void
4320 lang_add_wild (filespec, section_list, keep_sections)
4321 struct wildcard_spec *filespec;
4322 struct wildcard_list *section_list;
4323 boolean keep_sections;
4324 {
4325 struct wildcard_list *curr, *next;
4326 lang_wild_statement_type *new;
4327
4328 /* Reverse the list as the parser puts it back to front. */
4329 for (curr = section_list, section_list = NULL;
4330 curr != NULL;
4331 section_list = curr, curr = next)
4332 {
4333 if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
4334 placed_commons = true;
4335
4336 next = curr->next;
4337 curr->next = section_list;
4338 }
4339
4340 if (filespec != NULL && filespec->name != NULL)
4341 {
4342 if (strcmp (filespec->name, "*") == 0)
4343 filespec->name = NULL;
4344 else if (! wildcardp (filespec->name))
4345 lang_has_input_file = true;
4346 }
4347
4348 new = new_stat (lang_wild_statement, stat_ptr);
4349 new->filename = NULL;
4350 new->filenames_sorted = false;
4351 if (filespec != NULL)
4352 {
4353 new->filename = filespec->name;
4354 new->filenames_sorted = filespec->sorted;
4355 }
4356 new->section_list = section_list;
4357 new->keep_sections = keep_sections;
4358 lang_list_init (&new->children);
4359 }
4360
4361 void
4362 lang_section_start (name, address)
4363 const char *name;
4364 etree_type *address;
4365 {
4366 lang_address_statement_type *ad;
4367
4368 ad = new_stat (lang_address_statement, stat_ptr);
4369 ad->section_name = name;
4370 ad->address = address;
4371 }
4372
4373 /* Set the start symbol to NAME. CMDLINE is nonzero if this is called
4374 because of a -e argument on the command line, or zero if this is
4375 called by ENTRY in a linker script. Command line arguments take
4376 precedence. */
4377
4378 void
4379 lang_add_entry (name, cmdline)
4380 const char *name;
4381 boolean cmdline;
4382 {
4383 if (entry_symbol == NULL
4384 || cmdline
4385 || ! entry_from_cmdline)
4386 {
4387 entry_symbol = name;
4388 entry_from_cmdline = cmdline;
4389 }
4390 }
4391
4392 void
4393 lang_add_target (name)
4394 const char *name;
4395 {
4396 lang_target_statement_type *new = new_stat (lang_target_statement,
4397 stat_ptr);
4398
4399 new->target = name;
4400
4401 }
4402
4403 void
4404 lang_add_map (name)
4405 const char *name;
4406 {
4407 while (*name)
4408 {
4409 switch (*name)
4410 {
4411 case 'F':
4412 map_option_f = true;
4413 break;
4414 }
4415 name++;
4416 }
4417 }
4418
4419 void
4420 lang_add_fill (fill)
4421 fill_type *fill;
4422 {
4423 lang_fill_statement_type *new = new_stat (lang_fill_statement,
4424 stat_ptr);
4425
4426 new->fill = fill;
4427 }
4428
4429 void
4430 lang_add_data (type, exp)
4431 int type;
4432 union etree_union *exp;
4433 {
4434
4435 lang_data_statement_type *new = new_stat (lang_data_statement,
4436 stat_ptr);
4437
4438 new->exp = exp;
4439 new->type = type;
4440
4441 }
4442
4443 /* Create a new reloc statement. RELOC is the BFD relocation type to
4444 generate. HOWTO is the corresponding howto structure (we could
4445 look this up, but the caller has already done so). SECTION is the
4446 section to generate a reloc against, or NAME is the name of the
4447 symbol to generate a reloc against. Exactly one of SECTION and
4448 NAME must be NULL. ADDEND is an expression for the addend. */
4449
4450 void
4451 lang_add_reloc (reloc, howto, section, name, addend)
4452 bfd_reloc_code_real_type reloc;
4453 reloc_howto_type *howto;
4454 asection *section;
4455 const char *name;
4456 union etree_union *addend;
4457 {
4458 lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
4459
4460 p->reloc = reloc;
4461 p->howto = howto;
4462 p->section = section;
4463 p->name = name;
4464 p->addend_exp = addend;
4465
4466 p->addend_value = 0;
4467 p->output_section = NULL;
4468 p->output_vma = 0;
4469 }
4470
4471 lang_assignment_statement_type *
4472 lang_add_assignment (exp)
4473 etree_type *exp;
4474 {
4475 lang_assignment_statement_type *new = new_stat (lang_assignment_statement,
4476 stat_ptr);
4477
4478 new->exp = exp;
4479 return new;
4480 }
4481
4482 void
4483 lang_add_attribute (attribute)
4484 enum statement_enum attribute;
4485 {
4486 new_statement (attribute, sizeof (lang_statement_union_type), stat_ptr);
4487 }
4488
4489 void
4490 lang_startup (name)
4491 const char *name;
4492 {
4493 if (startup_file != (char *) NULL)
4494 {
4495 einfo (_("%P%Fmultiple STARTUP files\n"));
4496 }
4497 first_file->filename = name;
4498 first_file->local_sym_name = name;
4499 first_file->real = true;
4500
4501 startup_file = name;
4502 }
4503
4504 void
4505 lang_float (maybe)
4506 boolean maybe;
4507 {
4508 lang_float_flag = maybe;
4509 }
4510
4511
4512 /* Work out the load- and run-time regions from a script statement, and
4513 store them in *LMA_REGION and *REGION respectively.
4514
4515 MEMSPEC is the name of the run-time region, or "*default*" if the
4516 statement didn't specify one. LMA_MEMSPEC is the name of the
4517 load-time region, or null if the statement didn't specify one.
4518 HAVE_LMA_P is true if the statement had an explicit load address.
4519
4520 It is an error to specify both a load region and a load address. */
4521
4522 static void
4523 lang_get_regions (region, lma_region, memspec, lma_memspec, have_lma_p)
4524 struct memory_region_struct **region, **lma_region;
4525 const char *memspec, *lma_memspec;
4526 int have_lma_p;
4527 {
4528 *lma_region = lang_memory_region_lookup (lma_memspec);
4529
4530 /* If no runtime region has been given, but the load region has
4531 been, use the load region. */
4532 if (lma_memspec != 0 && strcmp (memspec, "*default*") == 0)
4533 *region = *lma_region;
4534 else
4535 *region = lang_memory_region_lookup (memspec);
4536
4537 if (have_lma_p && lma_memspec != 0)
4538 einfo (_("%X%P:%S: section has both a load address and a load region\n"));
4539 }
4540
4541 void
4542 lang_leave_output_section_statement (fill, memspec, phdrs, lma_memspec)
4543 fill_type *fill;
4544 const char *memspec;
4545 struct lang_output_section_phdr_list *phdrs;
4546 const char *lma_memspec;
4547 {
4548 lang_get_regions (&current_section->region,
4549 &current_section->lma_region,
4550 memspec, lma_memspec,
4551 current_section->load_base != 0);
4552 current_section->fill = fill;
4553 current_section->phdrs = phdrs;
4554 stat_ptr = &statement_list;
4555 }
4556
4557 /* Create an absolute symbol with the given name with the value of the
4558 address of first byte of the section named.
4559
4560 If the symbol already exists, then do nothing. */
4561
4562 void
4563 lang_abs_symbol_at_beginning_of (secname, name)
4564 const char *secname;
4565 const char *name;
4566 {
4567 struct bfd_link_hash_entry *h;
4568
4569 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4570 if (h == (struct bfd_link_hash_entry *) NULL)
4571 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4572
4573 if (h->type == bfd_link_hash_new
4574 || h->type == bfd_link_hash_undefined)
4575 {
4576 asection *sec;
4577
4578 h->type = bfd_link_hash_defined;
4579
4580 sec = bfd_get_section_by_name (output_bfd, secname);
4581 if (sec == (asection *) NULL)
4582 h->u.def.value = 0;
4583 else
4584 h->u.def.value = bfd_get_section_vma (output_bfd, sec);
4585
4586 h->u.def.section = bfd_abs_section_ptr;
4587 }
4588 }
4589
4590 /* Create an absolute symbol with the given name with the value of the
4591 address of the first byte after the end of the section named.
4592
4593 If the symbol already exists, then do nothing. */
4594
4595 void
4596 lang_abs_symbol_at_end_of (secname, name)
4597 const char *secname;
4598 const char *name;
4599 {
4600 struct bfd_link_hash_entry *h;
4601
4602 h = bfd_link_hash_lookup (link_info.hash, name, true, true, true);
4603 if (h == (struct bfd_link_hash_entry *) NULL)
4604 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
4605
4606 if (h->type == bfd_link_hash_new
4607 || h->type == bfd_link_hash_undefined)
4608 {
4609 asection *sec;
4610
4611 h->type = bfd_link_hash_defined;
4612
4613 sec = bfd_get_section_by_name (output_bfd, secname);
4614 if (sec == (asection *) NULL)
4615 h->u.def.value = 0;
4616 else
4617 h->u.def.value = (bfd_get_section_vma (output_bfd, sec)
4618 + bfd_section_size (output_bfd, sec) /
4619 bfd_octets_per_byte (output_bfd));
4620
4621 h->u.def.section = bfd_abs_section_ptr;
4622 }
4623 }
4624
4625 void
4626 lang_statement_append (list, element, field)
4627 lang_statement_list_type *list;
4628 lang_statement_union_type *element;
4629 lang_statement_union_type **field;
4630 {
4631 *(list->tail) = element;
4632 list->tail = field;
4633 }
4634
4635 /* Set the output format type. -oformat overrides scripts. */
4636
4637 void
4638 lang_add_output_format (format, big, little, from_script)
4639 const char *format;
4640 const char *big;
4641 const char *little;
4642 int from_script;
4643 {
4644 if (output_target == NULL || !from_script)
4645 {
4646 if (command_line.endian == ENDIAN_BIG
4647 && big != NULL)
4648 format = big;
4649 else if (command_line.endian == ENDIAN_LITTLE
4650 && little != NULL)
4651 format = little;
4652
4653 output_target = format;
4654 }
4655 }
4656
4657 /* Enter a group. This creates a new lang_group_statement, and sets
4658 stat_ptr to build new statements within the group. */
4659
4660 void
4661 lang_enter_group ()
4662 {
4663 lang_group_statement_type *g;
4664
4665 g = new_stat (lang_group_statement, stat_ptr);
4666 lang_list_init (&g->children);
4667 stat_ptr = &g->children;
4668 }
4669
4670 /* Leave a group. This just resets stat_ptr to start writing to the
4671 regular list of statements again. Note that this will not work if
4672 groups can occur inside anything else which can adjust stat_ptr,
4673 but currently they can't. */
4674
4675 void
4676 lang_leave_group ()
4677 {
4678 stat_ptr = &statement_list;
4679 }
4680
4681 /* Add a new program header. This is called for each entry in a PHDRS
4682 command in a linker script. */
4683
4684 void
4685 lang_new_phdr (name, type, filehdr, phdrs, at, flags)
4686 const char *name;
4687 etree_type *type;
4688 boolean filehdr;
4689 boolean phdrs;
4690 etree_type *at;
4691 etree_type *flags;
4692 {
4693 struct lang_phdr *n, **pp;
4694
4695 n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
4696 n->next = NULL;
4697 n->name = name;
4698 n->type = exp_get_value_int (type, 0, "program header type",
4699 lang_final_phase_enum);
4700 n->filehdr = filehdr;
4701 n->phdrs = phdrs;
4702 n->at = at;
4703 n->flags = flags;
4704
4705 for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
4706 ;
4707 *pp = n;
4708 }
4709
4710 /* Record the program header information in the output BFD. FIXME: We
4711 should not be calling an ELF specific function here. */
4712
4713 static void
4714 lang_record_phdrs ()
4715 {
4716 unsigned int alc;
4717 asection **secs;
4718 struct lang_output_section_phdr_list *last;
4719 struct lang_phdr *l;
4720 lang_statement_union_type *u;
4721
4722 alc = 10;
4723 secs = (asection **) xmalloc (alc * sizeof (asection *));
4724 last = NULL;
4725 for (l = lang_phdr_list; l != NULL; l = l->next)
4726 {
4727 unsigned int c;
4728 flagword flags;
4729 bfd_vma at;
4730
4731 c = 0;
4732 for (u = lang_output_section_statement.head;
4733 u != NULL;
4734 u = u->output_section_statement.next)
4735 {
4736 lang_output_section_statement_type *os;
4737 struct lang_output_section_phdr_list *pl;
4738
4739 os = &u->output_section_statement;
4740
4741 pl = os->phdrs;
4742 if (pl != NULL)
4743 last = pl;
4744 else
4745 {
4746 if (os->sectype == noload_section
4747 || os->bfd_section == NULL
4748 || (os->bfd_section->flags & SEC_ALLOC) == 0)
4749 continue;
4750 pl = last;
4751 }
4752
4753 if (os->bfd_section == NULL)
4754 continue;
4755
4756 for (; pl != NULL; pl = pl->next)
4757 {
4758 if (strcmp (pl->name, l->name) == 0)
4759 {
4760 if (c >= alc)
4761 {
4762 alc *= 2;
4763 secs = ((asection **)
4764 xrealloc (secs, alc * sizeof (asection *)));
4765 }
4766 secs[c] = os->bfd_section;
4767 ++c;
4768 pl->used = true;
4769 }
4770 }
4771 }
4772
4773 if (l->flags == NULL)
4774 flags = 0;
4775 else
4776 flags = exp_get_vma (l->flags, 0, "phdr flags",
4777 lang_final_phase_enum);
4778
4779 if (l->at == NULL)
4780 at = 0;
4781 else
4782 at = exp_get_vma (l->at, 0, "phdr load address",
4783 lang_final_phase_enum);
4784
4785 if (! bfd_record_phdr (output_bfd, l->type,
4786 l->flags != NULL, flags, l->at != NULL,
4787 at, l->filehdr, l->phdrs, c, secs))
4788 einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
4789 }
4790
4791 free (secs);
4792
4793 /* Make sure all the phdr assignments succeeded. */
4794 for (u = lang_output_section_statement.head;
4795 u != NULL;
4796 u = u->output_section_statement.next)
4797 {
4798 struct lang_output_section_phdr_list *pl;
4799
4800 if (u->output_section_statement.bfd_section == NULL)
4801 continue;
4802
4803 for (pl = u->output_section_statement.phdrs;
4804 pl != NULL;
4805 pl = pl->next)
4806 if (! pl->used && strcmp (pl->name, "NONE") != 0)
4807 einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
4808 u->output_section_statement.name, pl->name);
4809 }
4810 }
4811
4812 /* Record a list of sections which may not be cross referenced. */
4813
4814 void
4815 lang_add_nocrossref (l)
4816 struct lang_nocrossref *l;
4817 {
4818 struct lang_nocrossrefs *n;
4819
4820 n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
4821 n->next = nocrossref_list;
4822 n->list = l;
4823 nocrossref_list = n;
4824
4825 /* Set notice_all so that we get informed about all symbols. */
4826 link_info.notice_all = true;
4827 }
4828 \f
4829 /* Overlay handling. We handle overlays with some static variables. */
4830
4831 /* The overlay virtual address. */
4832 static etree_type *overlay_vma;
4833
4834 /* An expression for the maximum section size seen so far. */
4835 static etree_type *overlay_max;
4836
4837 /* A list of all the sections in this overlay. */
4838
4839 struct overlay_list {
4840 struct overlay_list *next;
4841 lang_output_section_statement_type *os;
4842 };
4843
4844 static struct overlay_list *overlay_list;
4845
4846 /* Start handling an overlay. */
4847
4848 void
4849 lang_enter_overlay (vma_expr)
4850 etree_type *vma_expr;
4851 {
4852 /* The grammar should prevent nested overlays from occurring. */
4853 ASSERT (overlay_vma == NULL && overlay_max == NULL);
4854
4855 overlay_vma = vma_expr;
4856 }
4857
4858 /* Start a section in an overlay. We handle this by calling
4859 lang_enter_output_section_statement with the correct VMA.
4860 lang_leave_overlay sets up the LMA and memory regions. */
4861
4862 void
4863 lang_enter_overlay_section (name)
4864 const char *name;
4865 {
4866 struct overlay_list *n;
4867 etree_type *size;
4868
4869 lang_enter_output_section_statement (name, overlay_vma, normal_section,
4870 0, 0, 0, 0);
4871
4872 /* If this is the first section, then base the VMA of future
4873 sections on this one. This will work correctly even if `.' is
4874 used in the addresses. */
4875 if (overlay_list == NULL)
4876 overlay_vma = exp_nameop (ADDR, name);
4877
4878 /* Remember the section. */
4879 n = (struct overlay_list *) xmalloc (sizeof *n);
4880 n->os = current_section;
4881 n->next = overlay_list;
4882 overlay_list = n;
4883
4884 size = exp_nameop (SIZEOF, name);
4885
4886 /* Arrange to work out the maximum section end address. */
4887 if (overlay_max == NULL)
4888 overlay_max = size;
4889 else
4890 overlay_max = exp_binop (MAX_K, overlay_max, size);
4891 }
4892
4893 /* Finish a section in an overlay. There isn't any special to do
4894 here. */
4895
4896 void
4897 lang_leave_overlay_section (fill, phdrs)
4898 fill_type *fill;
4899 struct lang_output_section_phdr_list *phdrs;
4900 {
4901 const char *name;
4902 char *clean, *s2;
4903 const char *s1;
4904 char *buf;
4905
4906 name = current_section->name;
4907
4908 /* For now, assume that "*default*" is the run-time memory region and
4909 that no load-time region has been specified. It doesn't really
4910 matter what we say here, since lang_leave_overlay will override it. */
4911 lang_leave_output_section_statement (fill, "*default*", phdrs, 0);
4912
4913 /* Define the magic symbols. */
4914
4915 clean = xmalloc (strlen (name) + 1);
4916 s2 = clean;
4917 for (s1 = name; *s1 != '\0'; s1++)
4918 if (ISALNUM (*s1) || *s1 == '_')
4919 *s2++ = *s1;
4920 *s2 = '\0';
4921
4922 buf = xmalloc (strlen (clean) + sizeof "__load_start_");
4923 sprintf (buf, "__load_start_%s", clean);
4924 lang_add_assignment (exp_assop ('=', buf,
4925 exp_nameop (LOADADDR, name)));
4926
4927 buf = xmalloc (strlen (clean) + sizeof "__load_stop_");
4928 sprintf (buf, "__load_stop_%s", clean);
4929 lang_add_assignment (exp_assop ('=', buf,
4930 exp_binop ('+',
4931 exp_nameop (LOADADDR, name),
4932 exp_nameop (SIZEOF, name))));
4933
4934 free (clean);
4935 }
4936
4937 /* Finish an overlay. If there are any overlay wide settings, this
4938 looks through all the sections in the overlay and sets them. */
4939
4940 void
4941 lang_leave_overlay (lma_expr, nocrossrefs, fill, memspec, phdrs, lma_memspec)
4942 etree_type *lma_expr;
4943 int nocrossrefs;
4944 fill_type *fill;
4945 const char *memspec;
4946 struct lang_output_section_phdr_list *phdrs;
4947 const char *lma_memspec;
4948 {
4949 lang_memory_region_type *region;
4950 lang_memory_region_type *lma_region;
4951 struct overlay_list *l;
4952 struct lang_nocrossref *nocrossref;
4953
4954 lang_get_regions (&region, &lma_region,
4955 memspec, lma_memspec,
4956 lma_expr != 0);
4957
4958 nocrossref = NULL;
4959
4960 /* After setting the size of the last section, set '.' to end of the
4961 overlay region. */
4962 if (overlay_list != NULL)
4963 overlay_list->os->update_dot_tree
4964 = exp_assop ('=', ".", exp_binop ('+', overlay_vma, overlay_max));
4965
4966 l = overlay_list;
4967 while (l != NULL)
4968 {
4969 struct overlay_list *next;
4970
4971 if (fill != (fill_type *) 0 && l->os->fill == (fill_type *) 0)
4972 l->os->fill = fill;
4973
4974 l->os->region = region;
4975 l->os->lma_region = lma_region;
4976
4977 /* The first section has the load address specified in the
4978 OVERLAY statement. The rest are worked out from that.
4979 The base address is not needed (and should be null) if
4980 an LMA region was specified. */
4981 if (l->next == 0)
4982 l->os->load_base = lma_expr;
4983 else if (lma_region == 0)
4984 l->os->load_base = exp_binop ('+',
4985 exp_nameop (LOADADDR, l->next->os->name),
4986 exp_nameop (SIZEOF, l->next->os->name));
4987
4988 if (phdrs != NULL && l->os->phdrs == NULL)
4989 l->os->phdrs = phdrs;
4990
4991 if (nocrossrefs)
4992 {
4993 struct lang_nocrossref *nc;
4994
4995 nc = (struct lang_nocrossref *) xmalloc (sizeof *nc);
4996 nc->name = l->os->name;
4997 nc->next = nocrossref;
4998 nocrossref = nc;
4999 }
5000
5001 next = l->next;
5002 free (l);
5003 l = next;
5004 }
5005
5006 if (nocrossref != NULL)
5007 lang_add_nocrossref (nocrossref);
5008
5009 overlay_vma = NULL;
5010 overlay_list = NULL;
5011 overlay_max = NULL;
5012 }
5013 \f
5014 /* Version handling. This is only useful for ELF. */
5015
5016 /* This global variable holds the version tree that we build. */
5017
5018 struct bfd_elf_version_tree *lang_elf_version_info;
5019
5020 static int
5021 lang_vers_match_lang_c (expr, sym)
5022 struct bfd_elf_version_expr *expr;
5023 const char *sym;
5024 {
5025 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5026 return 1;
5027 return fnmatch (expr->pattern, sym, 0) == 0;
5028 }
5029
5030 static int
5031 lang_vers_match_lang_cplusplus (expr, sym)
5032 struct bfd_elf_version_expr *expr;
5033 const char *sym;
5034 {
5035 char *alt_sym;
5036 int result;
5037
5038 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5039 return 1;
5040
5041 alt_sym = cplus_demangle (sym, /* DMGL_NO_TPARAMS */ 0);
5042 if (!alt_sym)
5043 {
5044 /* cplus_demangle (also) returns NULL when it is not a C++ symbol.
5045 Should we early out false in this case? */
5046 result = fnmatch (expr->pattern, sym, 0) == 0;
5047 }
5048 else
5049 {
5050 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5051 free (alt_sym);
5052 }
5053
5054 return result;
5055 }
5056
5057 static int
5058 lang_vers_match_lang_java (expr, sym)
5059 struct bfd_elf_version_expr *expr;
5060 const char *sym;
5061 {
5062 char *alt_sym;
5063 int result;
5064
5065 if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
5066 return 1;
5067
5068 alt_sym = cplus_demangle (sym, DMGL_JAVA);
5069 if (!alt_sym)
5070 {
5071 /* cplus_demangle (also) returns NULL when it is not a Java symbol.
5072 Should we early out false in this case? */
5073 result = fnmatch (expr->pattern, sym, 0) == 0;
5074 }
5075 else
5076 {
5077 result = fnmatch (expr->pattern, alt_sym, 0) == 0;
5078 free (alt_sym);
5079 }
5080
5081 return result;
5082 }
5083
5084 /* This is called for each variable name or match expression. */
5085
5086 struct bfd_elf_version_expr *
5087 lang_new_vers_pattern (orig, new, lang)
5088 struct bfd_elf_version_expr *orig;
5089 const char *new;
5090 const char *lang;
5091 {
5092 struct bfd_elf_version_expr *ret;
5093
5094 ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
5095 ret->next = orig;
5096 ret->pattern = new;
5097
5098 if (lang == NULL || strcasecmp (lang, "C") == 0)
5099 ret->match = lang_vers_match_lang_c;
5100 else if (strcasecmp (lang, "C++") == 0)
5101 ret->match = lang_vers_match_lang_cplusplus;
5102 else if (strcasecmp (lang, "Java") == 0)
5103 ret->match = lang_vers_match_lang_java;
5104 else
5105 {
5106 einfo (_("%X%P: unknown language `%s' in version information\n"),
5107 lang);
5108 ret->match = lang_vers_match_lang_c;
5109 }
5110
5111 return ldemul_new_vers_pattern (ret);
5112 }
5113
5114 /* This is called for each set of variable names and match
5115 expressions. */
5116
5117 struct bfd_elf_version_tree *
5118 lang_new_vers_node (globals, locals)
5119 struct bfd_elf_version_expr *globals;
5120 struct bfd_elf_version_expr *locals;
5121 {
5122 struct bfd_elf_version_tree *ret;
5123
5124 ret = (struct bfd_elf_version_tree *) xmalloc (sizeof *ret);
5125 ret->next = NULL;
5126 ret->name = NULL;
5127 ret->vernum = 0;
5128 ret->globals = globals;
5129 ret->locals = locals;
5130 ret->deps = NULL;
5131 ret->name_indx = (unsigned int) -1;
5132 ret->used = 0;
5133 return ret;
5134 }
5135
5136 /* This static variable keeps track of version indices. */
5137
5138 static int version_index;
5139
5140 /* This is called when we know the name and dependencies of the
5141 version. */
5142
5143 void
5144 lang_register_vers_node (name, version, deps)
5145 const char *name;
5146 struct bfd_elf_version_tree *version;
5147 struct bfd_elf_version_deps *deps;
5148 {
5149 struct bfd_elf_version_tree *t, **pp;
5150 struct bfd_elf_version_expr *e1;
5151
5152 if (name == NULL)
5153 name = "";
5154
5155 if ((name[0] == '\0' && lang_elf_version_info != NULL)
5156 || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
5157 {
5158 einfo (_("%X%P: anonymous version tag cannot be combined with other version tags\n"));
5159 return;
5160 }
5161
5162 /* Make sure this node has a unique name. */
5163 for (t = lang_elf_version_info; t != NULL; t = t->next)
5164 if (strcmp (t->name, name) == 0)
5165 einfo (_("%X%P: duplicate version tag `%s'\n"), name);
5166
5167 /* Check the global and local match names, and make sure there
5168 aren't any duplicates. */
5169
5170 for (e1 = version->globals; e1 != NULL; e1 = e1->next)
5171 {
5172 for (t = lang_elf_version_info; t != NULL; t = t->next)
5173 {
5174 struct bfd_elf_version_expr *e2;
5175
5176 for (e2 = t->locals; e2 != NULL; e2 = e2->next)
5177 if (strcmp (e1->pattern, e2->pattern) == 0)
5178 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5179 e1->pattern);
5180 }
5181 }
5182
5183 for (e1 = version->locals; e1 != NULL; e1 = e1->next)
5184 {
5185 for (t = lang_elf_version_info; t != NULL; t = t->next)
5186 {
5187 struct bfd_elf_version_expr *e2;
5188
5189 for (e2 = t->globals; e2 != NULL; e2 = e2->next)
5190 if (strcmp (e1->pattern, e2->pattern) == 0)
5191 einfo (_("%X%P: duplicate expression `%s' in version information\n"),
5192 e1->pattern);
5193 }
5194 }
5195
5196 version->deps = deps;
5197 version->name = name;
5198 if (name[0] != '\0')
5199 {
5200 ++version_index;
5201 version->vernum = version_index;
5202 }
5203 else
5204 version->vernum = 0;
5205
5206 for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
5207 ;
5208 *pp = version;
5209 }
5210
5211 /* This is called when we see a version dependency. */
5212
5213 struct bfd_elf_version_deps *
5214 lang_add_vers_depend (list, name)
5215 struct bfd_elf_version_deps *list;
5216 const char *name;
5217 {
5218 struct bfd_elf_version_deps *ret;
5219 struct bfd_elf_version_tree *t;
5220
5221 ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
5222 ret->next = list;
5223
5224 for (t = lang_elf_version_info; t != NULL; t = t->next)
5225 {
5226 if (strcmp (t->name, name) == 0)
5227 {
5228 ret->version_needed = t;
5229 return ret;
5230 }
5231 }
5232
5233 einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
5234
5235 return ret;
5236 }
5237
5238 static void
5239 lang_do_version_exports_section ()
5240 {
5241 struct bfd_elf_version_expr *greg = NULL, *lreg;
5242
5243 LANG_FOR_EACH_INPUT_STATEMENT (is)
5244 {
5245 asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
5246 char *contents, *p;
5247 bfd_size_type len;
5248
5249 if (sec == NULL)
5250 continue;
5251
5252 len = bfd_section_size (is->the_bfd, sec);
5253 contents = xmalloc (len);
5254 if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
5255 einfo (_("%X%P: unable to read .exports section contents\n"), sec);
5256
5257 p = contents;
5258 while (p < contents + len)
5259 {
5260 greg = lang_new_vers_pattern (greg, p, NULL);
5261 p = strchr (p, '\0') + 1;
5262 }
5263
5264 /* Do not free the contents, as we used them creating the regex. */
5265
5266 /* Do not include this section in the link. */
5267 bfd_set_section_flags (is->the_bfd, sec,
5268 bfd_get_section_flags (is->the_bfd, sec) | SEC_EXCLUDE);
5269 }
5270
5271 lreg = lang_new_vers_pattern (NULL, "*", NULL);
5272 lang_register_vers_node (command_line.version_exports_section,
5273 lang_new_vers_node (greg, lreg), NULL);
5274 }
5275
5276 void
5277 lang_add_unique (name)
5278 const char *name;
5279 {
5280 struct unique_sections *ent;
5281
5282 for (ent = unique_section_list; ent; ent = ent->next)
5283 if (strcmp (ent->name, name) == 0)
5284 return;
5285
5286 ent = (struct unique_sections *) xmalloc (sizeof *ent);
5287 ent->name = xstrdup (name);
5288 ent->next = unique_section_list;
5289 unique_section_list = ent;
5290 }
This page took 0.242188 seconds and 4 git commands to generate.