OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [ld/] [ldlang.c] - Blame information for rev 145

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 145 khays
/* Linker command language support.
2
   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3
   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of the GNU Binutils.
7
 
8
   This program 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 3 of the License, or
11
   (at your option) any later version.
12
 
13
   This program 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 this program; if not, write to the Free Software
20
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21
   MA 02110-1301, USA.  */
22
 
23
#include "sysdep.h"
24
#include "bfd.h"
25
#include "libiberty.h"
26
#include "filenames.h"
27
#include "safe-ctype.h"
28
#include "obstack.h"
29
#include "bfdlink.h"
30
 
31
#include "ld.h"
32
#include "ldmain.h"
33
#include "ldexp.h"
34
#include "ldlang.h"
35
#include <ldgram.h>
36
#include "ldlex.h"
37
#include "ldmisc.h"
38
#include "ldctor.h"
39
#include "ldfile.h"
40
#include "ldemul.h"
41
#include "fnmatch.h"
42
#include "demangle.h"
43
#include "hashtab.h"
44
#include "libbfd.h"
45
#ifdef ENABLE_PLUGINS
46
#include "plugin.h"
47
#endif /* ENABLE_PLUGINS */
48
 
49
#ifndef offsetof
50
#define offsetof(TYPE, MEMBER) ((size_t) & (((TYPE*) 0)->MEMBER))
51
#endif
52
 
53
/* Locals variables.  */
54
static struct obstack stat_obstack;
55
static struct obstack map_obstack;
56
 
57
#define obstack_chunk_alloc xmalloc
58
#define obstack_chunk_free free
59
static const char *entry_symbol_default = "start";
60
static bfd_boolean placed_commons = FALSE;
61
static bfd_boolean stripped_excluded_sections = FALSE;
62
static lang_output_section_statement_type *default_common_section;
63
static bfd_boolean map_option_f;
64
static bfd_vma print_dot;
65
static lang_input_statement_type *first_file;
66
static const char *current_target;
67
static lang_statement_list_type statement_list;
68
static struct bfd_hash_table lang_definedness_table;
69
static lang_statement_list_type *stat_save[10];
70
static lang_statement_list_type **stat_save_ptr = &stat_save[0];
71
static struct unique_sections *unique_section_list;
72
static bfd_boolean ldlang_sysrooted_script = FALSE;
73
 
74
/* Forward declarations.  */
75
static void exp_init_os (etree_type *);
76
static void init_map_userdata (bfd *, asection *, void *);
77
static lang_input_statement_type *lookup_name (const char *);
78
static struct bfd_hash_entry *lang_definedness_newfunc
79
 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
80
static void insert_undefined (const char *);
81
static bfd_boolean sort_def_symbol (struct bfd_link_hash_entry *, void *);
82
static void print_statement (lang_statement_union_type *,
83
                             lang_output_section_statement_type *);
84
static void print_statement_list (lang_statement_union_type *,
85
                                  lang_output_section_statement_type *);
86
static void print_statements (void);
87
static void print_input_section (asection *, bfd_boolean);
88
static bfd_boolean lang_one_common (struct bfd_link_hash_entry *, void *);
89
static void lang_record_phdrs (void);
90
static void lang_do_version_exports_section (void);
91
static void lang_finalize_version_expr_head
92
  (struct bfd_elf_version_expr_head *);
93
 
94
/* Exported variables.  */
95
const char *output_target;
96
lang_output_section_statement_type *abs_output_section;
97
lang_statement_list_type lang_output_section_statement;
98
lang_statement_list_type *stat_ptr = &statement_list;
99
lang_statement_list_type file_chain = { NULL, NULL };
100
lang_statement_list_type input_file_chain;
101
struct bfd_sym_chain entry_symbol = { NULL, NULL };
102
const char *entry_section = ".text";
103
bfd_boolean entry_from_cmdline;
104
bfd_boolean undef_from_cmdline;
105
bfd_boolean lang_has_input_file = FALSE;
106
bfd_boolean had_output_filename = FALSE;
107
bfd_boolean lang_float_flag = FALSE;
108
bfd_boolean delete_output_file_on_failure = FALSE;
109
struct lang_phdr *lang_phdr_list;
110
struct lang_nocrossrefs *nocrossref_list;
111
bfd_boolean missing_file = FALSE;
112
 
113
 /* Functions that traverse the linker script and might evaluate
114
    DEFINED() need to increment this.  */
115
int lang_statement_iteration = 0;
116
 
117
etree_type *base; /* Relocation base - or null */
118
 
119
/* Return TRUE if the PATTERN argument is a wildcard pattern.
120
   Although backslashes are treated specially if a pattern contains
121
   wildcards, we do not consider the mere presence of a backslash to
122
   be enough to cause the pattern to be treated as a wildcard.
123
   That lets us handle DOS filenames more naturally.  */
124
#define wildcardp(pattern) (strpbrk ((pattern), "?*[") != NULL)
125
 
126
#define new_stat(x, y) \
127
  (x##_type *) new_statement (x##_enum, sizeof (x##_type), y)
128
 
129
#define outside_section_address(q) \
130
  ((q)->output_offset + (q)->output_section->vma)
131
 
132
#define outside_symbol_address(q) \
133
  ((q)->value + outside_section_address (q->section))
134
 
135
#define SECTION_NAME_MAP_LENGTH (16)
136
 
137
void *
138
stat_alloc (size_t size)
139
{
140
  return obstack_alloc (&stat_obstack, size);
141
}
142
 
143
static int
144
name_match (const char *pattern, const char *name)
145
{
146
  if (wildcardp (pattern))
147
    return fnmatch (pattern, name, 0);
148
  return strcmp (pattern, name);
149
}
150
 
151
/* If PATTERN is of the form archive:file, return a pointer to the
152
   separator.  If not, return NULL.  */
153
 
154
static char *
155
archive_path (const char *pattern)
156
{
157
  char *p = NULL;
158
 
159
  if (link_info.path_separator == 0)
160
    return p;
161
 
162
  p = strchr (pattern, link_info.path_separator);
163
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
164
  if (p == NULL || link_info.path_separator != ':')
165
    return p;
166
 
167
  /* Assume a match on the second char is part of drive specifier,
168
     as in "c:\silly.dos".  */
169
  if (p == pattern + 1 && ISALPHA (*pattern))
170
    p = strchr (p + 1, link_info.path_separator);
171
#endif
172
  return p;
173
}
174
 
175
/* Given that FILE_SPEC results in a non-NULL SEP result from archive_path,
176
   return whether F matches FILE_SPEC.  */
177
 
178
static bfd_boolean
179
input_statement_is_archive_path (const char *file_spec, char *sep,
180
                                 lang_input_statement_type *f)
181
{
182
  bfd_boolean match = FALSE;
183
 
184
  if ((*(sep + 1) == 0
185
       || name_match (sep + 1, f->filename) == 0)
186
      && ((sep != file_spec)
187
          == (f->the_bfd != NULL && f->the_bfd->my_archive != NULL)))
188
    {
189
      match = TRUE;
190
 
191
      if (sep != file_spec)
192
        {
193
          const char *aname = f->the_bfd->my_archive->filename;
194
          *sep = 0;
195
          match = name_match (file_spec, aname) == 0;
196
          *sep = link_info.path_separator;
197
        }
198
    }
199
  return match;
200
}
201
 
202
static bfd_boolean
203
unique_section_p (const asection *sec,
204
                  const lang_output_section_statement_type *os)
205
{
206
  struct unique_sections *unam;
207
  const char *secnam;
208
 
209
  if (link_info.relocatable
210
      && sec->owner != NULL
211
      && bfd_is_group_section (sec->owner, sec))
212
    return !(os != NULL
213
             && strcmp (os->name, DISCARD_SECTION_NAME) == 0);
214
 
215
  secnam = sec->name;
216
  for (unam = unique_section_list; unam; unam = unam->next)
217
    if (name_match (unam->name, secnam) == 0)
218
      return TRUE;
219
 
220
  return FALSE;
221
}
222
 
223
/* Generic traversal routines for finding matching sections.  */
224
 
225
/* Try processing a section against a wildcard.  This just calls
226
   the callback unless the filename exclusion list is present
227
   and excludes the file.  It's hardly ever present so this
228
   function is very fast.  */
229
 
230
static void
231
walk_wild_consider_section (lang_wild_statement_type *ptr,
232
                            lang_input_statement_type *file,
233
                            asection *s,
234
                            struct wildcard_list *sec,
235
                            callback_t callback,
236
                            void *data)
237
{
238
  struct name_list *list_tmp;
239
 
240
  /* Don't process sections from files which were excluded.  */
241
  for (list_tmp = sec->spec.exclude_name_list;
242
       list_tmp;
243
       list_tmp = list_tmp->next)
244
    {
245
      char *p = archive_path (list_tmp->name);
246
 
247
      if (p != NULL)
248
        {
249
          if (input_statement_is_archive_path (list_tmp->name, p, file))
250
            return;
251
        }
252
 
253
      else if (name_match (list_tmp->name, file->filename) == 0)
254
        return;
255
 
256
      /* FIXME: Perhaps remove the following at some stage?  Matching
257
         unadorned archives like this was never documented and has
258
         been superceded by the archive:path syntax.  */
259
      else if (file->the_bfd != NULL
260
               && file->the_bfd->my_archive != NULL
261
               && name_match (list_tmp->name,
262
                              file->the_bfd->my_archive->filename) == 0)
263
        return;
264
    }
265
 
266
  (*callback) (ptr, sec, s, file, data);
267
}
268
 
269
/* Lowest common denominator routine that can handle everything correctly,
270
   but slowly.  */
271
 
272
static void
273
walk_wild_section_general (lang_wild_statement_type *ptr,
274
                           lang_input_statement_type *file,
275
                           callback_t callback,
276
                           void *data)
277
{
278
  asection *s;
279
  struct wildcard_list *sec;
280
 
281
  for (s = file->the_bfd->sections; s != NULL; s = s->next)
282
    {
283
      sec = ptr->section_list;
284
      if (sec == NULL)
285
        (*callback) (ptr, sec, s, file, data);
286
 
287
      while (sec != NULL)
288
        {
289
          bfd_boolean skip = FALSE;
290
 
291
          if (sec->spec.name != NULL)
292
            {
293
              const char *sname = bfd_get_section_name (file->the_bfd, s);
294
 
295
              skip = name_match (sec->spec.name, sname) != 0;
296
            }
297
 
298
          if (!skip)
299
            walk_wild_consider_section (ptr, file, s, sec, callback, data);
300
 
301
          sec = sec->next;
302
        }
303
    }
304
}
305
 
306
/* Routines to find a single section given its name.  If there's more
307
   than one section with that name, we report that.  */
308
 
309
typedef struct
310
{
311
  asection *found_section;
312
  bfd_boolean multiple_sections_found;
313
} section_iterator_callback_data;
314
 
315
static bfd_boolean
316
section_iterator_callback (bfd *abfd ATTRIBUTE_UNUSED, asection *s, void *data)
317
{
318
  section_iterator_callback_data *d = (section_iterator_callback_data *) data;
319
 
320
  if (d->found_section != NULL)
321
    {
322
      d->multiple_sections_found = TRUE;
323
      return TRUE;
324
    }
325
 
326
  d->found_section = s;
327
  return FALSE;
328
}
329
 
330
static asection *
331
find_section (lang_input_statement_type *file,
332
              struct wildcard_list *sec,
333
              bfd_boolean *multiple_sections_found)
334
{
335
  section_iterator_callback_data cb_data = { NULL, FALSE };
336
 
337
  bfd_get_section_by_name_if (file->the_bfd, sec->spec.name,
338
                              section_iterator_callback, &cb_data);
339
  *multiple_sections_found = cb_data.multiple_sections_found;
340
  return cb_data.found_section;
341
}
342
 
343
/* Code for handling simple wildcards without going through fnmatch,
344
   which can be expensive because of charset translations etc.  */
345
 
346
/* A simple wild is a literal string followed by a single '*',
347
   where the literal part is at least 4 characters long.  */
348
 
349
static bfd_boolean
350
is_simple_wild (const char *name)
351
{
352
  size_t len = strcspn (name, "*?[");
353
  return len >= 4 && name[len] == '*' && name[len + 1] == '\0';
354
}
355
 
356
static bfd_boolean
357
match_simple_wild (const char *pattern, const char *name)
358
{
359
  /* The first four characters of the pattern are guaranteed valid
360
     non-wildcard characters.  So we can go faster.  */
361
  if (pattern[0] != name[0] || pattern[1] != name[1]
362
      || pattern[2] != name[2] || pattern[3] != name[3])
363
    return FALSE;
364
 
365
  pattern += 4;
366
  name += 4;
367
  while (*pattern != '*')
368
    if (*name++ != *pattern++)
369
      return FALSE;
370
 
371
  return TRUE;
372
}
373
 
374
/* Return the numerical value of the init_priority attribute from
375
   section name NAME.  */
376
 
377
static unsigned long
378
get_init_priority (const char *name)
379
{
380
  char *end;
381
  unsigned long init_priority;
382
 
383
  /* GCC uses the following section names for the init_priority
384
     attribute with numerical values 101 and 65535 inclusive. A
385
     lower value means a higher priority.
386
 
387
     1: .init_array.NNNN/.fini_array.NNNN: Where NNNN is the
388
        decimal numerical value of the init_priority attribute.
389
        The order of execution in .init_array is forward and
390
        .fini_array is backward.
391
     2: .ctors.NNNN/.ctors.NNNN: Where NNNN is 65535 minus the
392
        decimal numerical value of the init_priority attribute.
393
        The order of execution in .ctors is backward and .dtors
394
        is forward.
395
   */
396
  if (strncmp (name, ".init_array.", 12) == 0
397
      || strncmp (name, ".fini_array.", 12) == 0)
398
    {
399
      init_priority = strtoul (name + 12, &end, 10);
400
      return *end ? 0 : init_priority;
401
    }
402
  else if (strncmp (name, ".ctors.", 7) == 0
403
           || strncmp (name, ".dtors.", 7) == 0)
404
    {
405
      init_priority = strtoul (name + 7, &end, 10);
406
      return *end ? 0 : 65535 - init_priority;
407
    }
408
 
409
  return 0;
410
}
411
 
412
/* Compare sections ASEC and BSEC according to SORT.  */
413
 
414
static int
415
compare_section (sort_type sort, asection *asec, asection *bsec)
416
{
417
  int ret;
418
  unsigned long ainit_priority, binit_priority;
419
 
420
  switch (sort)
421
    {
422
    default:
423
      abort ();
424
 
425
    case by_init_priority:
426
      ainit_priority
427
        = get_init_priority (bfd_get_section_name (asec->owner, asec));
428
      binit_priority
429
        = get_init_priority (bfd_get_section_name (bsec->owner, bsec));
430
      if (ainit_priority == 0 || binit_priority == 0)
431
        goto sort_by_name;
432
      ret = ainit_priority - binit_priority;
433
      if (ret)
434
        break;
435
      else
436
        goto sort_by_name;
437
 
438
    case by_alignment_name:
439
      ret = (bfd_section_alignment (bsec->owner, bsec)
440
             - bfd_section_alignment (asec->owner, asec));
441
      if (ret)
442
        break;
443
      /* Fall through.  */
444
 
445
    case by_name:
446
sort_by_name:
447
      ret = strcmp (bfd_get_section_name (asec->owner, asec),
448
                    bfd_get_section_name (bsec->owner, bsec));
449
      break;
450
 
451
    case by_name_alignment:
452
      ret = strcmp (bfd_get_section_name (asec->owner, asec),
453
                    bfd_get_section_name (bsec->owner, bsec));
454
      if (ret)
455
        break;
456
      /* Fall through.  */
457
 
458
    case by_alignment:
459
      ret = (bfd_section_alignment (bsec->owner, bsec)
460
             - bfd_section_alignment (asec->owner, asec));
461
      break;
462
    }
463
 
464
  return ret;
465
}
466
 
467
/* Build a Binary Search Tree to sort sections, unlike insertion sort
468
   used in wild_sort(). BST is considerably faster if the number of
469
   of sections are large.  */
470
 
471
static lang_section_bst_type **
472
wild_sort_fast (lang_wild_statement_type *wild,
473
                struct wildcard_list *sec,
474
                lang_input_statement_type *file ATTRIBUTE_UNUSED,
475
                asection *section)
476
{
477
  lang_section_bst_type **tree;
478
 
479
  tree = &wild->tree;
480
  if (!wild->filenames_sorted
481
      && (sec == NULL || sec->spec.sorted == none))
482
    {
483
      /* Append at the right end of tree.  */
484
      while (*tree)
485
        tree = &((*tree)->right);
486
      return tree;
487
    }
488
 
489
  while (*tree)
490
    {
491
      /* Find the correct node to append this section.  */
492
      if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
493
        tree = &((*tree)->left);
494
      else
495
        tree = &((*tree)->right);
496
    }
497
 
498
  return tree;
499
}
500
 
501
/* Use wild_sort_fast to build a BST to sort sections.  */
502
 
503
static void
504
output_section_callback_fast (lang_wild_statement_type *ptr,
505
                              struct wildcard_list *sec,
506
                              asection *section,
507
                              lang_input_statement_type *file,
508
                              void *output)
509
{
510
  lang_section_bst_type *node;
511
  lang_section_bst_type **tree;
512
  lang_output_section_statement_type *os;
513
 
514
  os = (lang_output_section_statement_type *) output;
515
 
516
  if (unique_section_p (section, os))
517
    return;
518
 
519
  node = (lang_section_bst_type *) xmalloc (sizeof (lang_section_bst_type));
520
  node->left = 0;
521
  node->right = 0;
522
  node->section = section;
523
 
524
  tree = wild_sort_fast (ptr, sec, file, section);
525
  if (tree != NULL)
526
    *tree = node;
527
}
528
 
529
/* Convert a sorted sections' BST back to list form.  */
530
 
531
static void
532
output_section_callback_tree_to_list (lang_wild_statement_type *ptr,
533
                                      lang_section_bst_type *tree,
534
                                      void *output)
535
{
536
  if (tree->left)
537
    output_section_callback_tree_to_list (ptr, tree->left, output);
538
 
539
  lang_add_section (&ptr->children, tree->section,
540
                    (lang_output_section_statement_type *) output);
541
 
542
  if (tree->right)
543
    output_section_callback_tree_to_list (ptr, tree->right, output);
544
 
545
  free (tree);
546
}
547
 
548
/* Specialized, optimized routines for handling different kinds of
549
   wildcards */
550
 
551
static void
552
walk_wild_section_specs1_wild0 (lang_wild_statement_type *ptr,
553
                                lang_input_statement_type *file,
554
                                callback_t callback,
555
                                void *data)
556
{
557
  /* We can just do a hash lookup for the section with the right name.
558
     But if that lookup discovers more than one section with the name
559
     (should be rare), we fall back to the general algorithm because
560
     we would otherwise have to sort the sections to make sure they
561
     get processed in the bfd's order.  */
562
  bfd_boolean multiple_sections_found;
563
  struct wildcard_list *sec0 = ptr->handler_data[0];
564
  asection *s0 = find_section (file, sec0, &multiple_sections_found);
565
 
566
  if (multiple_sections_found)
567
    walk_wild_section_general (ptr, file, callback, data);
568
  else if (s0)
569
    walk_wild_consider_section (ptr, file, s0, sec0, callback, data);
570
}
571
 
572
static void
573
walk_wild_section_specs1_wild1 (lang_wild_statement_type *ptr,
574
                                lang_input_statement_type *file,
575
                                callback_t callback,
576
                                void *data)
577
{
578
  asection *s;
579
  struct wildcard_list *wildsec0 = ptr->handler_data[0];
580
 
581
  for (s = file->the_bfd->sections; s != NULL; s = s->next)
582
    {
583
      const char *sname = bfd_get_section_name (file->the_bfd, s);
584
      bfd_boolean skip = !match_simple_wild (wildsec0->spec.name, sname);
585
 
586
      if (!skip)
587
        walk_wild_consider_section (ptr, file, s, wildsec0, callback, data);
588
    }
589
}
590
 
591
static void
592
walk_wild_section_specs2_wild1 (lang_wild_statement_type *ptr,
593
                                lang_input_statement_type *file,
594
                                callback_t callback,
595
                                void *data)
596
{
597
  asection *s;
598
  struct wildcard_list *sec0 = ptr->handler_data[0];
599
  struct wildcard_list *wildsec1 = ptr->handler_data[1];
600
  bfd_boolean multiple_sections_found;
601
  asection *s0 = find_section (file, sec0, &multiple_sections_found);
602
 
603
  if (multiple_sections_found)
604
    {
605
      walk_wild_section_general (ptr, file, callback, data);
606
      return;
607
    }
608
 
609
  /* Note that if the section was not found, s0 is NULL and
610
     we'll simply never succeed the s == s0 test below.  */
611
  for (s = file->the_bfd->sections; s != NULL; s = s->next)
612
    {
613
      /* Recall that in this code path, a section cannot satisfy more
614
         than one spec, so if s == s0 then it cannot match
615
         wildspec1.  */
616
      if (s == s0)
617
        walk_wild_consider_section (ptr, file, s, sec0, callback, data);
618
      else
619
        {
620
          const char *sname = bfd_get_section_name (file->the_bfd, s);
621
          bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
622
 
623
          if (!skip)
624
            walk_wild_consider_section (ptr, file, s, wildsec1, callback,
625
                                        data);
626
        }
627
    }
628
}
629
 
630
static void
631
walk_wild_section_specs3_wild2 (lang_wild_statement_type *ptr,
632
                                lang_input_statement_type *file,
633
                                callback_t callback,
634
                                void *data)
635
{
636
  asection *s;
637
  struct wildcard_list *sec0 = ptr->handler_data[0];
638
  struct wildcard_list *wildsec1 = ptr->handler_data[1];
639
  struct wildcard_list *wildsec2 = ptr->handler_data[2];
640
  bfd_boolean multiple_sections_found;
641
  asection *s0 = find_section (file, sec0, &multiple_sections_found);
642
 
643
  if (multiple_sections_found)
644
    {
645
      walk_wild_section_general (ptr, file, callback, data);
646
      return;
647
    }
648
 
649
  for (s = file->the_bfd->sections; s != NULL; s = s->next)
650
    {
651
      if (s == s0)
652
        walk_wild_consider_section (ptr, file, s, sec0, callback, data);
653
      else
654
        {
655
          const char *sname = bfd_get_section_name (file->the_bfd, s);
656
          bfd_boolean skip = !match_simple_wild (wildsec1->spec.name, sname);
657
 
658
          if (!skip)
659
            walk_wild_consider_section (ptr, file, s, wildsec1, callback, data);
660
          else
661
            {
662
              skip = !match_simple_wild (wildsec2->spec.name, sname);
663
              if (!skip)
664
                walk_wild_consider_section (ptr, file, s, wildsec2, callback,
665
                                            data);
666
            }
667
        }
668
    }
669
}
670
 
671
static void
672
walk_wild_section_specs4_wild2 (lang_wild_statement_type *ptr,
673
                                lang_input_statement_type *file,
674
                                callback_t callback,
675
                                void *data)
676
{
677
  asection *s;
678
  struct wildcard_list *sec0 = ptr->handler_data[0];
679
  struct wildcard_list *sec1 = ptr->handler_data[1];
680
  struct wildcard_list *wildsec2 = ptr->handler_data[2];
681
  struct wildcard_list *wildsec3 = ptr->handler_data[3];
682
  bfd_boolean multiple_sections_found;
683
  asection *s0 = find_section (file, sec0, &multiple_sections_found), *s1;
684
 
685
  if (multiple_sections_found)
686
    {
687
      walk_wild_section_general (ptr, file, callback, data);
688
      return;
689
    }
690
 
691
  s1 = find_section (file, sec1, &multiple_sections_found);
692
  if (multiple_sections_found)
693
    {
694
      walk_wild_section_general (ptr, file, callback, data);
695
      return;
696
    }
697
 
698
  for (s = file->the_bfd->sections; s != NULL; s = s->next)
699
    {
700
      if (s == s0)
701
        walk_wild_consider_section (ptr, file, s, sec0, callback, data);
702
      else
703
        if (s == s1)
704
          walk_wild_consider_section (ptr, file, s, sec1, callback, data);
705
        else
706
          {
707
            const char *sname = bfd_get_section_name (file->the_bfd, s);
708
            bfd_boolean skip = !match_simple_wild (wildsec2->spec.name,
709
                                                   sname);
710
 
711
            if (!skip)
712
              walk_wild_consider_section (ptr, file, s, wildsec2, callback,
713
                                          data);
714
            else
715
              {
716
                skip = !match_simple_wild (wildsec3->spec.name, sname);
717
                if (!skip)
718
                  walk_wild_consider_section (ptr, file, s, wildsec3,
719
                                              callback, data);
720
              }
721
          }
722
    }
723
}
724
 
725
static void
726
walk_wild_section (lang_wild_statement_type *ptr,
727
                   lang_input_statement_type *file,
728
                   callback_t callback,
729
                   void *data)
730
{
731
  if (file->just_syms_flag)
732
    return;
733
 
734
  (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
735
}
736
 
737
/* Returns TRUE when name1 is a wildcard spec that might match
738
   something name2 can match.  We're conservative: we return FALSE
739
   only if the prefixes of name1 and name2 are different up to the
740
   first wildcard character.  */
741
 
742
static bfd_boolean
743
wild_spec_can_overlap (const char *name1, const char *name2)
744
{
745
  size_t prefix1_len = strcspn (name1, "?*[");
746
  size_t prefix2_len = strcspn (name2, "?*[");
747
  size_t min_prefix_len;
748
 
749
  /* Note that if there is no wildcard character, then we treat the
750
     terminating 0 as part of the prefix.  Thus ".text" won't match
751
     ".text." or ".text.*", for example.  */
752
  if (name1[prefix1_len] == '\0')
753
    prefix1_len++;
754
  if (name2[prefix2_len] == '\0')
755
    prefix2_len++;
756
 
757
  min_prefix_len = prefix1_len < prefix2_len ? prefix1_len : prefix2_len;
758
 
759
  return memcmp (name1, name2, min_prefix_len) == 0;
760
}
761
 
762
/* Select specialized code to handle various kinds of wildcard
763
   statements.  */
764
 
765
static void
766
analyze_walk_wild_section_handler (lang_wild_statement_type *ptr)
767
{
768
  int sec_count = 0;
769
  int wild_name_count = 0;
770
  struct wildcard_list *sec;
771
  int signature;
772
  int data_counter;
773
 
774
  ptr->walk_wild_section_handler = walk_wild_section_general;
775
  ptr->handler_data[0] = NULL;
776
  ptr->handler_data[1] = NULL;
777
  ptr->handler_data[2] = NULL;
778
  ptr->handler_data[3] = NULL;
779
  ptr->tree = NULL;
780
 
781
  /* Count how many wildcard_specs there are, and how many of those
782
     actually use wildcards in the name.  Also, bail out if any of the
783
     wildcard names are NULL. (Can this actually happen?
784
     walk_wild_section used to test for it.)  And bail out if any
785
     of the wildcards are more complex than a simple string
786
     ending in a single '*'.  */
787
  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
788
    {
789
      ++sec_count;
790
      if (sec->spec.name == NULL)
791
        return;
792
      if (wildcardp (sec->spec.name))
793
        {
794
          ++wild_name_count;
795
          if (!is_simple_wild (sec->spec.name))
796
            return;
797
        }
798
    }
799
 
800
  /* The zero-spec case would be easy to optimize but it doesn't
801
     happen in practice.  Likewise, more than 4 specs doesn't
802
     happen in practice.  */
803
  if (sec_count == 0 || sec_count > 4)
804
    return;
805
 
806
  /* Check that no two specs can match the same section.  */
807
  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
808
    {
809
      struct wildcard_list *sec2;
810
      for (sec2 = sec->next; sec2 != NULL; sec2 = sec2->next)
811
        {
812
          if (wild_spec_can_overlap (sec->spec.name, sec2->spec.name))
813
            return;
814
        }
815
    }
816
 
817
  signature = (sec_count << 8) + wild_name_count;
818
  switch (signature)
819
    {
820
    case 0x0100:
821
      ptr->walk_wild_section_handler = walk_wild_section_specs1_wild0;
822
      break;
823
    case 0x0101:
824
      ptr->walk_wild_section_handler = walk_wild_section_specs1_wild1;
825
      break;
826
    case 0x0201:
827
      ptr->walk_wild_section_handler = walk_wild_section_specs2_wild1;
828
      break;
829
    case 0x0302:
830
      ptr->walk_wild_section_handler = walk_wild_section_specs3_wild2;
831
      break;
832
    case 0x0402:
833
      ptr->walk_wild_section_handler = walk_wild_section_specs4_wild2;
834
      break;
835
    default:
836
      return;
837
    }
838
 
839
  /* Now fill the data array with pointers to the specs, first the
840
     specs with non-wildcard names, then the specs with wildcard
841
     names.  It's OK to process the specs in different order from the
842
     given order, because we've already determined that no section
843
     will match more than one spec.  */
844
  data_counter = 0;
845
  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
846
    if (!wildcardp (sec->spec.name))
847
      ptr->handler_data[data_counter++] = sec;
848
  for (sec = ptr->section_list; sec != NULL; sec = sec->next)
849
    if (wildcardp (sec->spec.name))
850
      ptr->handler_data[data_counter++] = sec;
851
}
852
 
853
/* Handle a wild statement for a single file F.  */
854
 
855
static void
856
walk_wild_file (lang_wild_statement_type *s,
857
                lang_input_statement_type *f,
858
                callback_t callback,
859
                void *data)
860
{
861
  if (f->the_bfd == NULL
862
      || ! bfd_check_format (f->the_bfd, bfd_archive))
863
    walk_wild_section (s, f, callback, data);
864
  else
865
    {
866
      bfd *member;
867
 
868
      /* This is an archive file.  We must map each member of the
869
         archive separately.  */
870
      member = bfd_openr_next_archived_file (f->the_bfd, NULL);
871
      while (member != NULL)
872
        {
873
          /* When lookup_name is called, it will call the add_symbols
874
             entry point for the archive.  For each element of the
875
             archive which is included, BFD will call ldlang_add_file,
876
             which will set the usrdata field of the member to the
877
             lang_input_statement.  */
878
          if (member->usrdata != NULL)
879
            {
880
              walk_wild_section (s,
881
                                 (lang_input_statement_type *) member->usrdata,
882
                                 callback, data);
883
            }
884
 
885
          member = bfd_openr_next_archived_file (f->the_bfd, member);
886
        }
887
    }
888
}
889
 
890
static void
891
walk_wild (lang_wild_statement_type *s, callback_t callback, void *data)
892
{
893
  const char *file_spec = s->filename;
894
  char *p;
895
 
896
  if (file_spec == NULL)
897
    {
898
      /* Perform the iteration over all files in the list.  */
899
      LANG_FOR_EACH_INPUT_STATEMENT (f)
900
        {
901
          walk_wild_file (s, f, callback, data);
902
        }
903
    }
904
  else if ((p = archive_path (file_spec)) != NULL)
905
    {
906
      LANG_FOR_EACH_INPUT_STATEMENT (f)
907
        {
908
          if (input_statement_is_archive_path (file_spec, p, f))
909
            walk_wild_file (s, f, callback, data);
910
        }
911
    }
912
  else if (wildcardp (file_spec))
913
    {
914
      LANG_FOR_EACH_INPUT_STATEMENT (f)
915
        {
916
          if (fnmatch (file_spec, f->filename, 0) == 0)
917
            walk_wild_file (s, f, callback, data);
918
        }
919
    }
920
  else
921
    {
922
      lang_input_statement_type *f;
923
 
924
      /* Perform the iteration over a single file.  */
925
      f = lookup_name (file_spec);
926
      if (f)
927
        walk_wild_file (s, f, callback, data);
928
    }
929
}
930
 
931
/* lang_for_each_statement walks the parse tree and calls the provided
932
   function for each node, except those inside output section statements
933
   with constraint set to -1.  */
934
 
935
void
936
lang_for_each_statement_worker (void (*func) (lang_statement_union_type *),
937
                                lang_statement_union_type *s)
938
{
939
  for (; s != NULL; s = s->header.next)
940
    {
941
      func (s);
942
 
943
      switch (s->header.type)
944
        {
945
        case lang_constructors_statement_enum:
946
          lang_for_each_statement_worker (func, constructor_list.head);
947
          break;
948
        case lang_output_section_statement_enum:
949
          if (s->output_section_statement.constraint != -1)
950
            lang_for_each_statement_worker
951
              (func, s->output_section_statement.children.head);
952
          break;
953
        case lang_wild_statement_enum:
954
          lang_for_each_statement_worker (func,
955
                                          s->wild_statement.children.head);
956
          break;
957
        case lang_group_statement_enum:
958
          lang_for_each_statement_worker (func,
959
                                          s->group_statement.children.head);
960
          break;
961
        case lang_data_statement_enum:
962
        case lang_reloc_statement_enum:
963
        case lang_object_symbols_statement_enum:
964
        case lang_output_statement_enum:
965
        case lang_target_statement_enum:
966
        case lang_input_section_enum:
967
        case lang_input_statement_enum:
968
        case lang_assignment_statement_enum:
969
        case lang_padding_statement_enum:
970
        case lang_address_statement_enum:
971
        case lang_fill_statement_enum:
972
        case lang_insert_statement_enum:
973
          break;
974
        default:
975
          FAIL ();
976
          break;
977
        }
978
    }
979
}
980
 
981
void
982
lang_for_each_statement (void (*func) (lang_statement_union_type *))
983
{
984
  lang_for_each_statement_worker (func, statement_list.head);
985
}
986
 
987
/*----------------------------------------------------------------------*/
988
 
989
void
990
lang_list_init (lang_statement_list_type *list)
991
{
992
  list->head = NULL;
993
  list->tail = &list->head;
994
}
995
 
996
void
997
push_stat_ptr (lang_statement_list_type *new_ptr)
998
{
999
  if (stat_save_ptr >= stat_save + sizeof (stat_save) / sizeof (stat_save[0]))
1000
    abort ();
1001
  *stat_save_ptr++ = stat_ptr;
1002
  stat_ptr = new_ptr;
1003
}
1004
 
1005
void
1006
pop_stat_ptr (void)
1007
{
1008
  if (stat_save_ptr <= stat_save)
1009
    abort ();
1010
  stat_ptr = *--stat_save_ptr;
1011
}
1012
 
1013
/* Build a new statement node for the parse tree.  */
1014
 
1015
static lang_statement_union_type *
1016
new_statement (enum statement_enum type,
1017
               size_t size,
1018
               lang_statement_list_type *list)
1019
{
1020
  lang_statement_union_type *new_stmt;
1021
 
1022
  new_stmt = (lang_statement_union_type *) stat_alloc (size);
1023
  new_stmt->header.type = type;
1024
  new_stmt->header.next = NULL;
1025
  lang_statement_append (list, new_stmt, &new_stmt->header.next);
1026
  return new_stmt;
1027
}
1028
 
1029
/* Build a new input file node for the language.  There are several
1030
   ways in which we treat an input file, eg, we only look at symbols,
1031
   or prefix it with a -l etc.
1032
 
1033
   We can be supplied with requests for input files more than once;
1034
   they may, for example be split over several lines like foo.o(.text)
1035
   foo.o(.data) etc, so when asked for a file we check that we haven't
1036
   got it already so we don't duplicate the bfd.  */
1037
 
1038
static lang_input_statement_type *
1039
new_afile (const char *name,
1040
           lang_input_file_enum_type file_type,
1041
           const char *target,
1042
           bfd_boolean add_to_list)
1043
{
1044
  lang_input_statement_type *p;
1045
 
1046
  if (add_to_list)
1047
    p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
1048
  else
1049
    {
1050
      p = (lang_input_statement_type *)
1051
          stat_alloc (sizeof (lang_input_statement_type));
1052
      p->header.type = lang_input_statement_enum;
1053
      p->header.next = NULL;
1054
    }
1055
 
1056
  lang_has_input_file = TRUE;
1057
  p->target = target;
1058
  p->sysrooted = FALSE;
1059
 
1060
  if (file_type == lang_input_file_is_l_enum
1061
      && name[0] == ':' && name[1] != '\0')
1062
    {
1063
      file_type = lang_input_file_is_search_file_enum;
1064
      name = name + 1;
1065
    }
1066
 
1067
  switch (file_type)
1068
    {
1069
    case lang_input_file_is_symbols_only_enum:
1070
      p->filename = name;
1071
      p->maybe_archive = FALSE;
1072
      p->real = TRUE;
1073
      p->local_sym_name = name;
1074
      p->just_syms_flag = TRUE;
1075
      p->search_dirs_flag = FALSE;
1076
      break;
1077
    case lang_input_file_is_fake_enum:
1078
      p->filename = name;
1079
      p->maybe_archive = FALSE;
1080
      p->real = FALSE;
1081
      p->local_sym_name = name;
1082
      p->just_syms_flag = FALSE;
1083
      p->search_dirs_flag = FALSE;
1084
      break;
1085
    case lang_input_file_is_l_enum:
1086
      p->maybe_archive = TRUE;
1087
      p->filename = name;
1088
      p->real = TRUE;
1089
      p->local_sym_name = concat ("-l", name, (const char *) NULL);
1090
      p->just_syms_flag = FALSE;
1091
      p->search_dirs_flag = TRUE;
1092
      break;
1093
    case lang_input_file_is_marker_enum:
1094
      p->filename = name;
1095
      p->maybe_archive = FALSE;
1096
      p->real = FALSE;
1097
      p->local_sym_name = name;
1098
      p->just_syms_flag = FALSE;
1099
      p->search_dirs_flag = TRUE;
1100
      break;
1101
    case lang_input_file_is_search_file_enum:
1102
      p->sysrooted = ldlang_sysrooted_script;
1103
      p->filename = name;
1104
      p->maybe_archive = FALSE;
1105
      p->real = TRUE;
1106
      p->local_sym_name = name;
1107
      p->just_syms_flag = FALSE;
1108
      p->search_dirs_flag = TRUE;
1109
      break;
1110
    case lang_input_file_is_file_enum:
1111
      p->filename = name;
1112
      p->maybe_archive = FALSE;
1113
      p->real = TRUE;
1114
      p->local_sym_name = name;
1115
      p->just_syms_flag = FALSE;
1116
      p->search_dirs_flag = FALSE;
1117
      break;
1118
    default:
1119
      FAIL ();
1120
    }
1121
  p->the_bfd = NULL;
1122
  p->next_real_file = NULL;
1123
  p->next = NULL;
1124
  p->dynamic = config.dynamic_link;
1125
  p->add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
1126
  p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
1127
  p->whole_archive = whole_archive;
1128
  p->loaded = FALSE;
1129
  p->missing_file = FALSE;
1130
#ifdef ENABLE_PLUGINS
1131
  p->claimed = FALSE;
1132
  p->claim_archive = FALSE;
1133
#endif /* ENABLE_PLUGINS */
1134
 
1135
  lang_statement_append (&input_file_chain,
1136
                         (lang_statement_union_type *) p,
1137
                         &p->next_real_file);
1138
  return p;
1139
}
1140
 
1141
lang_input_statement_type *
1142
lang_add_input_file (const char *name,
1143
                     lang_input_file_enum_type file_type,
1144
                     const char *target)
1145
{
1146
  return new_afile (name, file_type, target, TRUE);
1147
}
1148
 
1149
struct out_section_hash_entry
1150
{
1151
  struct bfd_hash_entry root;
1152
  lang_statement_union_type s;
1153
};
1154
 
1155
/* The hash table.  */
1156
 
1157
static struct bfd_hash_table output_section_statement_table;
1158
 
1159
/* Support routines for the hash table used by lang_output_section_find,
1160
   initialize the table, fill in an entry and remove the table.  */
1161
 
1162
static struct bfd_hash_entry *
1163
output_section_statement_newfunc (struct bfd_hash_entry *entry,
1164
                                  struct bfd_hash_table *table,
1165
                                  const char *string)
1166
{
1167
  lang_output_section_statement_type **nextp;
1168
  struct out_section_hash_entry *ret;
1169
 
1170
  if (entry == NULL)
1171
    {
1172
      entry = (struct bfd_hash_entry *) bfd_hash_allocate (table,
1173
                                                           sizeof (*ret));
1174
      if (entry == NULL)
1175
        return entry;
1176
    }
1177
 
1178
  entry = bfd_hash_newfunc (entry, table, string);
1179
  if (entry == NULL)
1180
    return entry;
1181
 
1182
  ret = (struct out_section_hash_entry *) entry;
1183
  memset (&ret->s, 0, sizeof (ret->s));
1184
  ret->s.header.type = lang_output_section_statement_enum;
1185
  ret->s.output_section_statement.subsection_alignment = -1;
1186
  ret->s.output_section_statement.section_alignment = -1;
1187
  ret->s.output_section_statement.block_value = 1;
1188
  lang_list_init (&ret->s.output_section_statement.children);
1189
  lang_statement_append (stat_ptr, &ret->s, &ret->s.header.next);
1190
 
1191
  /* For every output section statement added to the list, except the
1192
     first one, lang_output_section_statement.tail points to the "next"
1193
     field of the last element of the list.  */
1194
  if (lang_output_section_statement.head != NULL)
1195
    ret->s.output_section_statement.prev
1196
      = ((lang_output_section_statement_type *)
1197
         ((char *) lang_output_section_statement.tail
1198
          - offsetof (lang_output_section_statement_type, next)));
1199
 
1200
  /* GCC's strict aliasing rules prevent us from just casting the
1201
     address, so we store the pointer in a variable and cast that
1202
     instead.  */
1203
  nextp = &ret->s.output_section_statement.next;
1204
  lang_statement_append (&lang_output_section_statement,
1205
                         &ret->s,
1206
                         (lang_statement_union_type **) nextp);
1207
  return &ret->root;
1208
}
1209
 
1210
static void
1211
output_section_statement_table_init (void)
1212
{
1213
  if (!bfd_hash_table_init_n (&output_section_statement_table,
1214
                              output_section_statement_newfunc,
1215
                              sizeof (struct out_section_hash_entry),
1216
                              61))
1217
    einfo (_("%P%F: can not create hash table: %E\n"));
1218
}
1219
 
1220
static void
1221
output_section_statement_table_free (void)
1222
{
1223
  bfd_hash_table_free (&output_section_statement_table);
1224
}
1225
 
1226
/* Build enough state so that the parser can build its tree.  */
1227
 
1228
void
1229
lang_init (void)
1230
{
1231
  obstack_begin (&stat_obstack, 1000);
1232
 
1233
  stat_ptr = &statement_list;
1234
 
1235
  output_section_statement_table_init ();
1236
 
1237
  lang_list_init (stat_ptr);
1238
 
1239
  lang_list_init (&input_file_chain);
1240
  lang_list_init (&lang_output_section_statement);
1241
  lang_list_init (&file_chain);
1242
  first_file = lang_add_input_file (NULL, lang_input_file_is_marker_enum,
1243
                                    NULL);
1244
  abs_output_section =
1245
    lang_output_section_statement_lookup (BFD_ABS_SECTION_NAME, 0, TRUE);
1246
 
1247
  abs_output_section->bfd_section = bfd_abs_section_ptr;
1248
 
1249
  /* The value "3" is ad-hoc, somewhat related to the expected number of
1250
     DEFINED expressions in a linker script.  For most default linker
1251
     scripts, there are none.  Why a hash table then?  Well, it's somewhat
1252
     simpler to re-use working machinery than using a linked list in terms
1253
     of code-complexity here in ld, besides the initialization which just
1254
     looks like other code here.  */
1255
  if (!bfd_hash_table_init_n (&lang_definedness_table,
1256
                              lang_definedness_newfunc,
1257
                              sizeof (struct lang_definedness_hash_entry),
1258
                              3))
1259
    einfo (_("%P%F: can not create hash table: %E\n"));
1260
}
1261
 
1262
void
1263
lang_finish (void)
1264
{
1265
  output_section_statement_table_free ();
1266
}
1267
 
1268
/*----------------------------------------------------------------------
1269
  A region is an area of memory declared with the
1270
  MEMORY {  name:org=exp, len=exp ... }
1271
  syntax.
1272
 
1273
  We maintain a list of all the regions here.
1274
 
1275
  If no regions are specified in the script, then the default is used
1276
  which is created when looked up to be the entire data space.
1277
 
1278
  If create is true we are creating a region inside a MEMORY block.
1279
  In this case it is probably an error to create a region that has
1280
  already been created.  If we are not inside a MEMORY block it is
1281
  dubious to use an undeclared region name (except DEFAULT_MEMORY_REGION)
1282
  and so we issue a warning.
1283
 
1284
  Each region has at least one name.  The first name is either
1285
  DEFAULT_MEMORY_REGION or the name given in the MEMORY block.  You can add
1286
  alias names to an existing region within a script with
1287
  REGION_ALIAS (alias, region_name).  Each name corresponds to at most one
1288
  region.  */
1289
 
1290
static lang_memory_region_type *lang_memory_region_list;
1291
static lang_memory_region_type **lang_memory_region_list_tail
1292
  = &lang_memory_region_list;
1293
 
1294
lang_memory_region_type *
1295
lang_memory_region_lookup (const char *const name, bfd_boolean create)
1296
{
1297
  lang_memory_region_name *n;
1298
  lang_memory_region_type *r;
1299
  lang_memory_region_type *new_region;
1300
 
1301
  /* NAME is NULL for LMA memspecs if no region was specified.  */
1302
  if (name == NULL)
1303
    return NULL;
1304
 
1305
  for (r = lang_memory_region_list; r != NULL; r = r->next)
1306
    for (n = &r->name_list; n != NULL; n = n->next)
1307
      if (strcmp (n->name, name) == 0)
1308
        {
1309
          if (create)
1310
            einfo (_("%P:%S: warning: redeclaration of memory region `%s'\n"),
1311
                   name);
1312
          return r;
1313
        }
1314
 
1315
  if (!create && strcmp (name, DEFAULT_MEMORY_REGION))
1316
    einfo (_("%P:%S: warning: memory region `%s' not declared\n"), name);
1317
 
1318
  new_region = (lang_memory_region_type *)
1319
      stat_alloc (sizeof (lang_memory_region_type));
1320
 
1321
  new_region->name_list.name = xstrdup (name);
1322
  new_region->name_list.next = NULL;
1323
  new_region->next = NULL;
1324
  new_region->origin = 0;
1325
  new_region->length = ~(bfd_size_type) 0;
1326
  new_region->current = 0;
1327
  new_region->last_os = NULL;
1328
  new_region->flags = 0;
1329
  new_region->not_flags = 0;
1330
  new_region->had_full_message = FALSE;
1331
 
1332
  *lang_memory_region_list_tail = new_region;
1333
  lang_memory_region_list_tail = &new_region->next;
1334
 
1335
  return new_region;
1336
}
1337
 
1338
void
1339
lang_memory_region_alias (const char * alias, const char * region_name)
1340
{
1341
  lang_memory_region_name * n;
1342
  lang_memory_region_type * r;
1343
  lang_memory_region_type * region;
1344
 
1345
  /* The default region must be unique.  This ensures that it is not necessary
1346
     to iterate through the name list if someone wants the check if a region is
1347
     the default memory region.  */
1348
  if (strcmp (region_name, DEFAULT_MEMORY_REGION) == 0
1349
      || strcmp (alias, DEFAULT_MEMORY_REGION) == 0)
1350
    einfo (_("%F%P:%S: error: alias for default memory region\n"));
1351
 
1352
  /* Look for the target region and check if the alias is not already
1353
     in use.  */
1354
  region = NULL;
1355
  for (r = lang_memory_region_list; r != NULL; r = r->next)
1356
    for (n = &r->name_list; n != NULL; n = n->next)
1357
      {
1358
        if (region == NULL && strcmp (n->name, region_name) == 0)
1359
          region = r;
1360
        if (strcmp (n->name, alias) == 0)
1361
          einfo (_("%F%P:%S: error: redefinition of memory region "
1362
                   "alias `%s'\n"),
1363
                 alias);
1364
      }
1365
 
1366
  /* Check if the target region exists.  */
1367
  if (region == NULL)
1368
    einfo (_("%F%P:%S: error: memory region `%s' "
1369
             "for alias `%s' does not exist\n"),
1370
           region_name,
1371
           alias);
1372
 
1373
  /* Add alias to region name list.  */
1374
  n = (lang_memory_region_name *) stat_alloc (sizeof (lang_memory_region_name));
1375
  n->name = xstrdup (alias);
1376
  n->next = region->name_list.next;
1377
  region->name_list.next = n;
1378
}
1379
 
1380
static lang_memory_region_type *
1381
lang_memory_default (asection * section)
1382
{
1383
  lang_memory_region_type *p;
1384
 
1385
  flagword sec_flags = section->flags;
1386
 
1387
  /* Override SEC_DATA to mean a writable section.  */
1388
  if ((sec_flags & (SEC_ALLOC | SEC_READONLY | SEC_CODE)) == SEC_ALLOC)
1389
    sec_flags |= SEC_DATA;
1390
 
1391
  for (p = lang_memory_region_list; p != NULL; p = p->next)
1392
    {
1393
      if ((p->flags & sec_flags) != 0
1394
          && (p->not_flags & sec_flags) == 0)
1395
        {
1396
          return p;
1397
        }
1398
    }
1399
  return lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
1400
}
1401
 
1402
/* Find or create an output_section_statement with the given NAME.
1403
   If CONSTRAINT is non-zero match one with that constraint, otherwise
1404
   match any non-negative constraint.  If CREATE, always make a
1405
   new output_section_statement for SPECIAL CONSTRAINT.  */
1406
 
1407
lang_output_section_statement_type *
1408
lang_output_section_statement_lookup (const char *name,
1409
                                      int constraint,
1410
                                      bfd_boolean create)
1411
{
1412
  struct out_section_hash_entry *entry;
1413
 
1414
  entry = ((struct out_section_hash_entry *)
1415
           bfd_hash_lookup (&output_section_statement_table, name,
1416
                            create, FALSE));
1417
  if (entry == NULL)
1418
    {
1419
      if (create)
1420
        einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1421
      return NULL;
1422
    }
1423
 
1424
  if (entry->s.output_section_statement.name != NULL)
1425
    {
1426
      /* We have a section of this name, but it might not have the correct
1427
         constraint.  */
1428
      struct out_section_hash_entry *last_ent;
1429
 
1430
      name = entry->s.output_section_statement.name;
1431
      if (create && constraint == SPECIAL)
1432
        /* Not traversing to the end reverses the order of the second
1433
           and subsequent SPECIAL sections in the hash table chain,
1434
           but that shouldn't matter.  */
1435
        last_ent = entry;
1436
      else
1437
        do
1438
          {
1439
            if (constraint == entry->s.output_section_statement.constraint
1440
                || (constraint == 0
1441
                    && entry->s.output_section_statement.constraint >= 0))
1442
              return &entry->s.output_section_statement;
1443
            last_ent = entry;
1444
            entry = (struct out_section_hash_entry *) entry->root.next;
1445
          }
1446
        while (entry != NULL
1447
               && name == entry->s.output_section_statement.name);
1448
 
1449
      if (!create)
1450
        return NULL;
1451
 
1452
      entry
1453
        = ((struct out_section_hash_entry *)
1454
           output_section_statement_newfunc (NULL,
1455
                                             &output_section_statement_table,
1456
                                             name));
1457
      if (entry == NULL)
1458
        {
1459
          einfo (_("%P%F: failed creating section `%s': %E\n"), name);
1460
          return NULL;
1461
        }
1462
      entry->root = last_ent->root;
1463
      last_ent->root.next = &entry->root;
1464
    }
1465
 
1466
  entry->s.output_section_statement.name = name;
1467
  entry->s.output_section_statement.constraint = constraint;
1468
  return &entry->s.output_section_statement;
1469
}
1470
 
1471
/* Find the next output_section_statement with the same name as OS.
1472
   If CONSTRAINT is non-zero, find one with that constraint otherwise
1473
   match any non-negative constraint.  */
1474
 
1475
lang_output_section_statement_type *
1476
next_matching_output_section_statement (lang_output_section_statement_type *os,
1477
                                        int constraint)
1478
{
1479
  /* All output_section_statements are actually part of a
1480
     struct out_section_hash_entry.  */
1481
  struct out_section_hash_entry *entry = (struct out_section_hash_entry *)
1482
    ((char *) os
1483
     - offsetof (struct out_section_hash_entry, s.output_section_statement));
1484
  const char *name = os->name;
1485
 
1486
  ASSERT (name == entry->root.string);
1487
  do
1488
    {
1489
      entry = (struct out_section_hash_entry *) entry->root.next;
1490
      if (entry == NULL
1491
          || name != entry->s.output_section_statement.name)
1492
        return NULL;
1493
    }
1494
  while (constraint != entry->s.output_section_statement.constraint
1495
         && (constraint != 0
1496
             || entry->s.output_section_statement.constraint < 0));
1497
 
1498
  return &entry->s.output_section_statement;
1499
}
1500
 
1501
/* A variant of lang_output_section_find used by place_orphan.
1502
   Returns the output statement that should precede a new output
1503
   statement for SEC.  If an exact match is found on certain flags,
1504
   sets *EXACT too.  */
1505
 
1506
lang_output_section_statement_type *
1507
lang_output_section_find_by_flags (const asection *sec,
1508
                                   lang_output_section_statement_type **exact,
1509
                                   lang_match_sec_type_func match_type)
1510
{
1511
  lang_output_section_statement_type *first, *look, *found;
1512
  flagword flags;
1513
 
1514
  /* We know the first statement on this list is *ABS*.  May as well
1515
     skip it.  */
1516
  first = &lang_output_section_statement.head->output_section_statement;
1517
  first = first->next;
1518
 
1519
  /* First try for an exact match.  */
1520
  found = NULL;
1521
  for (look = first; look; look = look->next)
1522
    {
1523
      flags = look->flags;
1524
      if (look->bfd_section != NULL)
1525
        {
1526
          flags = look->bfd_section->flags;
1527
          if (match_type && !match_type (link_info.output_bfd,
1528
                                         look->bfd_section,
1529
                                         sec->owner, sec))
1530
            continue;
1531
        }
1532
      flags ^= sec->flags;
1533
      if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY
1534
                     | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1535
        found = look;
1536
    }
1537
  if (found != NULL)
1538
    {
1539
      if (exact != NULL)
1540
        *exact = found;
1541
      return found;
1542
    }
1543
 
1544
  if ((sec->flags & SEC_CODE) != 0
1545
      && (sec->flags & SEC_ALLOC) != 0)
1546
    {
1547
      /* Try for a rw code section.  */
1548
      for (look = first; look; look = look->next)
1549
        {
1550
          flags = look->flags;
1551
          if (look->bfd_section != NULL)
1552
            {
1553
              flags = look->bfd_section->flags;
1554
              if (match_type && !match_type (link_info.output_bfd,
1555
                                             look->bfd_section,
1556
                                             sec->owner, sec))
1557
                continue;
1558
            }
1559
          flags ^= sec->flags;
1560
          if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1561
                         | SEC_CODE | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1562
            found = look;
1563
        }
1564
    }
1565
  else if ((sec->flags & (SEC_READONLY | SEC_THREAD_LOCAL)) != 0
1566
           && (sec->flags & SEC_ALLOC) != 0)
1567
    {
1568
      /* .rodata can go after .text, .sdata2 after .rodata.  */
1569
      for (look = first; look; look = look->next)
1570
        {
1571
          flags = look->flags;
1572
          if (look->bfd_section != NULL)
1573
            {
1574
              flags = look->bfd_section->flags;
1575
              if (match_type && !match_type (link_info.output_bfd,
1576
                                             look->bfd_section,
1577
                                             sec->owner, sec))
1578
                continue;
1579
            }
1580
          flags ^= sec->flags;
1581
          if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1582
                         | SEC_READONLY | SEC_SMALL_DATA))
1583
              || (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1584
                             | SEC_READONLY))
1585
                  && !(look->flags & SEC_SMALL_DATA))
1586
              || (!(flags & (SEC_THREAD_LOCAL | SEC_ALLOC))
1587
                  && (look->flags & SEC_THREAD_LOCAL)
1588
                  && (!(flags & SEC_LOAD)
1589
                      || (look->flags & SEC_LOAD))))
1590
            found = look;
1591
        }
1592
    }
1593
  else if ((sec->flags & SEC_SMALL_DATA) != 0
1594
           && (sec->flags & SEC_ALLOC) != 0)
1595
    {
1596
      /* .sdata goes after .data, .sbss after .sdata.  */
1597
      for (look = first; look; look = look->next)
1598
        {
1599
          flags = look->flags;
1600
          if (look->bfd_section != NULL)
1601
            {
1602
              flags = look->bfd_section->flags;
1603
              if (match_type && !match_type (link_info.output_bfd,
1604
                                             look->bfd_section,
1605
                                             sec->owner, sec))
1606
                continue;
1607
            }
1608
          flags ^= sec->flags;
1609
          if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1610
                         | SEC_THREAD_LOCAL))
1611
              || ((look->flags & SEC_SMALL_DATA)
1612
                  && !(sec->flags & SEC_HAS_CONTENTS)))
1613
            found = look;
1614
        }
1615
    }
1616
  else if ((sec->flags & SEC_HAS_CONTENTS) != 0
1617
           && (sec->flags & SEC_ALLOC) != 0)
1618
    {
1619
      /* .data goes after .rodata.  */
1620
      for (look = first; look; look = look->next)
1621
        {
1622
          flags = look->flags;
1623
          if (look->bfd_section != NULL)
1624
            {
1625
              flags = look->bfd_section->flags;
1626
              if (match_type && !match_type (link_info.output_bfd,
1627
                                             look->bfd_section,
1628
                                             sec->owner, sec))
1629
                continue;
1630
            }
1631
          flags ^= sec->flags;
1632
          if (!(flags & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD
1633
                         | SEC_SMALL_DATA | SEC_THREAD_LOCAL)))
1634
            found = look;
1635
        }
1636
    }
1637
  else if ((sec->flags & SEC_ALLOC) != 0)
1638
    {
1639
      /* .bss goes after any other alloc section.  */
1640
      for (look = first; look; look = look->next)
1641
        {
1642
          flags = look->flags;
1643
          if (look->bfd_section != NULL)
1644
            {
1645
              flags = look->bfd_section->flags;
1646
              if (match_type && !match_type (link_info.output_bfd,
1647
                                             look->bfd_section,
1648
                                             sec->owner, sec))
1649
                continue;
1650
            }
1651
          flags ^= sec->flags;
1652
          if (!(flags & SEC_ALLOC))
1653
            found = look;
1654
        }
1655
    }
1656
  else
1657
    {
1658
      /* non-alloc go last.  */
1659
      for (look = first; look; look = look->next)
1660
        {
1661
          flags = look->flags;
1662
          if (look->bfd_section != NULL)
1663
            flags = look->bfd_section->flags;
1664
          flags ^= sec->flags;
1665
          if (!(flags & SEC_DEBUGGING))
1666
            found = look;
1667
        }
1668
      return found;
1669
    }
1670
 
1671
  if (found || !match_type)
1672
    return found;
1673
 
1674
  return lang_output_section_find_by_flags (sec, NULL, NULL);
1675
}
1676
 
1677
/* Find the last output section before given output statement.
1678
   Used by place_orphan.  */
1679
 
1680
static asection *
1681
output_prev_sec_find (lang_output_section_statement_type *os)
1682
{
1683
  lang_output_section_statement_type *lookup;
1684
 
1685
  for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
1686
    {
1687
      if (lookup->constraint < 0)
1688
        continue;
1689
 
1690
      if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
1691
        return lookup->bfd_section;
1692
    }
1693
 
1694
  return NULL;
1695
}
1696
 
1697
/* Look for a suitable place for a new output section statement.  The
1698
   idea is to skip over anything that might be inside a SECTIONS {}
1699
   statement in a script, before we find another output section
1700
   statement.  Assignments to "dot" before an output section statement
1701
   are assumed to belong to it, except in two cases;  The first
1702
   assignment to dot, and assignments before non-alloc sections.
1703
   Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
1704
   similar assignments that set the initial address, or we might
1705
   insert non-alloc note sections among assignments setting end of
1706
   image symbols.  */
1707
 
1708
static lang_statement_union_type **
1709
insert_os_after (lang_output_section_statement_type *after)
1710
{
1711
  lang_statement_union_type **where;
1712
  lang_statement_union_type **assign = NULL;
1713
  bfd_boolean ignore_first;
1714
 
1715
  ignore_first
1716
    = after == &lang_output_section_statement.head->output_section_statement;
1717
 
1718
  for (where = &after->header.next;
1719
       *where != NULL;
1720
       where = &(*where)->header.next)
1721
    {
1722
      switch ((*where)->header.type)
1723
        {
1724
        case lang_assignment_statement_enum:
1725
          if (assign == NULL)
1726
            {
1727
              lang_assignment_statement_type *ass;
1728
 
1729
              ass = &(*where)->assignment_statement;
1730
              if (ass->exp->type.node_class != etree_assert
1731
                  && ass->exp->assign.dst[0] == '.'
1732
                  && ass->exp->assign.dst[1] == 0
1733
                  && !ignore_first)
1734
                assign = where;
1735
            }
1736
          ignore_first = FALSE;
1737
          continue;
1738
        case lang_wild_statement_enum:
1739
        case lang_input_section_enum:
1740
        case lang_object_symbols_statement_enum:
1741
        case lang_fill_statement_enum:
1742
        case lang_data_statement_enum:
1743
        case lang_reloc_statement_enum:
1744
        case lang_padding_statement_enum:
1745
        case lang_constructors_statement_enum:
1746
          assign = NULL;
1747
          continue;
1748
        case lang_output_section_statement_enum:
1749
          if (assign != NULL)
1750
            {
1751
              asection *s = (*where)->output_section_statement.bfd_section;
1752
 
1753
              if (s == NULL
1754
                  || s->map_head.s == NULL
1755
                  || (s->flags & SEC_ALLOC) != 0)
1756
                where = assign;
1757
            }
1758
          break;
1759
        case lang_input_statement_enum:
1760
        case lang_address_statement_enum:
1761
        case lang_target_statement_enum:
1762
        case lang_output_statement_enum:
1763
        case lang_group_statement_enum:
1764
        case lang_insert_statement_enum:
1765
          continue;
1766
        }
1767
      break;
1768
    }
1769
 
1770
  return where;
1771
}
1772
 
1773
lang_output_section_statement_type *
1774
lang_insert_orphan (asection *s,
1775
                    const char *secname,
1776
                    int constraint,
1777
                    lang_output_section_statement_type *after,
1778
                    struct orphan_save *place,
1779
                    etree_type *address,
1780
                    lang_statement_list_type *add_child)
1781
{
1782
  lang_statement_list_type add;
1783
  const char *ps;
1784
  lang_output_section_statement_type *os;
1785
  lang_output_section_statement_type **os_tail;
1786
 
1787
  /* If we have found an appropriate place for the output section
1788
     statements for this orphan, add them to our own private list,
1789
     inserting them later into the global statement list.  */
1790
  if (after != NULL)
1791
    {
1792
      lang_list_init (&add);
1793
      push_stat_ptr (&add);
1794
    }
1795
 
1796
  if (link_info.relocatable || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
1797
    address = exp_intop (0);
1798
 
1799
  os_tail = ((lang_output_section_statement_type **)
1800
             lang_output_section_statement.tail);
1801
  os = lang_enter_output_section_statement (secname, address, normal_section,
1802
                                            NULL, NULL, NULL, constraint);
1803
 
1804
  ps = NULL;
1805
  if (config.build_constructors && *os_tail == os)
1806
    {
1807
      /* If the name of the section is representable in C, then create
1808
         symbols to mark the start and the end of the section.  */
1809
      for (ps = secname; *ps != '\0'; ps++)
1810
        if (! ISALNUM ((unsigned char) *ps) && *ps != '_')
1811
          break;
1812
      if (*ps == '\0')
1813
        {
1814
          char *symname;
1815
          etree_type *e_align;
1816
 
1817
          symname = (char *) xmalloc (ps - secname + sizeof "__start_" + 1);
1818
          symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1819
          sprintf (symname + (symname[0] != 0), "__start_%s", secname);
1820
          e_align = exp_unop (ALIGN_K,
1821
                              exp_intop ((bfd_vma) 1 << s->alignment_power));
1822
          lang_add_assignment (exp_assign (".", e_align));
1823
          lang_add_assignment (exp_provide (symname,
1824
                                            exp_unop (ABSOLUTE,
1825
                                                      exp_nameop (NAME, ".")),
1826
                                            FALSE));
1827
        }
1828
    }
1829
 
1830
  if (add_child == NULL)
1831
    add_child = &os->children;
1832
  lang_add_section (add_child, s, os);
1833
 
1834
  if (after && (s->flags & (SEC_LOAD | SEC_ALLOC)) != 0)
1835
    {
1836
      const char *region = (after->region
1837
                            ? after->region->name_list.name
1838
                            : DEFAULT_MEMORY_REGION);
1839
      const char *lma_region = (after->lma_region
1840
                                ? after->lma_region->name_list.name
1841
                                : NULL);
1842
      lang_leave_output_section_statement (NULL, region, after->phdrs,
1843
                                           lma_region);
1844
    }
1845
  else
1846
    lang_leave_output_section_statement (NULL, DEFAULT_MEMORY_REGION, NULL,
1847
                                         NULL);
1848
 
1849
  if (ps != NULL && *ps == '\0')
1850
    {
1851
      char *symname;
1852
 
1853
      symname = (char *) xmalloc (ps - secname + sizeof "__stop_" + 1);
1854
      symname[0] = bfd_get_symbol_leading_char (link_info.output_bfd);
1855
      sprintf (symname + (symname[0] != 0), "__stop_%s", secname);
1856
      lang_add_assignment (exp_provide (symname,
1857
                                        exp_nameop (NAME, "."),
1858
                                        FALSE));
1859
    }
1860
 
1861
  /* Restore the global list pointer.  */
1862
  if (after != NULL)
1863
    pop_stat_ptr ();
1864
 
1865
  if (after != NULL && os->bfd_section != NULL)
1866
    {
1867
      asection *snew, *as;
1868
 
1869
      snew = os->bfd_section;
1870
 
1871
      /* Shuffle the bfd section list to make the output file look
1872
         neater.  This is really only cosmetic.  */
1873
      if (place->section == NULL
1874
          && after != (&lang_output_section_statement.head
1875
                       ->output_section_statement))
1876
        {
1877
          asection *bfd_section = after->bfd_section;
1878
 
1879
          /* If the output statement hasn't been used to place any input
1880
             sections (and thus doesn't have an output bfd_section),
1881
             look for the closest prior output statement having an
1882
             output section.  */
1883
          if (bfd_section == NULL)
1884
            bfd_section = output_prev_sec_find (after);
1885
 
1886
          if (bfd_section != NULL && bfd_section != snew)
1887
            place->section = &bfd_section->next;
1888
        }
1889
 
1890
      if (place->section == NULL)
1891
        place->section = &link_info.output_bfd->sections;
1892
 
1893
      as = *place->section;
1894
 
1895
      if (!as)
1896
        {
1897
          /* Put the section at the end of the list.  */
1898
 
1899
          /* Unlink the section.  */
1900
          bfd_section_list_remove (link_info.output_bfd, snew);
1901
 
1902
          /* Now tack it back on in the right place.  */
1903
          bfd_section_list_append (link_info.output_bfd, snew);
1904
        }
1905
      else if (as != snew && as->prev != snew)
1906
        {
1907
          /* Unlink the section.  */
1908
          bfd_section_list_remove (link_info.output_bfd, snew);
1909
 
1910
          /* Now tack it back on in the right place.  */
1911
          bfd_section_list_insert_before (link_info.output_bfd, as, snew);
1912
        }
1913
 
1914
      /* Save the end of this list.  Further ophans of this type will
1915
         follow the one we've just added.  */
1916
      place->section = &snew->next;
1917
 
1918
      /* The following is non-cosmetic.  We try to put the output
1919
         statements in some sort of reasonable order here, because they
1920
         determine the final load addresses of the orphan sections.
1921
         In addition, placing output statements in the wrong order may
1922
         require extra segments.  For instance, given a typical
1923
         situation of all read-only sections placed in one segment and
1924
         following that a segment containing all the read-write
1925
         sections, we wouldn't want to place an orphan read/write
1926
         section before or amongst the read-only ones.  */
1927
      if (add.head != NULL)
1928
        {
1929
          lang_output_section_statement_type *newly_added_os;
1930
 
1931
          if (place->stmt == NULL)
1932
            {
1933
              lang_statement_union_type **where = insert_os_after (after);
1934
 
1935
              *add.tail = *where;
1936
              *where = add.head;
1937
 
1938
              place->os_tail = &after->next;
1939
            }
1940
          else
1941
            {
1942
              /* Put it after the last orphan statement we added.  */
1943
              *add.tail = *place->stmt;
1944
              *place->stmt = add.head;
1945
            }
1946
 
1947
          /* Fix the global list pointer if we happened to tack our
1948
             new list at the tail.  */
1949
          if (*stat_ptr->tail == add.head)
1950
            stat_ptr->tail = add.tail;
1951
 
1952
          /* Save the end of this list.  */
1953
          place->stmt = add.tail;
1954
 
1955
          /* Do the same for the list of output section statements.  */
1956
          newly_added_os = *os_tail;
1957
          *os_tail = NULL;
1958
          newly_added_os->prev = (lang_output_section_statement_type *)
1959
            ((char *) place->os_tail
1960
             - offsetof (lang_output_section_statement_type, next));
1961
          newly_added_os->next = *place->os_tail;
1962
          if (newly_added_os->next != NULL)
1963
            newly_added_os->next->prev = newly_added_os;
1964
          *place->os_tail = newly_added_os;
1965
          place->os_tail = &newly_added_os->next;
1966
 
1967
          /* Fixing the global list pointer here is a little different.
1968
             We added to the list in lang_enter_output_section_statement,
1969
             trimmed off the new output_section_statment above when
1970
             assigning *os_tail = NULL, but possibly added it back in
1971
             the same place when assigning *place->os_tail.  */
1972
          if (*os_tail == NULL)
1973
            lang_output_section_statement.tail
1974
              = (lang_statement_union_type **) os_tail;
1975
        }
1976
    }
1977
  return os;
1978
}
1979
 
1980
static void
1981
lang_map_flags (flagword flag)
1982
{
1983
  if (flag & SEC_ALLOC)
1984
    minfo ("a");
1985
 
1986
  if (flag & SEC_CODE)
1987
    minfo ("x");
1988
 
1989
  if (flag & SEC_READONLY)
1990
    minfo ("r");
1991
 
1992
  if (flag & SEC_DATA)
1993
    minfo ("w");
1994
 
1995
  if (flag & SEC_LOAD)
1996
    minfo ("l");
1997
}
1998
 
1999
void
2000
lang_map (void)
2001
{
2002
  lang_memory_region_type *m;
2003
  bfd_boolean dis_header_printed = FALSE;
2004
  bfd *p;
2005
 
2006
  LANG_FOR_EACH_INPUT_STATEMENT (file)
2007
    {
2008
      asection *s;
2009
 
2010
      if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
2011
          || file->just_syms_flag)
2012
        continue;
2013
 
2014
      for (s = file->the_bfd->sections; s != NULL; s = s->next)
2015
        if ((s->output_section == NULL
2016
             || s->output_section->owner != link_info.output_bfd)
2017
            && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
2018
          {
2019
            if (! dis_header_printed)
2020
              {
2021
                fprintf (config.map_file, _("\nDiscarded input sections\n\n"));
2022
                dis_header_printed = TRUE;
2023
              }
2024
 
2025
            print_input_section (s, TRUE);
2026
          }
2027
    }
2028
 
2029
  minfo (_("\nMemory Configuration\n\n"));
2030
  fprintf (config.map_file, "%-16s %-18s %-18s %s\n",
2031
           _("Name"), _("Origin"), _("Length"), _("Attributes"));
2032
 
2033
  for (m = lang_memory_region_list; m != NULL; m = m->next)
2034
    {
2035
      char buf[100];
2036
      int len;
2037
 
2038
      fprintf (config.map_file, "%-16s ", m->name_list.name);
2039
 
2040
      sprintf_vma (buf, m->origin);
2041
      minfo ("0x%s ", buf);
2042
      len = strlen (buf);
2043
      while (len < 16)
2044
        {
2045
          print_space ();
2046
          ++len;
2047
        }
2048
 
2049
      minfo ("0x%V", m->length);
2050
      if (m->flags || m->not_flags)
2051
        {
2052
#ifndef BFD64
2053
          minfo ("        ");
2054
#endif
2055
          if (m->flags)
2056
            {
2057
              print_space ();
2058
              lang_map_flags (m->flags);
2059
            }
2060
 
2061
          if (m->not_flags)
2062
            {
2063
              minfo (" !");
2064
              lang_map_flags (m->not_flags);
2065
            }
2066
        }
2067
 
2068
      print_nl ();
2069
    }
2070
 
2071
  fprintf (config.map_file, _("\nLinker script and memory map\n\n"));
2072
 
2073
  if (! link_info.reduce_memory_overheads)
2074
    {
2075
      obstack_begin (&map_obstack, 1000);
2076
      for (p = link_info.input_bfds; p != (bfd *) NULL; p = p->link_next)
2077
        bfd_map_over_sections (p, init_map_userdata, 0);
2078
      bfd_link_hash_traverse (link_info.hash, sort_def_symbol, 0);
2079
    }
2080
  lang_statement_iteration ++;
2081
  print_statements ();
2082
}
2083
 
2084
static void
2085
init_map_userdata (bfd *abfd ATTRIBUTE_UNUSED,
2086
                   asection *sec,
2087
                   void *data ATTRIBUTE_UNUSED)
2088
{
2089
  fat_section_userdata_type *new_data
2090
    = ((fat_section_userdata_type *) (stat_alloc
2091
                                      (sizeof (fat_section_userdata_type))));
2092
 
2093
  ASSERT (get_userdata (sec) == NULL);
2094
  get_userdata (sec) = new_data;
2095
  new_data->map_symbol_def_tail = &new_data->map_symbol_def_head;
2096
  new_data->map_symbol_def_count = 0;
2097
}
2098
 
2099
static bfd_boolean
2100
sort_def_symbol (struct bfd_link_hash_entry *hash_entry,
2101
                 void *info ATTRIBUTE_UNUSED)
2102
{
2103
  if (hash_entry->type == bfd_link_hash_warning)
2104
    hash_entry = (struct bfd_link_hash_entry *) hash_entry->u.i.link;
2105
 
2106
  if (hash_entry->type == bfd_link_hash_defined
2107
      || hash_entry->type == bfd_link_hash_defweak)
2108
    {
2109
      struct fat_user_section_struct *ud;
2110
      struct map_symbol_def *def;
2111
 
2112
      ud = (struct fat_user_section_struct *)
2113
          get_userdata (hash_entry->u.def.section);
2114
      if  (! ud)
2115
        {
2116
          /* ??? What do we have to do to initialize this beforehand?  */
2117
          /* The first time we get here is bfd_abs_section...  */
2118
          init_map_userdata (0, hash_entry->u.def.section, 0);
2119
          ud = (struct fat_user_section_struct *)
2120
              get_userdata (hash_entry->u.def.section);
2121
        }
2122
      else if  (!ud->map_symbol_def_tail)
2123
        ud->map_symbol_def_tail = &ud->map_symbol_def_head;
2124
 
2125
      def = (struct map_symbol_def *) obstack_alloc (&map_obstack, sizeof *def);
2126
      def->entry = hash_entry;
2127
      *(ud->map_symbol_def_tail) = def;
2128
      ud->map_symbol_def_tail = &def->next;
2129
      ud->map_symbol_def_count++;
2130
    }
2131
  return TRUE;
2132
}
2133
 
2134
/* Initialize an output section.  */
2135
 
2136
static void
2137
init_os (lang_output_section_statement_type *s, flagword flags)
2138
{
2139
  if (strcmp (s->name, DISCARD_SECTION_NAME) == 0)
2140
    einfo (_("%P%F: Illegal use of `%s' section\n"), DISCARD_SECTION_NAME);
2141
 
2142
  if (s->constraint != SPECIAL)
2143
    s->bfd_section = bfd_get_section_by_name (link_info.output_bfd, s->name);
2144
  if (s->bfd_section == NULL)
2145
    s->bfd_section = bfd_make_section_anyway_with_flags (link_info.output_bfd,
2146
                                                         s->name, flags);
2147
  if (s->bfd_section == NULL)
2148
    {
2149
      einfo (_("%P%F: output format %s cannot represent section called %s\n"),
2150
             link_info.output_bfd->xvec->name, s->name);
2151
    }
2152
  s->bfd_section->output_section = s->bfd_section;
2153
  s->bfd_section->output_offset = 0;
2154
 
2155
  if (!link_info.reduce_memory_overheads)
2156
    {
2157
      fat_section_userdata_type *new_userdata = (fat_section_userdata_type *)
2158
        stat_alloc (sizeof (fat_section_userdata_type));
2159
      memset (new_userdata, 0, sizeof (fat_section_userdata_type));
2160
      get_userdata (s->bfd_section) = new_userdata;
2161
    }
2162
 
2163
  /* If there is a base address, make sure that any sections it might
2164
     mention are initialized.  */
2165
  if (s->addr_tree != NULL)
2166
    exp_init_os (s->addr_tree);
2167
 
2168
  if (s->load_base != NULL)
2169
    exp_init_os (s->load_base);
2170
 
2171
  /* If supplied an alignment, set it.  */
2172
  if (s->section_alignment != -1)
2173
    s->bfd_section->alignment_power = s->section_alignment;
2174
}
2175
 
2176
/* Make sure that all output sections mentioned in an expression are
2177
   initialized.  */
2178
 
2179
static void
2180
exp_init_os (etree_type *exp)
2181
{
2182
  switch (exp->type.node_class)
2183
    {
2184
    case etree_assign:
2185
    case etree_provide:
2186
      exp_init_os (exp->assign.src);
2187
      break;
2188
 
2189
    case etree_binary:
2190
      exp_init_os (exp->binary.lhs);
2191
      exp_init_os (exp->binary.rhs);
2192
      break;
2193
 
2194
    case etree_trinary:
2195
      exp_init_os (exp->trinary.cond);
2196
      exp_init_os (exp->trinary.lhs);
2197
      exp_init_os (exp->trinary.rhs);
2198
      break;
2199
 
2200
    case etree_assert:
2201
      exp_init_os (exp->assert_s.child);
2202
      break;
2203
 
2204
    case etree_unary:
2205
      exp_init_os (exp->unary.child);
2206
      break;
2207
 
2208
    case etree_name:
2209
      switch (exp->type.node_code)
2210
        {
2211
        case ADDR:
2212
        case LOADADDR:
2213
        case SIZEOF:
2214
          {
2215
            lang_output_section_statement_type *os;
2216
 
2217
            os = lang_output_section_find (exp->name.name);
2218
            if (os != NULL && os->bfd_section == NULL)
2219
              init_os (os, 0);
2220
          }
2221
        }
2222
      break;
2223
 
2224
    default:
2225
      break;
2226
    }
2227
}
2228
 
2229
static void
2230
section_already_linked (bfd *abfd, asection *sec, void *data)
2231
{
2232
  lang_input_statement_type *entry = (lang_input_statement_type *) data;
2233
 
2234
  /* If we are only reading symbols from this object, then we want to
2235
     discard all sections.  */
2236
  if (entry->just_syms_flag)
2237
    {
2238
      bfd_link_just_syms (abfd, sec, &link_info);
2239
      return;
2240
    }
2241
 
2242
  if (!(abfd->flags & DYNAMIC))
2243
    bfd_section_already_linked (abfd, sec, &link_info);
2244
}
2245
 
2246
/* The wild routines.
2247
 
2248
   These expand statements like *(.text) and foo.o to a list of
2249
   explicit actions, like foo.o(.text), bar.o(.text) and
2250
   foo.o(.text, .data).  */
2251
 
2252
/* Add SECTION to the output section OUTPUT.  Do this by creating a
2253
   lang_input_section statement which is placed at PTR.  FILE is the
2254
   input file which holds SECTION.  */
2255
 
2256
void
2257
lang_add_section (lang_statement_list_type *ptr,
2258
                  asection *section,
2259
                  lang_output_section_statement_type *output)
2260
{
2261
  flagword flags = section->flags;
2262
  bfd_boolean discard;
2263
  lang_input_section_type *new_section;
2264
 
2265
  /* Discard sections marked with SEC_EXCLUDE.  */
2266
  discard = (flags & SEC_EXCLUDE) != 0;
2267
 
2268
  /* Discard input sections which are assigned to a section named
2269
     DISCARD_SECTION_NAME.  */
2270
  if (strcmp (output->name, DISCARD_SECTION_NAME) == 0)
2271
    discard = TRUE;
2272
 
2273
  /* Discard debugging sections if we are stripping debugging
2274
     information.  */
2275
  if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
2276
      && (flags & SEC_DEBUGGING) != 0)
2277
    discard = TRUE;
2278
 
2279
  if (discard)
2280
    {
2281
      if (section->output_section == NULL)
2282
        {
2283
          /* This prevents future calls from assigning this section.  */
2284
          section->output_section = bfd_abs_section_ptr;
2285
        }
2286
      return;
2287
    }
2288
 
2289
  if (section->output_section != NULL)
2290
    return;
2291
 
2292
  /* We don't copy the SEC_NEVER_LOAD flag from an input section
2293
     to an output section, because we want to be able to include a
2294
     SEC_NEVER_LOAD section in the middle of an otherwise loaded
2295
     section (I don't know why we want to do this, but we do).
2296
     build_link_order in ldwrite.c handles this case by turning
2297
     the embedded SEC_NEVER_LOAD section into a fill.  */
2298
  flags &= ~ SEC_NEVER_LOAD;
2299
 
2300
  /* If final link, don't copy the SEC_LINK_ONCE flags, they've
2301
     already been processed.  One reason to do this is that on pe
2302
     format targets, .text$foo sections go into .text and it's odd
2303
     to see .text with SEC_LINK_ONCE set.  */
2304
 
2305
  if (!link_info.relocatable)
2306
    flags &= ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC);
2307
 
2308
  switch (output->sectype)
2309
    {
2310
    case normal_section:
2311
    case overlay_section:
2312
      break;
2313
    case noalloc_section:
2314
      flags &= ~SEC_ALLOC;
2315
      break;
2316
    case noload_section:
2317
      flags &= ~SEC_LOAD;
2318
      flags |= SEC_NEVER_LOAD;
2319
      /* Unfortunately GNU ld has managed to evolve two different
2320
         meanings to NOLOAD in scripts.  ELF gets a .bss style noload,
2321
         alloc, no contents section.  All others get a noload, noalloc
2322
         section.  */
2323
      if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour)
2324
        flags &= ~SEC_HAS_CONTENTS;
2325
      else
2326
        flags &= ~SEC_ALLOC;
2327
      break;
2328
    }
2329
 
2330
  if (output->bfd_section == NULL)
2331
    init_os (output, flags);
2332
 
2333
  /* If SEC_READONLY is not set in the input section, then clear
2334
     it from the output section.  */
2335
  output->bfd_section->flags &= flags | ~SEC_READONLY;
2336
 
2337
  if (output->bfd_section->linker_has_input)
2338
    {
2339
      /* Only set SEC_READONLY flag on the first input section.  */
2340
      flags &= ~ SEC_READONLY;
2341
 
2342
      /* Keep SEC_MERGE and SEC_STRINGS only if they are the same.  */
2343
      if ((output->bfd_section->flags & (SEC_MERGE | SEC_STRINGS))
2344
          != (flags & (SEC_MERGE | SEC_STRINGS))
2345
          || ((flags & SEC_MERGE) != 0
2346
              && output->bfd_section->entsize != section->entsize))
2347
        {
2348
          output->bfd_section->flags &= ~ (SEC_MERGE | SEC_STRINGS);
2349
          flags &= ~ (SEC_MERGE | SEC_STRINGS);
2350
        }
2351
    }
2352
  output->bfd_section->flags |= flags;
2353
 
2354
  if (!output->bfd_section->linker_has_input)
2355
    {
2356
      output->bfd_section->linker_has_input = 1;
2357
      /* This must happen after flags have been updated.  The output
2358
         section may have been created before we saw its first input
2359
         section, eg. for a data statement.  */
2360
      bfd_init_private_section_data (section->owner, section,
2361
                                     link_info.output_bfd,
2362
                                     output->bfd_section,
2363
                                     &link_info);
2364
      if ((flags & SEC_MERGE) != 0)
2365
        output->bfd_section->entsize = section->entsize;
2366
    }
2367
 
2368
  if ((flags & SEC_TIC54X_BLOCK) != 0
2369
      && bfd_get_arch (section->owner) == bfd_arch_tic54x)
2370
    {
2371
      /* FIXME: This value should really be obtained from the bfd...  */
2372
      output->block_value = 128;
2373
    }
2374
 
2375
  if (section->alignment_power > output->bfd_section->alignment_power)
2376
    output->bfd_section->alignment_power = section->alignment_power;
2377
 
2378
  section->output_section = output->bfd_section;
2379
 
2380
  if (!link_info.relocatable
2381
      && !stripped_excluded_sections)
2382
    {
2383
      asection *s = output->bfd_section->map_tail.s;
2384
      output->bfd_section->map_tail.s = section;
2385
      section->map_head.s = NULL;
2386
      section->map_tail.s = s;
2387
      if (s != NULL)
2388
        s->map_head.s = section;
2389
      else
2390
        output->bfd_section->map_head.s = section;
2391
    }
2392
 
2393
  /* Add a section reference to the list.  */
2394
  new_section = new_stat (lang_input_section, ptr);
2395
  new_section->section = section;
2396
}
2397
 
2398
/* Handle wildcard sorting.  This returns the lang_input_section which
2399
   should follow the one we are going to create for SECTION and FILE,
2400
   based on the sorting requirements of WILD.  It returns NULL if the
2401
   new section should just go at the end of the current list.  */
2402
 
2403
static lang_statement_union_type *
2404
wild_sort (lang_wild_statement_type *wild,
2405
           struct wildcard_list *sec,
2406
           lang_input_statement_type *file,
2407
           asection *section)
2408
{
2409
  lang_statement_union_type *l;
2410
 
2411
  if (!wild->filenames_sorted
2412
      && (sec == NULL || sec->spec.sorted == none))
2413
    return NULL;
2414
 
2415
  for (l = wild->children.head; l != NULL; l = l->header.next)
2416
    {
2417
      lang_input_section_type *ls;
2418
 
2419
      if (l->header.type != lang_input_section_enum)
2420
        continue;
2421
      ls = &l->input_section;
2422
 
2423
      /* Sorting by filename takes precedence over sorting by section
2424
         name.  */
2425
 
2426
      if (wild->filenames_sorted)
2427
        {
2428
          const char *fn, *ln;
2429
          bfd_boolean fa, la;
2430
          int i;
2431
 
2432
          /* The PE support for the .idata section as generated by
2433
             dlltool assumes that files will be sorted by the name of
2434
             the archive and then the name of the file within the
2435
             archive.  */
2436
 
2437
          if (file->the_bfd != NULL
2438
              && bfd_my_archive (file->the_bfd) != NULL)
2439
            {
2440
              fn = bfd_get_filename (bfd_my_archive (file->the_bfd));
2441
              fa = TRUE;
2442
            }
2443
          else
2444
            {
2445
              fn = file->filename;
2446
              fa = FALSE;
2447
            }
2448
 
2449
          if (bfd_my_archive (ls->section->owner) != NULL)
2450
            {
2451
              ln = bfd_get_filename (bfd_my_archive (ls->section->owner));
2452
              la = TRUE;
2453
            }
2454
          else
2455
            {
2456
              ln = ls->section->owner->filename;
2457
              la = FALSE;
2458
            }
2459
 
2460
          i = filename_cmp (fn, ln);
2461
          if (i > 0)
2462
            continue;
2463
          else if (i < 0)
2464
            break;
2465
 
2466
          if (fa || la)
2467
            {
2468
              if (fa)
2469
                fn = file->filename;
2470
              if (la)
2471
                ln = ls->section->owner->filename;
2472
 
2473
              i = filename_cmp (fn, ln);
2474
              if (i > 0)
2475
                continue;
2476
              else if (i < 0)
2477
                break;
2478
            }
2479
        }
2480
 
2481
      /* Here either the files are not sorted by name, or we are
2482
         looking at the sections for this file.  */
2483
 
2484
      if (sec != NULL && sec->spec.sorted != none)
2485
        if (compare_section (sec->spec.sorted, section, ls->section) < 0)
2486
          break;
2487
    }
2488
 
2489
  return l;
2490
}
2491
 
2492
/* Expand a wild statement for a particular FILE.  SECTION may be
2493
   NULL, in which case it is a wild card.  */
2494
 
2495
static void
2496
output_section_callback (lang_wild_statement_type *ptr,
2497
                         struct wildcard_list *sec,
2498
                         asection *section,
2499
                         lang_input_statement_type *file,
2500
                         void *output)
2501
{
2502
  lang_statement_union_type *before;
2503
  lang_output_section_statement_type *os;
2504
 
2505
  os = (lang_output_section_statement_type *) output;
2506
 
2507
  /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2508
  if (unique_section_p (section, os))
2509
    return;
2510
 
2511
  before = wild_sort (ptr, sec, file, section);
2512
 
2513
  /* Here BEFORE points to the lang_input_section which
2514
     should follow the one we are about to add.  If BEFORE
2515
     is NULL, then the section should just go at the end
2516
     of the current list.  */
2517
 
2518
  if (before == NULL)
2519
    lang_add_section (&ptr->children, section, os);
2520
  else
2521
    {
2522
      lang_statement_list_type list;
2523
      lang_statement_union_type **pp;
2524
 
2525
      lang_list_init (&list);
2526
      lang_add_section (&list, section, os);
2527
 
2528
      /* If we are discarding the section, LIST.HEAD will
2529
         be NULL.  */
2530
      if (list.head != NULL)
2531
        {
2532
          ASSERT (list.head->header.next == NULL);
2533
 
2534
          for (pp = &ptr->children.head;
2535
               *pp != before;
2536
               pp = &(*pp)->header.next)
2537
            ASSERT (*pp != NULL);
2538
 
2539
          list.head->header.next = *pp;
2540
          *pp = list.head;
2541
        }
2542
    }
2543
}
2544
 
2545
/* Check if all sections in a wild statement for a particular FILE
2546
   are readonly.  */
2547
 
2548
static void
2549
check_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
2550
                        struct wildcard_list *sec ATTRIBUTE_UNUSED,
2551
                        asection *section,
2552
                        lang_input_statement_type *file ATTRIBUTE_UNUSED,
2553
                        void *output)
2554
{
2555
  lang_output_section_statement_type *os;
2556
 
2557
  os = (lang_output_section_statement_type *) output;
2558
 
2559
  /* Exclude sections that match UNIQUE_SECTION_LIST.  */
2560
  if (unique_section_p (section, os))
2561
    return;
2562
 
2563
  if (section->output_section == NULL && (section->flags & SEC_READONLY) == 0)
2564
    os->all_input_readonly = FALSE;
2565
}
2566
 
2567
/* This is passed a file name which must have been seen already and
2568
   added to the statement tree.  We will see if it has been opened
2569
   already and had its symbols read.  If not then we'll read it.  */
2570
 
2571
static lang_input_statement_type *
2572
lookup_name (const char *name)
2573
{
2574
  lang_input_statement_type *search;
2575
 
2576
  for (search = (lang_input_statement_type *) input_file_chain.head;
2577
       search != NULL;
2578
       search = (lang_input_statement_type *) search->next_real_file)
2579
    {
2580
      /* Use the local_sym_name as the name of the file that has
2581
         already been loaded as filename might have been transformed
2582
         via the search directory lookup mechanism.  */
2583
      const char *filename = search->local_sym_name;
2584
 
2585
      if (filename != NULL
2586
          && filename_cmp (filename, name) == 0)
2587
        break;
2588
    }
2589
 
2590
  if (search == NULL)
2591
    search = new_afile (name, lang_input_file_is_search_file_enum,
2592
                        default_target, FALSE);
2593
 
2594
  /* If we have already added this file, or this file is not real
2595
     don't add this file.  */
2596
  if (search->loaded || !search->real)
2597
    return search;
2598
 
2599
  if (! load_symbols (search, NULL))
2600
    return NULL;
2601
 
2602
  return search;
2603
}
2604
 
2605
/* Save LIST as a list of libraries whose symbols should not be exported.  */
2606
 
2607
struct excluded_lib
2608
{
2609
  char *name;
2610
  struct excluded_lib *next;
2611
};
2612
static struct excluded_lib *excluded_libs;
2613
 
2614
void
2615
add_excluded_libs (const char *list)
2616
{
2617
  const char *p = list, *end;
2618
 
2619
  while (*p != '\0')
2620
    {
2621
      struct excluded_lib *entry;
2622
      end = strpbrk (p, ",:");
2623
      if (end == NULL)
2624
        end = p + strlen (p);
2625
      entry = (struct excluded_lib *) xmalloc (sizeof (*entry));
2626
      entry->next = excluded_libs;
2627
      entry->name = (char *) xmalloc (end - p + 1);
2628
      memcpy (entry->name, p, end - p);
2629
      entry->name[end - p] = '\0';
2630
      excluded_libs = entry;
2631
      if (*end == '\0')
2632
        break;
2633
      p = end + 1;
2634
    }
2635
}
2636
 
2637
static void
2638
check_excluded_libs (bfd *abfd)
2639
{
2640
  struct excluded_lib *lib = excluded_libs;
2641
 
2642
  while (lib)
2643
    {
2644
      int len = strlen (lib->name);
2645
      const char *filename = lbasename (abfd->filename);
2646
 
2647
      if (strcmp (lib->name, "ALL") == 0)
2648
        {
2649
          abfd->no_export = TRUE;
2650
          return;
2651
        }
2652
 
2653
      if (filename_ncmp (lib->name, filename, len) == 0
2654
          && (filename[len] == '\0'
2655
              || (filename[len] == '.' && filename[len + 1] == 'a'
2656
                  && filename[len + 2] == '\0')))
2657
        {
2658
          abfd->no_export = TRUE;
2659
          return;
2660
        }
2661
 
2662
      lib = lib->next;
2663
    }
2664
}
2665
 
2666
/* Get the symbols for an input file.  */
2667
 
2668
bfd_boolean
2669
load_symbols (lang_input_statement_type *entry,
2670
              lang_statement_list_type *place)
2671
{
2672
  char **matching;
2673
 
2674
  if (entry->loaded)
2675
    return TRUE;
2676
 
2677
  ldfile_open_file (entry);
2678
 
2679
  /* Do not process further if the file was missing.  */
2680
  if (entry->missing_file)
2681
    return TRUE;
2682
 
2683
  if (! bfd_check_format (entry->the_bfd, bfd_archive)
2684
      && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
2685
    {
2686
      bfd_error_type err;
2687
      bfd_boolean save_ldlang_sysrooted_script;
2688
      bfd_boolean save_add_DT_NEEDED_for_regular;
2689
      bfd_boolean save_add_DT_NEEDED_for_dynamic;
2690
      bfd_boolean save_whole_archive;
2691
 
2692
      err = bfd_get_error ();
2693
 
2694
      /* See if the emulation has some special knowledge.  */
2695
      if (ldemul_unrecognized_file (entry))
2696
        return TRUE;
2697
 
2698
      if (err == bfd_error_file_ambiguously_recognized)
2699
        {
2700
          char **p;
2701
 
2702
          einfo (_("%B: file not recognized: %E\n"), entry->the_bfd);
2703
          einfo (_("%B: matching formats:"), entry->the_bfd);
2704
          for (p = matching; *p != NULL; p++)
2705
            einfo (" %s", *p);
2706
          einfo ("%F\n");
2707
        }
2708
      else if (err != bfd_error_file_not_recognized
2709
               || place == NULL)
2710
        einfo (_("%F%B: file not recognized: %E\n"), entry->the_bfd);
2711
 
2712
      bfd_close (entry->the_bfd);
2713
      entry->the_bfd = NULL;
2714
 
2715
      /* Try to interpret the file as a linker script.  */
2716
      ldfile_open_command_file (entry->filename);
2717
 
2718
      push_stat_ptr (place);
2719
      save_ldlang_sysrooted_script = ldlang_sysrooted_script;
2720
      ldlang_sysrooted_script = entry->sysrooted;
2721
      save_add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
2722
      add_DT_NEEDED_for_regular = entry->add_DT_NEEDED_for_regular;
2723
      save_add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
2724
      add_DT_NEEDED_for_dynamic = entry->add_DT_NEEDED_for_dynamic;
2725
      save_whole_archive = whole_archive;
2726
      whole_archive = entry->whole_archive;
2727
 
2728
      ldfile_assumed_script = TRUE;
2729
      parser_input = input_script;
2730
      /* We want to use the same -Bdynamic/-Bstatic as the one for
2731
         ENTRY.  */
2732
      config.dynamic_link = entry->dynamic;
2733
      yyparse ();
2734
      ldfile_assumed_script = FALSE;
2735
 
2736
      ldlang_sysrooted_script = save_ldlang_sysrooted_script;
2737
      add_DT_NEEDED_for_regular = save_add_DT_NEEDED_for_regular;
2738
      add_DT_NEEDED_for_dynamic = save_add_DT_NEEDED_for_dynamic;
2739
      whole_archive = save_whole_archive;
2740
      pop_stat_ptr ();
2741
 
2742
      return TRUE;
2743
    }
2744
 
2745
  if (ldemul_recognized_file (entry))
2746
    return TRUE;
2747
 
2748
  /* We don't call ldlang_add_file for an archive.  Instead, the
2749
     add_symbols entry point will call ldlang_add_file, via the
2750
     add_archive_element callback, for each element of the archive
2751
     which is used.  */
2752
  switch (bfd_get_format (entry->the_bfd))
2753
    {
2754
    default:
2755
      break;
2756
 
2757
    case bfd_object:
2758
      ldlang_add_file (entry);
2759
      if (trace_files || trace_file_tries)
2760
        info_msg ("%I\n", entry);
2761
      break;
2762
 
2763
    case bfd_archive:
2764
      check_excluded_libs (entry->the_bfd);
2765
 
2766
      if (entry->whole_archive)
2767
        {
2768
          bfd *member = NULL;
2769
          bfd_boolean loaded = TRUE;
2770
 
2771
          for (;;)
2772
            {
2773
              bfd *subsbfd;
2774
              member = bfd_openr_next_archived_file (entry->the_bfd, member);
2775
 
2776
              if (member == NULL)
2777
                break;
2778
 
2779
              if (! bfd_check_format (member, bfd_object))
2780
                {
2781
                  einfo (_("%F%B: member %B in archive is not an object\n"),
2782
                         entry->the_bfd, member);
2783
                  loaded = FALSE;
2784
                }
2785
 
2786
              subsbfd = member;
2787
              if (!(*link_info.callbacks
2788
                    ->add_archive_element) (&link_info, member,
2789
                                            "--whole-archive", &subsbfd))
2790
                abort ();
2791
 
2792
              /* Potentially, the add_archive_element hook may have set a
2793
                 substitute BFD for us.  */
2794
              if (!bfd_link_add_symbols (subsbfd, &link_info))
2795
                {
2796
                  einfo (_("%F%B: could not read symbols: %E\n"), member);
2797
                  loaded = FALSE;
2798
                }
2799
            }
2800
 
2801
          entry->loaded = loaded;
2802
          return loaded;
2803
        }
2804
      break;
2805
    }
2806
 
2807
  if (bfd_link_add_symbols (entry->the_bfd, &link_info))
2808
    entry->loaded = TRUE;
2809
  else
2810
    einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
2811
 
2812
  return entry->loaded;
2813
}
2814
 
2815
/* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
2816
   may be NULL, indicating that it is a wildcard.  Separate
2817
   lang_input_section statements are created for each part of the
2818
   expansion; they are added after the wild statement S.  OUTPUT is
2819
   the output section.  */
2820
 
2821
static void
2822
wild (lang_wild_statement_type *s,
2823
      const char *target ATTRIBUTE_UNUSED,
2824
      lang_output_section_statement_type *output)
2825
{
2826
  struct wildcard_list *sec;
2827
 
2828
  if (s->handler_data[0]
2829
      && s->handler_data[0]->spec.sorted == by_name
2830
      && !s->filenames_sorted)
2831
    {
2832
      lang_section_bst_type *tree;
2833
 
2834
      walk_wild (s, output_section_callback_fast, output);
2835
 
2836
      tree = s->tree;
2837
      if (tree)
2838
        {
2839
          output_section_callback_tree_to_list (s, tree, output);
2840
          s->tree = NULL;
2841
        }
2842
    }
2843
  else
2844
    walk_wild (s, output_section_callback, output);
2845
 
2846
  if (default_common_section == NULL)
2847
    for (sec = s->section_list; sec != NULL; sec = sec->next)
2848
      if (sec->spec.name != NULL && strcmp (sec->spec.name, "COMMON") == 0)
2849
        {
2850
          /* Remember the section that common is going to in case we
2851
             later get something which doesn't know where to put it.  */
2852
          default_common_section = output;
2853
          break;
2854
        }
2855
}
2856
 
2857
/* Return TRUE iff target is the sought target.  */
2858
 
2859
static int
2860
get_target (const bfd_target *target, void *data)
2861
{
2862
  const char *sought = (const char *) data;
2863
 
2864
  return strcmp (target->name, sought) == 0;
2865
}
2866
 
2867
/* Like strcpy() but convert to lower case as well.  */
2868
 
2869
static void
2870
stricpy (char *dest, char *src)
2871
{
2872
  char c;
2873
 
2874
  while ((c = *src++) != 0)
2875
    *dest++ = TOLOWER (c);
2876
 
2877
  *dest = 0;
2878
}
2879
 
2880
/* Remove the first occurrence of needle (if any) in haystack
2881
   from haystack.  */
2882
 
2883
static void
2884
strcut (char *haystack, char *needle)
2885
{
2886
  haystack = strstr (haystack, needle);
2887
 
2888
  if (haystack)
2889
    {
2890
      char *src;
2891
 
2892
      for (src = haystack + strlen (needle); *src;)
2893
        *haystack++ = *src++;
2894
 
2895
      *haystack = 0;
2896
    }
2897
}
2898
 
2899
/* Compare two target format name strings.
2900
   Return a value indicating how "similar" they are.  */
2901
 
2902
static int
2903
name_compare (char *first, char *second)
2904
{
2905
  char *copy1;
2906
  char *copy2;
2907
  int result;
2908
 
2909
  copy1 = (char *) xmalloc (strlen (first) + 1);
2910
  copy2 = (char *) xmalloc (strlen (second) + 1);
2911
 
2912
  /* Convert the names to lower case.  */
2913
  stricpy (copy1, first);
2914
  stricpy (copy2, second);
2915
 
2916
  /* Remove size and endian strings from the name.  */
2917
  strcut (copy1, "big");
2918
  strcut (copy1, "little");
2919
  strcut (copy2, "big");
2920
  strcut (copy2, "little");
2921
 
2922
  /* Return a value based on how many characters match,
2923
     starting from the beginning.   If both strings are
2924
     the same then return 10 * their length.  */
2925
  for (result = 0; copy1[result] == copy2[result]; result++)
2926
    if (copy1[result] == 0)
2927
      {
2928
        result *= 10;
2929
        break;
2930
      }
2931
 
2932
  free (copy1);
2933
  free (copy2);
2934
 
2935
  return result;
2936
}
2937
 
2938
/* Set by closest_target_match() below.  */
2939
static const bfd_target *winner;
2940
 
2941
/* Scan all the valid bfd targets looking for one that has the endianness
2942
   requirement that was specified on the command line, and is the nearest
2943
   match to the original output target.  */
2944
 
2945
static int
2946
closest_target_match (const bfd_target *target, void *data)
2947
{
2948
  const bfd_target *original = (const bfd_target *) data;
2949
 
2950
  if (command_line.endian == ENDIAN_BIG
2951
      && target->byteorder != BFD_ENDIAN_BIG)
2952
    return 0;
2953
 
2954
  if (command_line.endian == ENDIAN_LITTLE
2955
      && target->byteorder != BFD_ENDIAN_LITTLE)
2956
    return 0;
2957
 
2958
  /* Must be the same flavour.  */
2959
  if (target->flavour != original->flavour)
2960
    return 0;
2961
 
2962
  /* Ignore generic big and little endian elf vectors.  */
2963
  if (strcmp (target->name, "elf32-big") == 0
2964
      || strcmp (target->name, "elf64-big") == 0
2965
      || strcmp (target->name, "elf32-little") == 0
2966
      || strcmp (target->name, "elf64-little") == 0)
2967
    return 0;
2968
 
2969
  /* If we have not found a potential winner yet, then record this one.  */
2970
  if (winner == NULL)
2971
    {
2972
      winner = target;
2973
      return 0;
2974
    }
2975
 
2976
  /* Oh dear, we now have two potential candidates for a successful match.
2977
     Compare their names and choose the better one.  */
2978
  if (name_compare (target->name, original->name)
2979
      > name_compare (winner->name, original->name))
2980
    winner = target;
2981
 
2982
  /* Keep on searching until wqe have checked them all.  */
2983
  return 0;
2984
}
2985
 
2986
/* Return the BFD target format of the first input file.  */
2987
 
2988
static char *
2989
get_first_input_target (void)
2990
{
2991
  char *target = NULL;
2992
 
2993
  LANG_FOR_EACH_INPUT_STATEMENT (s)
2994
    {
2995
      if (s->header.type == lang_input_statement_enum
2996
          && s->real)
2997
        {
2998
          ldfile_open_file (s);
2999
 
3000
          if (s->the_bfd != NULL
3001
              && bfd_check_format (s->the_bfd, bfd_object))
3002
            {
3003
              target = bfd_get_target (s->the_bfd);
3004
 
3005
              if (target != NULL)
3006
                break;
3007
            }
3008
        }
3009
    }
3010
 
3011
  return target;
3012
}
3013
 
3014
const char *
3015
lang_get_output_target (void)
3016
{
3017
  const char *target;
3018
 
3019
  /* Has the user told us which output format to use?  */
3020
  if (output_target != NULL)
3021
    return output_target;
3022
 
3023
  /* No - has the current target been set to something other than
3024
     the default?  */
3025
  if (current_target != default_target)
3026
    return current_target;
3027
 
3028
  /* No - can we determine the format of the first input file?  */
3029
  target = get_first_input_target ();
3030
  if (target != NULL)
3031
    return target;
3032
 
3033
  /* Failed - use the default output target.  */
3034
  return default_target;
3035
}
3036
 
3037
/* Open the output file.  */
3038
 
3039
static void
3040
open_output (const char *name)
3041
{
3042
  output_target = lang_get_output_target ();
3043
 
3044
  /* Has the user requested a particular endianness on the command
3045
     line?  */
3046
  if (command_line.endian != ENDIAN_UNSET)
3047
    {
3048
      const bfd_target *target;
3049
      enum bfd_endian desired_endian;
3050
 
3051
      /* Get the chosen target.  */
3052
      target = bfd_search_for_target (get_target, (void *) output_target);
3053
 
3054
      /* If the target is not supported, we cannot do anything.  */
3055
      if (target != NULL)
3056
        {
3057
          if (command_line.endian == ENDIAN_BIG)
3058
            desired_endian = BFD_ENDIAN_BIG;
3059
          else
3060
            desired_endian = BFD_ENDIAN_LITTLE;
3061
 
3062
          /* See if the target has the wrong endianness.  This should
3063
             not happen if the linker script has provided big and
3064
             little endian alternatives, but some scrips don't do
3065
             this.  */
3066
          if (target->byteorder != desired_endian)
3067
            {
3068
              /* If it does, then see if the target provides
3069
                 an alternative with the correct endianness.  */
3070
              if (target->alternative_target != NULL
3071
                  && (target->alternative_target->byteorder == desired_endian))
3072
                output_target = target->alternative_target->name;
3073
              else
3074
                {
3075
                  /* Try to find a target as similar as possible to
3076
                     the default target, but which has the desired
3077
                     endian characteristic.  */
3078
                  bfd_search_for_target (closest_target_match,
3079
                                         (void *) target);
3080
 
3081
                  /* Oh dear - we could not find any targets that
3082
                     satisfy our requirements.  */
3083
                  if (winner == NULL)
3084
                    einfo (_("%P: warning: could not find any targets"
3085
                             " that match endianness requirement\n"));
3086
                  else
3087
                    output_target = winner->name;
3088
                }
3089
            }
3090
        }
3091
    }
3092
 
3093
  link_info.output_bfd = bfd_openw (name, output_target);
3094
 
3095
  if (link_info.output_bfd == NULL)
3096
    {
3097
      if (bfd_get_error () == bfd_error_invalid_target)
3098
        einfo (_("%P%F: target %s not found\n"), output_target);
3099
 
3100
      einfo (_("%P%F: cannot open output file %s: %E\n"), name);
3101
    }
3102
 
3103
  delete_output_file_on_failure = TRUE;
3104
 
3105
  if (! bfd_set_format (link_info.output_bfd, bfd_object))
3106
    einfo (_("%P%F:%s: can not make object file: %E\n"), name);
3107
  if (! bfd_set_arch_mach (link_info.output_bfd,
3108
                           ldfile_output_architecture,
3109
                           ldfile_output_machine))
3110
    einfo (_("%P%F:%s: can not set architecture: %E\n"), name);
3111
 
3112
  link_info.hash = bfd_link_hash_table_create (link_info.output_bfd);
3113
  if (link_info.hash == NULL)
3114
    einfo (_("%P%F: can not create hash table: %E\n"));
3115
 
3116
  bfd_set_gp_size (link_info.output_bfd, g_switch_value);
3117
}
3118
 
3119
static void
3120
ldlang_open_output (lang_statement_union_type *statement)
3121
{
3122
  switch (statement->header.type)
3123
    {
3124
    case lang_output_statement_enum:
3125
      ASSERT (link_info.output_bfd == NULL);
3126
      open_output (statement->output_statement.name);
3127
      ldemul_set_output_arch ();
3128
      if (config.magic_demand_paged && !link_info.relocatable)
3129
        link_info.output_bfd->flags |= D_PAGED;
3130
      else
3131
        link_info.output_bfd->flags &= ~D_PAGED;
3132
      if (config.text_read_only)
3133
        link_info.output_bfd->flags |= WP_TEXT;
3134
      else
3135
        link_info.output_bfd->flags &= ~WP_TEXT;
3136
      if (link_info.traditional_format)
3137
        link_info.output_bfd->flags |= BFD_TRADITIONAL_FORMAT;
3138
      else
3139
        link_info.output_bfd->flags &= ~BFD_TRADITIONAL_FORMAT;
3140
      break;
3141
 
3142
    case lang_target_statement_enum:
3143
      current_target = statement->target_statement.target;
3144
      break;
3145
    default:
3146
      break;
3147
    }
3148
}
3149
 
3150
/* Convert between addresses in bytes and sizes in octets.
3151
   For currently supported targets, octets_per_byte is always a power
3152
   of two, so we can use shifts.  */
3153
#define TO_ADDR(X) ((X) >> opb_shift)
3154
#define TO_SIZE(X) ((X) << opb_shift)
3155
 
3156
/* Support the above.  */
3157
static unsigned int opb_shift = 0;
3158
 
3159
static void
3160
init_opb (void)
3161
{
3162
  unsigned x = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
3163
                                              ldfile_output_machine);
3164
  opb_shift = 0;
3165
  if (x > 1)
3166
    while ((x & 1) == 0)
3167
      {
3168
        x >>= 1;
3169
        ++opb_shift;
3170
      }
3171
  ASSERT (x == 1);
3172
}
3173
 
3174
/* Open all the input files.  */
3175
 
3176
enum open_bfd_mode
3177
  {
3178
    OPEN_BFD_NORMAL = 0,
3179
    OPEN_BFD_FORCE = 1,
3180
    OPEN_BFD_RESCAN = 2
3181
  };
3182
#ifdef ENABLE_PLUGINS
3183
static lang_input_statement_type *plugin_insert = NULL;
3184
#endif
3185
 
3186
static void
3187
open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
3188
{
3189
  for (; s != NULL; s = s->header.next)
3190
    {
3191
      switch (s->header.type)
3192
        {
3193
        case lang_constructors_statement_enum:
3194
          open_input_bfds (constructor_list.head, mode);
3195
          break;
3196
        case lang_output_section_statement_enum:
3197
          open_input_bfds (s->output_section_statement.children.head, mode);
3198
          break;
3199
        case lang_wild_statement_enum:
3200
          /* Maybe we should load the file's symbols.  */
3201
          if ((mode & OPEN_BFD_RESCAN) == 0
3202
              && s->wild_statement.filename
3203
              && !wildcardp (s->wild_statement.filename)
3204
              && !archive_path (s->wild_statement.filename))
3205
            lookup_name (s->wild_statement.filename);
3206
          open_input_bfds (s->wild_statement.children.head, mode);
3207
          break;
3208
        case lang_group_statement_enum:
3209
          {
3210
            struct bfd_link_hash_entry *undefs;
3211
 
3212
            /* We must continually search the entries in the group
3213
               until no new symbols are added to the list of undefined
3214
               symbols.  */
3215
 
3216
            do
3217
              {
3218
                undefs = link_info.hash->undefs_tail;
3219
                open_input_bfds (s->group_statement.children.head,
3220
                                 mode | OPEN_BFD_FORCE);
3221
              }
3222
            while (undefs != link_info.hash->undefs_tail);
3223
          }
3224
          break;
3225
        case lang_target_statement_enum:
3226
          current_target = s->target_statement.target;
3227
          break;
3228
        case lang_input_statement_enum:
3229
          if (s->input_statement.real)
3230
            {
3231
              lang_statement_union_type **os_tail;
3232
              lang_statement_list_type add;
3233
 
3234
              s->input_statement.target = current_target;
3235
 
3236
              /* If we are being called from within a group, and this
3237
                 is an archive which has already been searched, then
3238
                 force it to be researched unless the whole archive
3239
                 has been loaded already.  Do the same for a rescan.  */
3240
              if (mode != OPEN_BFD_NORMAL
3241
#ifdef ENABLE_PLUGINS
3242
                  && ((mode & OPEN_BFD_RESCAN) == 0
3243
                      || plugin_insert == NULL)
3244
#endif
3245
                  && !s->input_statement.whole_archive
3246
                  && s->input_statement.loaded
3247
                  && bfd_check_format (s->input_statement.the_bfd,
3248
                                       bfd_archive))
3249
                s->input_statement.loaded = FALSE;
3250
 
3251
              os_tail = lang_output_section_statement.tail;
3252
              lang_list_init (&add);
3253
 
3254
              if (! load_symbols (&s->input_statement, &add))
3255
                config.make_executable = FALSE;
3256
 
3257
              if (add.head != NULL)
3258
                {
3259
                  /* If this was a script with output sections then
3260
                     tack any added statements on to the end of the
3261
                     list.  This avoids having to reorder the output
3262
                     section statement list.  Very likely the user
3263
                     forgot -T, and whatever we do here will not meet
3264
                     naive user expectations.  */
3265
                  if (os_tail != lang_output_section_statement.tail)
3266
                    {
3267
                      einfo (_("%P: warning: %s contains output sections;"
3268
                               " did you forget -T?\n"),
3269
                             s->input_statement.filename);
3270
                      *stat_ptr->tail = add.head;
3271
                      stat_ptr->tail = add.tail;
3272
                    }
3273
                  else
3274
                    {
3275
                      *add.tail = s->header.next;
3276
                      s->header.next = add.head;
3277
                    }
3278
                }
3279
            }
3280
#ifdef ENABLE_PLUGINS
3281
          /* If we have found the point at which a plugin added new
3282
             files, clear plugin_insert to enable archive rescan.  */
3283
          if (&s->input_statement == plugin_insert)
3284
            plugin_insert = NULL;
3285
#endif
3286
          break;
3287
        case lang_assignment_statement_enum:
3288
          if (s->assignment_statement.exp->assign.hidden)
3289
            /* This is from a --defsym on the command line.  */
3290
            exp_fold_tree_no_dot (s->assignment_statement.exp);
3291
          break;
3292
        default:
3293
          break;
3294
        }
3295
    }
3296
 
3297
  /* Exit if any of the files were missing.  */
3298
  if (missing_file)
3299
    einfo ("%F");
3300
}
3301
 
3302
/* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions.  */
3303
 
3304
void
3305
lang_track_definedness (const char *name)
3306
{
3307
  if (bfd_hash_lookup (&lang_definedness_table, name, TRUE, FALSE) == NULL)
3308
    einfo (_("%P%F: bfd_hash_lookup failed creating symbol %s\n"), name);
3309
}
3310
 
3311
/* New-function for the definedness hash table.  */
3312
 
3313
static struct bfd_hash_entry *
3314
lang_definedness_newfunc (struct bfd_hash_entry *entry,
3315
                          struct bfd_hash_table *table ATTRIBUTE_UNUSED,
3316
                          const char *name ATTRIBUTE_UNUSED)
3317
{
3318
  struct lang_definedness_hash_entry *ret
3319
    = (struct lang_definedness_hash_entry *) entry;
3320
 
3321
  if (ret == NULL)
3322
    ret = (struct lang_definedness_hash_entry *)
3323
      bfd_hash_allocate (table, sizeof (struct lang_definedness_hash_entry));
3324
 
3325
  if (ret == NULL)
3326
    einfo (_("%P%F: bfd_hash_allocate failed creating symbol %s\n"), name);
3327
 
3328
  ret->iteration = -1;
3329
  return &ret->root;
3330
}
3331
 
3332
/* Return the iteration when the definition of NAME was last updated.  A
3333
   value of -1 means that the symbol is not defined in the linker script
3334
   or the command line, but may be defined in the linker symbol table.  */
3335
 
3336
int
3337
lang_symbol_definition_iteration (const char *name)
3338
{
3339
  struct lang_definedness_hash_entry *defentry
3340
    = (struct lang_definedness_hash_entry *)
3341
    bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3342
 
3343
  /* We've already created this one on the presence of DEFINED in the
3344
     script, so it can't be NULL unless something is borked elsewhere in
3345
     the code.  */
3346
  if (defentry == NULL)
3347
    FAIL ();
3348
 
3349
  return defentry->iteration;
3350
}
3351
 
3352
/* Update the definedness state of NAME.  */
3353
 
3354
void
3355
lang_update_definedness (const char *name, struct bfd_link_hash_entry *h)
3356
{
3357
  struct lang_definedness_hash_entry *defentry
3358
    = (struct lang_definedness_hash_entry *)
3359
    bfd_hash_lookup (&lang_definedness_table, name, FALSE, FALSE);
3360
 
3361
  /* We don't keep track of symbols not tested with DEFINED.  */
3362
  if (defentry == NULL)
3363
    return;
3364
 
3365
  /* If the symbol was already defined, and not from an earlier statement
3366
     iteration, don't update the definedness iteration, because that'd
3367
     make the symbol seem defined in the linker script at this point, and
3368
     it wasn't; it was defined in some object.  If we do anyway, DEFINED
3369
     would start to yield false before this point and the construct "sym =
3370
     DEFINED (sym) ? sym : X;" would change sym to X despite being defined
3371
     in an object.  */
3372
  if (h->type != bfd_link_hash_undefined
3373
      && h->type != bfd_link_hash_common
3374
      && h->type != bfd_link_hash_new
3375
      && defentry->iteration == -1)
3376
    return;
3377
 
3378
  defentry->iteration = lang_statement_iteration;
3379
}
3380
 
3381
/* Add the supplied name to the symbol table as an undefined reference.
3382
   This is a two step process as the symbol table doesn't even exist at
3383
   the time the ld command line is processed.  First we put the name
3384
   on a list, then, once the output file has been opened, transfer the
3385
   name to the symbol table.  */
3386
 
3387
typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
3388
 
3389
#define ldlang_undef_chain_list_head entry_symbol.next
3390
 
3391
void
3392
ldlang_add_undef (const char *const name, bfd_boolean cmdline)
3393
{
3394
  ldlang_undef_chain_list_type *new_undef;
3395
 
3396
  undef_from_cmdline = undef_from_cmdline || cmdline;
3397
  new_undef = (ldlang_undef_chain_list_type *) stat_alloc (sizeof (*new_undef));
3398
  new_undef->next = ldlang_undef_chain_list_head;
3399
  ldlang_undef_chain_list_head = new_undef;
3400
 
3401
  new_undef->name = xstrdup (name);
3402
 
3403
  if (link_info.output_bfd != NULL)
3404
    insert_undefined (new_undef->name);
3405
}
3406
 
3407
/* Insert NAME as undefined in the symbol table.  */
3408
 
3409
static void
3410
insert_undefined (const char *name)
3411
{
3412
  struct bfd_link_hash_entry *h;
3413
 
3414
  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, FALSE, TRUE);
3415
  if (h == NULL)
3416
    einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
3417
  if (h->type == bfd_link_hash_new)
3418
    {
3419
      h->type = bfd_link_hash_undefined;
3420
      h->u.undef.abfd = NULL;
3421
      bfd_link_add_undef (link_info.hash, h);
3422
    }
3423
}
3424
 
3425
/* Run through the list of undefineds created above and place them
3426
   into the linker hash table as undefined symbols belonging to the
3427
   script file.  */
3428
 
3429
static void
3430
lang_place_undefineds (void)
3431
{
3432
  ldlang_undef_chain_list_type *ptr;
3433
 
3434
  for (ptr = ldlang_undef_chain_list_head; ptr != NULL; ptr = ptr->next)
3435
    insert_undefined (ptr->name);
3436
}
3437
 
3438
/* Check for all readonly or some readwrite sections.  */
3439
 
3440
static void
3441
check_input_sections
3442
  (lang_statement_union_type *s,
3443
   lang_output_section_statement_type *output_section_statement)
3444
{
3445
  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
3446
    {
3447
      switch (s->header.type)
3448
        {
3449
        case lang_wild_statement_enum:
3450
          walk_wild (&s->wild_statement, check_section_callback,
3451
                     output_section_statement);
3452
          if (! output_section_statement->all_input_readonly)
3453
            return;
3454
          break;
3455
        case lang_constructors_statement_enum:
3456
          check_input_sections (constructor_list.head,
3457
                                output_section_statement);
3458
          if (! output_section_statement->all_input_readonly)
3459
            return;
3460
          break;
3461
        case lang_group_statement_enum:
3462
          check_input_sections (s->group_statement.children.head,
3463
                                output_section_statement);
3464
          if (! output_section_statement->all_input_readonly)
3465
            return;
3466
          break;
3467
        default:
3468
          break;
3469
        }
3470
    }
3471
}
3472
 
3473
/* Update wildcard statements if needed.  */
3474
 
3475
static void
3476
update_wild_statements (lang_statement_union_type *s)
3477
{
3478
  struct wildcard_list *sec;
3479
 
3480
  switch (sort_section)
3481
    {
3482
    default:
3483
      FAIL ();
3484
 
3485
    case none:
3486
      break;
3487
 
3488
    case by_name:
3489
    case by_alignment:
3490
      for (; s != NULL; s = s->header.next)
3491
        {
3492
          switch (s->header.type)
3493
            {
3494
            default:
3495
              break;
3496
 
3497
            case lang_wild_statement_enum:
3498
              sec = s->wild_statement.section_list;
3499
              for (sec = s->wild_statement.section_list; sec != NULL;
3500
                   sec = sec->next)
3501
                {
3502
                  switch (sec->spec.sorted)
3503
                    {
3504
                    case none:
3505
                      sec->spec.sorted = sort_section;
3506
                      break;
3507
                    case by_name:
3508
                      if (sort_section == by_alignment)
3509
                        sec->spec.sorted = by_name_alignment;
3510
                      break;
3511
                    case by_alignment:
3512
                      if (sort_section == by_name)
3513
                        sec->spec.sorted = by_alignment_name;
3514
                      break;
3515
                    default:
3516
                      break;
3517
                    }
3518
                }
3519
              break;
3520
 
3521
            case lang_constructors_statement_enum:
3522
              update_wild_statements (constructor_list.head);
3523
              break;
3524
 
3525
            case lang_output_section_statement_enum:
3526
              update_wild_statements
3527
                (s->output_section_statement.children.head);
3528
              break;
3529
 
3530
            case lang_group_statement_enum:
3531
              update_wild_statements (s->group_statement.children.head);
3532
              break;
3533
            }
3534
        }
3535
      break;
3536
    }
3537
}
3538
 
3539
/* Open input files and attach to output sections.  */
3540
 
3541
static void
3542
map_input_to_output_sections
3543
  (lang_statement_union_type *s, const char *target,
3544
   lang_output_section_statement_type *os)
3545
{
3546
  for (; s != NULL; s = s->header.next)
3547
    {
3548
      lang_output_section_statement_type *tos;
3549
      flagword flags;
3550
 
3551
      switch (s->header.type)
3552
        {
3553
        case lang_wild_statement_enum:
3554
          wild (&s->wild_statement, target, os);
3555
          break;
3556
        case lang_constructors_statement_enum:
3557
          map_input_to_output_sections (constructor_list.head,
3558
                                        target,
3559
                                        os);
3560
          break;
3561
        case lang_output_section_statement_enum:
3562
          tos = &s->output_section_statement;
3563
          if (tos->constraint != 0)
3564
            {
3565
              if (tos->constraint != ONLY_IF_RW
3566
                  && tos->constraint != ONLY_IF_RO)
3567
                break;
3568
              tos->all_input_readonly = TRUE;
3569
              check_input_sections (tos->children.head, tos);
3570
              if (tos->all_input_readonly != (tos->constraint == ONLY_IF_RO))
3571
                {
3572
                  tos->constraint = -1;
3573
                  break;
3574
                }
3575
            }
3576
          map_input_to_output_sections (tos->children.head,
3577
                                        target,
3578
                                        tos);
3579
          break;
3580
        case lang_output_statement_enum:
3581
          break;
3582
        case lang_target_statement_enum:
3583
          target = s->target_statement.target;
3584
          break;
3585
        case lang_group_statement_enum:
3586
          map_input_to_output_sections (s->group_statement.children.head,
3587
                                        target,
3588
                                        os);
3589
          break;
3590
        case lang_data_statement_enum:
3591
          /* Make sure that any sections mentioned in the expression
3592
             are initialized.  */
3593
          exp_init_os (s->data_statement.exp);
3594
          /* The output section gets CONTENTS, ALLOC and LOAD, but
3595
             these may be overridden by the script.  */
3596
          flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD;
3597
          switch (os->sectype)
3598
            {
3599
            case normal_section:
3600
            case overlay_section:
3601
              break;
3602
            case noalloc_section:
3603
              flags = SEC_HAS_CONTENTS;
3604
              break;
3605
            case noload_section:
3606
              if (bfd_get_flavour (link_info.output_bfd)
3607
                  == bfd_target_elf_flavour)
3608
                flags = SEC_NEVER_LOAD | SEC_ALLOC;
3609
              else
3610
                flags = SEC_NEVER_LOAD | SEC_HAS_CONTENTS;
3611
              break;
3612
            }
3613
          if (os->bfd_section == NULL)
3614
            init_os (os, flags);
3615
          else
3616
            os->bfd_section->flags |= flags;
3617
          break;
3618
        case lang_input_section_enum:
3619
          break;
3620
        case lang_fill_statement_enum:
3621
        case lang_object_symbols_statement_enum:
3622
        case lang_reloc_statement_enum:
3623
        case lang_padding_statement_enum:
3624
        case lang_input_statement_enum:
3625
          if (os != NULL && os->bfd_section == NULL)
3626
            init_os (os, 0);
3627
          break;
3628
        case lang_assignment_statement_enum:
3629
          if (os != NULL && os->bfd_section == NULL)
3630
            init_os (os, 0);
3631
 
3632
          /* Make sure that any sections mentioned in the assignment
3633
             are initialized.  */
3634
          exp_init_os (s->assignment_statement.exp);
3635
          break;
3636
        case lang_address_statement_enum:
3637
          /* Mark the specified section with the supplied address.
3638
             If this section was actually a segment marker, then the
3639
             directive is ignored if the linker script explicitly
3640
             processed the segment marker.  Originally, the linker
3641
             treated segment directives (like -Ttext on the
3642
             command-line) as section directives.  We honor the
3643
             section directive semantics for backwards compatibilty;
3644
             linker scripts that do not specifically check for
3645
             SEGMENT_START automatically get the old semantics.  */
3646
          if (!s->address_statement.segment
3647
              || !s->address_statement.segment->used)
3648
            {
3649
              const char *name = s->address_statement.section_name;
3650
 
3651
              /* Create the output section statement here so that
3652
                 orphans with a set address will be placed after other
3653
                 script sections.  If we let the orphan placement code
3654
                 place them in amongst other sections then the address
3655
                 will affect following script sections, which is
3656
                 likely to surprise naive users.  */
3657
              tos = lang_output_section_statement_lookup (name, 0, TRUE);
3658
              tos->addr_tree = s->address_statement.address;
3659
              if (tos->bfd_section == NULL)
3660
                init_os (tos, 0);
3661
            }
3662
          break;
3663
        case lang_insert_statement_enum:
3664
          break;
3665
        }
3666
    }
3667
}
3668
 
3669
/* An insert statement snips out all the linker statements from the
3670
   start of the list and places them after the output section
3671
   statement specified by the insert.  This operation is complicated
3672
   by the fact that we keep a doubly linked list of output section
3673
   statements as well as the singly linked list of all statements.  */
3674
 
3675
static void
3676
process_insert_statements (void)
3677
{
3678
  lang_statement_union_type **s;
3679
  lang_output_section_statement_type *first_os = NULL;
3680
  lang_output_section_statement_type *last_os = NULL;
3681
  lang_output_section_statement_type *os;
3682
 
3683
  /* "start of list" is actually the statement immediately after
3684
     the special abs_section output statement, so that it isn't
3685
     reordered.  */
3686
  s = &lang_output_section_statement.head;
3687
  while (*(s = &(*s)->header.next) != NULL)
3688
    {
3689
      if ((*s)->header.type == lang_output_section_statement_enum)
3690
        {
3691
          /* Keep pointers to the first and last output section
3692
             statement in the sequence we may be about to move.  */
3693
          os = &(*s)->output_section_statement;
3694
 
3695
          ASSERT (last_os == NULL || last_os->next == os);
3696
          last_os = os;
3697
 
3698
          /* Set constraint negative so that lang_output_section_find
3699
             won't match this output section statement.  At this
3700
             stage in linking constraint has values in the range
3701
             [-1, ONLY_IN_RW].  */
3702
          last_os->constraint = -2 - last_os->constraint;
3703
          if (first_os == NULL)
3704
            first_os = last_os;
3705
        }
3706
      else if ((*s)->header.type == lang_insert_statement_enum)
3707
        {
3708
          lang_insert_statement_type *i = &(*s)->insert_statement;
3709
          lang_output_section_statement_type *where;
3710
          lang_statement_union_type **ptr;
3711
          lang_statement_union_type *first;
3712
 
3713
          where = lang_output_section_find (i->where);
3714
          if (where != NULL && i->is_before)
3715
            {
3716
              do
3717
                where = where->prev;
3718
              while (where != NULL && where->constraint < 0);
3719
            }
3720
          if (where == NULL)
3721
            {
3722
              einfo (_("%F%P: %s not found for insert\n"), i->where);
3723
              return;
3724
            }
3725
 
3726
          /* Deal with reordering the output section statement list.  */
3727
          if (last_os != NULL)
3728
            {
3729
              asection *first_sec, *last_sec;
3730
              struct lang_output_section_statement_struct **next;
3731
 
3732
              /* Snip out the output sections we are moving.  */
3733
              first_os->prev->next = last_os->next;
3734
              if (last_os->next == NULL)
3735
                {
3736
                  next = &first_os->prev->next;
3737
                  lang_output_section_statement.tail
3738
                    = (lang_statement_union_type **) next;
3739
                }
3740
              else
3741
                last_os->next->prev = first_os->prev;
3742
              /* Add them in at the new position.  */
3743
              last_os->next = where->next;
3744
              if (where->next == NULL)
3745
                {
3746
                  next = &last_os->next;
3747
                  lang_output_section_statement.tail
3748
                    = (lang_statement_union_type **) next;
3749
                }
3750
              else
3751
                where->next->prev = last_os;
3752
              first_os->prev = where;
3753
              where->next = first_os;
3754
 
3755
              /* Move the bfd sections in the same way.  */
3756
              first_sec = NULL;
3757
              last_sec = NULL;
3758
              for (os = first_os; os != NULL; os = os->next)
3759
                {
3760
                  os->constraint = -2 - os->constraint;
3761
                  if (os->bfd_section != NULL
3762
                      && os->bfd_section->owner != NULL)
3763
                    {
3764
                      last_sec = os->bfd_section;
3765
                      if (first_sec == NULL)
3766
                        first_sec = last_sec;
3767
                    }
3768
                  if (os == last_os)
3769
                    break;
3770
                }
3771
              if (last_sec != NULL)
3772
                {
3773
                  asection *sec = where->bfd_section;
3774
                  if (sec == NULL)
3775
                    sec = output_prev_sec_find (where);
3776
 
3777
                  /* The place we want to insert must come after the
3778
                     sections we are moving.  So if we find no
3779
                     section or if the section is the same as our
3780
                     last section, then no move is needed.  */
3781
                  if (sec != NULL && sec != last_sec)
3782
                    {
3783
                      /* Trim them off.  */
3784
                      if (first_sec->prev != NULL)
3785
                        first_sec->prev->next = last_sec->next;
3786
                      else
3787
                        link_info.output_bfd->sections = last_sec->next;
3788
                      if (last_sec->next != NULL)
3789
                        last_sec->next->prev = first_sec->prev;
3790
                      else
3791
                        link_info.output_bfd->section_last = first_sec->prev;
3792
                      /* Add back.  */
3793
                      last_sec->next = sec->next;
3794
                      if (sec->next != NULL)
3795
                        sec->next->prev = last_sec;
3796
                      else
3797
                        link_info.output_bfd->section_last = last_sec;
3798
                      first_sec->prev = sec;
3799
                      sec->next = first_sec;
3800
                    }
3801
                }
3802
 
3803
              first_os = NULL;
3804
              last_os = NULL;
3805
            }
3806
 
3807
          ptr = insert_os_after (where);
3808
          /* Snip everything after the abs_section output statement we
3809
             know is at the start of the list, up to and including
3810
             the insert statement we are currently processing.  */
3811
          first = lang_output_section_statement.head->header.next;
3812
          lang_output_section_statement.head->header.next = (*s)->header.next;
3813
          /* Add them back where they belong.  */
3814
          *s = *ptr;
3815
          if (*s == NULL)
3816
            statement_list.tail = s;
3817
          *ptr = first;
3818
          s = &lang_output_section_statement.head;
3819
        }
3820
    }
3821
 
3822
  /* Undo constraint twiddling.  */
3823
  for (os = first_os; os != NULL; os = os->next)
3824
    {
3825
      os->constraint = -2 - os->constraint;
3826
      if (os == last_os)
3827
        break;
3828
    }
3829
}
3830
 
3831
/* An output section might have been removed after its statement was
3832
   added.  For example, ldemul_before_allocation can remove dynamic
3833
   sections if they turn out to be not needed.  Clean them up here.  */
3834
 
3835
void
3836
strip_excluded_output_sections (void)
3837
{
3838
  lang_output_section_statement_type *os;
3839
 
3840
  /* Run lang_size_sections (if not already done).  */
3841
  if (expld.phase != lang_mark_phase_enum)
3842
    {
3843
      expld.phase = lang_mark_phase_enum;
3844
      expld.dataseg.phase = exp_dataseg_none;
3845
      one_lang_size_sections_pass (NULL, FALSE);
3846
      lang_reset_memory_regions ();
3847
    }
3848
 
3849
  for (os = &lang_output_section_statement.head->output_section_statement;
3850
       os != NULL;
3851
       os = os->next)
3852
    {
3853
      asection *output_section;
3854
      bfd_boolean exclude;
3855
 
3856
      if (os->constraint < 0)
3857
        continue;
3858
 
3859
      output_section = os->bfd_section;
3860
      if (output_section == NULL)
3861
        continue;
3862
 
3863
      exclude = (output_section->rawsize == 0
3864
                 && (output_section->flags & SEC_KEEP) == 0
3865
                 && !bfd_section_removed_from_list (link_info.output_bfd,
3866
                                                    output_section));
3867
 
3868
      /* Some sections have not yet been sized, notably .gnu.version,
3869
         .dynsym, .dynstr and .hash.  These all have SEC_LINKER_CREATED
3870
         input sections, so don't drop output sections that have such
3871
         input sections unless they are also marked SEC_EXCLUDE.  */
3872
      if (exclude && output_section->map_head.s != NULL)
3873
        {
3874
          asection *s;
3875
 
3876
          for (s = output_section->map_head.s; s != NULL; s = s->map_head.s)
3877
            if ((s->flags & SEC_LINKER_CREATED) != 0
3878
                && (s->flags & SEC_EXCLUDE) == 0)
3879
              {
3880
                exclude = FALSE;
3881
                break;
3882
              }
3883
        }
3884
 
3885
      /* TODO: Don't just junk map_head.s, turn them into link_orders.  */
3886
      output_section->map_head.link_order = NULL;
3887
      output_section->map_tail.link_order = NULL;
3888
 
3889
      if (exclude)
3890
        {
3891
          /* We don't set bfd_section to NULL since bfd_section of the
3892
             removed output section statement may still be used.  */
3893
          if (!os->section_relative_symbol
3894
              && !os->update_dot_tree)
3895
            os->ignored = TRUE;
3896
          output_section->flags |= SEC_EXCLUDE;
3897
          bfd_section_list_remove (link_info.output_bfd, output_section);
3898
          link_info.output_bfd->section_count--;
3899
        }
3900
    }
3901
 
3902
  /* Stop future calls to lang_add_section from messing with map_head
3903
     and map_tail link_order fields.  */
3904
  stripped_excluded_sections = TRUE;
3905
}
3906
 
3907
static void
3908
print_output_section_statement
3909
  (lang_output_section_statement_type *output_section_statement)
3910
{
3911
  asection *section = output_section_statement->bfd_section;
3912
  int len;
3913
 
3914
  if (output_section_statement != abs_output_section)
3915
    {
3916
      minfo ("\n%s", output_section_statement->name);
3917
 
3918
      if (section != NULL)
3919
        {
3920
          print_dot = section->vma;
3921
 
3922
          len = strlen (output_section_statement->name);
3923
          if (len >= SECTION_NAME_MAP_LENGTH - 1)
3924
            {
3925
              print_nl ();
3926
              len = 0;
3927
            }
3928
          while (len < SECTION_NAME_MAP_LENGTH)
3929
            {
3930
              print_space ();
3931
              ++len;
3932
            }
3933
 
3934
          minfo ("0x%V %W", section->vma, section->size);
3935
 
3936
          if (section->vma != section->lma)
3937
            minfo (_(" load address 0x%V"), section->lma);
3938
 
3939
          if (output_section_statement->update_dot_tree != NULL)
3940
            exp_fold_tree (output_section_statement->update_dot_tree,
3941
                           bfd_abs_section_ptr, &print_dot);
3942
        }
3943
 
3944
      print_nl ();
3945
    }
3946
 
3947
  print_statement_list (output_section_statement->children.head,
3948
                        output_section_statement);
3949
}
3950
 
3951
/* Scan for the use of the destination in the right hand side
3952
   of an expression.  In such cases we will not compute the
3953
   correct expression, since the value of DST that is used on
3954
   the right hand side will be its final value, not its value
3955
   just before this expression is evaluated.  */
3956
 
3957
static bfd_boolean
3958
scan_for_self_assignment (const char * dst, etree_type * rhs)
3959
{
3960
  if (rhs == NULL || dst == NULL)
3961
    return FALSE;
3962
 
3963
  switch (rhs->type.node_class)
3964
    {
3965
    case etree_binary:
3966
      return (scan_for_self_assignment (dst, rhs->binary.lhs)
3967
              || scan_for_self_assignment (dst, rhs->binary.rhs));
3968
 
3969
    case etree_trinary:
3970
      return (scan_for_self_assignment (dst, rhs->trinary.lhs)
3971
              || scan_for_self_assignment (dst, rhs->trinary.rhs));
3972
 
3973
    case etree_assign:
3974
    case etree_provided:
3975
    case etree_provide:
3976
      if (strcmp (dst, rhs->assign.dst) == 0)
3977
        return TRUE;
3978
      return scan_for_self_assignment (dst, rhs->assign.src);
3979
 
3980
    case etree_unary:
3981
      return scan_for_self_assignment (dst, rhs->unary.child);
3982
 
3983
    case etree_value:
3984
      if (rhs->value.str)
3985
        return strcmp (dst, rhs->value.str) == 0;
3986
      return FALSE;
3987
 
3988
    case etree_name:
3989
      if (rhs->name.name)
3990
        return strcmp (dst, rhs->name.name) == 0;
3991
      return FALSE;
3992
 
3993
    default:
3994
      break;
3995
    }
3996
 
3997
  return FALSE;
3998
}
3999
 
4000
 
4001
static void
4002
print_assignment (lang_assignment_statement_type *assignment,
4003
                  lang_output_section_statement_type *output_section)
4004
{
4005
  unsigned int i;
4006
  bfd_boolean is_dot;
4007
  bfd_boolean computation_is_valid = TRUE;
4008
  etree_type *tree;
4009
  asection *osec;
4010
 
4011
  for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4012
    print_space ();
4013
 
4014
  if (assignment->exp->type.node_class == etree_assert)
4015
    {
4016
      is_dot = FALSE;
4017
      tree = assignment->exp->assert_s.child;
4018
      computation_is_valid = TRUE;
4019
    }
4020
  else
4021
    {
4022
      const char *dst = assignment->exp->assign.dst;
4023
 
4024
      is_dot = (dst[0] == '.' && dst[1] == 0);
4025
      tree = assignment->exp->assign.src;
4026
      computation_is_valid = is_dot || !scan_for_self_assignment (dst, tree);
4027
    }
4028
 
4029
  osec = output_section->bfd_section;
4030
  if (osec == NULL)
4031
    osec = bfd_abs_section_ptr;
4032
  exp_fold_tree (tree, osec, &print_dot);
4033
  if (expld.result.valid_p)
4034
    {
4035
      bfd_vma value;
4036
 
4037
      if (computation_is_valid)
4038
        {
4039
          value = expld.result.value;
4040
 
4041
          if (expld.result.section != NULL)
4042
            value += expld.result.section->vma;
4043
 
4044
          minfo ("0x%V", value);
4045
          if (is_dot)
4046
            print_dot = value;
4047
        }
4048
      else
4049
        {
4050
          struct bfd_link_hash_entry *h;
4051
 
4052
          h = bfd_link_hash_lookup (link_info.hash, assignment->exp->assign.dst,
4053
                                    FALSE, FALSE, TRUE);
4054
          if (h)
4055
            {
4056
              value = h->u.def.value;
4057
              value += h->u.def.section->output_section->vma;
4058
              value += h->u.def.section->output_offset;
4059
 
4060
              minfo ("[0x%V]", value);
4061
            }
4062
          else
4063
            minfo ("[unresolved]");
4064
        }
4065
    }
4066
  else
4067
    {
4068
      minfo ("*undef*   ");
4069
#ifdef BFD64
4070
      minfo ("        ");
4071
#endif
4072
    }
4073
 
4074
  minfo ("                ");
4075
  exp_print_tree (assignment->exp);
4076
  print_nl ();
4077
}
4078
 
4079
static void
4080
print_input_statement (lang_input_statement_type *statm)
4081
{
4082
  if (statm->filename != NULL
4083
      && (statm->the_bfd == NULL
4084
          || (statm->the_bfd->flags & BFD_LINKER_CREATED) == 0))
4085
    fprintf (config.map_file, "LOAD %s\n", statm->filename);
4086
}
4087
 
4088
/* Print all symbols defined in a particular section.  This is called
4089
   via bfd_link_hash_traverse, or by print_all_symbols.  */
4090
 
4091
static bfd_boolean
4092
print_one_symbol (struct bfd_link_hash_entry *hash_entry, void *ptr)
4093
{
4094
  asection *sec = (asection *) ptr;
4095
 
4096
  if ((hash_entry->type == bfd_link_hash_defined
4097
       || hash_entry->type == bfd_link_hash_defweak)
4098
      && sec == hash_entry->u.def.section)
4099
    {
4100
      int i;
4101
 
4102
      for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4103
        print_space ();
4104
      minfo ("0x%V   ",
4105
             (hash_entry->u.def.value
4106
              + hash_entry->u.def.section->output_offset
4107
              + hash_entry->u.def.section->output_section->vma));
4108
 
4109
      minfo ("             %T\n", hash_entry->root.string);
4110
    }
4111
 
4112
  return TRUE;
4113
}
4114
 
4115
static int
4116
hash_entry_addr_cmp (const void *a, const void *b)
4117
{
4118
  const struct bfd_link_hash_entry *l = *(const struct bfd_link_hash_entry **)a;
4119
  const struct bfd_link_hash_entry *r = *(const struct bfd_link_hash_entry **)b;
4120
 
4121
  if (l->u.def.value < r->u.def.value)
4122
    return -1;
4123
  else if (l->u.def.value > r->u.def.value)
4124
    return 1;
4125
  else
4126
    return 0;
4127
}
4128
 
4129
static void
4130
print_all_symbols (asection *sec)
4131
{
4132
  struct fat_user_section_struct *ud =
4133
      (struct fat_user_section_struct *) get_userdata (sec);
4134
  struct map_symbol_def *def;
4135
  struct bfd_link_hash_entry **entries;
4136
  unsigned int i;
4137
 
4138
  if (!ud)
4139
    return;
4140
 
4141
  *ud->map_symbol_def_tail = 0;
4142
 
4143
  /* Sort the symbols by address.  */
4144
  entries = (struct bfd_link_hash_entry **)
4145
      obstack_alloc (&map_obstack, ud->map_symbol_def_count * sizeof (*entries));
4146
 
4147
  for (i = 0, def = ud->map_symbol_def_head; def; def = def->next, i++)
4148
    entries[i] = def->entry;
4149
 
4150
  qsort (entries, ud->map_symbol_def_count, sizeof (*entries),
4151
         hash_entry_addr_cmp);
4152
 
4153
  /* Print the symbols.  */
4154
  for (i = 0; i < ud->map_symbol_def_count; i++)
4155
    print_one_symbol (entries[i], sec);
4156
 
4157
  obstack_free (&map_obstack, entries);
4158
}
4159
 
4160
/* Print information about an input section to the map file.  */
4161
 
4162
static void
4163
print_input_section (asection *i, bfd_boolean is_discarded)
4164
{
4165
  bfd_size_type size = i->size;
4166
  int len;
4167
  bfd_vma addr;
4168
 
4169
  init_opb ();
4170
 
4171
  print_space ();
4172
  minfo ("%s", i->name);
4173
 
4174
  len = 1 + strlen (i->name);
4175
  if (len >= SECTION_NAME_MAP_LENGTH - 1)
4176
    {
4177
      print_nl ();
4178
      len = 0;
4179
    }
4180
  while (len < SECTION_NAME_MAP_LENGTH)
4181
    {
4182
      print_space ();
4183
      ++len;
4184
    }
4185
 
4186
  if (i->output_section != NULL
4187
      && i->output_section->owner == link_info.output_bfd)
4188
    addr = i->output_section->vma + i->output_offset;
4189
  else
4190
    {
4191
      addr = print_dot;
4192
      if (!is_discarded)
4193
        size = 0;
4194
    }
4195
 
4196
  minfo ("0x%V %W %B\n", addr, TO_ADDR (size), i->owner);
4197
 
4198
  if (size != i->rawsize && i->rawsize != 0)
4199
    {
4200
      len = SECTION_NAME_MAP_LENGTH + 3;
4201
#ifdef BFD64
4202
      len += 16;
4203
#else
4204
      len += 8;
4205
#endif
4206
      while (len > 0)
4207
        {
4208
          print_space ();
4209
          --len;
4210
        }
4211
 
4212
      minfo (_("%W (size before relaxing)\n"), i->rawsize);
4213
    }
4214
 
4215
  if (i->output_section != NULL
4216
      && i->output_section->owner == link_info.output_bfd)
4217
    {
4218
      if (link_info.reduce_memory_overheads)
4219
        bfd_link_hash_traverse (link_info.hash, print_one_symbol, i);
4220
      else
4221
        print_all_symbols (i);
4222
 
4223
      /* Update print_dot, but make sure that we do not move it
4224
         backwards - this could happen if we have overlays and a
4225
         later overlay is shorter than an earier one.  */
4226
      if (addr + TO_ADDR (size) > print_dot)
4227
        print_dot = addr + TO_ADDR (size);
4228
    }
4229
}
4230
 
4231
static void
4232
print_fill_statement (lang_fill_statement_type *fill)
4233
{
4234
  size_t size;
4235
  unsigned char *p;
4236
  fputs (" FILL mask 0x", config.map_file);
4237
  for (p = fill->fill->data, size = fill->fill->size; size != 0; p++, size--)
4238
    fprintf (config.map_file, "%02x", *p);
4239
  fputs ("\n", config.map_file);
4240
}
4241
 
4242
static void
4243
print_data_statement (lang_data_statement_type *data)
4244
{
4245
  int i;
4246
  bfd_vma addr;
4247
  bfd_size_type size;
4248
  const char *name;
4249
 
4250
  init_opb ();
4251
  for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4252
    print_space ();
4253
 
4254
  addr = data->output_offset;
4255
  if (data->output_section != NULL)
4256
    addr += data->output_section->vma;
4257
 
4258
  switch (data->type)
4259
    {
4260
    default:
4261
      abort ();
4262
    case BYTE:
4263
      size = BYTE_SIZE;
4264
      name = "BYTE";
4265
      break;
4266
    case SHORT:
4267
      size = SHORT_SIZE;
4268
      name = "SHORT";
4269
      break;
4270
    case LONG:
4271
      size = LONG_SIZE;
4272
      name = "LONG";
4273
      break;
4274
    case QUAD:
4275
      size = QUAD_SIZE;
4276
      name = "QUAD";
4277
      break;
4278
    case SQUAD:
4279
      size = QUAD_SIZE;
4280
      name = "SQUAD";
4281
      break;
4282
    }
4283
 
4284
  minfo ("0x%V %W %s 0x%v", addr, size, name, data->value);
4285
 
4286
  if (data->exp->type.node_class != etree_value)
4287
    {
4288
      print_space ();
4289
      exp_print_tree (data->exp);
4290
    }
4291
 
4292
  print_nl ();
4293
 
4294
  print_dot = addr + TO_ADDR (size);
4295
}
4296
 
4297
/* Print an address statement.  These are generated by options like
4298
   -Ttext.  */
4299
 
4300
static void
4301
print_address_statement (lang_address_statement_type *address)
4302
{
4303
  minfo (_("Address of section %s set to "), address->section_name);
4304
  exp_print_tree (address->address);
4305
  print_nl ();
4306
}
4307
 
4308
/* Print a reloc statement.  */
4309
 
4310
static void
4311
print_reloc_statement (lang_reloc_statement_type *reloc)
4312
{
4313
  int i;
4314
  bfd_vma addr;
4315
  bfd_size_type size;
4316
 
4317
  init_opb ();
4318
  for (i = 0; i < SECTION_NAME_MAP_LENGTH; i++)
4319
    print_space ();
4320
 
4321
  addr = reloc->output_offset;
4322
  if (reloc->output_section != NULL)
4323
    addr += reloc->output_section->vma;
4324
 
4325
  size = bfd_get_reloc_size (reloc->howto);
4326
 
4327
  minfo ("0x%V %W RELOC %s ", addr, size, reloc->howto->name);
4328
 
4329
  if (reloc->name != NULL)
4330
    minfo ("%s+", reloc->name);
4331
  else
4332
    minfo ("%s+", reloc->section->name);
4333
 
4334
  exp_print_tree (reloc->addend_exp);
4335
 
4336
  print_nl ();
4337
 
4338
  print_dot = addr + TO_ADDR (size);
4339
}
4340
 
4341
static void
4342
print_padding_statement (lang_padding_statement_type *s)
4343
{
4344
  int len;
4345
  bfd_vma addr;
4346
 
4347
  init_opb ();
4348
  minfo (" *fill*");
4349
 
4350
  len = sizeof " *fill*" - 1;
4351
  while (len < SECTION_NAME_MAP_LENGTH)
4352
    {
4353
      print_space ();
4354
      ++len;
4355
    }
4356
 
4357
  addr = s->output_offset;
4358
  if (s->output_section != NULL)
4359
    addr += s->output_section->vma;
4360
  minfo ("0x%V %W ", addr, (bfd_vma) s->size);
4361
 
4362
  if (s->fill->size != 0)
4363
    {
4364
      size_t size;
4365
      unsigned char *p;
4366
      for (p = s->fill->data, size = s->fill->size; size != 0; p++, size--)
4367
        fprintf (config.map_file, "%02x", *p);
4368
    }
4369
 
4370
  print_nl ();
4371
 
4372
  print_dot = addr + TO_ADDR (s->size);
4373
}
4374
 
4375
static void
4376
print_wild_statement (lang_wild_statement_type *w,
4377
                      lang_output_section_statement_type *os)
4378
{
4379
  struct wildcard_list *sec;
4380
 
4381
  print_space ();
4382
 
4383
  if (w->filenames_sorted)
4384
    minfo ("SORT(");
4385
  if (w->filename != NULL)
4386
    minfo ("%s", w->filename);
4387
  else
4388
    minfo ("*");
4389
  if (w->filenames_sorted)
4390
    minfo (")");
4391
 
4392
  minfo ("(");
4393
  for (sec = w->section_list; sec; sec = sec->next)
4394
    {
4395
      if (sec->spec.sorted)
4396
        minfo ("SORT(");
4397
      if (sec->spec.exclude_name_list != NULL)
4398
        {
4399
          name_list *tmp;
4400
          minfo ("EXCLUDE_FILE(%s", sec->spec.exclude_name_list->name);
4401
          for (tmp = sec->spec.exclude_name_list->next; tmp; tmp = tmp->next)
4402
            minfo (" %s", tmp->name);
4403
          minfo (") ");
4404
        }
4405
      if (sec->spec.name != NULL)
4406
        minfo ("%s", sec->spec.name);
4407
      else
4408
        minfo ("*");
4409
      if (sec->spec.sorted)
4410
        minfo (")");
4411
      if (sec->next)
4412
        minfo (" ");
4413
    }
4414
  minfo (")");
4415
 
4416
  print_nl ();
4417
 
4418
  print_statement_list (w->children.head, os);
4419
}
4420
 
4421
/* Print a group statement.  */
4422
 
4423
static void
4424
print_group (lang_group_statement_type *s,
4425
             lang_output_section_statement_type *os)
4426
{
4427
  fprintf (config.map_file, "START GROUP\n");
4428
  print_statement_list (s->children.head, os);
4429
  fprintf (config.map_file, "END GROUP\n");
4430
}
4431
 
4432
/* Print the list of statements in S.
4433
   This can be called for any statement type.  */
4434
 
4435
static void
4436
print_statement_list (lang_statement_union_type *s,
4437
                      lang_output_section_statement_type *os)
4438
{
4439
  while (s != NULL)
4440
    {
4441
      print_statement (s, os);
4442
      s = s->header.next;
4443
    }
4444
}
4445
 
4446
/* Print the first statement in statement list S.
4447
   This can be called for any statement type.  */
4448
 
4449
static void
4450
print_statement (lang_statement_union_type *s,
4451
                 lang_output_section_statement_type *os)
4452
{
4453
  switch (s->header.type)
4454
    {
4455
    default:
4456
      fprintf (config.map_file, _("Fail with %d\n"), s->header.type);
4457
      FAIL ();
4458
      break;
4459
    case lang_constructors_statement_enum:
4460
      if (constructor_list.head != NULL)
4461
        {
4462
          if (constructors_sorted)
4463
            minfo (" SORT (CONSTRUCTORS)\n");
4464
          else
4465
            minfo (" CONSTRUCTORS\n");
4466
          print_statement_list (constructor_list.head, os);
4467
        }
4468
      break;
4469
    case lang_wild_statement_enum:
4470
      print_wild_statement (&s->wild_statement, os);
4471
      break;
4472
    case lang_address_statement_enum:
4473
      print_address_statement (&s->address_statement);
4474
      break;
4475
    case lang_object_symbols_statement_enum:
4476
      minfo (" CREATE_OBJECT_SYMBOLS\n");
4477
      break;
4478
    case lang_fill_statement_enum:
4479
      print_fill_statement (&s->fill_statement);
4480
      break;
4481
    case lang_data_statement_enum:
4482
      print_data_statement (&s->data_statement);
4483
      break;
4484
    case lang_reloc_statement_enum:
4485
      print_reloc_statement (&s->reloc_statement);
4486
      break;
4487
    case lang_input_section_enum:
4488
      print_input_section (s->input_section.section, FALSE);
4489
      break;
4490
    case lang_padding_statement_enum:
4491
      print_padding_statement (&s->padding_statement);
4492
      break;
4493
    case lang_output_section_statement_enum:
4494
      print_output_section_statement (&s->output_section_statement);
4495
      break;
4496
    case lang_assignment_statement_enum:
4497
      print_assignment (&s->assignment_statement, os);
4498
      break;
4499
    case lang_target_statement_enum:
4500
      fprintf (config.map_file, "TARGET(%s)\n", s->target_statement.target);
4501
      break;
4502
    case lang_output_statement_enum:
4503
      minfo ("OUTPUT(%s", s->output_statement.name);
4504
      if (output_target != NULL)
4505
        minfo (" %s", output_target);
4506
      minfo (")\n");
4507
      break;
4508
    case lang_input_statement_enum:
4509
      print_input_statement (&s->input_statement);
4510
      break;
4511
    case lang_group_statement_enum:
4512
      print_group (&s->group_statement, os);
4513
      break;
4514
    case lang_insert_statement_enum:
4515
      minfo ("INSERT %s %s\n",
4516
             s->insert_statement.is_before ? "BEFORE" : "AFTER",
4517
             s->insert_statement.where);
4518
      break;
4519
    }
4520
}
4521
 
4522
static void
4523
print_statements (void)
4524
{
4525
  print_statement_list (statement_list.head, abs_output_section);
4526
}
4527
 
4528
/* Print the first N statements in statement list S to STDERR.
4529
   If N == 0, nothing is printed.
4530
   If N < 0, the entire list is printed.
4531
   Intended to be called from GDB.  */
4532
 
4533
void
4534
dprint_statement (lang_statement_union_type *s, int n)
4535
{
4536
  FILE *map_save = config.map_file;
4537
 
4538
  config.map_file = stderr;
4539
 
4540
  if (n < 0)
4541
    print_statement_list (s, abs_output_section);
4542
  else
4543
    {
4544
      while (s && --n >= 0)
4545
        {
4546
          print_statement (s, abs_output_section);
4547
          s = s->header.next;
4548
        }
4549
    }
4550
 
4551
  config.map_file = map_save;
4552
}
4553
 
4554
static void
4555
insert_pad (lang_statement_union_type **ptr,
4556
            fill_type *fill,
4557
            unsigned int alignment_needed,
4558
            asection *output_section,
4559
            bfd_vma dot)
4560
{
4561
  static fill_type zero_fill = { 1, { 0 } };
4562
  lang_statement_union_type *pad = NULL;
4563
 
4564
  if (ptr != &statement_list.head)
4565
    pad = ((lang_statement_union_type *)
4566
           ((char *) ptr - offsetof (lang_statement_union_type, header.next)));
4567
  if (pad != NULL
4568
      && pad->header.type == lang_padding_statement_enum
4569
      && pad->padding_statement.output_section == output_section)
4570
    {
4571
      /* Use the existing pad statement.  */
4572
    }
4573
  else if ((pad = *ptr) != NULL
4574
           && pad->header.type == lang_padding_statement_enum
4575
           && pad->padding_statement.output_section == output_section)
4576
    {
4577
      /* Use the existing pad statement.  */
4578
    }
4579
  else
4580
    {
4581
      /* Make a new padding statement, linked into existing chain.  */
4582
      pad = (lang_statement_union_type *)
4583
          stat_alloc (sizeof (lang_padding_statement_type));
4584
      pad->header.next = *ptr;
4585
      *ptr = pad;
4586
      pad->header.type = lang_padding_statement_enum;
4587
      pad->padding_statement.output_section = output_section;
4588
      if (fill == NULL)
4589
        fill = &zero_fill;
4590
      pad->padding_statement.fill = fill;
4591
    }
4592
  pad->padding_statement.output_offset = dot - output_section->vma;
4593
  pad->padding_statement.size = alignment_needed;
4594
  output_section->size += alignment_needed;
4595
}
4596
 
4597
/* Work out how much this section will move the dot point.  */
4598
 
4599
static bfd_vma
4600
size_input_section
4601
  (lang_statement_union_type **this_ptr,
4602
   lang_output_section_statement_type *output_section_statement,
4603
   fill_type *fill,
4604
   bfd_vma dot)
4605
{
4606
  lang_input_section_type *is = &((*this_ptr)->input_section);
4607
  asection *i = is->section;
4608
 
4609
  if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
4610
      && (i->flags & SEC_EXCLUDE) == 0)
4611
    {
4612
      unsigned int alignment_needed;
4613
      asection *o;
4614
 
4615
      /* Align this section first to the input sections requirement,
4616
         then to the output section's requirement.  If this alignment
4617
         is greater than any seen before, then record it too.  Perform
4618
         the alignment by inserting a magic 'padding' statement.  */
4619
 
4620
      if (output_section_statement->subsection_alignment != -1)
4621
        i->alignment_power = output_section_statement->subsection_alignment;
4622
 
4623
      o = output_section_statement->bfd_section;
4624
      if (o->alignment_power < i->alignment_power)
4625
        o->alignment_power = i->alignment_power;
4626
 
4627
      alignment_needed = align_power (dot, i->alignment_power) - dot;
4628
 
4629
      if (alignment_needed != 0)
4630
        {
4631
          insert_pad (this_ptr, fill, TO_SIZE (alignment_needed), o, dot);
4632
          dot += alignment_needed;
4633
        }
4634
 
4635
      /* Remember where in the output section this input section goes.  */
4636
 
4637
      i->output_offset = dot - o->vma;
4638
 
4639
      /* Mark how big the output section must be to contain this now.  */
4640
      dot += TO_ADDR (i->size);
4641
      o->size = TO_SIZE (dot - o->vma);
4642
    }
4643
  else
4644
    {
4645
      i->output_offset = i->vma - output_section_statement->bfd_section->vma;
4646
    }
4647
 
4648
  return dot;
4649
}
4650
 
4651
static int
4652
sort_sections_by_lma (const void *arg1, const void *arg2)
4653
{
4654
  const asection *sec1 = *(const asection **) arg1;
4655
  const asection *sec2 = *(const asection **) arg2;
4656
 
4657
  if (bfd_section_lma (sec1->owner, sec1)
4658
      < bfd_section_lma (sec2->owner, sec2))
4659
    return -1;
4660
  else if (bfd_section_lma (sec1->owner, sec1)
4661
           > bfd_section_lma (sec2->owner, sec2))
4662
    return 1;
4663
  else if (sec1->id < sec2->id)
4664
    return -1;
4665
  else if (sec1->id > sec2->id)
4666
    return 1;
4667
 
4668
  return 0;
4669
}
4670
 
4671
#define IGNORE_SECTION(s) \
4672
  ((s->flags & SEC_ALLOC) == 0                           \
4673
   || ((s->flags & SEC_THREAD_LOCAL) != 0                \
4674
        && (s->flags & SEC_LOAD) == 0))
4675
 
4676
/* Check to see if any allocated sections overlap with other allocated
4677
   sections.  This can happen if a linker script specifies the output
4678
   section addresses of the two sections.  Also check whether any memory
4679
   region has overflowed.  */
4680
 
4681
static void
4682
lang_check_section_addresses (void)
4683
{
4684
  asection *s, *p;
4685
  asection **sections, **spp;
4686
  unsigned int count;
4687
  bfd_vma s_start;
4688
  bfd_vma s_end;
4689
  bfd_vma p_start;
4690
  bfd_vma p_end;
4691
  bfd_size_type amt;
4692
  lang_memory_region_type *m;
4693
 
4694
  if (bfd_count_sections (link_info.output_bfd) <= 1)
4695
    return;
4696
 
4697
  amt = bfd_count_sections (link_info.output_bfd) * sizeof (asection *);
4698
  sections = (asection **) xmalloc (amt);
4699
 
4700
  /* Scan all sections in the output list.  */
4701
  count = 0;
4702
  for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
4703
    {
4704
      /* Only consider loadable sections with real contents.  */
4705
      if (!(s->flags & SEC_LOAD)
4706
          || !(s->flags & SEC_ALLOC)
4707
          || s->size == 0)
4708
        continue;
4709
 
4710
      sections[count] = s;
4711
      count++;
4712
    }
4713
 
4714
  if (count <= 1)
4715
    return;
4716
 
4717
  qsort (sections, (size_t) count, sizeof (asection *),
4718
         sort_sections_by_lma);
4719
 
4720
  spp = sections;
4721
  s = *spp++;
4722
  s_start = s->lma;
4723
  s_end = s_start + TO_ADDR (s->size) - 1;
4724
  for (count--; count; count--)
4725
    {
4726
      /* We must check the sections' LMA addresses not their VMA
4727
         addresses because overlay sections can have overlapping VMAs
4728
         but they must have distinct LMAs.  */
4729
      p = s;
4730
      p_start = s_start;
4731
      p_end = s_end;
4732
      s = *spp++;
4733
      s_start = s->lma;
4734
      s_end = s_start + TO_ADDR (s->size) - 1;
4735
 
4736
      /* Look for an overlap.  We have sorted sections by lma, so we
4737
         know that s_start >= p_start.  Besides the obvious case of
4738
         overlap when the current section starts before the previous
4739
         one ends, we also must have overlap if the previous section
4740
         wraps around the address space.  */
4741
      if (s_start <= p_end
4742
          || p_end < p_start)
4743
        einfo (_("%X%P: section %s loaded at [%V,%V] overlaps section %s loaded at [%V,%V]\n"),
4744
               s->name, s_start, s_end, p->name, p_start, p_end);
4745
    }
4746
 
4747
  free (sections);
4748
 
4749
  /* If any memory region has overflowed, report by how much.
4750
     We do not issue this diagnostic for regions that had sections
4751
     explicitly placed outside their bounds; os_region_check's
4752
     diagnostics are adequate for that case.
4753
 
4754
     FIXME: It is conceivable that m->current - (m->origin + m->length)
4755
     might overflow a 32-bit integer.  There is, alas, no way to print
4756
     a bfd_vma quantity in decimal.  */
4757
  for (m = lang_memory_region_list; m; m = m->next)
4758
    if (m->had_full_message)
4759
      einfo (_("%X%P: region `%s' overflowed by %ld bytes\n"),
4760
             m->name_list.name, (long)(m->current - (m->origin + m->length)));
4761
 
4762
}
4763
 
4764
/* Make sure the new address is within the region.  We explicitly permit the
4765
   current address to be at the exact end of the region when the address is
4766
   non-zero, in case the region is at the end of addressable memory and the
4767
   calculation wraps around.  */
4768
 
4769
static void
4770
os_region_check (lang_output_section_statement_type *os,
4771
                 lang_memory_region_type *region,
4772
                 etree_type *tree,
4773
                 bfd_vma rbase)
4774
{
4775
  if ((region->current < region->origin
4776
       || (region->current - region->origin > region->length))
4777
      && ((region->current != region->origin + region->length)
4778
          || rbase == 0))
4779
    {
4780
      if (tree != NULL)
4781
        {
4782
          einfo (_("%X%P: address 0x%v of %B section `%s'"
4783
                   " is not within region `%s'\n"),
4784
                 region->current,
4785
                 os->bfd_section->owner,
4786
                 os->bfd_section->name,
4787
                 region->name_list.name);
4788
        }
4789
      else if (!region->had_full_message)
4790
        {
4791
          region->had_full_message = TRUE;
4792
 
4793
          einfo (_("%X%P: %B section `%s' will not fit in region `%s'\n"),
4794
                 os->bfd_section->owner,
4795
                 os->bfd_section->name,
4796
                 region->name_list.name);
4797
        }
4798
    }
4799
}
4800
 
4801
/* Set the sizes for all the output sections.  */
4802
 
4803
static bfd_vma
4804
lang_size_sections_1
4805
  (lang_statement_union_type **prev,
4806
   lang_output_section_statement_type *output_section_statement,
4807
   fill_type *fill,
4808
   bfd_vma dot,
4809
   bfd_boolean *relax,
4810
   bfd_boolean check_regions)
4811
{
4812
  lang_statement_union_type *s;
4813
 
4814
  /* Size up the sections from their constituent parts.  */
4815
  for (s = *prev; s != NULL; s = s->header.next)
4816
    {
4817
      switch (s->header.type)
4818
        {
4819
        case lang_output_section_statement_enum:
4820
          {
4821
            bfd_vma newdot, after;
4822
            lang_output_section_statement_type *os;
4823
            lang_memory_region_type *r;
4824
            int section_alignment = 0;
4825
 
4826
            os = &s->output_section_statement;
4827
            if (os->constraint == -1)
4828
              break;
4829
 
4830
            /* FIXME: We shouldn't need to zero section vmas for ld -r
4831
               here, in lang_insert_orphan, or in the default linker scripts.
4832
               This is covering for coff backend linker bugs.  See PR6945.  */
4833
            if (os->addr_tree == NULL
4834
                && link_info.relocatable
4835
                && (bfd_get_flavour (link_info.output_bfd)
4836
                    == bfd_target_coff_flavour))
4837
              os->addr_tree = exp_intop (0);
4838
            if (os->addr_tree != NULL)
4839
              {
4840
                os->processed_vma = FALSE;
4841
                exp_fold_tree (os->addr_tree, bfd_abs_section_ptr, &dot);
4842
 
4843
                if (expld.result.valid_p)
4844
                  {
4845
                    dot = expld.result.value;
4846
                    if (expld.result.section != NULL)
4847
                      dot += expld.result.section->vma;
4848
                  }
4849
                else if (expld.phase != lang_mark_phase_enum)
4850
                  einfo (_("%F%S: non constant or forward reference"
4851
                           " address expression for section %s\n"),
4852
                         os->name);
4853
              }
4854
 
4855
            if (os->bfd_section == NULL)
4856
              /* This section was removed or never actually created.  */
4857
              break;
4858
 
4859
            /* If this is a COFF shared library section, use the size and
4860
               address from the input section.  FIXME: This is COFF
4861
               specific; it would be cleaner if there were some other way
4862
               to do this, but nothing simple comes to mind.  */
4863
            if (((bfd_get_flavour (link_info.output_bfd)
4864
                  == bfd_target_ecoff_flavour)
4865
                 || (bfd_get_flavour (link_info.output_bfd)
4866
                     == bfd_target_coff_flavour))
4867
                && (os->bfd_section->flags & SEC_COFF_SHARED_LIBRARY) != 0)
4868
              {
4869
                asection *input;
4870
 
4871
                if (os->children.head == NULL
4872
                    || os->children.head->header.next != NULL
4873
                    || (os->children.head->header.type
4874
                        != lang_input_section_enum))
4875
                  einfo (_("%P%X: Internal error on COFF shared library"
4876
                           " section %s\n"), os->name);
4877
 
4878
                input = os->children.head->input_section.section;
4879
                bfd_set_section_vma (os->bfd_section->owner,
4880
                                     os->bfd_section,
4881
                                     bfd_section_vma (input->owner, input));
4882
                os->bfd_section->size = input->size;
4883
                break;
4884
              }
4885
 
4886
            newdot = dot;
4887
            if (bfd_is_abs_section (os->bfd_section))
4888
              {
4889
                /* No matter what happens, an abs section starts at zero.  */
4890
                ASSERT (os->bfd_section->vma == 0);
4891
              }
4892
            else
4893
              {
4894
                if (os->addr_tree == NULL)
4895
                  {
4896
                    /* No address specified for this section, get one
4897
                       from the region specification.  */
4898
                    if (os->region == NULL
4899
                        || ((os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD))
4900
                            && os->region->name_list.name[0] == '*'
4901
                            && strcmp (os->region->name_list.name,
4902
                                       DEFAULT_MEMORY_REGION) == 0))
4903
                      {
4904
                        os->region = lang_memory_default (os->bfd_section);
4905
                      }
4906
 
4907
                    /* If a loadable section is using the default memory
4908
                       region, and some non default memory regions were
4909
                       defined, issue an error message.  */
4910
                    if (!os->ignored
4911
                        && !IGNORE_SECTION (os->bfd_section)
4912
                        && ! link_info.relocatable
4913
                        && check_regions
4914
                        && strcmp (os->region->name_list.name,
4915
                                   DEFAULT_MEMORY_REGION) == 0
4916
                        && lang_memory_region_list != NULL
4917
                        && (strcmp (lang_memory_region_list->name_list.name,
4918
                                    DEFAULT_MEMORY_REGION) != 0
4919
                            || lang_memory_region_list->next != NULL)
4920
                        && expld.phase != lang_mark_phase_enum)
4921
                      {
4922
                        /* By default this is an error rather than just a
4923
                           warning because if we allocate the section to the
4924
                           default memory region we can end up creating an
4925
                           excessively large binary, or even seg faulting when
4926
                           attempting to perform a negative seek.  See
4927
                           sources.redhat.com/ml/binutils/2003-04/msg00423.html
4928
                           for an example of this.  This behaviour can be
4929
                           overridden by the using the --no-check-sections
4930
                           switch.  */
4931
                        if (command_line.check_section_addresses)
4932
                          einfo (_("%P%F: error: no memory region specified"
4933
                                   " for loadable section `%s'\n"),
4934
                                 bfd_get_section_name (link_info.output_bfd,
4935
                                                       os->bfd_section));
4936
                        else
4937
                          einfo (_("%P: warning: no memory region specified"
4938
                                   " for loadable section `%s'\n"),
4939
                                 bfd_get_section_name (link_info.output_bfd,
4940
                                                       os->bfd_section));
4941
                      }
4942
 
4943
                    newdot = os->region->current;
4944
                    section_alignment = os->bfd_section->alignment_power;
4945
                  }
4946
                else
4947
                  section_alignment = os->section_alignment;
4948
 
4949
                /* Align to what the section needs.  */
4950
                if (section_alignment > 0)
4951
                  {
4952
                    bfd_vma savedot = newdot;
4953
                    newdot = align_power (newdot, section_alignment);
4954
 
4955
                    if (newdot != savedot
4956
                        && (config.warn_section_align
4957
                            || os->addr_tree != NULL)
4958
                        && expld.phase != lang_mark_phase_enum)
4959
                      einfo (_("%P: warning: changing start of section"
4960
                               " %s by %lu bytes\n"),
4961
                             os->name, (unsigned long) (newdot - savedot));
4962
                  }
4963
 
4964
                bfd_set_section_vma (0, os->bfd_section, newdot);
4965
 
4966
                os->bfd_section->output_offset = 0;
4967
              }
4968
 
4969
            lang_size_sections_1 (&os->children.head, os,
4970
                                  os->fill, newdot, relax, check_regions);
4971
 
4972
            os->processed_vma = TRUE;
4973
 
4974
            if (bfd_is_abs_section (os->bfd_section) || os->ignored)
4975
              /* Except for some special linker created sections,
4976
                 no output section should change from zero size
4977
                 after strip_excluded_output_sections.  A non-zero
4978
                 size on an ignored section indicates that some
4979
                 input section was not sized early enough.  */
4980
              ASSERT (os->bfd_section->size == 0);
4981
            else
4982
              {
4983
                dot = os->bfd_section->vma;
4984
 
4985
                /* Put the section within the requested block size, or
4986
                   align at the block boundary.  */
4987
                after = ((dot
4988
                          + TO_ADDR (os->bfd_section->size)
4989
                          + os->block_value - 1)
4990
                         & - (bfd_vma) os->block_value);
4991
 
4992
                os->bfd_section->size = TO_SIZE (after - os->bfd_section->vma);
4993
              }
4994
 
4995
            /* Set section lma.  */
4996
            r = os->region;
4997
            if (r == NULL)
4998
              r = lang_memory_region_lookup (DEFAULT_MEMORY_REGION, FALSE);
4999
 
5000
            if (os->load_base)
5001
              {
5002
                bfd_vma lma = exp_get_abs_int (os->load_base, 0, "load base");
5003
                os->bfd_section->lma = lma;
5004
              }
5005
            else if (os->lma_region != NULL)
5006
              {
5007
                bfd_vma lma = os->lma_region->current;
5008
 
5009
                if (section_alignment > 0)
5010
                  lma = align_power (lma, section_alignment);
5011
                os->bfd_section->lma = lma;
5012
              }
5013
            else if (r->last_os != NULL
5014
                     && (os->bfd_section->flags & SEC_ALLOC) != 0)
5015
              {
5016
                bfd_vma lma;
5017
                asection *last;
5018
 
5019
                last = r->last_os->output_section_statement.bfd_section;
5020
 
5021
                /* A backwards move of dot should be accompanied by
5022
                   an explicit assignment to the section LMA (ie.
5023
                   os->load_base set) because backwards moves can
5024
                   create overlapping LMAs.  */
5025
                if (dot < last->vma
5026
                    && os->bfd_section->size != 0
5027
                    && dot + os->bfd_section->size <= last->vma)
5028
                  {
5029
                    /* If dot moved backwards then leave lma equal to
5030
                       vma.  This is the old default lma, which might
5031
                       just happen to work when the backwards move is
5032
                       sufficiently large.  Nag if this changes anything,
5033
                       so people can fix their linker scripts.  */
5034
 
5035
                    if (last->vma != last->lma)
5036
                      einfo (_("%P: warning: dot moved backwards before `%s'\n"),
5037
                             os->name);
5038
                  }
5039
                else
5040
                  {
5041
                    /* If this is an overlay, set the current lma to that
5042
                       at the end of the previous section.  */
5043
                    if (os->sectype == overlay_section)
5044
                      lma = last->lma + last->size;
5045
 
5046
                    /* Otherwise, keep the same lma to vma relationship
5047
                       as the previous section.  */
5048
                    else
5049
                      lma = dot + last->lma - last->vma;
5050
 
5051
                    if (section_alignment > 0)
5052
                      lma = align_power (lma, section_alignment);
5053
                    os->bfd_section->lma = lma;
5054
                  }
5055
              }
5056
            os->processed_lma = TRUE;
5057
 
5058
            if (bfd_is_abs_section (os->bfd_section) || os->ignored)
5059
              break;
5060
 
5061
            /* Keep track of normal sections using the default
5062
               lma region.  We use this to set the lma for
5063
               following sections.  Overlays or other linker
5064
               script assignment to lma might mean that the
5065
               default lma == vma is incorrect.
5066
               To avoid warnings about dot moving backwards when using
5067
               -Ttext, don't start tracking sections until we find one
5068
               of non-zero size or with lma set differently to vma.  */
5069
            if (((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5070
                 || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0)
5071
                && (os->bfd_section->flags & SEC_ALLOC) != 0
5072
                && (os->bfd_section->size != 0
5073
                    || (r->last_os == NULL
5074
                        && os->bfd_section->vma != os->bfd_section->lma)
5075
                    || (r->last_os != NULL
5076
                        && dot >= (r->last_os->output_section_statement
5077
                                   .bfd_section->vma)))
5078
                && os->lma_region == NULL
5079
                && !link_info.relocatable)
5080
              r->last_os = s;
5081
 
5082
            /* .tbss sections effectively have zero size.  */
5083
            if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5084
                || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5085
                || link_info.relocatable)
5086
              dot += TO_ADDR (os->bfd_section->size);
5087
 
5088
            if (os->update_dot_tree != 0)
5089
              exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5090
 
5091
            /* Update dot in the region ?
5092
               We only do this if the section is going to be allocated,
5093
               since unallocated sections do not contribute to the region's
5094
               overall size in memory.  */
5095
            if (os->region != NULL
5096
                && (os->bfd_section->flags & (SEC_ALLOC | SEC_LOAD)))
5097
              {
5098
                os->region->current = dot;
5099
 
5100
                if (check_regions)
5101
                  /* Make sure the new address is within the region.  */
5102
                  os_region_check (os, os->region, os->addr_tree,
5103
                                   os->bfd_section->vma);
5104
 
5105
                if (os->lma_region != NULL && os->lma_region != os->region
5106
                    && (os->bfd_section->flags & SEC_LOAD))
5107
                  {
5108
                    os->lma_region->current
5109
                      = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
5110
 
5111
                    if (check_regions)
5112
                      os_region_check (os, os->lma_region, NULL,
5113
                                       os->bfd_section->lma);
5114
                  }
5115
              }
5116
          }
5117
          break;
5118
 
5119
        case lang_constructors_statement_enum:
5120
          dot = lang_size_sections_1 (&constructor_list.head,
5121
                                      output_section_statement,
5122
                                      fill, dot, relax, check_regions);
5123
          break;
5124
 
5125
        case lang_data_statement_enum:
5126
          {
5127
            unsigned int size = 0;
5128
 
5129
            s->data_statement.output_offset =
5130
              dot - output_section_statement->bfd_section->vma;
5131
            s->data_statement.output_section =
5132
              output_section_statement->bfd_section;
5133
 
5134
            /* We might refer to provided symbols in the expression, and
5135
               need to mark them as needed.  */
5136
            exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5137
 
5138
            switch (s->data_statement.type)
5139
              {
5140
              default:
5141
                abort ();
5142
              case QUAD:
5143
              case SQUAD:
5144
                size = QUAD_SIZE;
5145
                break;
5146
              case LONG:
5147
                size = LONG_SIZE;
5148
                break;
5149
              case SHORT:
5150
                size = SHORT_SIZE;
5151
                break;
5152
              case BYTE:
5153
                size = BYTE_SIZE;
5154
                break;
5155
              }
5156
            if (size < TO_SIZE ((unsigned) 1))
5157
              size = TO_SIZE ((unsigned) 1);
5158
            dot += TO_ADDR (size);
5159
            output_section_statement->bfd_section->size += size;
5160
          }
5161
          break;
5162
 
5163
        case lang_reloc_statement_enum:
5164
          {
5165
            int size;
5166
 
5167
            s->reloc_statement.output_offset =
5168
              dot - output_section_statement->bfd_section->vma;
5169
            s->reloc_statement.output_section =
5170
              output_section_statement->bfd_section;
5171
            size = bfd_get_reloc_size (s->reloc_statement.howto);
5172
            dot += TO_ADDR (size);
5173
            output_section_statement->bfd_section->size += size;
5174
          }
5175
          break;
5176
 
5177
        case lang_wild_statement_enum:
5178
          dot = lang_size_sections_1 (&s->wild_statement.children.head,
5179
                                      output_section_statement,
5180
                                      fill, dot, relax, check_regions);
5181
          break;
5182
 
5183
        case lang_object_symbols_statement_enum:
5184
          link_info.create_object_symbols_section =
5185
            output_section_statement->bfd_section;
5186
          break;
5187
 
5188
        case lang_output_statement_enum:
5189
        case lang_target_statement_enum:
5190
          break;
5191
 
5192
        case lang_input_section_enum:
5193
          {
5194
            asection *i;
5195
 
5196
            i = s->input_section.section;
5197
            if (relax)
5198
              {
5199
                bfd_boolean again;
5200
 
5201
                if (! bfd_relax_section (i->owner, i, &link_info, &again))
5202
                  einfo (_("%P%F: can't relax section: %E\n"));
5203
                if (again)
5204
                  *relax = TRUE;
5205
              }
5206
            dot = size_input_section (prev, output_section_statement,
5207
                                      output_section_statement->fill, dot);
5208
          }
5209
          break;
5210
 
5211
        case lang_input_statement_enum:
5212
          break;
5213
 
5214
        case lang_fill_statement_enum:
5215
          s->fill_statement.output_section =
5216
            output_section_statement->bfd_section;
5217
 
5218
          fill = s->fill_statement.fill;
5219
          break;
5220
 
5221
        case lang_assignment_statement_enum:
5222
          {
5223
            bfd_vma newdot = dot;
5224
            etree_type *tree = s->assignment_statement.exp;
5225
 
5226
            expld.dataseg.relro = exp_dataseg_relro_none;
5227
 
5228
            exp_fold_tree (tree,
5229
                           output_section_statement->bfd_section,
5230
                           &newdot);
5231
 
5232
            if (expld.dataseg.relro == exp_dataseg_relro_start)
5233
              {
5234
                if (!expld.dataseg.relro_start_stat)
5235
                  expld.dataseg.relro_start_stat = s;
5236
                else
5237
                  {
5238
                    ASSERT (expld.dataseg.relro_start_stat == s);
5239
                  }
5240
              }
5241
            else if (expld.dataseg.relro == exp_dataseg_relro_end)
5242
              {
5243
                if (!expld.dataseg.relro_end_stat)
5244
                  expld.dataseg.relro_end_stat = s;
5245
                else
5246
                  {
5247
                    ASSERT (expld.dataseg.relro_end_stat == s);
5248
                  }
5249
              }
5250
            expld.dataseg.relro = exp_dataseg_relro_none;
5251
 
5252
            /* This symbol is relative to this section.  */
5253
            if ((tree->type.node_class == etree_provided
5254
                 || tree->type.node_class == etree_assign)
5255
                && (tree->assign.dst [0] != '.'
5256
                    || tree->assign.dst [1] != '\0'))
5257
              output_section_statement->section_relative_symbol = 1;
5258
 
5259
            if (!output_section_statement->ignored)
5260
              {
5261
                if (output_section_statement == abs_output_section)
5262
                  {
5263
                    /* If we don't have an output section, then just adjust
5264
                       the default memory address.  */
5265
                    lang_memory_region_lookup (DEFAULT_MEMORY_REGION,
5266
                                               FALSE)->current = newdot;
5267
                  }
5268
                else if (newdot != dot)
5269
                  {
5270
                    /* Insert a pad after this statement.  We can't
5271
                       put the pad before when relaxing, in case the
5272
                       assignment references dot.  */
5273
                    insert_pad (&s->header.next, fill, TO_SIZE (newdot - dot),
5274
                                output_section_statement->bfd_section, dot);
5275
 
5276
                    /* Don't neuter the pad below when relaxing.  */
5277
                    s = s->header.next;
5278
 
5279
                    /* If dot is advanced, this implies that the section
5280
                       should have space allocated to it, unless the
5281
                       user has explicitly stated that the section
5282
                       should not be allocated.  */
5283
                    if (output_section_statement->sectype != noalloc_section
5284
                        && (output_section_statement->sectype != noload_section
5285
                            || (bfd_get_flavour (link_info.output_bfd)
5286
                                == bfd_target_elf_flavour)))
5287
                      output_section_statement->bfd_section->flags |= SEC_ALLOC;
5288
                  }
5289
                dot = newdot;
5290
              }
5291
          }
5292
          break;
5293
 
5294
        case lang_padding_statement_enum:
5295
          /* If this is the first time lang_size_sections is called,
5296
             we won't have any padding statements.  If this is the
5297
             second or later passes when relaxing, we should allow
5298
             padding to shrink.  If padding is needed on this pass, it
5299
             will be added back in.  */
5300
          s->padding_statement.size = 0;
5301
 
5302
          /* Make sure output_offset is valid.  If relaxation shrinks
5303
             the section and this pad isn't needed, it's possible to
5304
             have output_offset larger than the final size of the
5305
             section.  bfd_set_section_contents will complain even for
5306
             a pad size of zero.  */
5307
          s->padding_statement.output_offset
5308
            = dot - output_section_statement->bfd_section->vma;
5309
          break;
5310
 
5311
        case lang_group_statement_enum:
5312
          dot = lang_size_sections_1 (&s->group_statement.children.head,
5313
                                      output_section_statement,
5314
                                      fill, dot, relax, check_regions);
5315
          break;
5316
 
5317
        case lang_insert_statement_enum:
5318
          break;
5319
 
5320
          /* We can only get here when relaxing is turned on.  */
5321
        case lang_address_statement_enum:
5322
          break;
5323
 
5324
        default:
5325
          FAIL ();
5326
          break;
5327
        }
5328
      prev = &s->header.next;
5329
    }
5330
  return dot;
5331
}
5332
 
5333
/* Callback routine that is used in _bfd_elf_map_sections_to_segments.
5334
   The BFD library has set NEW_SEGMENT to TRUE iff it thinks that
5335
   CURRENT_SECTION and PREVIOUS_SECTION ought to be placed into different
5336
   segments.  We are allowed an opportunity to override this decision.  */
5337
 
5338
bfd_boolean
5339
ldlang_override_segment_assignment (struct bfd_link_info * info ATTRIBUTE_UNUSED,
5340
                                    bfd * abfd ATTRIBUTE_UNUSED,
5341
                                    asection * current_section,
5342
                                    asection * previous_section,
5343
                                    bfd_boolean new_segment)
5344
{
5345
  lang_output_section_statement_type * cur;
5346
  lang_output_section_statement_type * prev;
5347
 
5348
  /* The checks below are only necessary when the BFD library has decided
5349
     that the two sections ought to be placed into the same segment.  */
5350
  if (new_segment)
5351
    return TRUE;
5352
 
5353
  /* Paranoia checks.  */
5354
  if (current_section == NULL || previous_section == NULL)
5355
    return new_segment;
5356
 
5357
  /* Find the memory regions associated with the two sections.
5358
     We call lang_output_section_find() here rather than scanning the list
5359
     of output sections looking for a matching section pointer because if
5360
     we have a large number of sections then a hash lookup is faster.  */
5361
  cur  = lang_output_section_find (current_section->name);
5362
  prev = lang_output_section_find (previous_section->name);
5363
 
5364
  /* More paranoia.  */
5365
  if (cur == NULL || prev == NULL)
5366
    return new_segment;
5367
 
5368
  /* If the regions are different then force the sections to live in
5369
     different segments.  See the email thread starting at the following
5370
     URL for the reasons why this is necessary:
5371
     http://sourceware.org/ml/binutils/2007-02/msg00216.html  */
5372
  return cur->region != prev->region;
5373
}
5374
 
5375
void
5376
one_lang_size_sections_pass (bfd_boolean *relax, bfd_boolean check_regions)
5377
{
5378
  lang_statement_iteration++;
5379
  lang_size_sections_1 (&statement_list.head, abs_output_section,
5380
                        0, 0, relax, check_regions);
5381
}
5382
 
5383
void
5384
lang_size_sections (bfd_boolean *relax, bfd_boolean check_regions)
5385
{
5386
  expld.phase = lang_allocating_phase_enum;
5387
  expld.dataseg.phase = exp_dataseg_none;
5388
 
5389
  one_lang_size_sections_pass (relax, check_regions);
5390
  if (expld.dataseg.phase == exp_dataseg_end_seen
5391
      && link_info.relro && expld.dataseg.relro_end)
5392
    {
5393
      /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END pair was seen, try
5394
         to put expld.dataseg.relro on a (common) page boundary.  */
5395
      bfd_vma min_base, old_base, relro_end, maxpage;
5396
 
5397
      expld.dataseg.phase = exp_dataseg_relro_adjust;
5398
      maxpage = expld.dataseg.maxpagesize;
5399
      /* MIN_BASE is the absolute minimum address we are allowed to start the
5400
         read-write segment (byte before will be mapped read-only).  */
5401
      min_base = (expld.dataseg.min_base + maxpage - 1) & ~(maxpage - 1);
5402
      /* OLD_BASE is the address for a feasible minimum address which will
5403
         still not cause a data overlap inside MAXPAGE causing file offset skip
5404
         by MAXPAGE.  */
5405
      old_base = expld.dataseg.base;
5406
      expld.dataseg.base += (-expld.dataseg.relro_end
5407
                             & (expld.dataseg.pagesize - 1));
5408
      /* Compute the expected PT_GNU_RELRO segment end.  */
5409
      relro_end = ((expld.dataseg.relro_end + expld.dataseg.pagesize - 1)
5410
                   & ~(expld.dataseg.pagesize - 1));
5411
      if (min_base + maxpage < expld.dataseg.base)
5412
        {
5413
          expld.dataseg.base -= maxpage;
5414
          relro_end -= maxpage;
5415
        }
5416
      lang_reset_memory_regions ();
5417
      one_lang_size_sections_pass (relax, check_regions);
5418
      if (expld.dataseg.relro_end > relro_end)
5419
        {
5420
          /* The alignment of sections between DATA_SEGMENT_ALIGN
5421
             and DATA_SEGMENT_RELRO_END caused huge padding to be
5422
             inserted at DATA_SEGMENT_RELRO_END.  Try to start a bit lower so
5423
             that the section alignments will fit in.  */
5424
          asection *sec;
5425
          unsigned int max_alignment_power = 0;
5426
 
5427
          /* Find maximum alignment power of sections between
5428
             DATA_SEGMENT_ALIGN and DATA_SEGMENT_RELRO_END.  */
5429
          for (sec = link_info.output_bfd->sections; sec; sec = sec->next)
5430
            if (sec->vma >= expld.dataseg.base
5431
                && sec->vma < expld.dataseg.relro_end
5432
                && sec->alignment_power > max_alignment_power)
5433
              max_alignment_power = sec->alignment_power;
5434
 
5435
          if (((bfd_vma) 1 << max_alignment_power) < expld.dataseg.pagesize)
5436
            {
5437
              if (expld.dataseg.base - (1 << max_alignment_power) < old_base)
5438
                expld.dataseg.base += expld.dataseg.pagesize;
5439
              expld.dataseg.base -= (1 << max_alignment_power);
5440
              lang_reset_memory_regions ();
5441
              one_lang_size_sections_pass (relax, check_regions);
5442
            }
5443
        }
5444
      link_info.relro_start = expld.dataseg.base;
5445
      link_info.relro_end = expld.dataseg.relro_end;
5446
    }
5447
  else if (expld.dataseg.phase == exp_dataseg_end_seen)
5448
    {
5449
      /* If DATA_SEGMENT_ALIGN DATA_SEGMENT_END pair was seen, check whether
5450
         a page could be saved in the data segment.  */
5451
      bfd_vma first, last;
5452
 
5453
      first = -expld.dataseg.base & (expld.dataseg.pagesize - 1);
5454
      last = expld.dataseg.end & (expld.dataseg.pagesize - 1);
5455
      if (first && last
5456
          && ((expld.dataseg.base & ~(expld.dataseg.pagesize - 1))
5457
              != (expld.dataseg.end & ~(expld.dataseg.pagesize - 1)))
5458
          && first + last <= expld.dataseg.pagesize)
5459
        {
5460
          expld.dataseg.phase = exp_dataseg_adjust;
5461
          lang_reset_memory_regions ();
5462
          one_lang_size_sections_pass (relax, check_regions);
5463
        }
5464
      else
5465
        expld.dataseg.phase = exp_dataseg_done;
5466
    }
5467
  else
5468
    expld.dataseg.phase = exp_dataseg_done;
5469
}
5470
 
5471
/* Worker function for lang_do_assignments.  Recursiveness goes here.  */
5472
 
5473
static bfd_vma
5474
lang_do_assignments_1 (lang_statement_union_type *s,
5475
                       lang_output_section_statement_type *current_os,
5476
                       fill_type *fill,
5477
                       bfd_vma dot)
5478
{
5479
  for (; s != NULL; s = s->header.next)
5480
    {
5481
      switch (s->header.type)
5482
        {
5483
        case lang_constructors_statement_enum:
5484
          dot = lang_do_assignments_1 (constructor_list.head,
5485
                                       current_os, fill, dot);
5486
          break;
5487
 
5488
        case lang_output_section_statement_enum:
5489
          {
5490
            lang_output_section_statement_type *os;
5491
 
5492
            os = &(s->output_section_statement);
5493
            if (os->bfd_section != NULL && !os->ignored)
5494
              {
5495
                dot = os->bfd_section->vma;
5496
 
5497
                lang_do_assignments_1 (os->children.head, os, os->fill, dot);
5498
 
5499
                /* .tbss sections effectively have zero size.  */
5500
                if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
5501
                    || (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
5502
                    || link_info.relocatable)
5503
                  dot += TO_ADDR (os->bfd_section->size);
5504
 
5505
                if (os->update_dot_tree != NULL)
5506
                  exp_fold_tree (os->update_dot_tree, bfd_abs_section_ptr, &dot);
5507
              }
5508
          }
5509
          break;
5510
 
5511
        case lang_wild_statement_enum:
5512
 
5513
          dot = lang_do_assignments_1 (s->wild_statement.children.head,
5514
                                       current_os, fill, dot);
5515
          break;
5516
 
5517
        case lang_object_symbols_statement_enum:
5518
        case lang_output_statement_enum:
5519
        case lang_target_statement_enum:
5520
          break;
5521
 
5522
        case lang_data_statement_enum:
5523
          exp_fold_tree (s->data_statement.exp, bfd_abs_section_ptr, &dot);
5524
          if (expld.result.valid_p)
5525
            {
5526
              s->data_statement.value = expld.result.value;
5527
              if (expld.result.section != NULL)
5528
                s->data_statement.value += expld.result.section->vma;
5529
            }
5530
          else
5531
            einfo (_("%F%P: invalid data statement\n"));
5532
          {
5533
            unsigned int size;
5534
            switch (s->data_statement.type)
5535
              {
5536
              default:
5537
                abort ();
5538
              case QUAD:
5539
              case SQUAD:
5540
                size = QUAD_SIZE;
5541
                break;
5542
              case LONG:
5543
                size = LONG_SIZE;
5544
                break;
5545
              case SHORT:
5546
                size = SHORT_SIZE;
5547
                break;
5548
              case BYTE:
5549
                size = BYTE_SIZE;
5550
                break;
5551
              }
5552
            if (size < TO_SIZE ((unsigned) 1))
5553
              size = TO_SIZE ((unsigned) 1);
5554
            dot += TO_ADDR (size);
5555
          }
5556
          break;
5557
 
5558
        case lang_reloc_statement_enum:
5559
          exp_fold_tree (s->reloc_statement.addend_exp,
5560
                         bfd_abs_section_ptr, &dot);
5561
          if (expld.result.valid_p)
5562
            s->reloc_statement.addend_value = expld.result.value;
5563
          else
5564
            einfo (_("%F%P: invalid reloc statement\n"));
5565
          dot += TO_ADDR (bfd_get_reloc_size (s->reloc_statement.howto));
5566
          break;
5567
 
5568
        case lang_input_section_enum:
5569
          {
5570
            asection *in = s->input_section.section;
5571
 
5572
            if ((in->flags & SEC_EXCLUDE) == 0)
5573
              dot += TO_ADDR (in->size);
5574
          }
5575
          break;
5576
 
5577
        case lang_input_statement_enum:
5578
          break;
5579
 
5580
        case lang_fill_statement_enum:
5581
          fill = s->fill_statement.fill;
5582
          break;
5583
 
5584
        case lang_assignment_statement_enum:
5585
          exp_fold_tree (s->assignment_statement.exp,
5586
                         current_os->bfd_section,
5587
                         &dot);
5588
          break;
5589
 
5590
        case lang_padding_statement_enum:
5591
          dot += TO_ADDR (s->padding_statement.size);
5592
          break;
5593
 
5594
        case lang_group_statement_enum:
5595
          dot = lang_do_assignments_1 (s->group_statement.children.head,
5596
                                       current_os, fill, dot);
5597
          break;
5598
 
5599
        case lang_insert_statement_enum:
5600
          break;
5601
 
5602
        case lang_address_statement_enum:
5603
          break;
5604
 
5605
        default:
5606
          FAIL ();
5607
          break;
5608
        }
5609
    }
5610
  return dot;
5611
}
5612
 
5613
void
5614
lang_do_assignments (lang_phase_type phase)
5615
{
5616
  expld.phase = phase;
5617
  lang_statement_iteration++;
5618
  lang_do_assignments_1 (statement_list.head, abs_output_section, NULL, 0);
5619
}
5620
 
5621
/* Fix any .startof. or .sizeof. symbols.  When the assemblers see the
5622
   operator .startof. (section_name), it produces an undefined symbol
5623
   .startof.section_name.  Similarly, when it sees
5624
   .sizeof. (section_name), it produces an undefined symbol
5625
   .sizeof.section_name.  For all the output sections, we look for
5626
   such symbols, and set them to the correct value.  */
5627
 
5628
static void
5629
lang_set_startof (void)
5630
{
5631
  asection *s;
5632
 
5633
  if (link_info.relocatable)
5634
    return;
5635
 
5636
  for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
5637
    {
5638
      const char *secname;
5639
      char *buf;
5640
      struct bfd_link_hash_entry *h;
5641
 
5642
      secname = bfd_get_section_name (link_info.output_bfd, s);
5643
      buf = (char *) xmalloc (10 + strlen (secname));
5644
 
5645
      sprintf (buf, ".startof.%s", secname);
5646
      h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5647
      if (h != NULL && h->type == bfd_link_hash_undefined)
5648
        {
5649
          h->type = bfd_link_hash_defined;
5650
          h->u.def.value = bfd_get_section_vma (link_info.output_bfd, s);
5651
          h->u.def.section = bfd_abs_section_ptr;
5652
        }
5653
 
5654
      sprintf (buf, ".sizeof.%s", secname);
5655
      h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE, TRUE);
5656
      if (h != NULL && h->type == bfd_link_hash_undefined)
5657
        {
5658
          h->type = bfd_link_hash_defined;
5659
          h->u.def.value = TO_ADDR (s->size);
5660
          h->u.def.section = bfd_abs_section_ptr;
5661
        }
5662
 
5663
      free (buf);
5664
    }
5665
}
5666
 
5667
static void
5668
lang_end (void)
5669
{
5670
  struct bfd_link_hash_entry *h;
5671
  bfd_boolean warn;
5672
 
5673
  if ((link_info.relocatable && !link_info.gc_sections)
5674
      || (link_info.shared && !link_info.executable))
5675
    warn = entry_from_cmdline;
5676
  else
5677
    warn = TRUE;
5678
 
5679
  /* Force the user to specify a root when generating a relocatable with
5680
     --gc-sections.  */
5681
  if (link_info.gc_sections && link_info.relocatable
5682
      && !(entry_from_cmdline || undef_from_cmdline))
5683
    einfo (_("%P%F: gc-sections requires either an entry or "
5684
             "an undefined symbol\n"));
5685
 
5686
  if (entry_symbol.name == NULL)
5687
    {
5688
      /* No entry has been specified.  Look for the default entry, but
5689
         don't warn if we don't find it.  */
5690
      entry_symbol.name = entry_symbol_default;
5691
      warn = FALSE;
5692
    }
5693
 
5694
  h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
5695
                            FALSE, FALSE, TRUE);
5696
  if (h != NULL
5697
      && (h->type == bfd_link_hash_defined
5698
          || h->type == bfd_link_hash_defweak)
5699
      && h->u.def.section->output_section != NULL)
5700
    {
5701
      bfd_vma val;
5702
 
5703
      val = (h->u.def.value
5704
             + bfd_get_section_vma (link_info.output_bfd,
5705
                                    h->u.def.section->output_section)
5706
             + h->u.def.section->output_offset);
5707
      if (! bfd_set_start_address (link_info.output_bfd, val))
5708
        einfo (_("%P%F:%s: can't set start address\n"), entry_symbol.name);
5709
    }
5710
  else
5711
    {
5712
      bfd_vma val;
5713
      const char *send;
5714
 
5715
      /* We couldn't find the entry symbol.  Try parsing it as a
5716
         number.  */
5717
      val = bfd_scan_vma (entry_symbol.name, &send, 0);
5718
      if (*send == '\0')
5719
        {
5720
          if (! bfd_set_start_address (link_info.output_bfd, val))
5721
            einfo (_("%P%F: can't set start address\n"));
5722
        }
5723
      else
5724
        {
5725
          asection *ts;
5726
 
5727
          /* Can't find the entry symbol, and it's not a number.  Use
5728
             the first address in the text section.  */
5729
          ts = bfd_get_section_by_name (link_info.output_bfd, entry_section);
5730
          if (ts != NULL)
5731
            {
5732
              if (warn)
5733
                einfo (_("%P: warning: cannot find entry symbol %s;"
5734
                         " defaulting to %V\n"),
5735
                       entry_symbol.name,
5736
                       bfd_get_section_vma (link_info.output_bfd, ts));
5737
              if (!(bfd_set_start_address
5738
                    (link_info.output_bfd,
5739
                     bfd_get_section_vma (link_info.output_bfd, ts))))
5740
                einfo (_("%P%F: can't set start address\n"));
5741
            }
5742
          else
5743
            {
5744
              if (warn)
5745
                einfo (_("%P: warning: cannot find entry symbol %s;"
5746
                         " not setting start address\n"),
5747
                       entry_symbol.name);
5748
            }
5749
        }
5750
    }
5751
 
5752
  /* Don't bfd_hash_table_free (&lang_definedness_table);
5753
     map file output may result in a call of lang_track_definedness.  */
5754
}
5755
 
5756
/* This is a small function used when we want to ignore errors from
5757
   BFD.  */
5758
 
5759
static void
5760
ignore_bfd_errors (const char *s ATTRIBUTE_UNUSED, ...)
5761
{
5762
  /* Don't do anything.  */
5763
}
5764
 
5765
/* Check that the architecture of all the input files is compatible
5766
   with the output file.  Also call the backend to let it do any
5767
   other checking that is needed.  */
5768
 
5769
static void
5770
lang_check (void)
5771
{
5772
  lang_statement_union_type *file;
5773
  bfd *input_bfd;
5774
  const bfd_arch_info_type *compatible;
5775
 
5776
  for (file = file_chain.head; file != NULL; file = file->input_statement.next)
5777
    {
5778
#ifdef ENABLE_PLUGINS
5779
      /* Don't check format of files claimed by plugin.  */
5780
      if (file->input_statement.claimed)
5781
        continue;
5782
#endif /* ENABLE_PLUGINS */
5783
      input_bfd = file->input_statement.the_bfd;
5784
      compatible
5785
        = bfd_arch_get_compatible (input_bfd, link_info.output_bfd,
5786
                                   command_line.accept_unknown_input_arch);
5787
 
5788
      /* In general it is not possible to perform a relocatable
5789
         link between differing object formats when the input
5790
         file has relocations, because the relocations in the
5791
         input format may not have equivalent representations in
5792
         the output format (and besides BFD does not translate
5793
         relocs for other link purposes than a final link).  */
5794
      if ((link_info.relocatable || link_info.emitrelocations)
5795
          && (compatible == NULL
5796
              || (bfd_get_flavour (input_bfd)
5797
                  != bfd_get_flavour (link_info.output_bfd)))
5798
          && (bfd_get_file_flags (input_bfd) & HAS_RELOC) != 0)
5799
        {
5800
          einfo (_("%P%F: Relocatable linking with relocations from"
5801
                   " format %s (%B) to format %s (%B) is not supported\n"),
5802
                 bfd_get_target (input_bfd), input_bfd,
5803
                 bfd_get_target (link_info.output_bfd), link_info.output_bfd);
5804
          /* einfo with %F exits.  */
5805
        }
5806
 
5807
      if (compatible == NULL)
5808
        {
5809
          if (command_line.warn_mismatch)
5810
            einfo (_("%P%X: %s architecture of input file `%B'"
5811
                     " is incompatible with %s output\n"),
5812
                   bfd_printable_name (input_bfd), input_bfd,
5813
                   bfd_printable_name (link_info.output_bfd));
5814
        }
5815
      else if (bfd_count_sections (input_bfd))
5816
        {
5817
          /* If the input bfd has no contents, it shouldn't set the
5818
             private data of the output bfd.  */
5819
 
5820
          bfd_error_handler_type pfn = NULL;
5821
 
5822
          /* If we aren't supposed to warn about mismatched input
5823
             files, temporarily set the BFD error handler to a
5824
             function which will do nothing.  We still want to call
5825
             bfd_merge_private_bfd_data, since it may set up
5826
             information which is needed in the output file.  */
5827
          if (! command_line.warn_mismatch)
5828
            pfn = bfd_set_error_handler (ignore_bfd_errors);
5829
          if (! bfd_merge_private_bfd_data (input_bfd, link_info.output_bfd))
5830
            {
5831
              if (command_line.warn_mismatch)
5832
                einfo (_("%P%X: failed to merge target specific data"
5833
                         " of file %B\n"), input_bfd);
5834
            }
5835
          if (! command_line.warn_mismatch)
5836
            bfd_set_error_handler (pfn);
5837
        }
5838
    }
5839
}
5840
 
5841
/* Look through all the global common symbols and attach them to the
5842
   correct section.  The -sort-common command line switch may be used
5843
   to roughly sort the entries by alignment.  */
5844
 
5845
static void
5846
lang_common (void)
5847
{
5848
  if (command_line.inhibit_common_definition)
5849
    return;
5850
  if (link_info.relocatable
5851
      && ! command_line.force_common_definition)
5852
    return;
5853
 
5854
  if (! config.sort_common)
5855
    bfd_link_hash_traverse (link_info.hash, lang_one_common, NULL);
5856
  else
5857
    {
5858
      unsigned int power;
5859
 
5860
      if (config.sort_common == sort_descending)
5861
        {
5862
          for (power = 4; power > 0; power--)
5863
            bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5864
 
5865
          power = 0;
5866
          bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5867
        }
5868
      else
5869
        {
5870
          for (power = 0; power <= 4; power++)
5871
            bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5872
 
5873
          power = UINT_MAX;
5874
          bfd_link_hash_traverse (link_info.hash, lang_one_common, &power);
5875
        }
5876
    }
5877
}
5878
 
5879
/* Place one common symbol in the correct section.  */
5880
 
5881
static bfd_boolean
5882
lang_one_common (struct bfd_link_hash_entry *h, void *info)
5883
{
5884
  unsigned int power_of_two;
5885
  bfd_vma size;
5886
  asection *section;
5887
 
5888
  if (h->type != bfd_link_hash_common)
5889
    return TRUE;
5890
 
5891
  size = h->u.c.size;
5892
  power_of_two = h->u.c.p->alignment_power;
5893
 
5894
  if (config.sort_common == sort_descending
5895
      && power_of_two < *(unsigned int *) info)
5896
    return TRUE;
5897
  else if (config.sort_common == sort_ascending
5898
           && power_of_two > *(unsigned int *) info)
5899
    return TRUE;
5900
 
5901
  section = h->u.c.p->section;
5902
  if (!bfd_define_common_symbol (link_info.output_bfd, &link_info, h))
5903
    einfo (_("%P%F: Could not define common symbol `%T': %E\n"),
5904
           h->root.string);
5905
 
5906
  if (config.map_file != NULL)
5907
    {
5908
      static bfd_boolean header_printed;
5909
      int len;
5910
      char *name;
5911
      char buf[50];
5912
 
5913
      if (! header_printed)
5914
        {
5915
          minfo (_("\nAllocating common symbols\n"));
5916
          minfo (_("Common symbol       size              file\n\n"));
5917
          header_printed = TRUE;
5918
        }
5919
 
5920
      name = bfd_demangle (link_info.output_bfd, h->root.string,
5921
                           DMGL_ANSI | DMGL_PARAMS);
5922
      if (name == NULL)
5923
        {
5924
          minfo ("%s", h->root.string);
5925
          len = strlen (h->root.string);
5926
        }
5927
      else
5928
        {
5929
          minfo ("%s", name);
5930
          len = strlen (name);
5931
          free (name);
5932
        }
5933
 
5934
      if (len >= 19)
5935
        {
5936
          print_nl ();
5937
          len = 0;
5938
        }
5939
      while (len < 20)
5940
        {
5941
          print_space ();
5942
          ++len;
5943
        }
5944
 
5945
      minfo ("0x");
5946
      if (size <= 0xffffffff)
5947
        sprintf (buf, "%lx", (unsigned long) size);
5948
      else
5949
        sprintf_vma (buf, size);
5950
      minfo ("%s", buf);
5951
      len = strlen (buf);
5952
 
5953
      while (len < 16)
5954
        {
5955
          print_space ();
5956
          ++len;
5957
        }
5958
 
5959
      minfo ("%B\n", section->owner);
5960
    }
5961
 
5962
  return TRUE;
5963
}
5964
 
5965
/* Run through the input files and ensure that every input section has
5966
   somewhere to go.  If one is found without a destination then create
5967
   an input request and place it into the statement tree.  */
5968
 
5969
static void
5970
lang_place_orphans (void)
5971
{
5972
  LANG_FOR_EACH_INPUT_STATEMENT (file)
5973
    {
5974
      asection *s;
5975
 
5976
      for (s = file->the_bfd->sections; s != NULL; s = s->next)
5977
        {
5978
          if (s->output_section == NULL)
5979
            {
5980
              /* This section of the file is not attached, root
5981
                 around for a sensible place for it to go.  */
5982
 
5983
              if (file->just_syms_flag)
5984
                bfd_link_just_syms (file->the_bfd, s, &link_info);
5985
              else if ((s->flags & SEC_EXCLUDE) != 0)
5986
                s->output_section = bfd_abs_section_ptr;
5987
              else if (strcmp (s->name, "COMMON") == 0)
5988
                {
5989
                  /* This is a lonely common section which must have
5990
                     come from an archive.  We attach to the section
5991
                     with the wildcard.  */
5992
                  if (! link_info.relocatable
5993
                      || command_line.force_common_definition)
5994
                    {
5995
                      if (default_common_section == NULL)
5996
                        default_common_section
5997
                          = lang_output_section_statement_lookup (".bss", 0,
5998
                                                                  TRUE);
5999
                      lang_add_section (&default_common_section->children, s,
6000
                                        default_common_section);
6001
                    }
6002
                }
6003
              else
6004
                {
6005
                  const char *name = s->name;
6006
                  int constraint = 0;
6007
 
6008
                  if (config.unique_orphan_sections
6009
                      || unique_section_p (s, NULL))
6010
                    constraint = SPECIAL;
6011
 
6012
                  if (!ldemul_place_orphan (s, name, constraint))
6013
                    {
6014
                      lang_output_section_statement_type *os;
6015
                      os = lang_output_section_statement_lookup (name,
6016
                                                                 constraint,
6017
                                                                 TRUE);
6018
                      if (os->addr_tree == NULL
6019
                          && (link_info.relocatable
6020
                              || (s->flags & (SEC_LOAD | SEC_ALLOC)) == 0))
6021
                        os->addr_tree = exp_intop (0);
6022
                      lang_add_section (&os->children, s, os);
6023
                    }
6024
                }
6025
            }
6026
        }
6027
    }
6028
}
6029
 
6030
void
6031
lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
6032
{
6033
  flagword *ptr_flags;
6034
 
6035
  ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
6036
  while (*flags)
6037
    {
6038
      switch (*flags)
6039
        {
6040
        case 'A': case 'a':
6041
          *ptr_flags |= SEC_ALLOC;
6042
          break;
6043
 
6044
        case 'R': case 'r':
6045
          *ptr_flags |= SEC_READONLY;
6046
          break;
6047
 
6048
        case 'W': case 'w':
6049
          *ptr_flags |= SEC_DATA;
6050
          break;
6051
 
6052
        case 'X': case 'x':
6053
          *ptr_flags |= SEC_CODE;
6054
          break;
6055
 
6056
        case 'L': case 'l':
6057
        case 'I': case 'i':
6058
          *ptr_flags |= SEC_LOAD;
6059
          break;
6060
 
6061
        default:
6062
          einfo (_("%P%F: invalid syntax in flags\n"));
6063
          break;
6064
        }
6065
      flags++;
6066
    }
6067
}
6068
 
6069
/* Call a function on each input file.  This function will be called
6070
   on an archive, but not on the elements.  */
6071
 
6072
void
6073
lang_for_each_input_file (void (*func) (lang_input_statement_type *))
6074
{
6075
  lang_input_statement_type *f;
6076
 
6077
  for (f = (lang_input_statement_type *) input_file_chain.head;
6078
       f != NULL;
6079
       f = (lang_input_statement_type *) f->next_real_file)
6080
    func (f);
6081
}
6082
 
6083
/* Call a function on each file.  The function will be called on all
6084
   the elements of an archive which are included in the link, but will
6085
   not be called on the archive file itself.  */
6086
 
6087
void
6088
lang_for_each_file (void (*func) (lang_input_statement_type *))
6089
{
6090
  LANG_FOR_EACH_INPUT_STATEMENT (f)
6091
    {
6092
      func (f);
6093
    }
6094
}
6095
 
6096
void
6097
ldlang_add_file (lang_input_statement_type *entry)
6098
{
6099
  lang_statement_append (&file_chain,
6100
                         (lang_statement_union_type *) entry,
6101
                         &entry->next);
6102
 
6103
  /* The BFD linker needs to have a list of all input BFDs involved in
6104
     a link.  */
6105
  ASSERT (entry->the_bfd->link_next == NULL);
6106
  ASSERT (entry->the_bfd != link_info.output_bfd);
6107
 
6108
  *link_info.input_bfds_tail = entry->the_bfd;
6109
  link_info.input_bfds_tail = &entry->the_bfd->link_next;
6110
  entry->the_bfd->usrdata = entry;
6111
  bfd_set_gp_size (entry->the_bfd, g_switch_value);
6112
 
6113
  /* Look through the sections and check for any which should not be
6114
     included in the link.  We need to do this now, so that we can
6115
     notice when the backend linker tries to report multiple
6116
     definition errors for symbols which are in sections we aren't
6117
     going to link.  FIXME: It might be better to entirely ignore
6118
     symbols which are defined in sections which are going to be
6119
     discarded.  This would require modifying the backend linker for
6120
     each backend which might set the SEC_LINK_ONCE flag.  If we do
6121
     this, we should probably handle SEC_EXCLUDE in the same way.  */
6122
 
6123
  bfd_map_over_sections (entry->the_bfd, section_already_linked, entry);
6124
}
6125
 
6126
void
6127
lang_add_output (const char *name, int from_script)
6128
{
6129
  /* Make -o on command line override OUTPUT in script.  */
6130
  if (!had_output_filename || !from_script)
6131
    {
6132
      output_filename = name;
6133
      had_output_filename = TRUE;
6134
    }
6135
}
6136
 
6137
static lang_output_section_statement_type *current_section;
6138
 
6139
static int
6140
topower (int x)
6141
{
6142
  unsigned int i = 1;
6143
  int l;
6144
 
6145
  if (x < 0)
6146
    return -1;
6147
 
6148
  for (l = 0; l < 32; l++)
6149
    {
6150
      if (i >= (unsigned int) x)
6151
        return l;
6152
      i <<= 1;
6153
    }
6154
 
6155
  return 0;
6156
}
6157
 
6158
lang_output_section_statement_type *
6159
lang_enter_output_section_statement (const char *output_section_statement_name,
6160
                                     etree_type *address_exp,
6161
                                     enum section_type sectype,
6162
                                     etree_type *align,
6163
                                     etree_type *subalign,
6164
                                     etree_type *ebase,
6165
                                     int constraint)
6166
{
6167
  lang_output_section_statement_type *os;
6168
 
6169
  os = lang_output_section_statement_lookup (output_section_statement_name,
6170
                                             constraint, TRUE);
6171
  current_section = os;
6172
 
6173
  if (os->addr_tree == NULL)
6174
    {
6175
      os->addr_tree = address_exp;
6176
    }
6177
  os->sectype = sectype;
6178
  if (sectype != noload_section)
6179
    os->flags = SEC_NO_FLAGS;
6180
  else
6181
    os->flags = SEC_NEVER_LOAD;
6182
  os->block_value = 1;
6183
 
6184
  /* Make next things chain into subchain of this.  */
6185
  push_stat_ptr (&os->children);
6186
 
6187
  os->subsection_alignment =
6188
    topower (exp_get_value_int (subalign, -1, "subsection alignment"));
6189
  os->section_alignment =
6190
    topower (exp_get_value_int (align, -1, "section alignment"));
6191
 
6192
  os->load_base = ebase;
6193
  return os;
6194
}
6195
 
6196
void
6197
lang_final (void)
6198
{
6199
  lang_output_statement_type *new_stmt;
6200
 
6201
  new_stmt = new_stat (lang_output_statement, stat_ptr);
6202
  new_stmt->name = output_filename;
6203
 
6204
}
6205
 
6206
/* Reset the current counters in the regions.  */
6207
 
6208
void
6209
lang_reset_memory_regions (void)
6210
{
6211
  lang_memory_region_type *p = lang_memory_region_list;
6212
  asection *o;
6213
  lang_output_section_statement_type *os;
6214
 
6215
  for (p = lang_memory_region_list; p != NULL; p = p->next)
6216
    {
6217
      p->current = p->origin;
6218
      p->last_os = NULL;
6219
    }
6220
 
6221
  for (os = &lang_output_section_statement.head->output_section_statement;
6222
       os != NULL;
6223
       os = os->next)
6224
    {
6225
      os->processed_vma = FALSE;
6226
      os->processed_lma = FALSE;
6227
    }
6228
 
6229
  for (o = link_info.output_bfd->sections; o != NULL; o = o->next)
6230
    {
6231
      /* Save the last size for possible use by bfd_relax_section.  */
6232
      o->rawsize = o->size;
6233
      o->size = 0;
6234
    }
6235
}
6236
 
6237
/* Worker for lang_gc_sections_1.  */
6238
 
6239
static void
6240
gc_section_callback (lang_wild_statement_type *ptr,
6241
                     struct wildcard_list *sec ATTRIBUTE_UNUSED,
6242
                     asection *section,
6243
                     lang_input_statement_type *file ATTRIBUTE_UNUSED,
6244
                     void *data ATTRIBUTE_UNUSED)
6245
{
6246
  /* If the wild pattern was marked KEEP, the member sections
6247
     should be as well.  */
6248
  if (ptr->keep_sections)
6249
    section->flags |= SEC_KEEP;
6250
}
6251
 
6252
/* Iterate over sections marking them against GC.  */
6253
 
6254
static void
6255
lang_gc_sections_1 (lang_statement_union_type *s)
6256
{
6257
  for (; s != NULL; s = s->header.next)
6258
    {
6259
      switch (s->header.type)
6260
        {
6261
        case lang_wild_statement_enum:
6262
          walk_wild (&s->wild_statement, gc_section_callback, NULL);
6263
          break;
6264
        case lang_constructors_statement_enum:
6265
          lang_gc_sections_1 (constructor_list.head);
6266
          break;
6267
        case lang_output_section_statement_enum:
6268
          lang_gc_sections_1 (s->output_section_statement.children.head);
6269
          break;
6270
        case lang_group_statement_enum:
6271
          lang_gc_sections_1 (s->group_statement.children.head);
6272
          break;
6273
        default:
6274
          break;
6275
        }
6276
    }
6277
}
6278
 
6279
static void
6280
lang_gc_sections (void)
6281
{
6282
  /* Keep all sections so marked in the link script.  */
6283
 
6284
  lang_gc_sections_1 (statement_list.head);
6285
 
6286
  /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
6287
     the special case of debug info.  (See bfd/stabs.c)
6288
     Twiddle the flag here, to simplify later linker code.  */
6289
  if (link_info.relocatable)
6290
    {
6291
      LANG_FOR_EACH_INPUT_STATEMENT (f)
6292
        {
6293
          asection *sec;
6294
#ifdef ENABLE_PLUGINS
6295
          if (f->claimed)
6296
            continue;
6297
#endif
6298
          for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
6299
            if ((sec->flags & SEC_DEBUGGING) == 0)
6300
              sec->flags &= ~SEC_EXCLUDE;
6301
        }
6302
    }
6303
 
6304
  if (link_info.gc_sections)
6305
    bfd_gc_sections (link_info.output_bfd, &link_info);
6306
}
6307
 
6308
/* Worker for lang_find_relro_sections_1.  */
6309
 
6310
static void
6311
find_relro_section_callback (lang_wild_statement_type *ptr ATTRIBUTE_UNUSED,
6312
                             struct wildcard_list *sec ATTRIBUTE_UNUSED,
6313
                             asection *section,
6314
                             lang_input_statement_type *file ATTRIBUTE_UNUSED,
6315
                             void *data)
6316
{
6317
  /* Discarded, excluded and ignored sections effectively have zero
6318
     size.  */
6319
  if (section->output_section != NULL
6320
      && section->output_section->owner == link_info.output_bfd
6321
      && (section->output_section->flags & SEC_EXCLUDE) == 0
6322
      && !IGNORE_SECTION (section)
6323
      && section->size != 0)
6324
    {
6325
      bfd_boolean *has_relro_section = (bfd_boolean *) data;
6326
      *has_relro_section = TRUE;
6327
    }
6328
}
6329
 
6330
/* Iterate over sections for relro sections.  */
6331
 
6332
static void
6333
lang_find_relro_sections_1 (lang_statement_union_type *s,
6334
                            bfd_boolean *has_relro_section)
6335
{
6336
  if (*has_relro_section)
6337
    return;
6338
 
6339
  for (; s != NULL; s = s->header.next)
6340
    {
6341
      if (s == expld.dataseg.relro_end_stat)
6342
        break;
6343
 
6344
      switch (s->header.type)
6345
        {
6346
        case lang_wild_statement_enum:
6347
          walk_wild (&s->wild_statement,
6348
                     find_relro_section_callback,
6349
                     has_relro_section);
6350
          break;
6351
        case lang_constructors_statement_enum:
6352
          lang_find_relro_sections_1 (constructor_list.head,
6353
                                      has_relro_section);
6354
          break;
6355
        case lang_output_section_statement_enum:
6356
          lang_find_relro_sections_1 (s->output_section_statement.children.head,
6357
                                      has_relro_section);
6358
          break;
6359
        case lang_group_statement_enum:
6360
          lang_find_relro_sections_1 (s->group_statement.children.head,
6361
                                      has_relro_section);
6362
          break;
6363
        default:
6364
          break;
6365
        }
6366
    }
6367
}
6368
 
6369
static void
6370
lang_find_relro_sections (void)
6371
{
6372
  bfd_boolean has_relro_section = FALSE;
6373
 
6374
  /* Check all sections in the link script.  */
6375
 
6376
  lang_find_relro_sections_1 (expld.dataseg.relro_start_stat,
6377
                              &has_relro_section);
6378
 
6379
  if (!has_relro_section)
6380
    link_info.relro = FALSE;
6381
}
6382
 
6383
/* Relax all sections until bfd_relax_section gives up.  */
6384
 
6385
void
6386
lang_relax_sections (bfd_boolean need_layout)
6387
{
6388
  if (RELAXATION_ENABLED)
6389
    {
6390
      /* We may need more than one relaxation pass.  */
6391
      int i = link_info.relax_pass;
6392
 
6393
      /* The backend can use it to determine the current pass.  */
6394
      link_info.relax_pass = 0;
6395
 
6396
      while (i--)
6397
        {
6398
          /* Keep relaxing until bfd_relax_section gives up.  */
6399
          bfd_boolean relax_again;
6400
 
6401
          link_info.relax_trip = -1;
6402
          do
6403
            {
6404
              link_info.relax_trip++;
6405
 
6406
              /* Note: pe-dll.c does something like this also.  If you find
6407
                 you need to change this code, you probably need to change
6408
                 pe-dll.c also.  DJ  */
6409
 
6410
              /* Do all the assignments with our current guesses as to
6411
                 section sizes.  */
6412
              lang_do_assignments (lang_assigning_phase_enum);
6413
 
6414
              /* We must do this after lang_do_assignments, because it uses
6415
                 size.  */
6416
              lang_reset_memory_regions ();
6417
 
6418
              /* Perform another relax pass - this time we know where the
6419
                 globals are, so can make a better guess.  */
6420
              relax_again = FALSE;
6421
              lang_size_sections (&relax_again, FALSE);
6422
            }
6423
          while (relax_again);
6424
 
6425
          link_info.relax_pass++;
6426
        }
6427
      need_layout = TRUE;
6428
    }
6429
 
6430
  if (need_layout)
6431
    {
6432
      /* Final extra sizing to report errors.  */
6433
      lang_do_assignments (lang_assigning_phase_enum);
6434
      lang_reset_memory_regions ();
6435
      lang_size_sections (NULL, TRUE);
6436
    }
6437
}
6438
 
6439
#ifdef ENABLE_PLUGINS
6440
/* Find the insert point for the plugin's replacement files.  We
6441
   place them after the first claimed real object file, or if the
6442
   first claimed object is an archive member, after the last real
6443
   object file immediately preceding the archive.  In the event
6444
   no objects have been claimed at all, we return the first dummy
6445
   object file on the list as the insert point; that works, but
6446
   the callee must be careful when relinking the file_chain as it
6447
   is not actually on that chain, only the statement_list and the
6448
   input_file list; in that case, the replacement files must be
6449
   inserted at the head of the file_chain.  */
6450
 
6451
static lang_input_statement_type *
6452
find_replacements_insert_point (void)
6453
{
6454
  lang_input_statement_type *claim1, *lastobject;
6455
  lastobject = &input_file_chain.head->input_statement;
6456
  for (claim1 = &file_chain.head->input_statement;
6457
       claim1 != NULL;
6458
       claim1 = &claim1->next->input_statement)
6459
    {
6460
      if (claim1->claimed)
6461
        return claim1->claim_archive ? lastobject : claim1;
6462
      /* Update lastobject if this is a real object file.  */
6463
      if (claim1->the_bfd && (claim1->the_bfd->my_archive == NULL))
6464
        lastobject = claim1;
6465
    }
6466
  /* No files were claimed by the plugin.  Choose the last object
6467
     file found on the list (maybe the first, dummy entry) as the
6468
     insert point.  */
6469
  return lastobject;
6470
}
6471
 
6472
/* Insert SRCLIST into DESTLIST after given element by chaining
6473
   on FIELD as the next-pointer.  (Counterintuitively does not need
6474
   a pointer to the actual after-node itself, just its chain field.)  */
6475
 
6476
static void
6477
lang_list_insert_after (lang_statement_list_type *destlist,
6478
                        lang_statement_list_type *srclist,
6479
                        lang_statement_union_type **field)
6480
{
6481
  *(srclist->tail) = *field;
6482
  *field = srclist->head;
6483
  if (destlist->tail == field)
6484
    destlist->tail = srclist->tail;
6485
}
6486
 
6487
/* Detach new nodes added to DESTLIST since the time ORIGLIST
6488
   was taken as a copy of it and leave them in ORIGLIST.  */
6489
 
6490
static void
6491
lang_list_remove_tail (lang_statement_list_type *destlist,
6492
                       lang_statement_list_type *origlist)
6493
{
6494
  union lang_statement_union **savetail;
6495
  /* Check that ORIGLIST really is an earlier state of DESTLIST.  */
6496
  ASSERT (origlist->head == destlist->head);
6497
  savetail = origlist->tail;
6498
  origlist->head = *(savetail);
6499
  origlist->tail = destlist->tail;
6500
  destlist->tail = savetail;
6501
  *savetail = NULL;
6502
}
6503
#endif /* ENABLE_PLUGINS */
6504
 
6505
void
6506
lang_process (void)
6507
{
6508
  /* Finalize dynamic list.  */
6509
  if (link_info.dynamic_list)
6510
    lang_finalize_version_expr_head (&link_info.dynamic_list->head);
6511
 
6512
  current_target = default_target;
6513
 
6514
  /* Open the output file.  */
6515
  lang_for_each_statement (ldlang_open_output);
6516
  init_opb ();
6517
 
6518
  ldemul_create_output_section_statements ();
6519
 
6520
  /* Add to the hash table all undefineds on the command line.  */
6521
  lang_place_undefineds ();
6522
 
6523
  if (!bfd_section_already_linked_table_init ())
6524
    einfo (_("%P%F: Failed to create hash table\n"));
6525
 
6526
  /* Create a bfd for each input file.  */
6527
  current_target = default_target;
6528
  open_input_bfds (statement_list.head, OPEN_BFD_NORMAL);
6529
 
6530
#ifdef ENABLE_PLUGINS
6531
  if (plugin_active_plugins_p ())
6532
    {
6533
      lang_statement_list_type added;
6534
      lang_statement_list_type files, inputfiles;
6535
 
6536
      /* Now all files are read, let the plugin(s) decide if there
6537
         are any more to be added to the link before we call the
6538
         emulation's after_open hook.  We create a private list of
6539
         input statements for this purpose, which we will eventually
6540
         insert into the global statment list after the first claimed
6541
         file.  */
6542
      added = *stat_ptr;
6543
      /* We need to manipulate all three chains in synchrony.  */
6544
      files = file_chain;
6545
      inputfiles = input_file_chain;
6546
      if (plugin_call_all_symbols_read ())
6547
        einfo (_("%P%F: %s: plugin reported error after all symbols read\n"),
6548
               plugin_error_plugin ());
6549
      /* Open any newly added files, updating the file chains.  */
6550
      open_input_bfds (added.head, OPEN_BFD_NORMAL);
6551
      /* Restore the global list pointer now they have all been added.  */
6552
      lang_list_remove_tail (stat_ptr, &added);
6553
      /* And detach the fresh ends of the file lists.  */
6554
      lang_list_remove_tail (&file_chain, &files);
6555
      lang_list_remove_tail (&input_file_chain, &inputfiles);
6556
      /* Were any new files added?  */
6557
      if (added.head != NULL)
6558
        {
6559
          /* If so, we will insert them into the statement list immediately
6560
             after the first input file that was claimed by the plugin.  */
6561
          plugin_insert = find_replacements_insert_point ();
6562
          /* If a plugin adds input files without having claimed any, we
6563
             don't really have a good idea where to place them.  Just putting
6564
             them at the start or end of the list is liable to leave them
6565
             outside the crtbegin...crtend range.  */
6566
          ASSERT (plugin_insert != NULL);
6567
          /* Splice the new statement list into the old one.  */
6568
          lang_list_insert_after (stat_ptr, &added,
6569
                                  &plugin_insert->header.next);
6570
          /* Likewise for the file chains.  */
6571
          lang_list_insert_after (&input_file_chain, &inputfiles,
6572
                                  &plugin_insert->next_real_file);
6573
          /* We must be careful when relinking file_chain; we may need to
6574
             insert the new files at the head of the list if the insert
6575
             point chosen is the dummy first input file.  */
6576
          if (plugin_insert->filename)
6577
            lang_list_insert_after (&file_chain, &files, &plugin_insert->next);
6578
          else
6579
            lang_list_insert_after (&file_chain, &files, &file_chain.head);
6580
 
6581
          /* Rescan archives in case new undefined symbols have appeared.  */
6582
          open_input_bfds (statement_list.head, OPEN_BFD_RESCAN);
6583
        }
6584
    }
6585
#endif /* ENABLE_PLUGINS */
6586
 
6587
  link_info.gc_sym_list = &entry_symbol;
6588
  if (entry_symbol.name == NULL)
6589
    link_info.gc_sym_list = ldlang_undef_chain_list_head;
6590
 
6591
  ldemul_after_open ();
6592
 
6593
  bfd_section_already_linked_table_free ();
6594
 
6595
  /* Make sure that we're not mixing architectures.  We call this
6596
     after all the input files have been opened, but before we do any
6597
     other processing, so that any operations merge_private_bfd_data
6598
     does on the output file will be known during the rest of the
6599
     link.  */
6600
  lang_check ();
6601
 
6602
  /* Handle .exports instead of a version script if we're told to do so.  */
6603
  if (command_line.version_exports_section)
6604
    lang_do_version_exports_section ();
6605
 
6606
  /* Build all sets based on the information gathered from the input
6607
     files.  */
6608
  ldctor_build_sets ();
6609
 
6610
  /* Remove unreferenced sections if asked to.  */
6611
  lang_gc_sections ();
6612
 
6613
  /* Size up the common data.  */
6614
  lang_common ();
6615
 
6616
  /* Update wild statements.  */
6617
  update_wild_statements (statement_list.head);
6618
 
6619
  /* Run through the contours of the script and attach input sections
6620
     to the correct output sections.  */
6621
  lang_statement_iteration++;
6622
  map_input_to_output_sections (statement_list.head, NULL, NULL);
6623
 
6624
  process_insert_statements ();
6625
 
6626
  /* Find any sections not attached explicitly and handle them.  */
6627
  lang_place_orphans ();
6628
 
6629
  if (! link_info.relocatable)
6630
    {
6631
      asection *found;
6632
 
6633
      /* Merge SEC_MERGE sections.  This has to be done after GC of
6634
         sections, so that GCed sections are not merged, but before
6635
         assigning dynamic symbols, since removing whole input sections
6636
         is hard then.  */
6637
      bfd_merge_sections (link_info.output_bfd, &link_info);
6638
 
6639
      /* Look for a text section and set the readonly attribute in it.  */
6640
      found = bfd_get_section_by_name (link_info.output_bfd, ".text");
6641
 
6642
      if (found != NULL)
6643
        {
6644
          if (config.text_read_only)
6645
            found->flags |= SEC_READONLY;
6646
          else
6647
            found->flags &= ~SEC_READONLY;
6648
        }
6649
    }
6650
 
6651
  /* Do anything special before sizing sections.  This is where ELF
6652
     and other back-ends size dynamic sections.  */
6653
  ldemul_before_allocation ();
6654
 
6655
  /* We must record the program headers before we try to fix the
6656
     section positions, since they will affect SIZEOF_HEADERS.  */
6657
  lang_record_phdrs ();
6658
 
6659
  /* Check relro sections.  */
6660
  if (link_info.relro && ! link_info.relocatable)
6661
    lang_find_relro_sections ();
6662
 
6663
  /* Size up the sections.  */
6664
  lang_size_sections (NULL, ! RELAXATION_ENABLED);
6665
 
6666
  /* See if anything special should be done now we know how big
6667
     everything is.  This is where relaxation is done.  */
6668
  ldemul_after_allocation ();
6669
 
6670
  /* Fix any .startof. or .sizeof. symbols.  */
6671
  lang_set_startof ();
6672
 
6673
  /* Do all the assignments, now that we know the final resting places
6674
     of all the symbols.  */
6675
  lang_do_assignments (lang_final_phase_enum);
6676
 
6677
  ldemul_finish ();
6678
 
6679
  /* Make sure that the section addresses make sense.  */
6680
  if (command_line.check_section_addresses)
6681
    lang_check_section_addresses ();
6682
 
6683
  lang_end ();
6684
}
6685
 
6686
/* EXPORTED TO YACC */
6687
 
6688
void
6689
lang_add_wild (struct wildcard_spec *filespec,
6690
               struct wildcard_list *section_list,
6691
               bfd_boolean keep_sections)
6692
{
6693
  struct wildcard_list *curr, *next;
6694
  lang_wild_statement_type *new_stmt;
6695
 
6696
  /* Reverse the list as the parser puts it back to front.  */
6697
  for (curr = section_list, section_list = NULL;
6698
       curr != NULL;
6699
       section_list = curr, curr = next)
6700
    {
6701
      if (curr->spec.name != NULL && strcmp (curr->spec.name, "COMMON") == 0)
6702
        placed_commons = TRUE;
6703
 
6704
      next = curr->next;
6705
      curr->next = section_list;
6706
    }
6707
 
6708
  if (filespec != NULL && filespec->name != NULL)
6709
    {
6710
      if (strcmp (filespec->name, "*") == 0)
6711
        filespec->name = NULL;
6712
      else if (! wildcardp (filespec->name))
6713
        lang_has_input_file = TRUE;
6714
    }
6715
 
6716
  new_stmt = new_stat (lang_wild_statement, stat_ptr);
6717
  new_stmt->filename = NULL;
6718
  new_stmt->filenames_sorted = FALSE;
6719
  if (filespec != NULL)
6720
    {
6721
      new_stmt->filename = filespec->name;
6722
      new_stmt->filenames_sorted = filespec->sorted == by_name;
6723
    }
6724
  new_stmt->section_list = section_list;
6725
  new_stmt->keep_sections = keep_sections;
6726
  lang_list_init (&new_stmt->children);
6727
  analyze_walk_wild_section_handler (new_stmt);
6728
}
6729
 
6730
void
6731
lang_section_start (const char *name, etree_type *address,
6732
                    const segment_type *segment)
6733
{
6734
  lang_address_statement_type *ad;
6735
 
6736
  ad = new_stat (lang_address_statement, stat_ptr);
6737
  ad->section_name = name;
6738
  ad->address = address;
6739
  ad->segment = segment;
6740
}
6741
 
6742
/* Set the start symbol to NAME.  CMDLINE is nonzero if this is called
6743
   because of a -e argument on the command line, or zero if this is
6744
   called by ENTRY in a linker script.  Command line arguments take
6745
   precedence.  */
6746
 
6747
void
6748
lang_add_entry (const char *name, bfd_boolean cmdline)
6749
{
6750
  if (entry_symbol.name == NULL
6751
      || cmdline
6752
      || ! entry_from_cmdline)
6753
    {
6754
      entry_symbol.name = name;
6755
      entry_from_cmdline = cmdline;
6756
    }
6757
}
6758
 
6759
/* Set the default start symbol to NAME.  .em files should use this,
6760
   not lang_add_entry, to override the use of "start" if neither the
6761
   linker script nor the command line specifies an entry point.  NAME
6762
   must be permanently allocated.  */
6763
void
6764
lang_default_entry (const char *name)
6765
{
6766
  entry_symbol_default = name;
6767
}
6768
 
6769
void
6770
lang_add_target (const char *name)
6771
{
6772
  lang_target_statement_type *new_stmt;
6773
 
6774
  new_stmt = new_stat (lang_target_statement, stat_ptr);
6775
  new_stmt->target = name;
6776
}
6777
 
6778
void
6779
lang_add_map (const char *name)
6780
{
6781
  while (*name)
6782
    {
6783
      switch (*name)
6784
        {
6785
        case 'F':
6786
          map_option_f = TRUE;
6787
          break;
6788
        }
6789
      name++;
6790
    }
6791
}
6792
 
6793
void
6794
lang_add_fill (fill_type *fill)
6795
{
6796
  lang_fill_statement_type *new_stmt;
6797
 
6798
  new_stmt = new_stat (lang_fill_statement, stat_ptr);
6799
  new_stmt->fill = fill;
6800
}
6801
 
6802
void
6803
lang_add_data (int type, union etree_union *exp)
6804
{
6805
  lang_data_statement_type *new_stmt;
6806
 
6807
  new_stmt = new_stat (lang_data_statement, stat_ptr);
6808
  new_stmt->exp = exp;
6809
  new_stmt->type = type;
6810
}
6811
 
6812
/* Create a new reloc statement.  RELOC is the BFD relocation type to
6813
   generate.  HOWTO is the corresponding howto structure (we could
6814
   look this up, but the caller has already done so).  SECTION is the
6815
   section to generate a reloc against, or NAME is the name of the
6816
   symbol to generate a reloc against.  Exactly one of SECTION and
6817
   NAME must be NULL.  ADDEND is an expression for the addend.  */
6818
 
6819
void
6820
lang_add_reloc (bfd_reloc_code_real_type reloc,
6821
                reloc_howto_type *howto,
6822
                asection *section,
6823
                const char *name,
6824
                union etree_union *addend)
6825
{
6826
  lang_reloc_statement_type *p = new_stat (lang_reloc_statement, stat_ptr);
6827
 
6828
  p->reloc = reloc;
6829
  p->howto = howto;
6830
  p->section = section;
6831
  p->name = name;
6832
  p->addend_exp = addend;
6833
 
6834
  p->addend_value = 0;
6835
  p->output_section = NULL;
6836
  p->output_offset = 0;
6837
}
6838
 
6839
lang_assignment_statement_type *
6840
lang_add_assignment (etree_type *exp)
6841
{
6842
  lang_assignment_statement_type *new_stmt;
6843
 
6844
  new_stmt = new_stat (lang_assignment_statement, stat_ptr);
6845
  new_stmt->exp = exp;
6846
  return new_stmt;
6847
}
6848
 
6849
void
6850
lang_add_attribute (enum statement_enum attribute)
6851
{
6852
  new_statement (attribute, sizeof (lang_statement_header_type), stat_ptr);
6853
}
6854
 
6855
void
6856
lang_startup (const char *name)
6857
{
6858
  if (first_file->filename != NULL)
6859
    {
6860
      einfo (_("%P%F: multiple STARTUP files\n"));
6861
    }
6862
  first_file->filename = name;
6863
  first_file->local_sym_name = name;
6864
  first_file->real = TRUE;
6865
}
6866
 
6867
void
6868
lang_float (bfd_boolean maybe)
6869
{
6870
  lang_float_flag = maybe;
6871
}
6872
 
6873
 
6874
/* Work out the load- and run-time regions from a script statement, and
6875
   store them in *LMA_REGION and *REGION respectively.
6876
 
6877
   MEMSPEC is the name of the run-time region, or the value of
6878
   DEFAULT_MEMORY_REGION if the statement didn't specify one.
6879
   LMA_MEMSPEC is the name of the load-time region, or null if the
6880
   statement didn't specify one.HAVE_LMA_P is TRUE if the statement
6881
   had an explicit load address.
6882
 
6883
   It is an error to specify both a load region and a load address.  */
6884
 
6885
static void
6886
lang_get_regions (lang_memory_region_type **region,
6887
                  lang_memory_region_type **lma_region,
6888
                  const char *memspec,
6889
                  const char *lma_memspec,
6890
                  bfd_boolean have_lma,
6891
                  bfd_boolean have_vma)
6892
{
6893
  *lma_region = lang_memory_region_lookup (lma_memspec, FALSE);
6894
 
6895
  /* If no runtime region or VMA has been specified, but the load region
6896
     has been specified, then use the load region for the runtime region
6897
     as well.  */
6898
  if (lma_memspec != NULL
6899
      && ! have_vma
6900
      && strcmp (memspec, DEFAULT_MEMORY_REGION) == 0)
6901
    *region = *lma_region;
6902
  else
6903
    *region = lang_memory_region_lookup (memspec, FALSE);
6904
 
6905
  if (have_lma && lma_memspec != 0)
6906
    einfo (_("%X%P:%S: section has both a load address and a load region\n"));
6907
}
6908
 
6909
void
6910
lang_leave_output_section_statement (fill_type *fill, const char *memspec,
6911
                                     lang_output_section_phdr_list *phdrs,
6912
                                     const char *lma_memspec)
6913
{
6914
  lang_get_regions (&current_section->region,
6915
                    &current_section->lma_region,
6916
                    memspec, lma_memspec,
6917
                    current_section->load_base != NULL,
6918
                    current_section->addr_tree != NULL);
6919
 
6920
  /* If this section has no load region or base, but uses the same
6921
     region as the previous section, then propagate the previous
6922
     section's load region.  */
6923
 
6924
  if (current_section->lma_region == NULL
6925
      && current_section->load_base == NULL
6926
      && current_section->addr_tree == NULL
6927
      && current_section->region == current_section->prev->region)
6928
    current_section->lma_region = current_section->prev->lma_region;
6929
 
6930
  current_section->fill = fill;
6931
  current_section->phdrs = phdrs;
6932
  pop_stat_ptr ();
6933
}
6934
 
6935
/* Create an absolute symbol with the given name with the value of the
6936
   address of first byte of the section named.
6937
 
6938
   If the symbol already exists, then do nothing.  */
6939
 
6940
void
6941
lang_abs_symbol_at_beginning_of (const char *secname, const char *name)
6942
{
6943
  struct bfd_link_hash_entry *h;
6944
 
6945
  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6946
  if (h == NULL)
6947
    einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6948
 
6949
  if (h->type == bfd_link_hash_new
6950
      || h->type == bfd_link_hash_undefined)
6951
    {
6952
      asection *sec;
6953
 
6954
      h->type = bfd_link_hash_defined;
6955
 
6956
      sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6957
      if (sec == NULL)
6958
        h->u.def.value = 0;
6959
      else
6960
        h->u.def.value = bfd_get_section_vma (link_info.output_bfd, sec);
6961
 
6962
      h->u.def.section = bfd_abs_section_ptr;
6963
    }
6964
}
6965
 
6966
/* Create an absolute symbol with the given name with the value of the
6967
   address of the first byte after the end of the section named.
6968
 
6969
   If the symbol already exists, then do nothing.  */
6970
 
6971
void
6972
lang_abs_symbol_at_end_of (const char *secname, const char *name)
6973
{
6974
  struct bfd_link_hash_entry *h;
6975
 
6976
  h = bfd_link_hash_lookup (link_info.hash, name, TRUE, TRUE, TRUE);
6977
  if (h == NULL)
6978
    einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
6979
 
6980
  if (h->type == bfd_link_hash_new
6981
      || h->type == bfd_link_hash_undefined)
6982
    {
6983
      asection *sec;
6984
 
6985
      h->type = bfd_link_hash_defined;
6986
 
6987
      sec = bfd_get_section_by_name (link_info.output_bfd, secname);
6988
      if (sec == NULL)
6989
        h->u.def.value = 0;
6990
      else
6991
        h->u.def.value = (bfd_get_section_vma (link_info.output_bfd, sec)
6992
                          + TO_ADDR (sec->size));
6993
 
6994
      h->u.def.section = bfd_abs_section_ptr;
6995
    }
6996
}
6997
 
6998
void
6999
lang_statement_append (lang_statement_list_type *list,
7000
                       lang_statement_union_type *element,
7001
                       lang_statement_union_type **field)
7002
{
7003
  *(list->tail) = element;
7004
  list->tail = field;
7005
}
7006
 
7007
/* Set the output format type.  -oformat overrides scripts.  */
7008
 
7009
void
7010
lang_add_output_format (const char *format,
7011
                        const char *big,
7012
                        const char *little,
7013
                        int from_script)
7014
{
7015
  if (output_target == NULL || !from_script)
7016
    {
7017
      if (command_line.endian == ENDIAN_BIG
7018
          && big != NULL)
7019
        format = big;
7020
      else if (command_line.endian == ENDIAN_LITTLE
7021
               && little != NULL)
7022
        format = little;
7023
 
7024
      output_target = format;
7025
    }
7026
}
7027
 
7028
void
7029
lang_add_insert (const char *where, int is_before)
7030
{
7031
  lang_insert_statement_type *new_stmt;
7032
 
7033
  new_stmt = new_stat (lang_insert_statement, stat_ptr);
7034
  new_stmt->where = where;
7035
  new_stmt->is_before = is_before;
7036
  saved_script_handle = previous_script_handle;
7037
}
7038
 
7039
/* Enter a group.  This creates a new lang_group_statement, and sets
7040
   stat_ptr to build new statements within the group.  */
7041
 
7042
void
7043
lang_enter_group (void)
7044
{
7045
  lang_group_statement_type *g;
7046
 
7047
  g = new_stat (lang_group_statement, stat_ptr);
7048
  lang_list_init (&g->children);
7049
  push_stat_ptr (&g->children);
7050
}
7051
 
7052
/* Leave a group.  This just resets stat_ptr to start writing to the
7053
   regular list of statements again.  Note that this will not work if
7054
   groups can occur inside anything else which can adjust stat_ptr,
7055
   but currently they can't.  */
7056
 
7057
void
7058
lang_leave_group (void)
7059
{
7060
  pop_stat_ptr ();
7061
}
7062
 
7063
/* Add a new program header.  This is called for each entry in a PHDRS
7064
   command in a linker script.  */
7065
 
7066
void
7067
lang_new_phdr (const char *name,
7068
               etree_type *type,
7069
               bfd_boolean filehdr,
7070
               bfd_boolean phdrs,
7071
               etree_type *at,
7072
               etree_type *flags)
7073
{
7074
  struct lang_phdr *n, **pp;
7075
  bfd_boolean hdrs;
7076
 
7077
  n = (struct lang_phdr *) stat_alloc (sizeof (struct lang_phdr));
7078
  n->next = NULL;
7079
  n->name = name;
7080
  n->type = exp_get_value_int (type, 0, "program header type");
7081
  n->filehdr = filehdr;
7082
  n->phdrs = phdrs;
7083
  n->at = at;
7084
  n->flags = flags;
7085
 
7086
  hdrs = n->type == 1 && (phdrs || filehdr);
7087
 
7088
  for (pp = &lang_phdr_list; *pp != NULL; pp = &(*pp)->next)
7089
    if (hdrs
7090
        && (*pp)->type == 1
7091
        && !((*pp)->filehdr || (*pp)->phdrs))
7092
      {
7093
        einfo (_("%X%P:%S: PHDRS and FILEHDR are not supported when prior PT_LOAD headers lack them\n"));
7094
        hdrs = FALSE;
7095
      }
7096
 
7097
  *pp = n;
7098
}
7099
 
7100
/* Record the program header information in the output BFD.  FIXME: We
7101
   should not be calling an ELF specific function here.  */
7102
 
7103
static void
7104
lang_record_phdrs (void)
7105
{
7106
  unsigned int alc;
7107
  asection **secs;
7108
  lang_output_section_phdr_list *last;
7109
  struct lang_phdr *l;
7110
  lang_output_section_statement_type *os;
7111
 
7112
  alc = 10;
7113
  secs = (asection **) xmalloc (alc * sizeof (asection *));
7114
  last = NULL;
7115
 
7116
  for (l = lang_phdr_list; l != NULL; l = l->next)
7117
    {
7118
      unsigned int c;
7119
      flagword flags;
7120
      bfd_vma at;
7121
 
7122
      c = 0;
7123
      for (os = &lang_output_section_statement.head->output_section_statement;
7124
           os != NULL;
7125
           os = os->next)
7126
        {
7127
          lang_output_section_phdr_list *pl;
7128
 
7129
          if (os->constraint < 0)
7130
            continue;
7131
 
7132
          pl = os->phdrs;
7133
          if (pl != NULL)
7134
            last = pl;
7135
          else
7136
            {
7137
              if (os->sectype == noload_section
7138
                  || os->bfd_section == NULL
7139
                  || (os->bfd_section->flags & SEC_ALLOC) == 0)
7140
                continue;
7141
 
7142
              /* Don't add orphans to PT_INTERP header.  */
7143
              if (l->type == 3)
7144
                continue;
7145
 
7146
              if (last == NULL)
7147
                {
7148
                  lang_output_section_statement_type * tmp_os;
7149
 
7150
                  /* If we have not run across a section with a program
7151
                     header assigned to it yet, then scan forwards to find
7152
                     one.  This prevents inconsistencies in the linker's
7153
                     behaviour when a script has specified just a single
7154
                     header and there are sections in that script which are
7155
                     not assigned to it, and which occur before the first
7156
                     use of that header. See here for more details:
7157
                     http://sourceware.org/ml/binutils/2007-02/msg00291.html  */
7158
                  for (tmp_os = os; tmp_os; tmp_os = tmp_os->next)
7159
                    if (tmp_os->phdrs)
7160
                      {
7161
                        last = tmp_os->phdrs;
7162
                        break;
7163
                      }
7164
                  if (last == NULL)
7165
                    einfo (_("%F%P: no sections assigned to phdrs\n"));
7166
                }
7167
              pl = last;
7168
            }
7169
 
7170
          if (os->bfd_section == NULL)
7171
            continue;
7172
 
7173
          for (; pl != NULL; pl = pl->next)
7174
            {
7175
              if (strcmp (pl->name, l->name) == 0)
7176
                {
7177
                  if (c >= alc)
7178
                    {
7179
                      alc *= 2;
7180
                      secs = (asection **) xrealloc (secs,
7181
                                                     alc * sizeof (asection *));
7182
                    }
7183
                  secs[c] = os->bfd_section;
7184
                  ++c;
7185
                  pl->used = TRUE;
7186
                }
7187
            }
7188
        }
7189
 
7190
      if (l->flags == NULL)
7191
        flags = 0;
7192
      else
7193
        flags = exp_get_vma (l->flags, 0, "phdr flags");
7194
 
7195
      if (l->at == NULL)
7196
        at = 0;
7197
      else
7198
        at = exp_get_vma (l->at, 0, "phdr load address");
7199
 
7200
      if (! bfd_record_phdr (link_info.output_bfd, l->type,
7201
                             l->flags != NULL, flags, l->at != NULL,
7202
                             at, l->filehdr, l->phdrs, c, secs))
7203
        einfo (_("%F%P: bfd_record_phdr failed: %E\n"));
7204
    }
7205
 
7206
  free (secs);
7207
 
7208
  /* Make sure all the phdr assignments succeeded.  */
7209
  for (os = &lang_output_section_statement.head->output_section_statement;
7210
       os != NULL;
7211
       os = os->next)
7212
    {
7213
      lang_output_section_phdr_list *pl;
7214
 
7215
      if (os->constraint < 0
7216
          || os->bfd_section == NULL)
7217
        continue;
7218
 
7219
      for (pl = os->phdrs;
7220
           pl != NULL;
7221
           pl = pl->next)
7222
        if (! pl->used && strcmp (pl->name, "NONE") != 0)
7223
          einfo (_("%X%P: section `%s' assigned to non-existent phdr `%s'\n"),
7224
                 os->name, pl->name);
7225
    }
7226
}
7227
 
7228
/* Record a list of sections which may not be cross referenced.  */
7229
 
7230
void
7231
lang_add_nocrossref (lang_nocrossref_type *l)
7232
{
7233
  struct lang_nocrossrefs *n;
7234
 
7235
  n = (struct lang_nocrossrefs *) xmalloc (sizeof *n);
7236
  n->next = nocrossref_list;
7237
  n->list = l;
7238
  nocrossref_list = n;
7239
 
7240
  /* Set notice_all so that we get informed about all symbols.  */
7241
  link_info.notice_all = TRUE;
7242
}
7243
 
7244
/* Overlay handling.  We handle overlays with some static variables.  */
7245
 
7246
/* The overlay virtual address.  */
7247
static etree_type *overlay_vma;
7248
/* And subsection alignment.  */
7249
static etree_type *overlay_subalign;
7250
 
7251
/* An expression for the maximum section size seen so far.  */
7252
static etree_type *overlay_max;
7253
 
7254
/* A list of all the sections in this overlay.  */
7255
 
7256
struct overlay_list {
7257
  struct overlay_list *next;
7258
  lang_output_section_statement_type *os;
7259
};
7260
 
7261
static struct overlay_list *overlay_list;
7262
 
7263
/* Start handling an overlay.  */
7264
 
7265
void
7266
lang_enter_overlay (etree_type *vma_expr, etree_type *subalign)
7267
{
7268
  /* The grammar should prevent nested overlays from occurring.  */
7269
  ASSERT (overlay_vma == NULL
7270
          && overlay_subalign == NULL
7271
          && overlay_max == NULL);
7272
 
7273
  overlay_vma = vma_expr;
7274
  overlay_subalign = subalign;
7275
}
7276
 
7277
/* Start a section in an overlay.  We handle this by calling
7278
   lang_enter_output_section_statement with the correct VMA.
7279
   lang_leave_overlay sets up the LMA and memory regions.  */
7280
 
7281
void
7282
lang_enter_overlay_section (const char *name)
7283
{
7284
  struct overlay_list *n;
7285
  etree_type *size;
7286
 
7287
  lang_enter_output_section_statement (name, overlay_vma, overlay_section,
7288
                                       0, overlay_subalign, 0, 0);
7289
 
7290
  /* If this is the first section, then base the VMA of future
7291
     sections on this one.  This will work correctly even if `.' is
7292
     used in the addresses.  */
7293
  if (overlay_list == NULL)
7294
    overlay_vma = exp_nameop (ADDR, name);
7295
 
7296
  /* Remember the section.  */
7297
  n = (struct overlay_list *) xmalloc (sizeof *n);
7298
  n->os = current_section;
7299
  n->next = overlay_list;
7300
  overlay_list = n;
7301
 
7302
  size = exp_nameop (SIZEOF, name);
7303
 
7304
  /* Arrange to work out the maximum section end address.  */
7305
  if (overlay_max == NULL)
7306
    overlay_max = size;
7307
  else
7308
    overlay_max = exp_binop (MAX_K, overlay_max, size);
7309
}
7310
 
7311
/* Finish a section in an overlay.  There isn't any special to do
7312
   here.  */
7313
 
7314
void
7315
lang_leave_overlay_section (fill_type *fill,
7316
                            lang_output_section_phdr_list *phdrs)
7317
{
7318
  const char *name;
7319
  char *clean, *s2;
7320
  const char *s1;
7321
  char *buf;
7322
 
7323
  name = current_section->name;
7324
 
7325
  /* For now, assume that DEFAULT_MEMORY_REGION is the run-time memory
7326
     region and that no load-time region has been specified.  It doesn't
7327
     really matter what we say here, since lang_leave_overlay will
7328
     override it.  */
7329
  lang_leave_output_section_statement (fill, DEFAULT_MEMORY_REGION, phdrs, 0);
7330
 
7331
  /* Define the magic symbols.  */
7332
 
7333
  clean = (char *) xmalloc (strlen (name) + 1);
7334
  s2 = clean;
7335
  for (s1 = name; *s1 != '\0'; s1++)
7336
    if (ISALNUM (*s1) || *s1 == '_')
7337
      *s2++ = *s1;
7338
  *s2 = '\0';
7339
 
7340
  buf = (char *) xmalloc (strlen (clean) + sizeof "__load_start_");
7341
  sprintf (buf, "__load_start_%s", clean);
7342
  lang_add_assignment (exp_provide (buf,
7343
                                    exp_nameop (LOADADDR, name),
7344
                                    FALSE));
7345
 
7346
  buf = (char *) xmalloc (strlen (clean) + sizeof "__load_stop_");
7347
  sprintf (buf, "__load_stop_%s", clean);
7348
  lang_add_assignment (exp_provide (buf,
7349
                                    exp_binop ('+',
7350
                                               exp_nameop (LOADADDR, name),
7351
                                               exp_nameop (SIZEOF, name)),
7352
                                    FALSE));
7353
 
7354
  free (clean);
7355
}
7356
 
7357
/* Finish an overlay.  If there are any overlay wide settings, this
7358
   looks through all the sections in the overlay and sets them.  */
7359
 
7360
void
7361
lang_leave_overlay (etree_type *lma_expr,
7362
                    int nocrossrefs,
7363
                    fill_type *fill,
7364
                    const char *memspec,
7365
                    lang_output_section_phdr_list *phdrs,
7366
                    const char *lma_memspec)
7367
{
7368
  lang_memory_region_type *region;
7369
  lang_memory_region_type *lma_region;
7370
  struct overlay_list *l;
7371
  lang_nocrossref_type *nocrossref;
7372
 
7373
  lang_get_regions (&region, &lma_region,
7374
                    memspec, lma_memspec,
7375
                    lma_expr != NULL, FALSE);
7376
 
7377
  nocrossref = NULL;
7378
 
7379
  /* After setting the size of the last section, set '.' to end of the
7380
     overlay region.  */
7381
  if (overlay_list != NULL)
7382
    overlay_list->os->update_dot_tree
7383
      = exp_assign (".", exp_binop ('+', overlay_vma, overlay_max));
7384
 
7385
  l = overlay_list;
7386
  while (l != NULL)
7387
    {
7388
      struct overlay_list *next;
7389
 
7390
      if (fill != NULL && l->os->fill == NULL)
7391
        l->os->fill = fill;
7392
 
7393
      l->os->region = region;
7394
      l->os->lma_region = lma_region;
7395
 
7396
      /* The first section has the load address specified in the
7397
         OVERLAY statement.  The rest are worked out from that.
7398
         The base address is not needed (and should be null) if
7399
         an LMA region was specified.  */
7400
      if (l->next == 0)
7401
        {
7402
          l->os->load_base = lma_expr;
7403
          l->os->sectype = normal_section;
7404
        }
7405
      if (phdrs != NULL && l->os->phdrs == NULL)
7406
        l->os->phdrs = phdrs;
7407
 
7408
      if (nocrossrefs)
7409
        {
7410
          lang_nocrossref_type *nc;
7411
 
7412
          nc = (lang_nocrossref_type *) xmalloc (sizeof *nc);
7413
          nc->name = l->os->name;
7414
          nc->next = nocrossref;
7415
          nocrossref = nc;
7416
        }
7417
 
7418
      next = l->next;
7419
      free (l);
7420
      l = next;
7421
    }
7422
 
7423
  if (nocrossref != NULL)
7424
    lang_add_nocrossref (nocrossref);
7425
 
7426
  overlay_vma = NULL;
7427
  overlay_list = NULL;
7428
  overlay_max = NULL;
7429
}
7430
 
7431
/* Version handling.  This is only useful for ELF.  */
7432
 
7433
/* This global variable holds the version tree that we build.  */
7434
 
7435
struct bfd_elf_version_tree *lang_elf_version_info;
7436
 
7437
/* If PREV is NULL, return first version pattern matching particular symbol.
7438
   If PREV is non-NULL, return first version pattern matching particular
7439
   symbol after PREV (previously returned by lang_vers_match).  */
7440
 
7441
static struct bfd_elf_version_expr *
7442
lang_vers_match (struct bfd_elf_version_expr_head *head,
7443
                 struct bfd_elf_version_expr *prev,
7444
                 const char *sym)
7445
{
7446
  const char *c_sym;
7447
  const char *cxx_sym = sym;
7448
  const char *java_sym = sym;
7449
  struct bfd_elf_version_expr *expr = NULL;
7450
  enum demangling_styles curr_style;
7451
 
7452
  curr_style = CURRENT_DEMANGLING_STYLE;
7453
  cplus_demangle_set_style (no_demangling);
7454
  c_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_NO_OPTS);
7455
  if (!c_sym)
7456
    c_sym = sym;
7457
  cplus_demangle_set_style (curr_style);
7458
 
7459
  if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7460
    {
7461
      cxx_sym = bfd_demangle (link_info.output_bfd, sym,
7462
                              DMGL_PARAMS | DMGL_ANSI);
7463
      if (!cxx_sym)
7464
        cxx_sym = sym;
7465
    }
7466
  if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7467
    {
7468
      java_sym = bfd_demangle (link_info.output_bfd, sym, DMGL_JAVA);
7469
      if (!java_sym)
7470
        java_sym = sym;
7471
    }
7472
 
7473
  if (head->htab && (prev == NULL || prev->literal))
7474
    {
7475
      struct bfd_elf_version_expr e;
7476
 
7477
      switch (prev ? prev->mask : 0)
7478
        {
7479
        case 0:
7480
          if (head->mask & BFD_ELF_VERSION_C_TYPE)
7481
            {
7482
              e.pattern = c_sym;
7483
              expr = (struct bfd_elf_version_expr *)
7484
                  htab_find ((htab_t) head->htab, &e);
7485
              while (expr && strcmp (expr->pattern, c_sym) == 0)
7486
                if (expr->mask == BFD_ELF_VERSION_C_TYPE)
7487
                  goto out_ret;
7488
                else
7489
                  expr = expr->next;
7490
            }
7491
          /* Fallthrough */
7492
        case BFD_ELF_VERSION_C_TYPE:
7493
          if (head->mask & BFD_ELF_VERSION_CXX_TYPE)
7494
            {
7495
              e.pattern = cxx_sym;
7496
              expr = (struct bfd_elf_version_expr *)
7497
                  htab_find ((htab_t) head->htab, &e);
7498
              while (expr && strcmp (expr->pattern, cxx_sym) == 0)
7499
                if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7500
                  goto out_ret;
7501
                else
7502
                  expr = expr->next;
7503
            }
7504
          /* Fallthrough */
7505
        case BFD_ELF_VERSION_CXX_TYPE:
7506
          if (head->mask & BFD_ELF_VERSION_JAVA_TYPE)
7507
            {
7508
              e.pattern = java_sym;
7509
              expr = (struct bfd_elf_version_expr *)
7510
                  htab_find ((htab_t) head->htab, &e);
7511
              while (expr && strcmp (expr->pattern, java_sym) == 0)
7512
                if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7513
                  goto out_ret;
7514
                else
7515
                  expr = expr->next;
7516
            }
7517
          /* Fallthrough */
7518
        default:
7519
          break;
7520
        }
7521
    }
7522
 
7523
  /* Finally, try the wildcards.  */
7524
  if (prev == NULL || prev->literal)
7525
    expr = head->remaining;
7526
  else
7527
    expr = prev->next;
7528
  for (; expr; expr = expr->next)
7529
    {
7530
      const char *s;
7531
 
7532
      if (!expr->pattern)
7533
        continue;
7534
 
7535
      if (expr->pattern[0] == '*' && expr->pattern[1] == '\0')
7536
        break;
7537
 
7538
      if (expr->mask == BFD_ELF_VERSION_JAVA_TYPE)
7539
        s = java_sym;
7540
      else if (expr->mask == BFD_ELF_VERSION_CXX_TYPE)
7541
        s = cxx_sym;
7542
      else
7543
        s = c_sym;
7544
      if (fnmatch (expr->pattern, s, 0) == 0)
7545
        break;
7546
    }
7547
 
7548
 out_ret:
7549
  if (c_sym != sym)
7550
    free ((char *) c_sym);
7551
  if (cxx_sym != sym)
7552
    free ((char *) cxx_sym);
7553
  if (java_sym != sym)
7554
    free ((char *) java_sym);
7555
  return expr;
7556
}
7557
 
7558
/* Return NULL if the PATTERN argument is a glob pattern, otherwise,
7559
   return a pointer to the symbol name with any backslash quotes removed.  */
7560
 
7561
static const char *
7562
realsymbol (const char *pattern)
7563
{
7564
  const char *p;
7565
  bfd_boolean changed = FALSE, backslash = FALSE;
7566
  char *s, *symbol = (char *) xmalloc (strlen (pattern) + 1);
7567
 
7568
  for (p = pattern, s = symbol; *p != '\0'; ++p)
7569
    {
7570
      /* It is a glob pattern only if there is no preceding
7571
         backslash.  */
7572
      if (backslash)
7573
        {
7574
          /* Remove the preceding backslash.  */
7575
          *(s - 1) = *p;
7576
          backslash = FALSE;
7577
          changed = TRUE;
7578
        }
7579
      else
7580
        {
7581
          if (*p == '?' || *p == '*' || *p == '[')
7582
            {
7583
              free (symbol);
7584
              return NULL;
7585
            }
7586
 
7587
          *s++ = *p;
7588
          backslash = *p == '\\';
7589
        }
7590
    }
7591
 
7592
  if (changed)
7593
    {
7594
      *s = '\0';
7595
      return symbol;
7596
    }
7597
  else
7598
    {
7599
      free (symbol);
7600
      return pattern;
7601
    }
7602
}
7603
 
7604
/* This is called for each variable name or match expression.  NEW_NAME is
7605
   the name of the symbol to match, or, if LITERAL_P is FALSE, a glob
7606
   pattern to be matched against symbol names.  */
7607
 
7608
struct bfd_elf_version_expr *
7609
lang_new_vers_pattern (struct bfd_elf_version_expr *orig,
7610
                       const char *new_name,
7611
                       const char *lang,
7612
                       bfd_boolean literal_p)
7613
{
7614
  struct bfd_elf_version_expr *ret;
7615
 
7616
  ret = (struct bfd_elf_version_expr *) xmalloc (sizeof *ret);
7617
  ret->next = orig;
7618
  ret->symver = 0;
7619
  ret->script = 0;
7620
  ret->literal = TRUE;
7621
  ret->pattern = literal_p ? new_name : realsymbol (new_name);
7622
  if (ret->pattern == NULL)
7623
    {
7624
      ret->pattern = new_name;
7625
      ret->literal = FALSE;
7626
    }
7627
 
7628
  if (lang == NULL || strcasecmp (lang, "C") == 0)
7629
    ret->mask = BFD_ELF_VERSION_C_TYPE;
7630
  else if (strcasecmp (lang, "C++") == 0)
7631
    ret->mask = BFD_ELF_VERSION_CXX_TYPE;
7632
  else if (strcasecmp (lang, "Java") == 0)
7633
    ret->mask = BFD_ELF_VERSION_JAVA_TYPE;
7634
  else
7635
    {
7636
      einfo (_("%X%P: unknown language `%s' in version information\n"),
7637
             lang);
7638
      ret->mask = BFD_ELF_VERSION_C_TYPE;
7639
    }
7640
 
7641
  return ldemul_new_vers_pattern (ret);
7642
}
7643
 
7644
/* This is called for each set of variable names and match
7645
   expressions.  */
7646
 
7647
struct bfd_elf_version_tree *
7648
lang_new_vers_node (struct bfd_elf_version_expr *globals,
7649
                    struct bfd_elf_version_expr *locals)
7650
{
7651
  struct bfd_elf_version_tree *ret;
7652
 
7653
  ret = (struct bfd_elf_version_tree *) xcalloc (1, sizeof *ret);
7654
  ret->globals.list = globals;
7655
  ret->locals.list = locals;
7656
  ret->match = lang_vers_match;
7657
  ret->name_indx = (unsigned int) -1;
7658
  return ret;
7659
}
7660
 
7661
/* This static variable keeps track of version indices.  */
7662
 
7663
static int version_index;
7664
 
7665
static hashval_t
7666
version_expr_head_hash (const void *p)
7667
{
7668
  const struct bfd_elf_version_expr *e =
7669
      (const struct bfd_elf_version_expr *) p;
7670
 
7671
  return htab_hash_string (e->pattern);
7672
}
7673
 
7674
static int
7675
version_expr_head_eq (const void *p1, const void *p2)
7676
{
7677
  const struct bfd_elf_version_expr *e1 =
7678
      (const struct bfd_elf_version_expr *) p1;
7679
  const struct bfd_elf_version_expr *e2 =
7680
      (const struct bfd_elf_version_expr *) p2;
7681
 
7682
  return strcmp (e1->pattern, e2->pattern) == 0;
7683
}
7684
 
7685
static void
7686
lang_finalize_version_expr_head (struct bfd_elf_version_expr_head *head)
7687
{
7688
  size_t count = 0;
7689
  struct bfd_elf_version_expr *e, *next;
7690
  struct bfd_elf_version_expr **list_loc, **remaining_loc;
7691
 
7692
  for (e = head->list; e; e = e->next)
7693
    {
7694
      if (e->literal)
7695
        count++;
7696
      head->mask |= e->mask;
7697
    }
7698
 
7699
  if (count)
7700
    {
7701
      head->htab = htab_create (count * 2, version_expr_head_hash,
7702
                                version_expr_head_eq, NULL);
7703
      list_loc = &head->list;
7704
      remaining_loc = &head->remaining;
7705
      for (e = head->list; e; e = next)
7706
        {
7707
          next = e->next;
7708
          if (!e->literal)
7709
            {
7710
              *remaining_loc = e;
7711
              remaining_loc = &e->next;
7712
            }
7713
          else
7714
            {
7715
              void **loc = htab_find_slot ((htab_t) head->htab, e, INSERT);
7716
 
7717
              if (*loc)
7718
                {
7719
                  struct bfd_elf_version_expr *e1, *last;
7720
 
7721
                  e1 = (struct bfd_elf_version_expr *) *loc;
7722
                  last = NULL;
7723
                  do
7724
                    {
7725
                      if (e1->mask == e->mask)
7726
                        {
7727
                          last = NULL;
7728
                          break;
7729
                        }
7730
                      last = e1;
7731
                      e1 = e1->next;
7732
                    }
7733
                  while (e1 && strcmp (e1->pattern, e->pattern) == 0);
7734
 
7735
                  if (last == NULL)
7736
                    {
7737
                      /* This is a duplicate.  */
7738
                      /* FIXME: Memory leak.  Sometimes pattern is not
7739
                         xmalloced alone, but in larger chunk of memory.  */
7740
                      /* free (e->pattern); */
7741
                      free (e);
7742
                    }
7743
                  else
7744
                    {
7745
                      e->next = last->next;
7746
                      last->next = e;
7747
                    }
7748
                }
7749
              else
7750
                {
7751
                  *loc = e;
7752
                  *list_loc = e;
7753
                  list_loc = &e->next;
7754
                }
7755
            }
7756
        }
7757
      *remaining_loc = NULL;
7758
      *list_loc = head->remaining;
7759
    }
7760
  else
7761
    head->remaining = head->list;
7762
}
7763
 
7764
/* This is called when we know the name and dependencies of the
7765
   version.  */
7766
 
7767
void
7768
lang_register_vers_node (const char *name,
7769
                         struct bfd_elf_version_tree *version,
7770
                         struct bfd_elf_version_deps *deps)
7771
{
7772
  struct bfd_elf_version_tree *t, **pp;
7773
  struct bfd_elf_version_expr *e1;
7774
 
7775
  if (name == NULL)
7776
    name = "";
7777
 
7778
  if ((name[0] == '\0' && lang_elf_version_info != NULL)
7779
      || (lang_elf_version_info && lang_elf_version_info->name[0] == '\0'))
7780
    {
7781
      einfo (_("%X%P: anonymous version tag cannot be combined"
7782
               " with other version tags\n"));
7783
      free (version);
7784
      return;
7785
    }
7786
 
7787
  /* Make sure this node has a unique name.  */
7788
  for (t = lang_elf_version_info; t != NULL; t = t->next)
7789
    if (strcmp (t->name, name) == 0)
7790
      einfo (_("%X%P: duplicate version tag `%s'\n"), name);
7791
 
7792
  lang_finalize_version_expr_head (&version->globals);
7793
  lang_finalize_version_expr_head (&version->locals);
7794
 
7795
  /* Check the global and local match names, and make sure there
7796
     aren't any duplicates.  */
7797
 
7798
  for (e1 = version->globals.list; e1 != NULL; e1 = e1->next)
7799
    {
7800
      for (t = lang_elf_version_info; t != NULL; t = t->next)
7801
        {
7802
          struct bfd_elf_version_expr *e2;
7803
 
7804
          if (t->locals.htab && e1->literal)
7805
            {
7806
              e2 = (struct bfd_elf_version_expr *)
7807
                  htab_find ((htab_t) t->locals.htab, e1);
7808
              while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7809
                {
7810
                  if (e1->mask == e2->mask)
7811
                    einfo (_("%X%P: duplicate expression `%s'"
7812
                             " in version information\n"), e1->pattern);
7813
                  e2 = e2->next;
7814
                }
7815
            }
7816
          else if (!e1->literal)
7817
            for (e2 = t->locals.remaining; e2 != NULL; e2 = e2->next)
7818
              if (strcmp (e1->pattern, e2->pattern) == 0
7819
                  && e1->mask == e2->mask)
7820
                einfo (_("%X%P: duplicate expression `%s'"
7821
                         " in version information\n"), e1->pattern);
7822
        }
7823
    }
7824
 
7825
  for (e1 = version->locals.list; e1 != NULL; e1 = e1->next)
7826
    {
7827
      for (t = lang_elf_version_info; t != NULL; t = t->next)
7828
        {
7829
          struct bfd_elf_version_expr *e2;
7830
 
7831
          if (t->globals.htab && e1->literal)
7832
            {
7833
              e2 = (struct bfd_elf_version_expr *)
7834
                  htab_find ((htab_t) t->globals.htab, e1);
7835
              while (e2 && strcmp (e1->pattern, e2->pattern) == 0)
7836
                {
7837
                  if (e1->mask == e2->mask)
7838
                    einfo (_("%X%P: duplicate expression `%s'"
7839
                             " in version information\n"),
7840
                           e1->pattern);
7841
                  e2 = e2->next;
7842
                }
7843
            }
7844
          else if (!e1->literal)
7845
            for (e2 = t->globals.remaining; e2 != NULL; e2 = e2->next)
7846
              if (strcmp (e1->pattern, e2->pattern) == 0
7847
                  && e1->mask == e2->mask)
7848
                einfo (_("%X%P: duplicate expression `%s'"
7849
                         " in version information\n"), e1->pattern);
7850
        }
7851
    }
7852
 
7853
  version->deps = deps;
7854
  version->name = name;
7855
  if (name[0] != '\0')
7856
    {
7857
      ++version_index;
7858
      version->vernum = version_index;
7859
    }
7860
  else
7861
    version->vernum = 0;
7862
 
7863
  for (pp = &lang_elf_version_info; *pp != NULL; pp = &(*pp)->next)
7864
    ;
7865
  *pp = version;
7866
}
7867
 
7868
/* This is called when we see a version dependency.  */
7869
 
7870
struct bfd_elf_version_deps *
7871
lang_add_vers_depend (struct bfd_elf_version_deps *list, const char *name)
7872
{
7873
  struct bfd_elf_version_deps *ret;
7874
  struct bfd_elf_version_tree *t;
7875
 
7876
  ret = (struct bfd_elf_version_deps *) xmalloc (sizeof *ret);
7877
  ret->next = list;
7878
 
7879
  for (t = lang_elf_version_info; t != NULL; t = t->next)
7880
    {
7881
      if (strcmp (t->name, name) == 0)
7882
        {
7883
          ret->version_needed = t;
7884
          return ret;
7885
        }
7886
    }
7887
 
7888
  einfo (_("%X%P: unable to find version dependency `%s'\n"), name);
7889
 
7890
  ret->version_needed = NULL;
7891
  return ret;
7892
}
7893
 
7894
static void
7895
lang_do_version_exports_section (void)
7896
{
7897
  struct bfd_elf_version_expr *greg = NULL, *lreg;
7898
 
7899
  LANG_FOR_EACH_INPUT_STATEMENT (is)
7900
    {
7901
      asection *sec = bfd_get_section_by_name (is->the_bfd, ".exports");
7902
      char *contents, *p;
7903
      bfd_size_type len;
7904
 
7905
      if (sec == NULL)
7906
        continue;
7907
 
7908
      len = sec->size;
7909
      contents = (char *) xmalloc (len);
7910
      if (!bfd_get_section_contents (is->the_bfd, sec, contents, 0, len))
7911
        einfo (_("%X%P: unable to read .exports section contents\n"), sec);
7912
 
7913
      p = contents;
7914
      while (p < contents + len)
7915
        {
7916
          greg = lang_new_vers_pattern (greg, p, NULL, FALSE);
7917
          p = strchr (p, '\0') + 1;
7918
        }
7919
 
7920
      /* Do not free the contents, as we used them creating the regex.  */
7921
 
7922
      /* Do not include this section in the link.  */
7923
      sec->flags |= SEC_EXCLUDE | SEC_KEEP;
7924
    }
7925
 
7926
  lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);
7927
  lang_register_vers_node (command_line.version_exports_section,
7928
                           lang_new_vers_node (greg, lreg), NULL);
7929
}
7930
 
7931
void
7932
lang_add_unique (const char *name)
7933
{
7934
  struct unique_sections *ent;
7935
 
7936
  for (ent = unique_section_list; ent; ent = ent->next)
7937
    if (strcmp (ent->name, name) == 0)
7938
      return;
7939
 
7940
  ent = (struct unique_sections *) xmalloc (sizeof *ent);
7941
  ent->name = xstrdup (name);
7942
  ent->next = unique_section_list;
7943
  unique_section_list = ent;
7944
}
7945
 
7946
/* Append the list of dynamic symbols to the existing one.  */
7947
 
7948
void
7949
lang_append_dynamic_list (struct bfd_elf_version_expr *dynamic)
7950
{
7951
  if (link_info.dynamic_list)
7952
    {
7953
      struct bfd_elf_version_expr *tail;
7954
      for (tail = dynamic; tail->next != NULL; tail = tail->next)
7955
        ;
7956
      tail->next = link_info.dynamic_list->head.list;
7957
      link_info.dynamic_list->head.list = dynamic;
7958
    }
7959
  else
7960
    {
7961
      struct bfd_elf_dynamic_list *d;
7962
 
7963
      d = (struct bfd_elf_dynamic_list *) xcalloc (1, sizeof *d);
7964
      d->head.list = dynamic;
7965
      d->match = lang_vers_match;
7966
      link_info.dynamic_list = d;
7967
    }
7968
}
7969
 
7970
/* Append the list of C++ typeinfo dynamic symbols to the existing
7971
   one.  */
7972
 
7973
void
7974
lang_append_dynamic_list_cpp_typeinfo (void)
7975
{
7976
  const char * symbols [] =
7977
    {
7978
      "typeinfo name for*",
7979
      "typeinfo for*"
7980
    };
7981
  struct bfd_elf_version_expr *dynamic = NULL;
7982
  unsigned int i;
7983
 
7984
  for (i = 0; i < ARRAY_SIZE (symbols); i++)
7985
    dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
7986
                                     FALSE);
7987
 
7988
  lang_append_dynamic_list (dynamic);
7989
}
7990
 
7991
/* Append the list of C++ operator new and delete dynamic symbols to the
7992
   existing one.  */
7993
 
7994
void
7995
lang_append_dynamic_list_cpp_new (void)
7996
{
7997
  const char * symbols [] =
7998
    {
7999
      "operator new*",
8000
      "operator delete*"
8001
    };
8002
  struct bfd_elf_version_expr *dynamic = NULL;
8003
  unsigned int i;
8004
 
8005
  for (i = 0; i < ARRAY_SIZE (symbols); i++)
8006
    dynamic = lang_new_vers_pattern (dynamic, symbols [i], "C++",
8007
                                     FALSE);
8008
 
8009
  lang_append_dynamic_list (dynamic);
8010
}
8011
 
8012
/* Scan a space and/or comma separated string of features.  */
8013
 
8014
void
8015
lang_ld_feature (char *str)
8016
{
8017
  char *p, *q;
8018
 
8019
  p = str;
8020
  while (*p)
8021
    {
8022
      char sep;
8023
      while (*p == ',' || ISSPACE (*p))
8024
        ++p;
8025
      if (!*p)
8026
        break;
8027
      q = p + 1;
8028
      while (*q && *q != ',' && !ISSPACE (*q))
8029
        ++q;
8030
      sep = *q;
8031
      *q = 0;
8032
      if (strcasecmp (p, "SANE_EXPR") == 0)
8033
        config.sane_expr = TRUE;
8034
      else
8035
        einfo (_("%X%P: unknown feature `%s'\n"), p);
8036
      *q = sep;
8037
      p = q;
8038
    }
8039
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.