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