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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gdb-7.2/] [gdb-7.2-or32-1.0rc1/] [bfd/] [elflink.c] - Blame information for rev 341

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* ELF linking support for BFD.
2
   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3
   2005, 2006, 2007, 2008, 2009, 2010
4
   Free Software Foundation, Inc.
5
 
6
   This file is part of BFD, the Binary File Descriptor library.
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 "bfdlink.h"
26
#include "libbfd.h"
27
#define ARCH_SIZE 0
28
#include "elf-bfd.h"
29
#include "safe-ctype.h"
30
#include "libiberty.h"
31
#include "objalloc.h"
32
 
33
/* This struct is used to pass information to routines called via
34
   elf_link_hash_traverse which must return failure.  */
35
 
36
struct elf_info_failed
37
{
38
  struct bfd_link_info *info;
39
  struct bfd_elf_version_tree *verdefs;
40
  bfd_boolean failed;
41
};
42
 
43
/* This structure is used to pass information to
44
   _bfd_elf_link_find_version_dependencies.  */
45
 
46
struct elf_find_verdep_info
47
{
48
  /* General link information.  */
49
  struct bfd_link_info *info;
50
  /* The number of dependencies.  */
51
  unsigned int vers;
52
  /* Whether we had a failure.  */
53
  bfd_boolean failed;
54
};
55
 
56
static bfd_boolean _bfd_elf_fix_symbol_flags
57
  (struct elf_link_hash_entry *, struct elf_info_failed *);
58
 
59
/* Define a symbol in a dynamic linkage section.  */
60
 
61
struct elf_link_hash_entry *
62
_bfd_elf_define_linkage_sym (bfd *abfd,
63
                             struct bfd_link_info *info,
64
                             asection *sec,
65
                             const char *name)
66
{
67
  struct elf_link_hash_entry *h;
68
  struct bfd_link_hash_entry *bh;
69
  const struct elf_backend_data *bed;
70
 
71
  h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
72
  if (h != NULL)
73
    {
74
      /* Zap symbol defined in an as-needed lib that wasn't linked.
75
         This is a symptom of a larger problem:  Absolute symbols
76
         defined in shared libraries can't be overridden, because we
77
         lose the link to the bfd which is via the symbol section.  */
78
      h->root.type = bfd_link_hash_new;
79
    }
80
 
81
  bh = &h->root;
82
  if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
83
                                         sec, 0, NULL, FALSE,
84
                                         get_elf_backend_data (abfd)->collect,
85
                                         &bh))
86
    return NULL;
87
  h = (struct elf_link_hash_entry *) bh;
88
  h->def_regular = 1;
89
  h->type = STT_OBJECT;
90
  h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
91
 
92
  bed = get_elf_backend_data (abfd);
93
  (*bed->elf_backend_hide_symbol) (info, h, TRUE);
94
  return h;
95
}
96
 
97
bfd_boolean
98
_bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
99
{
100
  flagword flags;
101
  asection *s;
102
  struct elf_link_hash_entry *h;
103
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
104
  struct elf_link_hash_table *htab = elf_hash_table (info);
105
 
106
  /* This function may be called more than once.  */
107
  s = bfd_get_section_by_name (abfd, ".got");
108
  if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
109
    return TRUE;
110
 
111
  flags = bed->dynamic_sec_flags;
112
 
113
  s = bfd_make_section_with_flags (abfd,
114
                                   (bed->rela_plts_and_copies_p
115
                                    ? ".rela.got" : ".rel.got"),
116
                                   (bed->dynamic_sec_flags
117
                                    | SEC_READONLY));
118
  if (s == NULL
119
      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
120
    return FALSE;
121
  htab->srelgot = s;
122
 
123
  s = bfd_make_section_with_flags (abfd, ".got", flags);
124
  if (s == NULL
125
      || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
126
    return FALSE;
127
  htab->sgot = s;
128
 
129
  if (bed->want_got_plt)
130
    {
131
      s = bfd_make_section_with_flags (abfd, ".got.plt", flags);
132
      if (s == NULL
133
          || !bfd_set_section_alignment (abfd, s,
134
                                         bed->s->log_file_align))
135
        return FALSE;
136
      htab->sgotplt = s;
137
    }
138
 
139
  /* The first bit of the global offset table is the header.  */
140
  s->size += bed->got_header_size;
141
 
142
  if (bed->want_got_sym)
143
    {
144
      /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
145
         (or .got.plt) section.  We don't do this in the linker script
146
         because we don't want to define the symbol if we are not creating
147
         a global offset table.  */
148
      h = _bfd_elf_define_linkage_sym (abfd, info, s,
149
                                       "_GLOBAL_OFFSET_TABLE_");
150
      elf_hash_table (info)->hgot = h;
151
      if (h == NULL)
152
        return FALSE;
153
    }
154
 
155
  return TRUE;
156
}
157
 
158
/* Create a strtab to hold the dynamic symbol names.  */
159
static bfd_boolean
160
_bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
161
{
162
  struct elf_link_hash_table *hash_table;
163
 
164
  hash_table = elf_hash_table (info);
165
  if (hash_table->dynobj == NULL)
166
    hash_table->dynobj = abfd;
167
 
168
  if (hash_table->dynstr == NULL)
169
    {
170
      hash_table->dynstr = _bfd_elf_strtab_init ();
171
      if (hash_table->dynstr == NULL)
172
        return FALSE;
173
    }
174
  return TRUE;
175
}
176
 
177
/* Create some sections which will be filled in with dynamic linking
178
   information.  ABFD is an input file which requires dynamic sections
179
   to be created.  The dynamic sections take up virtual memory space
180
   when the final executable is run, so we need to create them before
181
   addresses are assigned to the output sections.  We work out the
182
   actual contents and size of these sections later.  */
183
 
184
bfd_boolean
185
_bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
186
{
187
  flagword flags;
188
  asection *s;
189
  const struct elf_backend_data *bed;
190
 
191
  if (! is_elf_hash_table (info->hash))
192
    return FALSE;
193
 
194
  if (elf_hash_table (info)->dynamic_sections_created)
195
    return TRUE;
196
 
197
  if (!_bfd_elf_link_create_dynstrtab (abfd, info))
198
    return FALSE;
199
 
200
  abfd = elf_hash_table (info)->dynobj;
201
  bed = get_elf_backend_data (abfd);
202
 
203
  flags = bed->dynamic_sec_flags;
204
 
205
  /* A dynamically linked executable has a .interp section, but a
206
     shared library does not.  */
207
  if (info->executable)
208
    {
209
      s = bfd_make_section_with_flags (abfd, ".interp",
210
                                       flags | SEC_READONLY);
211
      if (s == NULL)
212
        return FALSE;
213
    }
214
 
215
  /* Create sections to hold version informations.  These are removed
216
     if they are not needed.  */
217
  s = bfd_make_section_with_flags (abfd, ".gnu.version_d",
218
                                   flags | SEC_READONLY);
219
  if (s == NULL
220
      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
221
    return FALSE;
222
 
223
  s = bfd_make_section_with_flags (abfd, ".gnu.version",
224
                                   flags | SEC_READONLY);
225
  if (s == NULL
226
      || ! bfd_set_section_alignment (abfd, s, 1))
227
    return FALSE;
228
 
229
  s = bfd_make_section_with_flags (abfd, ".gnu.version_r",
230
                                   flags | SEC_READONLY);
231
  if (s == NULL
232
      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
233
    return FALSE;
234
 
235
  s = bfd_make_section_with_flags (abfd, ".dynsym",
236
                                   flags | SEC_READONLY);
237
  if (s == NULL
238
      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
239
    return FALSE;
240
 
241
  s = bfd_make_section_with_flags (abfd, ".dynstr",
242
                                   flags | SEC_READONLY);
243
  if (s == NULL)
244
    return FALSE;
245
 
246
  s = bfd_make_section_with_flags (abfd, ".dynamic", flags);
247
  if (s == NULL
248
      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
249
    return FALSE;
250
 
251
  /* The special symbol _DYNAMIC is always set to the start of the
252
     .dynamic section.  We could set _DYNAMIC in a linker script, but we
253
     only want to define it if we are, in fact, creating a .dynamic
254
     section.  We don't want to define it if there is no .dynamic
255
     section, since on some ELF platforms the start up code examines it
256
     to decide how to initialize the process.  */
257
  if (!_bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC"))
258
    return FALSE;
259
 
260
  if (info->emit_hash)
261
    {
262
      s = bfd_make_section_with_flags (abfd, ".hash", flags | SEC_READONLY);
263
      if (s == NULL
264
          || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
265
        return FALSE;
266
      elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
267
    }
268
 
269
  if (info->emit_gnu_hash)
270
    {
271
      s = bfd_make_section_with_flags (abfd, ".gnu.hash",
272
                                       flags | SEC_READONLY);
273
      if (s == NULL
274
          || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
275
        return FALSE;
276
      /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
277
         4 32-bit words followed by variable count of 64-bit words, then
278
         variable count of 32-bit words.  */
279
      if (bed->s->arch_size == 64)
280
        elf_section_data (s)->this_hdr.sh_entsize = 0;
281
      else
282
        elf_section_data (s)->this_hdr.sh_entsize = 4;
283
    }
284
 
285
  /* Let the backend create the rest of the sections.  This lets the
286
     backend set the right flags.  The backend will normally create
287
     the .got and .plt sections.  */
288
  if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
289
    return FALSE;
290
 
291
  elf_hash_table (info)->dynamic_sections_created = TRUE;
292
 
293
  return TRUE;
294
}
295
 
296
/* Create dynamic sections when linking against a dynamic object.  */
297
 
298
bfd_boolean
299
_bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
300
{
301
  flagword flags, pltflags;
302
  struct elf_link_hash_entry *h;
303
  asection *s;
304
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
305
  struct elf_link_hash_table *htab = elf_hash_table (info);
306
 
307
  /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
308
     .rel[a].bss sections.  */
309
  flags = bed->dynamic_sec_flags;
310
 
311
  pltflags = flags;
312
  if (bed->plt_not_loaded)
313
    /* We do not clear SEC_ALLOC here because we still want the OS to
314
       allocate space for the section; it's just that there's nothing
315
       to read in from the object file.  */
316
    pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
317
  else
318
    pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
319
  if (bed->plt_readonly)
320
    pltflags |= SEC_READONLY;
321
 
322
  s = bfd_make_section_with_flags (abfd, ".plt", pltflags);
323
  if (s == NULL
324
      || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
325
    return FALSE;
326
  htab->splt = s;
327
 
328
  /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
329
     .plt section.  */
330
  if (bed->want_plt_sym)
331
    {
332
      h = _bfd_elf_define_linkage_sym (abfd, info, s,
333
                                       "_PROCEDURE_LINKAGE_TABLE_");
334
      elf_hash_table (info)->hplt = h;
335
      if (h == NULL)
336
        return FALSE;
337
    }
338
 
339
  s = bfd_make_section_with_flags (abfd,
340
                                   (bed->rela_plts_and_copies_p
341
                                    ? ".rela.plt" : ".rel.plt"),
342
                                   flags | SEC_READONLY);
343
  if (s == NULL
344
      || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
345
    return FALSE;
346
  htab->srelplt = s;
347
 
348
  if (! _bfd_elf_create_got_section (abfd, info))
349
    return FALSE;
350
 
351
  if (bed->want_dynbss)
352
    {
353
      /* The .dynbss section is a place to put symbols which are defined
354
         by dynamic objects, are referenced by regular objects, and are
355
         not functions.  We must allocate space for them in the process
356
         image and use a R_*_COPY reloc to tell the dynamic linker to
357
         initialize them at run time.  The linker script puts the .dynbss
358
         section into the .bss section of the final image.  */
359
      s = bfd_make_section_with_flags (abfd, ".dynbss",
360
                                       (SEC_ALLOC
361
                                        | SEC_LINKER_CREATED));
362
      if (s == NULL)
363
        return FALSE;
364
 
365
      /* The .rel[a].bss section holds copy relocs.  This section is not
366
         normally needed.  We need to create it here, though, so that the
367
         linker will map it to an output section.  We can't just create it
368
         only if we need it, because we will not know whether we need it
369
         until we have seen all the input files, and the first time the
370
         main linker code calls BFD after examining all the input files
371
         (size_dynamic_sections) the input sections have already been
372
         mapped to the output sections.  If the section turns out not to
373
         be needed, we can discard it later.  We will never need this
374
         section when generating a shared object, since they do not use
375
         copy relocs.  */
376
      if (! info->shared)
377
        {
378
          s = bfd_make_section_with_flags (abfd,
379
                                           (bed->rela_plts_and_copies_p
380
                                            ? ".rela.bss" : ".rel.bss"),
381
                                           flags | SEC_READONLY);
382
          if (s == NULL
383
              || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
384
            return FALSE;
385
        }
386
    }
387
 
388
  return TRUE;
389
}
390
 
391
/* Record a new dynamic symbol.  We record the dynamic symbols as we
392
   read the input files, since we need to have a list of all of them
393
   before we can determine the final sizes of the output sections.
394
   Note that we may actually call this function even though we are not
395
   going to output any dynamic symbols; in some cases we know that a
396
   symbol should be in the dynamic symbol table, but only if there is
397
   one.  */
398
 
399
bfd_boolean
400
bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
401
                                    struct elf_link_hash_entry *h)
402
{
403
  if (h->dynindx == -1)
404
    {
405
      struct elf_strtab_hash *dynstr;
406
      char *p;
407
      const char *name;
408
      bfd_size_type indx;
409
 
410
      /* XXX: The ABI draft says the linker must turn hidden and
411
         internal symbols into STB_LOCAL symbols when producing the
412
         DSO. However, if ld.so honors st_other in the dynamic table,
413
         this would not be necessary.  */
414
      switch (ELF_ST_VISIBILITY (h->other))
415
        {
416
        case STV_INTERNAL:
417
        case STV_HIDDEN:
418
          if (h->root.type != bfd_link_hash_undefined
419
              && h->root.type != bfd_link_hash_undefweak)
420
            {
421
              h->forced_local = 1;
422
              if (!elf_hash_table (info)->is_relocatable_executable)
423
                return TRUE;
424
            }
425
 
426
        default:
427
          break;
428
        }
429
 
430
      h->dynindx = elf_hash_table (info)->dynsymcount;
431
      ++elf_hash_table (info)->dynsymcount;
432
 
433
      dynstr = elf_hash_table (info)->dynstr;
434
      if (dynstr == NULL)
435
        {
436
          /* Create a strtab to hold the dynamic symbol names.  */
437
          elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
438
          if (dynstr == NULL)
439
            return FALSE;
440
        }
441
 
442
      /* We don't put any version information in the dynamic string
443
         table.  */
444
      name = h->root.root.string;
445
      p = strchr (name, ELF_VER_CHR);
446
      if (p != NULL)
447
        /* We know that the p points into writable memory.  In fact,
448
           there are only a few symbols that have read-only names, being
449
           those like _GLOBAL_OFFSET_TABLE_ that are created specially
450
           by the backends.  Most symbols will have names pointing into
451
           an ELF string table read from a file, or to objalloc memory.  */
452
        *p = 0;
453
 
454
      indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
455
 
456
      if (p != NULL)
457
        *p = ELF_VER_CHR;
458
 
459
      if (indx == (bfd_size_type) -1)
460
        return FALSE;
461
      h->dynstr_index = indx;
462
    }
463
 
464
  return TRUE;
465
}
466
 
467
/* Mark a symbol dynamic.  */
468
 
469
static void
470
bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
471
                                  struct elf_link_hash_entry *h,
472
                                  Elf_Internal_Sym *sym)
473
{
474
  struct bfd_elf_dynamic_list *d = info->dynamic_list;
475
 
476
  /* It may be called more than once on the same H.  */
477
  if(h->dynamic || info->relocatable)
478
    return;
479
 
480
  if ((info->dynamic_data
481
       && (h->type == STT_OBJECT
482
           || (sym != NULL
483
               && ELF_ST_TYPE (sym->st_info) == STT_OBJECT)))
484
      || (d != NULL
485
          && h->root.type == bfd_link_hash_new
486
          && (*d->match) (&d->head, NULL, h->root.root.string)))
487
    h->dynamic = 1;
488
}
489
 
490
/* Record an assignment to a symbol made by a linker script.  We need
491
   this in case some dynamic object refers to this symbol.  */
492
 
493
bfd_boolean
494
bfd_elf_record_link_assignment (bfd *output_bfd,
495
                                struct bfd_link_info *info,
496
                                const char *name,
497
                                bfd_boolean provide,
498
                                bfd_boolean hidden)
499
{
500
  struct elf_link_hash_entry *h, *hv;
501
  struct elf_link_hash_table *htab;
502
  const struct elf_backend_data *bed;
503
 
504
  if (!is_elf_hash_table (info->hash))
505
    return TRUE;
506
 
507
  htab = elf_hash_table (info);
508
  h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
509
  if (h == NULL)
510
    return provide;
511
 
512
  switch (h->root.type)
513
    {
514
    case bfd_link_hash_defined:
515
    case bfd_link_hash_defweak:
516
    case bfd_link_hash_common:
517
      break;
518
    case bfd_link_hash_undefweak:
519
    case bfd_link_hash_undefined:
520
      /* Since we're defining the symbol, don't let it seem to have not
521
         been defined.  record_dynamic_symbol and size_dynamic_sections
522
         may depend on this.  */
523
      h->root.type = bfd_link_hash_new;
524
      if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
525
        bfd_link_repair_undef_list (&htab->root);
526
      break;
527
    case bfd_link_hash_new:
528
      bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
529
      h->non_elf = 0;
530
      break;
531
    case bfd_link_hash_indirect:
532
      /* We had a versioned symbol in a dynamic library.  We make the
533
         the versioned symbol point to this one.  */
534
      bed = get_elf_backend_data (output_bfd);
535
      hv = h;
536
      while (hv->root.type == bfd_link_hash_indirect
537
             || hv->root.type == bfd_link_hash_warning)
538
        hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
539
      /* We don't need to update h->root.u since linker will set them
540
         later.  */
541
      h->root.type = bfd_link_hash_undefined;
542
      hv->root.type = bfd_link_hash_indirect;
543
      hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
544
      (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
545
      break;
546
    case bfd_link_hash_warning:
547
      abort ();
548
      break;
549
    }
550
 
551
  /* If this symbol is being provided by the linker script, and it is
552
     currently defined by a dynamic object, but not by a regular
553
     object, then mark it as undefined so that the generic linker will
554
     force the correct value.  */
555
  if (provide
556
      && h->def_dynamic
557
      && !h->def_regular)
558
    h->root.type = bfd_link_hash_undefined;
559
 
560
  /* If this symbol is not being provided by the linker script, and it is
561
     currently defined by a dynamic object, but not by a regular object,
562
     then clear out any version information because the symbol will not be
563
     associated with the dynamic object any more.  */
564
  if (!provide
565
      && h->def_dynamic
566
      && !h->def_regular)
567
    h->verinfo.verdef = NULL;
568
 
569
  h->def_regular = 1;
570
 
571
  if (provide && hidden)
572
    {
573
      bed = get_elf_backend_data (output_bfd);
574
      h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
575
      (*bed->elf_backend_hide_symbol) (info, h, TRUE);
576
    }
577
 
578
  /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
579
     and executables.  */
580
  if (!info->relocatable
581
      && h->dynindx != -1
582
      && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
583
          || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
584
    h->forced_local = 1;
585
 
586
  if ((h->def_dynamic
587
       || h->ref_dynamic
588
       || info->shared
589
       || (info->executable && elf_hash_table (info)->is_relocatable_executable))
590
      && h->dynindx == -1)
591
    {
592
      if (! bfd_elf_link_record_dynamic_symbol (info, h))
593
        return FALSE;
594
 
595
      /* If this is a weak defined symbol, and we know a corresponding
596
         real symbol from the same dynamic object, make sure the real
597
         symbol is also made into a dynamic symbol.  */
598
      if (h->u.weakdef != NULL
599
          && h->u.weakdef->dynindx == -1)
600
        {
601
          if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
602
            return FALSE;
603
        }
604
    }
605
 
606
  return TRUE;
607
}
608
 
609
/* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
610
   success, and 2 on a failure caused by attempting to record a symbol
611
   in a discarded section, eg. a discarded link-once section symbol.  */
612
 
613
int
614
bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
615
                                          bfd *input_bfd,
616
                                          long input_indx)
617
{
618
  bfd_size_type amt;
619
  struct elf_link_local_dynamic_entry *entry;
620
  struct elf_link_hash_table *eht;
621
  struct elf_strtab_hash *dynstr;
622
  unsigned long dynstr_index;
623
  char *name;
624
  Elf_External_Sym_Shndx eshndx;
625
  char esym[sizeof (Elf64_External_Sym)];
626
 
627
  if (! is_elf_hash_table (info->hash))
628
    return 0;
629
 
630
  /* See if the entry exists already.  */
631
  for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
632
    if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
633
      return 1;
634
 
635
  amt = sizeof (*entry);
636
  entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
637
  if (entry == NULL)
638
    return 0;
639
 
640
  /* Go find the symbol, so that we can find it's name.  */
641
  if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
642
                             1, input_indx, &entry->isym, esym, &eshndx))
643
    {
644
      bfd_release (input_bfd, entry);
645
      return 0;
646
    }
647
 
648
  if (entry->isym.st_shndx != SHN_UNDEF
649
      && entry->isym.st_shndx < SHN_LORESERVE)
650
    {
651
      asection *s;
652
 
653
      s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
654
      if (s == NULL || bfd_is_abs_section (s->output_section))
655
        {
656
          /* We can still bfd_release here as nothing has done another
657
             bfd_alloc.  We can't do this later in this function.  */
658
          bfd_release (input_bfd, entry);
659
          return 2;
660
        }
661
    }
662
 
663
  name = (bfd_elf_string_from_elf_section
664
          (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
665
           entry->isym.st_name));
666
 
667
  dynstr = elf_hash_table (info)->dynstr;
668
  if (dynstr == NULL)
669
    {
670
      /* Create a strtab to hold the dynamic symbol names.  */
671
      elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
672
      if (dynstr == NULL)
673
        return 0;
674
    }
675
 
676
  dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
677
  if (dynstr_index == (unsigned long) -1)
678
    return 0;
679
  entry->isym.st_name = dynstr_index;
680
 
681
  eht = elf_hash_table (info);
682
 
683
  entry->next = eht->dynlocal;
684
  eht->dynlocal = entry;
685
  entry->input_bfd = input_bfd;
686
  entry->input_indx = input_indx;
687
  eht->dynsymcount++;
688
 
689
  /* Whatever binding the symbol had before, it's now local.  */
690
  entry->isym.st_info
691
    = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
692
 
693
  /* The dynindx will be set at the end of size_dynamic_sections.  */
694
 
695
  return 1;
696
}
697
 
698
/* Return the dynindex of a local dynamic symbol.  */
699
 
700
long
701
_bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
702
                                    bfd *input_bfd,
703
                                    long input_indx)
704
{
705
  struct elf_link_local_dynamic_entry *e;
706
 
707
  for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
708
    if (e->input_bfd == input_bfd && e->input_indx == input_indx)
709
      return e->dynindx;
710
  return -1;
711
}
712
 
713
/* This function is used to renumber the dynamic symbols, if some of
714
   them are removed because they are marked as local.  This is called
715
   via elf_link_hash_traverse.  */
716
 
717
static bfd_boolean
718
elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
719
                                      void *data)
720
{
721
  size_t *count = (size_t *) data;
722
 
723
  if (h->root.type == bfd_link_hash_warning)
724
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
725
 
726
  if (h->forced_local)
727
    return TRUE;
728
 
729
  if (h->dynindx != -1)
730
    h->dynindx = ++(*count);
731
 
732
  return TRUE;
733
}
734
 
735
 
736
/* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
737
   STB_LOCAL binding.  */
738
 
739
static bfd_boolean
740
elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
741
                                            void *data)
742
{
743
  size_t *count = (size_t *) data;
744
 
745
  if (h->root.type == bfd_link_hash_warning)
746
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
747
 
748
  if (!h->forced_local)
749
    return TRUE;
750
 
751
  if (h->dynindx != -1)
752
    h->dynindx = ++(*count);
753
 
754
  return TRUE;
755
}
756
 
757
/* Return true if the dynamic symbol for a given section should be
758
   omitted when creating a shared library.  */
759
bfd_boolean
760
_bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
761
                                   struct bfd_link_info *info,
762
                                   asection *p)
763
{
764
  struct elf_link_hash_table *htab;
765
 
766
  switch (elf_section_data (p)->this_hdr.sh_type)
767
    {
768
    case SHT_PROGBITS:
769
    case SHT_NOBITS:
770
      /* If sh_type is yet undecided, assume it could be
771
         SHT_PROGBITS/SHT_NOBITS.  */
772
    case SHT_NULL:
773
      htab = elf_hash_table (info);
774
      if (p == htab->tls_sec)
775
        return FALSE;
776
 
777
      if (htab->text_index_section != NULL)
778
        return p != htab->text_index_section && p != htab->data_index_section;
779
 
780
      if (strcmp (p->name, ".got") == 0
781
          || strcmp (p->name, ".got.plt") == 0
782
          || strcmp (p->name, ".plt") == 0)
783
        {
784
          asection *ip;
785
 
786
          if (htab->dynobj != NULL
787
              && (ip = bfd_get_section_by_name (htab->dynobj, p->name)) != NULL
788
              && (ip->flags & SEC_LINKER_CREATED)
789
              && ip->output_section == p)
790
            return TRUE;
791
        }
792
      return FALSE;
793
 
794
      /* There shouldn't be section relative relocations
795
         against any other section.  */
796
    default:
797
      return TRUE;
798
    }
799
}
800
 
801
/* Assign dynsym indices.  In a shared library we generate a section
802
   symbol for each output section, which come first.  Next come symbols
803
   which have been forced to local binding.  Then all of the back-end
804
   allocated local dynamic syms, followed by the rest of the global
805
   symbols.  */
806
 
807
static unsigned long
808
_bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
809
                                struct bfd_link_info *info,
810
                                unsigned long *section_sym_count)
811
{
812
  unsigned long dynsymcount = 0;
813
 
814
  if (info->shared || elf_hash_table (info)->is_relocatable_executable)
815
    {
816
      const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
817
      asection *p;
818
      for (p = output_bfd->sections; p ; p = p->next)
819
        if ((p->flags & SEC_EXCLUDE) == 0
820
            && (p->flags & SEC_ALLOC) != 0
821
            && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
822
          elf_section_data (p)->dynindx = ++dynsymcount;
823
        else
824
          elf_section_data (p)->dynindx = 0;
825
    }
826
  *section_sym_count = dynsymcount;
827
 
828
  elf_link_hash_traverse (elf_hash_table (info),
829
                          elf_link_renumber_local_hash_table_dynsyms,
830
                          &dynsymcount);
831
 
832
  if (elf_hash_table (info)->dynlocal)
833
    {
834
      struct elf_link_local_dynamic_entry *p;
835
      for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
836
        p->dynindx = ++dynsymcount;
837
    }
838
 
839
  elf_link_hash_traverse (elf_hash_table (info),
840
                          elf_link_renumber_hash_table_dynsyms,
841
                          &dynsymcount);
842
 
843
  /* There is an unused NULL entry at the head of the table which
844
     we must account for in our count.  Unless there weren't any
845
     symbols, which means we'll have no table at all.  */
846
  if (dynsymcount != 0)
847
    ++dynsymcount;
848
 
849
  elf_hash_table (info)->dynsymcount = dynsymcount;
850
  return dynsymcount;
851
}
852
 
853
/* Merge st_other field.  */
854
 
855
static void
856
elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
857
                    Elf_Internal_Sym *isym, bfd_boolean definition,
858
                    bfd_boolean dynamic)
859
{
860
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
861
 
862
  /* If st_other has a processor-specific meaning, specific
863
     code might be needed here. We never merge the visibility
864
     attribute with the one from a dynamic object.  */
865
  if (bed->elf_backend_merge_symbol_attribute)
866
    (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
867
                                                dynamic);
868
 
869
  /* If this symbol has default visibility and the user has requested
870
     we not re-export it, then mark it as hidden.  */
871
  if (definition
872
      && !dynamic
873
      && (abfd->no_export
874
          || (abfd->my_archive && abfd->my_archive->no_export))
875
      && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
876
    isym->st_other = (STV_HIDDEN
877
                      | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
878
 
879
  if (!dynamic && ELF_ST_VISIBILITY (isym->st_other) != 0)
880
    {
881
      unsigned char hvis, symvis, other, nvis;
882
 
883
      /* Only merge the visibility. Leave the remainder of the
884
         st_other field to elf_backend_merge_symbol_attribute.  */
885
      other = h->other & ~ELF_ST_VISIBILITY (-1);
886
 
887
      /* Combine visibilities, using the most constraining one.  */
888
      hvis = ELF_ST_VISIBILITY (h->other);
889
      symvis = ELF_ST_VISIBILITY (isym->st_other);
890
      if (! hvis)
891
        nvis = symvis;
892
      else if (! symvis)
893
        nvis = hvis;
894
      else
895
        nvis = hvis < symvis ? hvis : symvis;
896
 
897
      h->other = other | nvis;
898
    }
899
}
900
 
901
/* This function is called when we want to define a new symbol.  It
902
   handles the various cases which arise when we find a definition in
903
   a dynamic object, or when there is already a definition in a
904
   dynamic object.  The new symbol is described by NAME, SYM, PSEC,
905
   and PVALUE.  We set SYM_HASH to the hash table entry.  We set
906
   OVERRIDE if the old symbol is overriding a new definition.  We set
907
   TYPE_CHANGE_OK if it is OK for the type to change.  We set
908
   SIZE_CHANGE_OK if it is OK for the size to change.  By OK to
909
   change, we mean that we shouldn't warn if the type or size does
910
   change.  We set POLD_ALIGNMENT if an old common symbol in a dynamic
911
   object is overridden by a regular object.  */
912
 
913
bfd_boolean
914
_bfd_elf_merge_symbol (bfd *abfd,
915
                       struct bfd_link_info *info,
916
                       const char *name,
917
                       Elf_Internal_Sym *sym,
918
                       asection **psec,
919
                       bfd_vma *pvalue,
920
                       unsigned int *pold_alignment,
921
                       struct elf_link_hash_entry **sym_hash,
922
                       bfd_boolean *skip,
923
                       bfd_boolean *override,
924
                       bfd_boolean *type_change_ok,
925
                       bfd_boolean *size_change_ok)
926
{
927
  asection *sec, *oldsec;
928
  struct elf_link_hash_entry *h;
929
  struct elf_link_hash_entry *flip;
930
  int bind;
931
  bfd *oldbfd;
932
  bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
933
  bfd_boolean newweak, oldweak, newfunc, oldfunc;
934
  const struct elf_backend_data *bed;
935
 
936
  *skip = FALSE;
937
  *override = FALSE;
938
 
939
  sec = *psec;
940
  bind = ELF_ST_BIND (sym->st_info);
941
 
942
  /* Silently discard TLS symbols from --just-syms.  There's no way to
943
     combine a static TLS block with a new TLS block for this executable.  */
944
  if (ELF_ST_TYPE (sym->st_info) == STT_TLS
945
      && sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
946
    {
947
      *skip = TRUE;
948
      return TRUE;
949
    }
950
 
951
  if (! bfd_is_und_section (sec))
952
    h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
953
  else
954
    h = ((struct elf_link_hash_entry *)
955
         bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
956
  if (h == NULL)
957
    return FALSE;
958
  *sym_hash = h;
959
 
960
  bed = get_elf_backend_data (abfd);
961
 
962
  /* This code is for coping with dynamic objects, and is only useful
963
     if we are doing an ELF link.  */
964
  if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
965
    return TRUE;
966
 
967
  /* For merging, we only care about real symbols.  */
968
 
969
  while (h->root.type == bfd_link_hash_indirect
970
         || h->root.type == bfd_link_hash_warning)
971
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
972
 
973
  /* We have to check it for every instance since the first few may be
974
     refereences and not all compilers emit symbol type for undefined
975
     symbols.  */
976
  bfd_elf_link_mark_dynamic_symbol (info, h, sym);
977
 
978
  /* If we just created the symbol, mark it as being an ELF symbol.
979
     Other than that, there is nothing to do--there is no merge issue
980
     with a newly defined symbol--so we just return.  */
981
 
982
  if (h->root.type == bfd_link_hash_new)
983
    {
984
      h->non_elf = 0;
985
      return TRUE;
986
    }
987
 
988
  /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
989
     existing symbol.  */
990
 
991
  switch (h->root.type)
992
    {
993
    default:
994
      oldbfd = NULL;
995
      oldsec = NULL;
996
      break;
997
 
998
    case bfd_link_hash_undefined:
999
    case bfd_link_hash_undefweak:
1000
      oldbfd = h->root.u.undef.abfd;
1001
      oldsec = NULL;
1002
      break;
1003
 
1004
    case bfd_link_hash_defined:
1005
    case bfd_link_hash_defweak:
1006
      oldbfd = h->root.u.def.section->owner;
1007
      oldsec = h->root.u.def.section;
1008
      break;
1009
 
1010
    case bfd_link_hash_common:
1011
      oldbfd = h->root.u.c.p->section->owner;
1012
      oldsec = h->root.u.c.p->section;
1013
      break;
1014
    }
1015
 
1016
  /* Differentiate strong and weak symbols.  */
1017
  newweak = bind == STB_WEAK;
1018
  oldweak = (h->root.type == bfd_link_hash_defweak
1019
             || h->root.type == bfd_link_hash_undefweak);
1020
 
1021
  /* In cases involving weak versioned symbols, we may wind up trying
1022
     to merge a symbol with itself.  Catch that here, to avoid the
1023
     confusion that results if we try to override a symbol with
1024
     itself.  The additional tests catch cases like
1025
     _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1026
     dynamic object, which we do want to handle here.  */
1027
  if (abfd == oldbfd
1028
      && (newweak || oldweak)
1029
      && ((abfd->flags & DYNAMIC) == 0
1030
          || !h->def_regular))
1031
    return TRUE;
1032
 
1033
  /* NEWDYN and OLDDYN indicate whether the new or old symbol,
1034
     respectively, is from a dynamic object.  */
1035
 
1036
  newdyn = (abfd->flags & DYNAMIC) != 0;
1037
 
1038
  olddyn = FALSE;
1039
  if (oldbfd != NULL)
1040
    olddyn = (oldbfd->flags & DYNAMIC) != 0;
1041
  else if (oldsec != NULL)
1042
    {
1043
      /* This handles the special SHN_MIPS_{TEXT,DATA} section
1044
         indices used by MIPS ELF.  */
1045
      olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
1046
    }
1047
 
1048
  /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1049
     respectively, appear to be a definition rather than reference.  */
1050
 
1051
  newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
1052
 
1053
  olddef = (h->root.type != bfd_link_hash_undefined
1054
            && h->root.type != bfd_link_hash_undefweak
1055
            && h->root.type != bfd_link_hash_common);
1056
 
1057
  /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1058
     respectively, appear to be a function.  */
1059
 
1060
  newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1061
             && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1062
 
1063
  oldfunc = (h->type != STT_NOTYPE
1064
             && bed->is_function_type (h->type));
1065
 
1066
  /* When we try to create a default indirect symbol from the dynamic
1067
     definition with the default version, we skip it if its type and
1068
     the type of existing regular definition mismatch.  We only do it
1069
     if the existing regular definition won't be dynamic.  */
1070
  if (pold_alignment == NULL
1071
      && !info->shared
1072
      && !info->export_dynamic
1073
      && !h->ref_dynamic
1074
      && newdyn
1075
      && newdef
1076
      && !olddyn
1077
      && (olddef || h->root.type == bfd_link_hash_common)
1078
      && ELF_ST_TYPE (sym->st_info) != h->type
1079
      && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1080
      && h->type != STT_NOTYPE
1081
      && !(newfunc && oldfunc))
1082
    {
1083
      *skip = TRUE;
1084
      return TRUE;
1085
    }
1086
 
1087
  /* Check TLS symbol.  We don't check undefined symbol introduced by
1088
     "ld -u".  */
1089
  if ((ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS)
1090
      && ELF_ST_TYPE (sym->st_info) != h->type
1091
      && oldbfd != NULL)
1092
    {
1093
      bfd *ntbfd, *tbfd;
1094
      bfd_boolean ntdef, tdef;
1095
      asection *ntsec, *tsec;
1096
 
1097
      if (h->type == STT_TLS)
1098
        {
1099
          ntbfd = abfd;
1100
          ntsec = sec;
1101
          ntdef = newdef;
1102
          tbfd = oldbfd;
1103
          tsec = oldsec;
1104
          tdef = olddef;
1105
        }
1106
      else
1107
        {
1108
          ntbfd = oldbfd;
1109
          ntsec = oldsec;
1110
          ntdef = olddef;
1111
          tbfd = abfd;
1112
          tsec = sec;
1113
          tdef = newdef;
1114
        }
1115
 
1116
      if (tdef && ntdef)
1117
        (*_bfd_error_handler)
1118
          (_("%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A"),
1119
           tbfd, tsec, ntbfd, ntsec, h->root.root.string);
1120
      else if (!tdef && !ntdef)
1121
        (*_bfd_error_handler)
1122
          (_("%s: TLS reference in %B mismatches non-TLS reference in %B"),
1123
           tbfd, ntbfd, h->root.root.string);
1124
      else if (tdef)
1125
        (*_bfd_error_handler)
1126
          (_("%s: TLS definition in %B section %A mismatches non-TLS reference in %B"),
1127
           tbfd, tsec, ntbfd, h->root.root.string);
1128
      else
1129
        (*_bfd_error_handler)
1130
          (_("%s: TLS reference in %B mismatches non-TLS definition in %B section %A"),
1131
           tbfd, ntbfd, ntsec, h->root.root.string);
1132
 
1133
      bfd_set_error (bfd_error_bad_value);
1134
      return FALSE;
1135
    }
1136
 
1137
  /* We need to remember if a symbol has a definition in a dynamic
1138
     object or is weak in all dynamic objects. Internal and hidden
1139
     visibility will make it unavailable to dynamic objects.  */
1140
  if (newdyn && !h->dynamic_def)
1141
    {
1142
      if (!bfd_is_und_section (sec))
1143
        h->dynamic_def = 1;
1144
      else
1145
        {
1146
          /* Check if this symbol is weak in all dynamic objects. If it
1147
             is the first time we see it in a dynamic object, we mark
1148
             if it is weak. Otherwise, we clear it.  */
1149
          if (!h->ref_dynamic)
1150
            {
1151
              if (bind == STB_WEAK)
1152
                h->dynamic_weak = 1;
1153
            }
1154
          else if (bind != STB_WEAK)
1155
            h->dynamic_weak = 0;
1156
        }
1157
    }
1158
 
1159
  /* If the old symbol has non-default visibility, we ignore the new
1160
     definition from a dynamic object.  */
1161
  if (newdyn
1162
      && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1163
      && !bfd_is_und_section (sec))
1164
    {
1165
      *skip = TRUE;
1166
      /* Make sure this symbol is dynamic.  */
1167
      h->ref_dynamic = 1;
1168
      /* A protected symbol has external availability. Make sure it is
1169
         recorded as dynamic.
1170
 
1171
         FIXME: Should we check type and size for protected symbol?  */
1172
      if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
1173
        return bfd_elf_link_record_dynamic_symbol (info, h);
1174
      else
1175
        return TRUE;
1176
    }
1177
  else if (!newdyn
1178
           && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1179
           && h->def_dynamic)
1180
    {
1181
      /* If the new symbol with non-default visibility comes from a
1182
         relocatable file and the old definition comes from a dynamic
1183
         object, we remove the old definition.  */
1184
      if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1185
        {
1186
          /* Handle the case where the old dynamic definition is
1187
             default versioned.  We need to copy the symbol info from
1188
             the symbol with default version to the normal one if it
1189
             was referenced before.  */
1190
          if (h->ref_regular)
1191
            {
1192
              struct elf_link_hash_entry *vh = *sym_hash;
1193
 
1194
              vh->root.type = h->root.type;
1195
              h->root.type = bfd_link_hash_indirect;
1196
              (*bed->elf_backend_copy_indirect_symbol) (info, vh, h);
1197
              /* Protected symbols will override the dynamic definition
1198
                 with default version.  */
1199
              if (ELF_ST_VISIBILITY (sym->st_other) == STV_PROTECTED)
1200
                {
1201
                  h->root.u.i.link = (struct bfd_link_hash_entry *) vh;
1202
                  vh->dynamic_def = 1;
1203
                  vh->ref_dynamic = 1;
1204
                }
1205
              else
1206
                {
1207
                  h->root.type = vh->root.type;
1208
                  vh->ref_dynamic = 0;
1209
                  /* We have to hide it here since it was made dynamic
1210
                     global with extra bits when the symbol info was
1211
                     copied from the old dynamic definition.  */
1212
                  (*bed->elf_backend_hide_symbol) (info, vh, TRUE);
1213
                }
1214
              h = vh;
1215
            }
1216
          else
1217
            h = *sym_hash;
1218
        }
1219
 
1220
      if ((h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1221
          && bfd_is_und_section (sec))
1222
        {
1223
          /* If the new symbol is undefined and the old symbol was
1224
             also undefined before, we need to make sure
1225
             _bfd_generic_link_add_one_symbol doesn't mess
1226
             up the linker hash table undefs list.  Since the old
1227
             definition came from a dynamic object, it is still on the
1228
             undefs list.  */
1229
          h->root.type = bfd_link_hash_undefined;
1230
          h->root.u.undef.abfd = abfd;
1231
        }
1232
      else
1233
        {
1234
          h->root.type = bfd_link_hash_new;
1235
          h->root.u.undef.abfd = NULL;
1236
        }
1237
 
1238
      if (h->def_dynamic)
1239
        {
1240
          h->def_dynamic = 0;
1241
          h->ref_dynamic = 1;
1242
          h->dynamic_def = 1;
1243
        }
1244
      /* FIXME: Should we check type and size for protected symbol?  */
1245
      h->size = 0;
1246
      h->type = 0;
1247
      return TRUE;
1248
    }
1249
 
1250
  if (bind == STB_GNU_UNIQUE)
1251
    h->unique_global = 1;
1252
 
1253
  /* If a new weak symbol definition comes from a regular file and the
1254
     old symbol comes from a dynamic library, we treat the new one as
1255
     strong.  Similarly, an old weak symbol definition from a regular
1256
     file is treated as strong when the new symbol comes from a dynamic
1257
     library.  Further, an old weak symbol from a dynamic library is
1258
     treated as strong if the new symbol is from a dynamic library.
1259
     This reflects the way glibc's ld.so works.
1260
 
1261
     Do this before setting *type_change_ok or *size_change_ok so that
1262
     we warn properly when dynamic library symbols are overridden.  */
1263
 
1264
  if (newdef && !newdyn && olddyn)
1265
    newweak = FALSE;
1266
  if (olddef && newdyn)
1267
    oldweak = FALSE;
1268
 
1269
  /* Allow changes between different types of function symbol.  */
1270
  if (newfunc && oldfunc)
1271
    *type_change_ok = TRUE;
1272
 
1273
  /* It's OK to change the type if either the existing symbol or the
1274
     new symbol is weak.  A type change is also OK if the old symbol
1275
     is undefined and the new symbol is defined.  */
1276
 
1277
  if (oldweak
1278
      || newweak
1279
      || (newdef
1280
          && h->root.type == bfd_link_hash_undefined))
1281
    *type_change_ok = TRUE;
1282
 
1283
  /* It's OK to change the size if either the existing symbol or the
1284
     new symbol is weak, or if the old symbol is undefined.  */
1285
 
1286
  if (*type_change_ok
1287
      || h->root.type == bfd_link_hash_undefined)
1288
    *size_change_ok = TRUE;
1289
 
1290
  /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1291
     symbol, respectively, appears to be a common symbol in a dynamic
1292
     object.  If a symbol appears in an uninitialized section, and is
1293
     not weak, and is not a function, then it may be a common symbol
1294
     which was resolved when the dynamic object was created.  We want
1295
     to treat such symbols specially, because they raise special
1296
     considerations when setting the symbol size: if the symbol
1297
     appears as a common symbol in a regular object, and the size in
1298
     the regular object is larger, we must make sure that we use the
1299
     larger size.  This problematic case can always be avoided in C,
1300
     but it must be handled correctly when using Fortran shared
1301
     libraries.
1302
 
1303
     Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1304
     likewise for OLDDYNCOMMON and OLDDEF.
1305
 
1306
     Note that this test is just a heuristic, and that it is quite
1307
     possible to have an uninitialized symbol in a shared object which
1308
     is really a definition, rather than a common symbol.  This could
1309
     lead to some minor confusion when the symbol really is a common
1310
     symbol in some regular object.  However, I think it will be
1311
     harmless.  */
1312
 
1313
  if (newdyn
1314
      && newdef
1315
      && !newweak
1316
      && (sec->flags & SEC_ALLOC) != 0
1317
      && (sec->flags & SEC_LOAD) == 0
1318
      && sym->st_size > 0
1319
      && !newfunc)
1320
    newdyncommon = TRUE;
1321
  else
1322
    newdyncommon = FALSE;
1323
 
1324
  if (olddyn
1325
      && olddef
1326
      && h->root.type == bfd_link_hash_defined
1327
      && h->def_dynamic
1328
      && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1329
      && (h->root.u.def.section->flags & SEC_LOAD) == 0
1330
      && h->size > 0
1331
      && !oldfunc)
1332
    olddyncommon = TRUE;
1333
  else
1334
    olddyncommon = FALSE;
1335
 
1336
  /* We now know everything about the old and new symbols.  We ask the
1337
     backend to check if we can merge them.  */
1338
  if (bed->merge_symbol
1339
      && !bed->merge_symbol (info, sym_hash, h, sym, psec, pvalue,
1340
                             pold_alignment, skip, override,
1341
                             type_change_ok, size_change_ok,
1342
                             &newdyn, &newdef, &newdyncommon, &newweak,
1343
                             abfd, &sec,
1344
                             &olddyn, &olddef, &olddyncommon, &oldweak,
1345
                             oldbfd, &oldsec))
1346
    return FALSE;
1347
 
1348
  /* If both the old and the new symbols look like common symbols in a
1349
     dynamic object, set the size of the symbol to the larger of the
1350
     two.  */
1351
 
1352
  if (olddyncommon
1353
      && newdyncommon
1354
      && sym->st_size != h->size)
1355
    {
1356
      /* Since we think we have two common symbols, issue a multiple
1357
         common warning if desired.  Note that we only warn if the
1358
         size is different.  If the size is the same, we simply let
1359
         the old symbol override the new one as normally happens with
1360
         symbols defined in dynamic objects.  */
1361
 
1362
      if (! ((*info->callbacks->multiple_common)
1363
             (info, h->root.root.string, oldbfd, bfd_link_hash_common,
1364
              h->size, abfd, bfd_link_hash_common, sym->st_size)))
1365
        return FALSE;
1366
 
1367
      if (sym->st_size > h->size)
1368
        h->size = sym->st_size;
1369
 
1370
      *size_change_ok = TRUE;
1371
    }
1372
 
1373
  /* If we are looking at a dynamic object, and we have found a
1374
     definition, we need to see if the symbol was already defined by
1375
     some other object.  If so, we want to use the existing
1376
     definition, and we do not want to report a multiple symbol
1377
     definition error; we do this by clobbering *PSEC to be
1378
     bfd_und_section_ptr.
1379
 
1380
     We treat a common symbol as a definition if the symbol in the
1381
     shared library is a function, since common symbols always
1382
     represent variables; this can cause confusion in principle, but
1383
     any such confusion would seem to indicate an erroneous program or
1384
     shared library.  We also permit a common symbol in a regular
1385
     object to override a weak symbol in a shared object.  */
1386
 
1387
  if (newdyn
1388
      && newdef
1389
      && (olddef
1390
          || (h->root.type == bfd_link_hash_common
1391
              && (newweak || newfunc))))
1392
    {
1393
      *override = TRUE;
1394
      newdef = FALSE;
1395
      newdyncommon = FALSE;
1396
 
1397
      *psec = sec = bfd_und_section_ptr;
1398
      *size_change_ok = TRUE;
1399
 
1400
      /* If we get here when the old symbol is a common symbol, then
1401
         we are explicitly letting it override a weak symbol or
1402
         function in a dynamic object, and we don't want to warn about
1403
         a type change.  If the old symbol is a defined symbol, a type
1404
         change warning may still be appropriate.  */
1405
 
1406
      if (h->root.type == bfd_link_hash_common)
1407
        *type_change_ok = TRUE;
1408
    }
1409
 
1410
  /* Handle the special case of an old common symbol merging with a
1411
     new symbol which looks like a common symbol in a shared object.
1412
     We change *PSEC and *PVALUE to make the new symbol look like a
1413
     common symbol, and let _bfd_generic_link_add_one_symbol do the
1414
     right thing.  */
1415
 
1416
  if (newdyncommon
1417
      && h->root.type == bfd_link_hash_common)
1418
    {
1419
      *override = TRUE;
1420
      newdef = FALSE;
1421
      newdyncommon = FALSE;
1422
      *pvalue = sym->st_size;
1423
      *psec = sec = bed->common_section (oldsec);
1424
      *size_change_ok = TRUE;
1425
    }
1426
 
1427
  /* Skip weak definitions of symbols that are already defined.  */
1428
  if (newdef && olddef && newweak)
1429
    {
1430
      *skip = TRUE;
1431
 
1432
      /* Merge st_other.  If the symbol already has a dynamic index,
1433
         but visibility says it should not be visible, turn it into a
1434
         local symbol.  */
1435
      elf_merge_st_other (abfd, h, sym, newdef, newdyn);
1436
      if (h->dynindx != -1)
1437
        switch (ELF_ST_VISIBILITY (h->other))
1438
          {
1439
          case STV_INTERNAL:
1440
          case STV_HIDDEN:
1441
            (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1442
            break;
1443
          }
1444
    }
1445
 
1446
  /* If the old symbol is from a dynamic object, and the new symbol is
1447
     a definition which is not from a dynamic object, then the new
1448
     symbol overrides the old symbol.  Symbols from regular files
1449
     always take precedence over symbols from dynamic objects, even if
1450
     they are defined after the dynamic object in the link.
1451
 
1452
     As above, we again permit a common symbol in a regular object to
1453
     override a definition in a shared object if the shared object
1454
     symbol is a function or is weak.  */
1455
 
1456
  flip = NULL;
1457
  if (!newdyn
1458
      && (newdef
1459
          || (bfd_is_com_section (sec)
1460
              && (oldweak || oldfunc)))
1461
      && olddyn
1462
      && olddef
1463
      && h->def_dynamic)
1464
    {
1465
      /* Change the hash table entry to undefined, and let
1466
         _bfd_generic_link_add_one_symbol do the right thing with the
1467
         new definition.  */
1468
 
1469
      h->root.type = bfd_link_hash_undefined;
1470
      h->root.u.undef.abfd = h->root.u.def.section->owner;
1471
      *size_change_ok = TRUE;
1472
 
1473
      olddef = FALSE;
1474
      olddyncommon = FALSE;
1475
 
1476
      /* We again permit a type change when a common symbol may be
1477
         overriding a function.  */
1478
 
1479
      if (bfd_is_com_section (sec))
1480
        {
1481
          if (oldfunc)
1482
            {
1483
              /* If a common symbol overrides a function, make sure
1484
                 that it isn't defined dynamically nor has type
1485
                 function.  */
1486
              h->def_dynamic = 0;
1487
              h->type = STT_NOTYPE;
1488
            }
1489
          *type_change_ok = TRUE;
1490
        }
1491
 
1492
      if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1493
        flip = *sym_hash;
1494
      else
1495
        /* This union may have been set to be non-NULL when this symbol
1496
           was seen in a dynamic object.  We must force the union to be
1497
           NULL, so that it is correct for a regular symbol.  */
1498
        h->verinfo.vertree = NULL;
1499
    }
1500
 
1501
  /* Handle the special case of a new common symbol merging with an
1502
     old symbol that looks like it might be a common symbol defined in
1503
     a shared object.  Note that we have already handled the case in
1504
     which a new common symbol should simply override the definition
1505
     in the shared library.  */
1506
 
1507
  if (! newdyn
1508
      && bfd_is_com_section (sec)
1509
      && olddyncommon)
1510
    {
1511
      /* It would be best if we could set the hash table entry to a
1512
         common symbol, but we don't know what to use for the section
1513
         or the alignment.  */
1514
      if (! ((*info->callbacks->multiple_common)
1515
             (info, h->root.root.string, oldbfd, bfd_link_hash_common,
1516
              h->size, abfd, bfd_link_hash_common, sym->st_size)))
1517
        return FALSE;
1518
 
1519
      /* If the presumed common symbol in the dynamic object is
1520
         larger, pretend that the new symbol has its size.  */
1521
 
1522
      if (h->size > *pvalue)
1523
        *pvalue = h->size;
1524
 
1525
      /* We need to remember the alignment required by the symbol
1526
         in the dynamic object.  */
1527
      BFD_ASSERT (pold_alignment);
1528
      *pold_alignment = h->root.u.def.section->alignment_power;
1529
 
1530
      olddef = FALSE;
1531
      olddyncommon = FALSE;
1532
 
1533
      h->root.type = bfd_link_hash_undefined;
1534
      h->root.u.undef.abfd = h->root.u.def.section->owner;
1535
 
1536
      *size_change_ok = TRUE;
1537
      *type_change_ok = TRUE;
1538
 
1539
      if ((*sym_hash)->root.type == bfd_link_hash_indirect)
1540
        flip = *sym_hash;
1541
      else
1542
        h->verinfo.vertree = NULL;
1543
    }
1544
 
1545
  if (flip != NULL)
1546
    {
1547
      /* Handle the case where we had a versioned symbol in a dynamic
1548
         library and now find a definition in a normal object.  In this
1549
         case, we make the versioned symbol point to the normal one.  */
1550
      flip->root.type = h->root.type;
1551
      flip->root.u.undef.abfd = h->root.u.undef.abfd;
1552
      h->root.type = bfd_link_hash_indirect;
1553
      h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1554
      (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1555
      if (h->def_dynamic)
1556
        {
1557
          h->def_dynamic = 0;
1558
          flip->ref_dynamic = 1;
1559
        }
1560
    }
1561
 
1562
  return TRUE;
1563
}
1564
 
1565
/* This function is called to create an indirect symbol from the
1566
   default for the symbol with the default version if needed. The
1567
   symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE.  We
1568
   set DYNSYM if the new indirect symbol is dynamic.  */
1569
 
1570
static bfd_boolean
1571
_bfd_elf_add_default_symbol (bfd *abfd,
1572
                             struct bfd_link_info *info,
1573
                             struct elf_link_hash_entry *h,
1574
                             const char *name,
1575
                             Elf_Internal_Sym *sym,
1576
                             asection **psec,
1577
                             bfd_vma *value,
1578
                             bfd_boolean *dynsym,
1579
                             bfd_boolean override)
1580
{
1581
  bfd_boolean type_change_ok;
1582
  bfd_boolean size_change_ok;
1583
  bfd_boolean skip;
1584
  char *shortname;
1585
  struct elf_link_hash_entry *hi;
1586
  struct bfd_link_hash_entry *bh;
1587
  const struct elf_backend_data *bed;
1588
  bfd_boolean collect;
1589
  bfd_boolean dynamic;
1590
  char *p;
1591
  size_t len, shortlen;
1592
  asection *sec;
1593
 
1594
  /* If this symbol has a version, and it is the default version, we
1595
     create an indirect symbol from the default name to the fully
1596
     decorated name.  This will cause external references which do not
1597
     specify a version to be bound to this version of the symbol.  */
1598
  p = strchr (name, ELF_VER_CHR);
1599
  if (p == NULL || p[1] != ELF_VER_CHR)
1600
    return TRUE;
1601
 
1602
  if (override)
1603
    {
1604
      /* We are overridden by an old definition. We need to check if we
1605
         need to create the indirect symbol from the default name.  */
1606
      hi = elf_link_hash_lookup (elf_hash_table (info), name, TRUE,
1607
                                 FALSE, FALSE);
1608
      BFD_ASSERT (hi != NULL);
1609
      if (hi == h)
1610
        return TRUE;
1611
      while (hi->root.type == bfd_link_hash_indirect
1612
             || hi->root.type == bfd_link_hash_warning)
1613
        {
1614
          hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1615
          if (hi == h)
1616
            return TRUE;
1617
        }
1618
    }
1619
 
1620
  bed = get_elf_backend_data (abfd);
1621
  collect = bed->collect;
1622
  dynamic = (abfd->flags & DYNAMIC) != 0;
1623
 
1624
  shortlen = p - name;
1625
  shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
1626
  if (shortname == NULL)
1627
    return FALSE;
1628
  memcpy (shortname, name, shortlen);
1629
  shortname[shortlen] = '\0';
1630
 
1631
  /* We are going to create a new symbol.  Merge it with any existing
1632
     symbol with this name.  For the purposes of the merge, act as
1633
     though we were defining the symbol we just defined, although we
1634
     actually going to define an indirect symbol.  */
1635
  type_change_ok = FALSE;
1636
  size_change_ok = FALSE;
1637
  sec = *psec;
1638
  if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1639
                              NULL, &hi, &skip, &override,
1640
                              &type_change_ok, &size_change_ok))
1641
    return FALSE;
1642
 
1643
  if (skip)
1644
    goto nondefault;
1645
 
1646
  if (! override)
1647
    {
1648
      bh = &hi->root;
1649
      if (! (_bfd_generic_link_add_one_symbol
1650
             (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
1651
              0, name, FALSE, collect, &bh)))
1652
        return FALSE;
1653
      hi = (struct elf_link_hash_entry *) bh;
1654
    }
1655
  else
1656
    {
1657
      /* In this case the symbol named SHORTNAME is overriding the
1658
         indirect symbol we want to add.  We were planning on making
1659
         SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1660
         is the name without a version.  NAME is the fully versioned
1661
         name, and it is the default version.
1662
 
1663
         Overriding means that we already saw a definition for the
1664
         symbol SHORTNAME in a regular object, and it is overriding
1665
         the symbol defined in the dynamic object.
1666
 
1667
         When this happens, we actually want to change NAME, the
1668
         symbol we just added, to refer to SHORTNAME.  This will cause
1669
         references to NAME in the shared object to become references
1670
         to SHORTNAME in the regular object.  This is what we expect
1671
         when we override a function in a shared object: that the
1672
         references in the shared object will be mapped to the
1673
         definition in the regular object.  */
1674
 
1675
      while (hi->root.type == bfd_link_hash_indirect
1676
             || hi->root.type == bfd_link_hash_warning)
1677
        hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1678
 
1679
      h->root.type = bfd_link_hash_indirect;
1680
      h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1681
      if (h->def_dynamic)
1682
        {
1683
          h->def_dynamic = 0;
1684
          hi->ref_dynamic = 1;
1685
          if (hi->ref_regular
1686
              || hi->def_regular)
1687
            {
1688
              if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1689
                return FALSE;
1690
            }
1691
        }
1692
 
1693
      /* Now set HI to H, so that the following code will set the
1694
         other fields correctly.  */
1695
      hi = h;
1696
    }
1697
 
1698
  /* Check if HI is a warning symbol.  */
1699
  if (hi->root.type == bfd_link_hash_warning)
1700
    hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1701
 
1702
  /* If there is a duplicate definition somewhere, then HI may not
1703
     point to an indirect symbol.  We will have reported an error to
1704
     the user in that case.  */
1705
 
1706
  if (hi->root.type == bfd_link_hash_indirect)
1707
    {
1708
      struct elf_link_hash_entry *ht;
1709
 
1710
      ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1711
      (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
1712
 
1713
      /* See if the new flags lead us to realize that the symbol must
1714
         be dynamic.  */
1715
      if (! *dynsym)
1716
        {
1717
          if (! dynamic)
1718
            {
1719
              if (! info->executable
1720
                  || hi->ref_dynamic)
1721
                *dynsym = TRUE;
1722
            }
1723
          else
1724
            {
1725
              if (hi->ref_regular)
1726
                *dynsym = TRUE;
1727
            }
1728
        }
1729
    }
1730
 
1731
  /* We also need to define an indirection from the nondefault version
1732
     of the symbol.  */
1733
 
1734
nondefault:
1735
  len = strlen (name);
1736
  shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
1737
  if (shortname == NULL)
1738
    return FALSE;
1739
  memcpy (shortname, name, shortlen);
1740
  memcpy (shortname + shortlen, p + 1, len - shortlen);
1741
 
1742
  /* Once again, merge with any existing symbol.  */
1743
  type_change_ok = FALSE;
1744
  size_change_ok = FALSE;
1745
  sec = *psec;
1746
  if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &sec, value,
1747
                              NULL, &hi, &skip, &override,
1748
                              &type_change_ok, &size_change_ok))
1749
    return FALSE;
1750
 
1751
  if (skip)
1752
    return TRUE;
1753
 
1754
  if (override)
1755
    {
1756
      /* Here SHORTNAME is a versioned name, so we don't expect to see
1757
         the type of override we do in the case above unless it is
1758
         overridden by a versioned definition.  */
1759
      if (hi->root.type != bfd_link_hash_defined
1760
          && hi->root.type != bfd_link_hash_defweak)
1761
        (*_bfd_error_handler)
1762
          (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
1763
           abfd, shortname);
1764
    }
1765
  else
1766
    {
1767
      bh = &hi->root;
1768
      if (! (_bfd_generic_link_add_one_symbol
1769
             (info, abfd, shortname, BSF_INDIRECT,
1770
              bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
1771
        return FALSE;
1772
      hi = (struct elf_link_hash_entry *) bh;
1773
 
1774
      /* If there is a duplicate definition somewhere, then HI may not
1775
         point to an indirect symbol.  We will have reported an error
1776
         to the user in that case.  */
1777
 
1778
      if (hi->root.type == bfd_link_hash_indirect)
1779
        {
1780
          (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
1781
 
1782
          /* See if the new flags lead us to realize that the symbol
1783
             must be dynamic.  */
1784
          if (! *dynsym)
1785
            {
1786
              if (! dynamic)
1787
                {
1788
                  if (! info->executable
1789
                      || hi->ref_dynamic)
1790
                    *dynsym = TRUE;
1791
                }
1792
              else
1793
                {
1794
                  if (hi->ref_regular)
1795
                    *dynsym = TRUE;
1796
                }
1797
            }
1798
        }
1799
    }
1800
 
1801
  return TRUE;
1802
}
1803
 
1804
/* This routine is used to export all defined symbols into the dynamic
1805
   symbol table.  It is called via elf_link_hash_traverse.  */
1806
 
1807
static bfd_boolean
1808
_bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
1809
{
1810
  struct elf_info_failed *eif = (struct elf_info_failed *) data;
1811
 
1812
  /* Ignore this if we won't export it.  */
1813
  if (!eif->info->export_dynamic && !h->dynamic)
1814
    return TRUE;
1815
 
1816
  /* Ignore indirect symbols.  These are added by the versioning code.  */
1817
  if (h->root.type == bfd_link_hash_indirect)
1818
    return TRUE;
1819
 
1820
  if (h->root.type == bfd_link_hash_warning)
1821
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
1822
 
1823
  if (h->dynindx == -1
1824
      && (h->def_regular
1825
          || h->ref_regular))
1826
    {
1827
      bfd_boolean hide;
1828
 
1829
      if (eif->verdefs == NULL
1830
          || (bfd_find_version_for_sym (eif->verdefs, h->root.root.string, &hide)
1831
              && !hide))
1832
        {
1833
          if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
1834
            {
1835
              eif->failed = TRUE;
1836
              return FALSE;
1837
            }
1838
        }
1839
    }
1840
 
1841
  return TRUE;
1842
}
1843
 
1844
/* Look through the symbols which are defined in other shared
1845
   libraries and referenced here.  Update the list of version
1846
   dependencies.  This will be put into the .gnu.version_r section.
1847
   This function is called via elf_link_hash_traverse.  */
1848
 
1849
static bfd_boolean
1850
_bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
1851
                                         void *data)
1852
{
1853
  struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
1854
  Elf_Internal_Verneed *t;
1855
  Elf_Internal_Vernaux *a;
1856
  bfd_size_type amt;
1857
 
1858
  if (h->root.type == bfd_link_hash_warning)
1859
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
1860
 
1861
  /* We only care about symbols defined in shared objects with version
1862
     information.  */
1863
  if (!h->def_dynamic
1864
      || h->def_regular
1865
      || h->dynindx == -1
1866
      || h->verinfo.verdef == NULL)
1867
    return TRUE;
1868
 
1869
  /* See if we already know about this version.  */
1870
  for (t = elf_tdata (rinfo->info->output_bfd)->verref;
1871
       t != NULL;
1872
       t = t->vn_nextref)
1873
    {
1874
      if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
1875
        continue;
1876
 
1877
      for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1878
        if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
1879
          return TRUE;
1880
 
1881
      break;
1882
    }
1883
 
1884
  /* This is a new version.  Add it to tree we are building.  */
1885
 
1886
  if (t == NULL)
1887
    {
1888
      amt = sizeof *t;
1889
      t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
1890
      if (t == NULL)
1891
        {
1892
          rinfo->failed = TRUE;
1893
          return FALSE;
1894
        }
1895
 
1896
      t->vn_bfd = h->verinfo.verdef->vd_bfd;
1897
      t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
1898
      elf_tdata (rinfo->info->output_bfd)->verref = t;
1899
    }
1900
 
1901
  amt = sizeof *a;
1902
  a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
1903
  if (a == NULL)
1904
    {
1905
      rinfo->failed = TRUE;
1906
      return FALSE;
1907
    }
1908
 
1909
  /* Note that we are copying a string pointer here, and testing it
1910
     above.  If bfd_elf_string_from_elf_section is ever changed to
1911
     discard the string data when low in memory, this will have to be
1912
     fixed.  */
1913
  a->vna_nodename = h->verinfo.verdef->vd_nodename;
1914
 
1915
  a->vna_flags = h->verinfo.verdef->vd_flags;
1916
  a->vna_nextptr = t->vn_auxptr;
1917
 
1918
  h->verinfo.verdef->vd_exp_refno = rinfo->vers;
1919
  ++rinfo->vers;
1920
 
1921
  a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
1922
 
1923
  t->vn_auxptr = a;
1924
 
1925
  return TRUE;
1926
}
1927
 
1928
/* Figure out appropriate versions for all the symbols.  We may not
1929
   have the version number script until we have read all of the input
1930
   files, so until that point we don't know which symbols should be
1931
   local.  This function is called via elf_link_hash_traverse.  */
1932
 
1933
static bfd_boolean
1934
_bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
1935
{
1936
  struct elf_info_failed *sinfo;
1937
  struct bfd_link_info *info;
1938
  const struct elf_backend_data *bed;
1939
  struct elf_info_failed eif;
1940
  char *p;
1941
  bfd_size_type amt;
1942
 
1943
  sinfo = (struct elf_info_failed *) data;
1944
  info = sinfo->info;
1945
 
1946
  if (h->root.type == bfd_link_hash_warning)
1947
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
1948
 
1949
  /* Fix the symbol flags.  */
1950
  eif.failed = FALSE;
1951
  eif.info = info;
1952
  if (! _bfd_elf_fix_symbol_flags (h, &eif))
1953
    {
1954
      if (eif.failed)
1955
        sinfo->failed = TRUE;
1956
      return FALSE;
1957
    }
1958
 
1959
  /* We only need version numbers for symbols defined in regular
1960
     objects.  */
1961
  if (!h->def_regular)
1962
    return TRUE;
1963
 
1964
  bed = get_elf_backend_data (info->output_bfd);
1965
  p = strchr (h->root.root.string, ELF_VER_CHR);
1966
  if (p != NULL && h->verinfo.vertree == NULL)
1967
    {
1968
      struct bfd_elf_version_tree *t;
1969
      bfd_boolean hidden;
1970
 
1971
      hidden = TRUE;
1972
 
1973
      /* There are two consecutive ELF_VER_CHR characters if this is
1974
         not a hidden symbol.  */
1975
      ++p;
1976
      if (*p == ELF_VER_CHR)
1977
        {
1978
          hidden = FALSE;
1979
          ++p;
1980
        }
1981
 
1982
      /* If there is no version string, we can just return out.  */
1983
      if (*p == '\0')
1984
        {
1985
          if (hidden)
1986
            h->hidden = 1;
1987
          return TRUE;
1988
        }
1989
 
1990
      /* Look for the version.  If we find it, it is no longer weak.  */
1991
      for (t = sinfo->verdefs; t != NULL; t = t->next)
1992
        {
1993
          if (strcmp (t->name, p) == 0)
1994
            {
1995
              size_t len;
1996
              char *alc;
1997
              struct bfd_elf_version_expr *d;
1998
 
1999
              len = p - h->root.root.string;
2000
              alc = (char *) bfd_malloc (len);
2001
              if (alc == NULL)
2002
                {
2003
                  sinfo->failed = TRUE;
2004
                  return FALSE;
2005
                }
2006
              memcpy (alc, h->root.root.string, len - 1);
2007
              alc[len - 1] = '\0';
2008
              if (alc[len - 2] == ELF_VER_CHR)
2009
                alc[len - 2] = '\0';
2010
 
2011
              h->verinfo.vertree = t;
2012
              t->used = TRUE;
2013
              d = NULL;
2014
 
2015
              if (t->globals.list != NULL)
2016
                d = (*t->match) (&t->globals, NULL, alc);
2017
 
2018
              /* See if there is anything to force this symbol to
2019
                 local scope.  */
2020
              if (d == NULL && t->locals.list != NULL)
2021
                {
2022
                  d = (*t->match) (&t->locals, NULL, alc);
2023
                  if (d != NULL
2024
                      && h->dynindx != -1
2025
                      && ! info->export_dynamic)
2026
                    (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2027
                }
2028
 
2029
              free (alc);
2030
              break;
2031
            }
2032
        }
2033
 
2034
      /* If we are building an application, we need to create a
2035
         version node for this version.  */
2036
      if (t == NULL && info->executable)
2037
        {
2038
          struct bfd_elf_version_tree **pp;
2039
          int version_index;
2040
 
2041
          /* If we aren't going to export this symbol, we don't need
2042
             to worry about it.  */
2043
          if (h->dynindx == -1)
2044
            return TRUE;
2045
 
2046
          amt = sizeof *t;
2047
          t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, amt);
2048
          if (t == NULL)
2049
            {
2050
              sinfo->failed = TRUE;
2051
              return FALSE;
2052
            }
2053
 
2054
          t->name = p;
2055
          t->name_indx = (unsigned int) -1;
2056
          t->used = TRUE;
2057
 
2058
          version_index = 1;
2059
          /* Don't count anonymous version tag.  */
2060
          if (sinfo->verdefs != NULL && sinfo->verdefs->vernum == 0)
2061
            version_index = 0;
2062
          for (pp = &sinfo->verdefs; *pp != NULL; pp = &(*pp)->next)
2063
            ++version_index;
2064
          t->vernum = version_index;
2065
 
2066
          *pp = t;
2067
 
2068
          h->verinfo.vertree = t;
2069
        }
2070
      else if (t == NULL)
2071
        {
2072
          /* We could not find the version for a symbol when
2073
             generating a shared archive.  Return an error.  */
2074
          (*_bfd_error_handler)
2075
            (_("%B: version node not found for symbol %s"),
2076
             info->output_bfd, h->root.root.string);
2077
          bfd_set_error (bfd_error_bad_value);
2078
          sinfo->failed = TRUE;
2079
          return FALSE;
2080
        }
2081
 
2082
      if (hidden)
2083
        h->hidden = 1;
2084
    }
2085
 
2086
  /* If we don't have a version for this symbol, see if we can find
2087
     something.  */
2088
  if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL)
2089
    {
2090
      bfd_boolean hide;
2091
 
2092
      h->verinfo.vertree = bfd_find_version_for_sym (sinfo->verdefs,
2093
                                                 h->root.root.string, &hide);
2094
      if (h->verinfo.vertree != NULL && hide)
2095
        (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2096
    }
2097
 
2098
  return TRUE;
2099
}
2100
 
2101
/* Read and swap the relocs from the section indicated by SHDR.  This
2102
   may be either a REL or a RELA section.  The relocations are
2103
   translated into RELA relocations and stored in INTERNAL_RELOCS,
2104
   which should have already been allocated to contain enough space.
2105
   The EXTERNAL_RELOCS are a buffer where the external form of the
2106
   relocations should be stored.
2107
 
2108
   Returns FALSE if something goes wrong.  */
2109
 
2110
static bfd_boolean
2111
elf_link_read_relocs_from_section (bfd *abfd,
2112
                                   asection *sec,
2113
                                   Elf_Internal_Shdr *shdr,
2114
                                   void *external_relocs,
2115
                                   Elf_Internal_Rela *internal_relocs)
2116
{
2117
  const struct elf_backend_data *bed;
2118
  void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2119
  const bfd_byte *erela;
2120
  const bfd_byte *erelaend;
2121
  Elf_Internal_Rela *irela;
2122
  Elf_Internal_Shdr *symtab_hdr;
2123
  size_t nsyms;
2124
 
2125
  /* Position ourselves at the start of the section.  */
2126
  if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2127
    return FALSE;
2128
 
2129
  /* Read the relocations.  */
2130
  if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2131
    return FALSE;
2132
 
2133
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2134
  nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
2135
 
2136
  bed = get_elf_backend_data (abfd);
2137
 
2138
  /* Convert the external relocations to the internal format.  */
2139
  if (shdr->sh_entsize == bed->s->sizeof_rel)
2140
    swap_in = bed->s->swap_reloc_in;
2141
  else if (shdr->sh_entsize == bed->s->sizeof_rela)
2142
    swap_in = bed->s->swap_reloca_in;
2143
  else
2144
    {
2145
      bfd_set_error (bfd_error_wrong_format);
2146
      return FALSE;
2147
    }
2148
 
2149
  erela = (const bfd_byte *) external_relocs;
2150
  erelaend = erela + shdr->sh_size;
2151
  irela = internal_relocs;
2152
  while (erela < erelaend)
2153
    {
2154
      bfd_vma r_symndx;
2155
 
2156
      (*swap_in) (abfd, erela, irela);
2157
      r_symndx = ELF32_R_SYM (irela->r_info);
2158
      if (bed->s->arch_size == 64)
2159
        r_symndx >>= 24;
2160
      if (nsyms > 0)
2161
        {
2162
          if ((size_t) r_symndx >= nsyms)
2163
            {
2164
              (*_bfd_error_handler)
2165
                (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)"
2166
                   " for offset 0x%lx in section `%A'"),
2167
                 abfd, sec,
2168
                 (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2169
              bfd_set_error (bfd_error_bad_value);
2170
              return FALSE;
2171
            }
2172
        }
2173
      else if (r_symndx != 0)
2174
        {
2175
          (*_bfd_error_handler)
2176
            (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'"
2177
               " when the object file has no symbol table"),
2178
             abfd, sec,
2179
             (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2180
          bfd_set_error (bfd_error_bad_value);
2181
          return FALSE;
2182
        }
2183
      irela += bed->s->int_rels_per_ext_rel;
2184
      erela += shdr->sh_entsize;
2185
    }
2186
 
2187
  return TRUE;
2188
}
2189
 
2190
/* Read and swap the relocs for a section O.  They may have been
2191
   cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2192
   not NULL, they are used as buffers to read into.  They are known to
2193
   be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2194
   the return value is allocated using either malloc or bfd_alloc,
2195
   according to the KEEP_MEMORY argument.  If O has two relocation
2196
   sections (both REL and RELA relocations), then the REL_HDR
2197
   relocations will appear first in INTERNAL_RELOCS, followed by the
2198
   REL_HDR2 relocations.  */
2199
 
2200
Elf_Internal_Rela *
2201
_bfd_elf_link_read_relocs (bfd *abfd,
2202
                           asection *o,
2203
                           void *external_relocs,
2204
                           Elf_Internal_Rela *internal_relocs,
2205
                           bfd_boolean keep_memory)
2206
{
2207
  Elf_Internal_Shdr *rel_hdr;
2208
  void *alloc1 = NULL;
2209
  Elf_Internal_Rela *alloc2 = NULL;
2210
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2211
 
2212
  if (elf_section_data (o)->relocs != NULL)
2213
    return elf_section_data (o)->relocs;
2214
 
2215
  if (o->reloc_count == 0)
2216
    return NULL;
2217
 
2218
  rel_hdr = &elf_section_data (o)->rel_hdr;
2219
 
2220
  if (internal_relocs == NULL)
2221
    {
2222
      bfd_size_type size;
2223
 
2224
      size = o->reloc_count;
2225
      size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2226
      if (keep_memory)
2227
        internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2228
      else
2229
        internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2230
      if (internal_relocs == NULL)
2231
        goto error_return;
2232
    }
2233
 
2234
  if (external_relocs == NULL)
2235
    {
2236
      bfd_size_type size = rel_hdr->sh_size;
2237
 
2238
      if (elf_section_data (o)->rel_hdr2)
2239
        size += elf_section_data (o)->rel_hdr2->sh_size;
2240
      alloc1 = bfd_malloc (size);
2241
      if (alloc1 == NULL)
2242
        goto error_return;
2243
      external_relocs = alloc1;
2244
    }
2245
 
2246
  if (!elf_link_read_relocs_from_section (abfd, o, rel_hdr,
2247
                                          external_relocs,
2248
                                          internal_relocs))
2249
    goto error_return;
2250
  if (elf_section_data (o)->rel_hdr2
2251
      && (!elf_link_read_relocs_from_section
2252
          (abfd, o,
2253
           elf_section_data (o)->rel_hdr2,
2254
           ((bfd_byte *) external_relocs) + rel_hdr->sh_size,
2255
           internal_relocs + (NUM_SHDR_ENTRIES (rel_hdr)
2256
                              * bed->s->int_rels_per_ext_rel))))
2257
    goto error_return;
2258
 
2259
  /* Cache the results for next time, if we can.  */
2260
  if (keep_memory)
2261
    elf_section_data (o)->relocs = internal_relocs;
2262
 
2263
  if (alloc1 != NULL)
2264
    free (alloc1);
2265
 
2266
  /* Don't free alloc2, since if it was allocated we are passing it
2267
     back (under the name of internal_relocs).  */
2268
 
2269
  return internal_relocs;
2270
 
2271
 error_return:
2272
  if (alloc1 != NULL)
2273
    free (alloc1);
2274
  if (alloc2 != NULL)
2275
    {
2276
      if (keep_memory)
2277
        bfd_release (abfd, alloc2);
2278
      else
2279
        free (alloc2);
2280
    }
2281
  return NULL;
2282
}
2283
 
2284
/* Compute the size of, and allocate space for, REL_HDR which is the
2285
   section header for a section containing relocations for O.  */
2286
 
2287
static bfd_boolean
2288
_bfd_elf_link_size_reloc_section (bfd *abfd,
2289
                                  Elf_Internal_Shdr *rel_hdr,
2290
                                  asection *o)
2291
{
2292
  bfd_size_type reloc_count;
2293
  bfd_size_type num_rel_hashes;
2294
 
2295
  /* Figure out how many relocations there will be.  */
2296
  if (rel_hdr == &elf_section_data (o)->rel_hdr)
2297
    reloc_count = elf_section_data (o)->rel_count;
2298
  else
2299
    reloc_count = elf_section_data (o)->rel_count2;
2300
 
2301
  num_rel_hashes = o->reloc_count;
2302
  if (num_rel_hashes < reloc_count)
2303
    num_rel_hashes = reloc_count;
2304
 
2305
  /* That allows us to calculate the size of the section.  */
2306
  rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count;
2307
 
2308
  /* The contents field must last into write_object_contents, so we
2309
     allocate it with bfd_alloc rather than malloc.  Also since we
2310
     cannot be sure that the contents will actually be filled in,
2311
     we zero the allocated space.  */
2312
  rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
2313
  if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2314
    return FALSE;
2315
 
2316
  /* We only allocate one set of hash entries, so we only do it the
2317
     first time we are called.  */
2318
  if (elf_section_data (o)->rel_hashes == NULL
2319
      && num_rel_hashes)
2320
    {
2321
      struct elf_link_hash_entry **p;
2322
 
2323
      p = (struct elf_link_hash_entry **)
2324
          bfd_zmalloc (num_rel_hashes * sizeof (struct elf_link_hash_entry *));
2325
      if (p == NULL)
2326
        return FALSE;
2327
 
2328
      elf_section_data (o)->rel_hashes = p;
2329
    }
2330
 
2331
  return TRUE;
2332
}
2333
 
2334
/* Copy the relocations indicated by the INTERNAL_RELOCS (which
2335
   originated from the section given by INPUT_REL_HDR) to the
2336
   OUTPUT_BFD.  */
2337
 
2338
bfd_boolean
2339
_bfd_elf_link_output_relocs (bfd *output_bfd,
2340
                             asection *input_section,
2341
                             Elf_Internal_Shdr *input_rel_hdr,
2342
                             Elf_Internal_Rela *internal_relocs,
2343
                             struct elf_link_hash_entry **rel_hash
2344
                               ATTRIBUTE_UNUSED)
2345
{
2346
  Elf_Internal_Rela *irela;
2347
  Elf_Internal_Rela *irelaend;
2348
  bfd_byte *erel;
2349
  Elf_Internal_Shdr *output_rel_hdr;
2350
  asection *output_section;
2351
  unsigned int *rel_countp = NULL;
2352
  const struct elf_backend_data *bed;
2353
  void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2354
 
2355
  output_section = input_section->output_section;
2356
  output_rel_hdr = NULL;
2357
 
2358
  if (elf_section_data (output_section)->rel_hdr.sh_entsize
2359
      == input_rel_hdr->sh_entsize)
2360
    {
2361
      output_rel_hdr = &elf_section_data (output_section)->rel_hdr;
2362
      rel_countp = &elf_section_data (output_section)->rel_count;
2363
    }
2364
  else if (elf_section_data (output_section)->rel_hdr2
2365
           && (elf_section_data (output_section)->rel_hdr2->sh_entsize
2366
               == input_rel_hdr->sh_entsize))
2367
    {
2368
      output_rel_hdr = elf_section_data (output_section)->rel_hdr2;
2369
      rel_countp = &elf_section_data (output_section)->rel_count2;
2370
    }
2371
  else
2372
    {
2373
      (*_bfd_error_handler)
2374
        (_("%B: relocation size mismatch in %B section %A"),
2375
         output_bfd, input_section->owner, input_section);
2376
      bfd_set_error (bfd_error_wrong_format);
2377
      return FALSE;
2378
    }
2379
 
2380
  bed = get_elf_backend_data (output_bfd);
2381
  if (input_rel_hdr->sh_entsize == bed->s->sizeof_rel)
2382
    swap_out = bed->s->swap_reloc_out;
2383
  else if (input_rel_hdr->sh_entsize == bed->s->sizeof_rela)
2384
    swap_out = bed->s->swap_reloca_out;
2385
  else
2386
    abort ();
2387
 
2388
  erel = output_rel_hdr->contents;
2389
  erel += *rel_countp * input_rel_hdr->sh_entsize;
2390
  irela = internal_relocs;
2391
  irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2392
                      * bed->s->int_rels_per_ext_rel);
2393
  while (irela < irelaend)
2394
    {
2395
      (*swap_out) (output_bfd, irela, erel);
2396
      irela += bed->s->int_rels_per_ext_rel;
2397
      erel += input_rel_hdr->sh_entsize;
2398
    }
2399
 
2400
  /* Bump the counter, so that we know where to add the next set of
2401
     relocations.  */
2402
  *rel_countp += NUM_SHDR_ENTRIES (input_rel_hdr);
2403
 
2404
  return TRUE;
2405
}
2406
 
2407
/* Make weak undefined symbols in PIE dynamic.  */
2408
 
2409
bfd_boolean
2410
_bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2411
                                 struct elf_link_hash_entry *h)
2412
{
2413
  if (info->pie
2414
      && h->dynindx == -1
2415
      && h->root.type == bfd_link_hash_undefweak)
2416
    return bfd_elf_link_record_dynamic_symbol (info, h);
2417
 
2418
  return TRUE;
2419
}
2420
 
2421
/* Fix up the flags for a symbol.  This handles various cases which
2422
   can only be fixed after all the input files are seen.  This is
2423
   currently called by both adjust_dynamic_symbol and
2424
   assign_sym_version, which is unnecessary but perhaps more robust in
2425
   the face of future changes.  */
2426
 
2427
static bfd_boolean
2428
_bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2429
                           struct elf_info_failed *eif)
2430
{
2431
  const struct elf_backend_data *bed;
2432
 
2433
  /* If this symbol was mentioned in a non-ELF file, try to set
2434
     DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2435
     permit a non-ELF file to correctly refer to a symbol defined in
2436
     an ELF dynamic object.  */
2437
  if (h->non_elf)
2438
    {
2439
      while (h->root.type == bfd_link_hash_indirect)
2440
        h = (struct elf_link_hash_entry *) h->root.u.i.link;
2441
 
2442
      if (h->root.type != bfd_link_hash_defined
2443
          && h->root.type != bfd_link_hash_defweak)
2444
        {
2445
          h->ref_regular = 1;
2446
          h->ref_regular_nonweak = 1;
2447
        }
2448
      else
2449
        {
2450
          if (h->root.u.def.section->owner != NULL
2451
              && (bfd_get_flavour (h->root.u.def.section->owner)
2452
                  == bfd_target_elf_flavour))
2453
            {
2454
              h->ref_regular = 1;
2455
              h->ref_regular_nonweak = 1;
2456
            }
2457
          else
2458
            h->def_regular = 1;
2459
        }
2460
 
2461
      if (h->dynindx == -1
2462
          && (h->def_dynamic
2463
              || h->ref_dynamic))
2464
        {
2465
          if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2466
            {
2467
              eif->failed = TRUE;
2468
              return FALSE;
2469
            }
2470
        }
2471
    }
2472
  else
2473
    {
2474
      /* Unfortunately, NON_ELF is only correct if the symbol
2475
         was first seen in a non-ELF file.  Fortunately, if the symbol
2476
         was first seen in an ELF file, we're probably OK unless the
2477
         symbol was defined in a non-ELF file.  Catch that case here.
2478
         FIXME: We're still in trouble if the symbol was first seen in
2479
         a dynamic object, and then later in a non-ELF regular object.  */
2480
      if ((h->root.type == bfd_link_hash_defined
2481
           || h->root.type == bfd_link_hash_defweak)
2482
          && !h->def_regular
2483
          && (h->root.u.def.section->owner != NULL
2484
              ? (bfd_get_flavour (h->root.u.def.section->owner)
2485
                 != bfd_target_elf_flavour)
2486
              : (bfd_is_abs_section (h->root.u.def.section)
2487
                 && !h->def_dynamic)))
2488
        h->def_regular = 1;
2489
    }
2490
 
2491
  /* Backend specific symbol fixup.  */
2492
  bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2493
  if (bed->elf_backend_fixup_symbol
2494
      && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2495
    return FALSE;
2496
 
2497
  /* If this is a final link, and the symbol was defined as a common
2498
     symbol in a regular object file, and there was no definition in
2499
     any dynamic object, then the linker will have allocated space for
2500
     the symbol in a common section but the DEF_REGULAR
2501
     flag will not have been set.  */
2502
  if (h->root.type == bfd_link_hash_defined
2503
      && !h->def_regular
2504
      && h->ref_regular
2505
      && !h->def_dynamic
2506
      && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
2507
    h->def_regular = 1;
2508
 
2509
  /* If -Bsymbolic was used (which means to bind references to global
2510
     symbols to the definition within the shared object), and this
2511
     symbol was defined in a regular object, then it actually doesn't
2512
     need a PLT entry.  Likewise, if the symbol has non-default
2513
     visibility.  If the symbol has hidden or internal visibility, we
2514
     will force it local.  */
2515
  if (h->needs_plt
2516
      && eif->info->shared
2517
      && is_elf_hash_table (eif->info->hash)
2518
      && (SYMBOLIC_BIND (eif->info, h)
2519
          || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2520
      && h->def_regular)
2521
    {
2522
      bfd_boolean force_local;
2523
 
2524
      force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2525
                     || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2526
      (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2527
    }
2528
 
2529
  /* If a weak undefined symbol has non-default visibility, we also
2530
     hide it from the dynamic linker.  */
2531
  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2532
      && h->root.type == bfd_link_hash_undefweak)
2533
    (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2534
 
2535
  /* If this is a weak defined symbol in a dynamic object, and we know
2536
     the real definition in the dynamic object, copy interesting flags
2537
     over to the real definition.  */
2538
  if (h->u.weakdef != NULL)
2539
    {
2540
      struct elf_link_hash_entry *weakdef;
2541
 
2542
      weakdef = h->u.weakdef;
2543
      if (h->root.type == bfd_link_hash_indirect)
2544
        h = (struct elf_link_hash_entry *) h->root.u.i.link;
2545
 
2546
      BFD_ASSERT (h->root.type == bfd_link_hash_defined
2547
                  || h->root.type == bfd_link_hash_defweak);
2548
      BFD_ASSERT (weakdef->def_dynamic);
2549
 
2550
      /* If the real definition is defined by a regular object file,
2551
         don't do anything special.  See the longer description in
2552
         _bfd_elf_adjust_dynamic_symbol, below.  */
2553
      if (weakdef->def_regular)
2554
        h->u.weakdef = NULL;
2555
      else
2556
        {
2557
          BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2558
                      || weakdef->root.type == bfd_link_hash_defweak);
2559
          (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h);
2560
        }
2561
    }
2562
 
2563
  return TRUE;
2564
}
2565
 
2566
/* Make the backend pick a good value for a dynamic symbol.  This is
2567
   called via elf_link_hash_traverse, and also calls itself
2568
   recursively.  */
2569
 
2570
static bfd_boolean
2571
_bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2572
{
2573
  struct elf_info_failed *eif = (struct elf_info_failed *) data;
2574
  bfd *dynobj;
2575
  const struct elf_backend_data *bed;
2576
 
2577
  if (! is_elf_hash_table (eif->info->hash))
2578
    return FALSE;
2579
 
2580
  if (h->root.type == bfd_link_hash_warning)
2581
    {
2582
      h->got = elf_hash_table (eif->info)->init_got_offset;
2583
      h->plt = elf_hash_table (eif->info)->init_plt_offset;
2584
 
2585
      /* When warning symbols are created, they **replace** the "real"
2586
         entry in the hash table, thus we never get to see the real
2587
         symbol in a hash traversal.  So look at it now.  */
2588
      h = (struct elf_link_hash_entry *) h->root.u.i.link;
2589
    }
2590
 
2591
  /* Ignore indirect symbols.  These are added by the versioning code.  */
2592
  if (h->root.type == bfd_link_hash_indirect)
2593
    return TRUE;
2594
 
2595
  /* Fix the symbol flags.  */
2596
  if (! _bfd_elf_fix_symbol_flags (h, eif))
2597
    return FALSE;
2598
 
2599
  /* If this symbol does not require a PLT entry, and it is not
2600
     defined by a dynamic object, or is not referenced by a regular
2601
     object, ignore it.  We do have to handle a weak defined symbol,
2602
     even if no regular object refers to it, if we decided to add it
2603
     to the dynamic symbol table.  FIXME: Do we normally need to worry
2604
     about symbols which are defined by one dynamic object and
2605
     referenced by another one?  */
2606
  if (!h->needs_plt
2607
      && h->type != STT_GNU_IFUNC
2608
      && (h->def_regular
2609
          || !h->def_dynamic
2610
          || (!h->ref_regular
2611
              && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1))))
2612
    {
2613
      h->plt = elf_hash_table (eif->info)->init_plt_offset;
2614
      return TRUE;
2615
    }
2616
 
2617
  /* If we've already adjusted this symbol, don't do it again.  This
2618
     can happen via a recursive call.  */
2619
  if (h->dynamic_adjusted)
2620
    return TRUE;
2621
 
2622
  /* Don't look at this symbol again.  Note that we must set this
2623
     after checking the above conditions, because we may look at a
2624
     symbol once, decide not to do anything, and then get called
2625
     recursively later after REF_REGULAR is set below.  */
2626
  h->dynamic_adjusted = 1;
2627
 
2628
  /* If this is a weak definition, and we know a real definition, and
2629
     the real symbol is not itself defined by a regular object file,
2630
     then get a good value for the real definition.  We handle the
2631
     real symbol first, for the convenience of the backend routine.
2632
 
2633
     Note that there is a confusing case here.  If the real definition
2634
     is defined by a regular object file, we don't get the real symbol
2635
     from the dynamic object, but we do get the weak symbol.  If the
2636
     processor backend uses a COPY reloc, then if some routine in the
2637
     dynamic object changes the real symbol, we will not see that
2638
     change in the corresponding weak symbol.  This is the way other
2639
     ELF linkers work as well, and seems to be a result of the shared
2640
     library model.
2641
 
2642
     I will clarify this issue.  Most SVR4 shared libraries define the
2643
     variable _timezone and define timezone as a weak synonym.  The
2644
     tzset call changes _timezone.  If you write
2645
       extern int timezone;
2646
       int _timezone = 5;
2647
       int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2648
     you might expect that, since timezone is a synonym for _timezone,
2649
     the same number will print both times.  However, if the processor
2650
     backend uses a COPY reloc, then actually timezone will be copied
2651
     into your process image, and, since you define _timezone
2652
     yourself, _timezone will not.  Thus timezone and _timezone will
2653
     wind up at different memory locations.  The tzset call will set
2654
     _timezone, leaving timezone unchanged.  */
2655
 
2656
  if (h->u.weakdef != NULL)
2657
    {
2658
      /* If we get to this point, we know there is an implicit
2659
         reference by a regular object file via the weak symbol H.
2660
         FIXME: Is this really true?  What if the traversal finds
2661
         H->U.WEAKDEF before it finds H?  */
2662
      h->u.weakdef->ref_regular = 1;
2663
 
2664
      if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
2665
        return FALSE;
2666
    }
2667
 
2668
  /* If a symbol has no type and no size and does not require a PLT
2669
     entry, then we are probably about to do the wrong thing here: we
2670
     are probably going to create a COPY reloc for an empty object.
2671
     This case can arise when a shared object is built with assembly
2672
     code, and the assembly code fails to set the symbol type.  */
2673
  if (h->size == 0
2674
      && h->type == STT_NOTYPE
2675
      && !h->needs_plt)
2676
    (*_bfd_error_handler)
2677
      (_("warning: type and size of dynamic symbol `%s' are not defined"),
2678
       h->root.root.string);
2679
 
2680
  dynobj = elf_hash_table (eif->info)->dynobj;
2681
  bed = get_elf_backend_data (dynobj);
2682
 
2683
  if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2684
    {
2685
      eif->failed = TRUE;
2686
      return FALSE;
2687
    }
2688
 
2689
  return TRUE;
2690
}
2691
 
2692
/* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
2693
   DYNBSS.  */
2694
 
2695
bfd_boolean
2696
_bfd_elf_adjust_dynamic_copy (struct elf_link_hash_entry *h,
2697
                              asection *dynbss)
2698
{
2699
  unsigned int power_of_two;
2700
  bfd_vma mask;
2701
  asection *sec = h->root.u.def.section;
2702
 
2703
  /* The section aligment of definition is the maximum alignment
2704
     requirement of symbols defined in the section.  Since we don't
2705
     know the symbol alignment requirement, we start with the
2706
     maximum alignment and check low bits of the symbol address
2707
     for the minimum alignment.  */
2708
  power_of_two = bfd_get_section_alignment (sec->owner, sec);
2709
  mask = ((bfd_vma) 1 << power_of_two) - 1;
2710
  while ((h->root.u.def.value & mask) != 0)
2711
    {
2712
       mask >>= 1;
2713
       --power_of_two;
2714
    }
2715
 
2716
  if (power_of_two > bfd_get_section_alignment (dynbss->owner,
2717
                                                dynbss))
2718
    {
2719
      /* Adjust the section alignment if needed.  */
2720
      if (! bfd_set_section_alignment (dynbss->owner, dynbss,
2721
                                       power_of_two))
2722
        return FALSE;
2723
    }
2724
 
2725
  /* We make sure that the symbol will be aligned properly.  */
2726
  dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
2727
 
2728
  /* Define the symbol as being at this point in DYNBSS.  */
2729
  h->root.u.def.section = dynbss;
2730
  h->root.u.def.value = dynbss->size;
2731
 
2732
  /* Increment the size of DYNBSS to make room for the symbol.  */
2733
  dynbss->size += h->size;
2734
 
2735
  return TRUE;
2736
}
2737
 
2738
/* Adjust all external symbols pointing into SEC_MERGE sections
2739
   to reflect the object merging within the sections.  */
2740
 
2741
static bfd_boolean
2742
_bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
2743
{
2744
  asection *sec;
2745
 
2746
  if (h->root.type == bfd_link_hash_warning)
2747
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
2748
 
2749
  if ((h->root.type == bfd_link_hash_defined
2750
       || h->root.type == bfd_link_hash_defweak)
2751
      && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
2752
      && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
2753
    {
2754
      bfd *output_bfd = (bfd *) data;
2755
 
2756
      h->root.u.def.value =
2757
        _bfd_merged_section_offset (output_bfd,
2758
                                    &h->root.u.def.section,
2759
                                    elf_section_data (sec)->sec_info,
2760
                                    h->root.u.def.value);
2761
    }
2762
 
2763
  return TRUE;
2764
}
2765
 
2766
/* Returns false if the symbol referred to by H should be considered
2767
   to resolve local to the current module, and true if it should be
2768
   considered to bind dynamically.  */
2769
 
2770
bfd_boolean
2771
_bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
2772
                           struct bfd_link_info *info,
2773
                           bfd_boolean ignore_protected)
2774
{
2775
  bfd_boolean binding_stays_local_p;
2776
  const struct elf_backend_data *bed;
2777
  struct elf_link_hash_table *hash_table;
2778
 
2779
  if (h == NULL)
2780
    return FALSE;
2781
 
2782
  while (h->root.type == bfd_link_hash_indirect
2783
         || h->root.type == bfd_link_hash_warning)
2784
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
2785
 
2786
  /* If it was forced local, then clearly it's not dynamic.  */
2787
  if (h->dynindx == -1)
2788
    return FALSE;
2789
  if (h->forced_local)
2790
    return FALSE;
2791
 
2792
  /* Identify the cases where name binding rules say that a
2793
     visible symbol resolves locally.  */
2794
  binding_stays_local_p = info->executable || SYMBOLIC_BIND (info, h);
2795
 
2796
  switch (ELF_ST_VISIBILITY (h->other))
2797
    {
2798
    case STV_INTERNAL:
2799
    case STV_HIDDEN:
2800
      return FALSE;
2801
 
2802
    case STV_PROTECTED:
2803
      hash_table = elf_hash_table (info);
2804
      if (!is_elf_hash_table (hash_table))
2805
        return FALSE;
2806
 
2807
      bed = get_elf_backend_data (hash_table->dynobj);
2808
 
2809
      /* Proper resolution for function pointer equality may require
2810
         that these symbols perhaps be resolved dynamically, even though
2811
         we should be resolving them to the current module.  */
2812
      if (!ignore_protected || !bed->is_function_type (h->type))
2813
        binding_stays_local_p = TRUE;
2814
      break;
2815
 
2816
    default:
2817
      break;
2818
    }
2819
 
2820
  /* If it isn't defined locally, then clearly it's dynamic.  */
2821
  if (!h->def_regular)
2822
    return TRUE;
2823
 
2824
  /* Otherwise, the symbol is dynamic if binding rules don't tell
2825
     us that it remains local.  */
2826
  return !binding_stays_local_p;
2827
}
2828
 
2829
/* Return true if the symbol referred to by H should be considered
2830
   to resolve local to the current module, and false otherwise.  Differs
2831
   from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
2832
   undefined symbols and weak symbols.  */
2833
 
2834
bfd_boolean
2835
_bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
2836
                              struct bfd_link_info *info,
2837
                              bfd_boolean local_protected)
2838
{
2839
  const struct elf_backend_data *bed;
2840
  struct elf_link_hash_table *hash_table;
2841
 
2842
  /* If it's a local sym, of course we resolve locally.  */
2843
  if (h == NULL)
2844
    return TRUE;
2845
 
2846
  /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
2847
  if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
2848
      || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
2849
    return TRUE;
2850
 
2851
  /* Common symbols that become definitions don't get the DEF_REGULAR
2852
     flag set, so test it first, and don't bail out.  */
2853
  if (ELF_COMMON_DEF_P (h))
2854
    /* Do nothing.  */;
2855
  /* If we don't have a definition in a regular file, then we can't
2856
     resolve locally.  The sym is either undefined or dynamic.  */
2857
  else if (!h->def_regular)
2858
    return FALSE;
2859
 
2860
  /* Forced local symbols resolve locally.  */
2861
  if (h->forced_local)
2862
    return TRUE;
2863
 
2864
  /* As do non-dynamic symbols.  */
2865
  if (h->dynindx == -1)
2866
    return TRUE;
2867
 
2868
  /* At this point, we know the symbol is defined and dynamic.  In an
2869
     executable it must resolve locally, likewise when building symbolic
2870
     shared libraries.  */
2871
  if (info->executable || SYMBOLIC_BIND (info, h))
2872
    return TRUE;
2873
 
2874
  /* Now deal with defined dynamic symbols in shared libraries.  Ones
2875
     with default visibility might not resolve locally.  */
2876
  if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
2877
    return FALSE;
2878
 
2879
  hash_table = elf_hash_table (info);
2880
  if (!is_elf_hash_table (hash_table))
2881
    return TRUE;
2882
 
2883
  bed = get_elf_backend_data (hash_table->dynobj);
2884
 
2885
  /* STV_PROTECTED non-function symbols are local.  */
2886
  if (!bed->is_function_type (h->type))
2887
    return TRUE;
2888
 
2889
  /* Function pointer equality tests may require that STV_PROTECTED
2890
     symbols be treated as dynamic symbols, even when we know that the
2891
     dynamic linker will resolve them locally.  */
2892
  return local_protected;
2893
}
2894
 
2895
/* Caches some TLS segment info, and ensures that the TLS segment vma is
2896
   aligned.  Returns the first TLS output section.  */
2897
 
2898
struct bfd_section *
2899
_bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
2900
{
2901
  struct bfd_section *sec, *tls;
2902
  unsigned int align = 0;
2903
 
2904
  for (sec = obfd->sections; sec != NULL; sec = sec->next)
2905
    if ((sec->flags & SEC_THREAD_LOCAL) != 0)
2906
      break;
2907
  tls = sec;
2908
 
2909
  for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
2910
    if (sec->alignment_power > align)
2911
      align = sec->alignment_power;
2912
 
2913
  elf_hash_table (info)->tls_sec = tls;
2914
 
2915
  /* Ensure the alignment of the first section is the largest alignment,
2916
     so that the tls segment starts aligned.  */
2917
  if (tls != NULL)
2918
    tls->alignment_power = align;
2919
 
2920
  return tls;
2921
}
2922
 
2923
/* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
2924
static bfd_boolean
2925
is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
2926
                                  Elf_Internal_Sym *sym)
2927
{
2928
  const struct elf_backend_data *bed;
2929
 
2930
  /* Local symbols do not count, but target specific ones might.  */
2931
  if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
2932
      && ELF_ST_BIND (sym->st_info) < STB_LOOS)
2933
    return FALSE;
2934
 
2935
  bed = get_elf_backend_data (abfd);
2936
  /* Function symbols do not count.  */
2937
  if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
2938
    return FALSE;
2939
 
2940
  /* If the section is undefined, then so is the symbol.  */
2941
  if (sym->st_shndx == SHN_UNDEF)
2942
    return FALSE;
2943
 
2944
  /* If the symbol is defined in the common section, then
2945
     it is a common definition and so does not count.  */
2946
  if (bed->common_definition (sym))
2947
    return FALSE;
2948
 
2949
  /* If the symbol is in a target specific section then we
2950
     must rely upon the backend to tell us what it is.  */
2951
  if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
2952
    /* FIXME - this function is not coded yet:
2953
 
2954
       return _bfd_is_global_symbol_definition (abfd, sym);
2955
 
2956
       Instead for now assume that the definition is not global,
2957
       Even if this is wrong, at least the linker will behave
2958
       in the same way that it used to do.  */
2959
    return FALSE;
2960
 
2961
  return TRUE;
2962
}
2963
 
2964
/* Search the symbol table of the archive element of the archive ABFD
2965
   whose archive map contains a mention of SYMDEF, and determine if
2966
   the symbol is defined in this element.  */
2967
static bfd_boolean
2968
elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
2969
{
2970
  Elf_Internal_Shdr * hdr;
2971
  bfd_size_type symcount;
2972
  bfd_size_type extsymcount;
2973
  bfd_size_type extsymoff;
2974
  Elf_Internal_Sym *isymbuf;
2975
  Elf_Internal_Sym *isym;
2976
  Elf_Internal_Sym *isymend;
2977
  bfd_boolean result;
2978
 
2979
  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
2980
  if (abfd == NULL)
2981
    return FALSE;
2982
 
2983
  if (! bfd_check_format (abfd, bfd_object))
2984
    return FALSE;
2985
 
2986
  /* If we have already included the element containing this symbol in the
2987
     link then we do not need to include it again.  Just claim that any symbol
2988
     it contains is not a definition, so that our caller will not decide to
2989
     (re)include this element.  */
2990
  if (abfd->archive_pass)
2991
    return FALSE;
2992
 
2993
  /* Select the appropriate symbol table.  */
2994
  if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
2995
    hdr = &elf_tdata (abfd)->symtab_hdr;
2996
  else
2997
    hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2998
 
2999
  symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3000
 
3001
  /* The sh_info field of the symtab header tells us where the
3002
     external symbols start.  We don't care about the local symbols.  */
3003
  if (elf_bad_symtab (abfd))
3004
    {
3005
      extsymcount = symcount;
3006
      extsymoff = 0;
3007
    }
3008
  else
3009
    {
3010
      extsymcount = symcount - hdr->sh_info;
3011
      extsymoff = hdr->sh_info;
3012
    }
3013
 
3014
  if (extsymcount == 0)
3015
    return FALSE;
3016
 
3017
  /* Read in the symbol table.  */
3018
  isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3019
                                  NULL, NULL, NULL);
3020
  if (isymbuf == NULL)
3021
    return FALSE;
3022
 
3023
  /* Scan the symbol table looking for SYMDEF.  */
3024
  result = FALSE;
3025
  for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
3026
    {
3027
      const char *name;
3028
 
3029
      name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3030
                                              isym->st_name);
3031
      if (name == NULL)
3032
        break;
3033
 
3034
      if (strcmp (name, symdef->name) == 0)
3035
        {
3036
          result = is_global_data_symbol_definition (abfd, isym);
3037
          break;
3038
        }
3039
    }
3040
 
3041
  free (isymbuf);
3042
 
3043
  return result;
3044
}
3045
 
3046
/* Add an entry to the .dynamic table.  */
3047
 
3048
bfd_boolean
3049
_bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3050
                            bfd_vma tag,
3051
                            bfd_vma val)
3052
{
3053
  struct elf_link_hash_table *hash_table;
3054
  const struct elf_backend_data *bed;
3055
  asection *s;
3056
  bfd_size_type newsize;
3057
  bfd_byte *newcontents;
3058
  Elf_Internal_Dyn dyn;
3059
 
3060
  hash_table = elf_hash_table (info);
3061
  if (! is_elf_hash_table (hash_table))
3062
    return FALSE;
3063
 
3064
  bed = get_elf_backend_data (hash_table->dynobj);
3065
  s = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
3066
  BFD_ASSERT (s != NULL);
3067
 
3068
  newsize = s->size + bed->s->sizeof_dyn;
3069
  newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
3070
  if (newcontents == NULL)
3071
    return FALSE;
3072
 
3073
  dyn.d_tag = tag;
3074
  dyn.d_un.d_val = val;
3075
  bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
3076
 
3077
  s->size = newsize;
3078
  s->contents = newcontents;
3079
 
3080
  return TRUE;
3081
}
3082
 
3083
/* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3084
   otherwise just check whether one already exists.  Returns -1 on error,
3085
   1 if a DT_NEEDED tag already exists, and 0 on success.  */
3086
 
3087
static int
3088
elf_add_dt_needed_tag (bfd *abfd,
3089
                       struct bfd_link_info *info,
3090
                       const char *soname,
3091
                       bfd_boolean do_it)
3092
{
3093
  struct elf_link_hash_table *hash_table;
3094
  bfd_size_type oldsize;
3095
  bfd_size_type strindex;
3096
 
3097
  if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3098
    return -1;
3099
 
3100
  hash_table = elf_hash_table (info);
3101
  oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
3102
  strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
3103
  if (strindex == (bfd_size_type) -1)
3104
    return -1;
3105
 
3106
  if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
3107
    {
3108
      asection *sdyn;
3109
      const struct elf_backend_data *bed;
3110
      bfd_byte *extdyn;
3111
 
3112
      bed = get_elf_backend_data (hash_table->dynobj);
3113
      sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
3114
      if (sdyn != NULL)
3115
        for (extdyn = sdyn->contents;
3116
             extdyn < sdyn->contents + sdyn->size;
3117
             extdyn += bed->s->sizeof_dyn)
3118
          {
3119
            Elf_Internal_Dyn dyn;
3120
 
3121
            bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3122
            if (dyn.d_tag == DT_NEEDED
3123
                && dyn.d_un.d_val == strindex)
3124
              {
3125
                _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3126
                return 1;
3127
              }
3128
          }
3129
    }
3130
 
3131
  if (do_it)
3132
    {
3133
      if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3134
        return -1;
3135
 
3136
      if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3137
        return -1;
3138
    }
3139
  else
3140
    /* We were just checking for existence of the tag.  */
3141
    _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3142
 
3143
  return 0;
3144
}
3145
 
3146
static bfd_boolean
3147
on_needed_list (const char *soname, struct bfd_link_needed_list *needed)
3148
{
3149
  for (; needed != NULL; needed = needed->next)
3150
    if (strcmp (soname, needed->name) == 0)
3151
      return TRUE;
3152
 
3153
  return FALSE;
3154
}
3155
 
3156
/* Sort symbol by value and section.  */
3157
static int
3158
elf_sort_symbol (const void *arg1, const void *arg2)
3159
{
3160
  const struct elf_link_hash_entry *h1;
3161
  const struct elf_link_hash_entry *h2;
3162
  bfd_signed_vma vdiff;
3163
 
3164
  h1 = *(const struct elf_link_hash_entry **) arg1;
3165
  h2 = *(const struct elf_link_hash_entry **) arg2;
3166
  vdiff = h1->root.u.def.value - h2->root.u.def.value;
3167
  if (vdiff != 0)
3168
    return vdiff > 0 ? 1 : -1;
3169
  else
3170
    {
3171
      long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
3172
      if (sdiff != 0)
3173
        return sdiff > 0 ? 1 : -1;
3174
    }
3175
  return 0;
3176
}
3177
 
3178
/* This function is used to adjust offsets into .dynstr for
3179
   dynamic symbols.  This is called via elf_link_hash_traverse.  */
3180
 
3181
static bfd_boolean
3182
elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3183
{
3184
  struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3185
 
3186
  if (h->root.type == bfd_link_hash_warning)
3187
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
3188
 
3189
  if (h->dynindx != -1)
3190
    h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3191
  return TRUE;
3192
}
3193
 
3194
/* Assign string offsets in .dynstr, update all structures referencing
3195
   them.  */
3196
 
3197
static bfd_boolean
3198
elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
3199
{
3200
  struct elf_link_hash_table *hash_table = elf_hash_table (info);
3201
  struct elf_link_local_dynamic_entry *entry;
3202
  struct elf_strtab_hash *dynstr = hash_table->dynstr;
3203
  bfd *dynobj = hash_table->dynobj;
3204
  asection *sdyn;
3205
  bfd_size_type size;
3206
  const struct elf_backend_data *bed;
3207
  bfd_byte *extdyn;
3208
 
3209
  _bfd_elf_strtab_finalize (dynstr);
3210
  size = _bfd_elf_strtab_size (dynstr);
3211
 
3212
  bed = get_elf_backend_data (dynobj);
3213
  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
3214
  BFD_ASSERT (sdyn != NULL);
3215
 
3216
  /* Update all .dynamic entries referencing .dynstr strings.  */
3217
  for (extdyn = sdyn->contents;
3218
       extdyn < sdyn->contents + sdyn->size;
3219
       extdyn += bed->s->sizeof_dyn)
3220
    {
3221
      Elf_Internal_Dyn dyn;
3222
 
3223
      bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3224
      switch (dyn.d_tag)
3225
        {
3226
        case DT_STRSZ:
3227
          dyn.d_un.d_val = size;
3228
          break;
3229
        case DT_NEEDED:
3230
        case DT_SONAME:
3231
        case DT_RPATH:
3232
        case DT_RUNPATH:
3233
        case DT_FILTER:
3234
        case DT_AUXILIARY:
3235
        case DT_AUDIT:
3236
        case DT_DEPAUDIT:
3237
          dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3238
          break;
3239
        default:
3240
          continue;
3241
        }
3242
      bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3243
    }
3244
 
3245
  /* Now update local dynamic symbols.  */
3246
  for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3247
    entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3248
                                                  entry->isym.st_name);
3249
 
3250
  /* And the rest of dynamic symbols.  */
3251
  elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3252
 
3253
  /* Adjust version definitions.  */
3254
  if (elf_tdata (output_bfd)->cverdefs)
3255
    {
3256
      asection *s;
3257
      bfd_byte *p;
3258
      bfd_size_type i;
3259
      Elf_Internal_Verdef def;
3260
      Elf_Internal_Verdaux defaux;
3261
 
3262
      s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
3263
      p = s->contents;
3264
      do
3265
        {
3266
          _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3267
                                   &def);
3268
          p += sizeof (Elf_External_Verdef);
3269
          if (def.vd_aux != sizeof (Elf_External_Verdef))
3270
            continue;
3271
          for (i = 0; i < def.vd_cnt; ++i)
3272
            {
3273
              _bfd_elf_swap_verdaux_in (output_bfd,
3274
                                        (Elf_External_Verdaux *) p, &defaux);
3275
              defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3276
                                                        defaux.vda_name);
3277
              _bfd_elf_swap_verdaux_out (output_bfd,
3278
                                         &defaux, (Elf_External_Verdaux *) p);
3279
              p += sizeof (Elf_External_Verdaux);
3280
            }
3281
        }
3282
      while (def.vd_next);
3283
    }
3284
 
3285
  /* Adjust version references.  */
3286
  if (elf_tdata (output_bfd)->verref)
3287
    {
3288
      asection *s;
3289
      bfd_byte *p;
3290
      bfd_size_type i;
3291
      Elf_Internal_Verneed need;
3292
      Elf_Internal_Vernaux needaux;
3293
 
3294
      s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
3295
      p = s->contents;
3296
      do
3297
        {
3298
          _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3299
                                    &need);
3300
          need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3301
          _bfd_elf_swap_verneed_out (output_bfd, &need,
3302
                                     (Elf_External_Verneed *) p);
3303
          p += sizeof (Elf_External_Verneed);
3304
          for (i = 0; i < need.vn_cnt; ++i)
3305
            {
3306
              _bfd_elf_swap_vernaux_in (output_bfd,
3307
                                        (Elf_External_Vernaux *) p, &needaux);
3308
              needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3309
                                                         needaux.vna_name);
3310
              _bfd_elf_swap_vernaux_out (output_bfd,
3311
                                         &needaux,
3312
                                         (Elf_External_Vernaux *) p);
3313
              p += sizeof (Elf_External_Vernaux);
3314
            }
3315
        }
3316
      while (need.vn_next);
3317
    }
3318
 
3319
  return TRUE;
3320
}
3321
 
3322
/* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3323
   The default is to only match when the INPUT and OUTPUT are exactly
3324
   the same target.  */
3325
 
3326
bfd_boolean
3327
_bfd_elf_default_relocs_compatible (const bfd_target *input,
3328
                                    const bfd_target *output)
3329
{
3330
  return input == output;
3331
}
3332
 
3333
/* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3334
   This version is used when different targets for the same architecture
3335
   are virtually identical.  */
3336
 
3337
bfd_boolean
3338
_bfd_elf_relocs_compatible (const bfd_target *input,
3339
                            const bfd_target *output)
3340
{
3341
  const struct elf_backend_data *obed, *ibed;
3342
 
3343
  if (input == output)
3344
    return TRUE;
3345
 
3346
  ibed = xvec_get_elf_backend_data (input);
3347
  obed = xvec_get_elf_backend_data (output);
3348
 
3349
  if (ibed->arch != obed->arch)
3350
    return FALSE;
3351
 
3352
  /* If both backends are using this function, deem them compatible.  */
3353
  return ibed->relocs_compatible == obed->relocs_compatible;
3354
}
3355
 
3356
/* Add symbols from an ELF object file to the linker hash table.  */
3357
 
3358
static bfd_boolean
3359
elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3360
{
3361
  Elf_Internal_Ehdr *ehdr;
3362
  Elf_Internal_Shdr *hdr;
3363
  bfd_size_type symcount;
3364
  bfd_size_type extsymcount;
3365
  bfd_size_type extsymoff;
3366
  struct elf_link_hash_entry **sym_hash;
3367
  bfd_boolean dynamic;
3368
  Elf_External_Versym *extversym = NULL;
3369
  Elf_External_Versym *ever;
3370
  struct elf_link_hash_entry *weaks;
3371
  struct elf_link_hash_entry **nondeflt_vers = NULL;
3372
  bfd_size_type nondeflt_vers_cnt = 0;
3373
  Elf_Internal_Sym *isymbuf = NULL;
3374
  Elf_Internal_Sym *isym;
3375
  Elf_Internal_Sym *isymend;
3376
  const struct elf_backend_data *bed;
3377
  bfd_boolean add_needed;
3378
  struct elf_link_hash_table *htab;
3379
  bfd_size_type amt;
3380
  void *alloc_mark = NULL;
3381
  struct bfd_hash_entry **old_table = NULL;
3382
  unsigned int old_size = 0;
3383
  unsigned int old_count = 0;
3384
  void *old_tab = NULL;
3385
  void *old_hash;
3386
  void *old_ent;
3387
  struct bfd_link_hash_entry *old_undefs = NULL;
3388
  struct bfd_link_hash_entry *old_undefs_tail = NULL;
3389
  long old_dynsymcount = 0;
3390
  size_t tabsize = 0;
3391
  size_t hashsize = 0;
3392
 
3393
  htab = elf_hash_table (info);
3394
  bed = get_elf_backend_data (abfd);
3395
 
3396
  if ((abfd->flags & DYNAMIC) == 0)
3397
    dynamic = FALSE;
3398
  else
3399
    {
3400
      dynamic = TRUE;
3401
 
3402
      /* You can't use -r against a dynamic object.  Also, there's no
3403
         hope of using a dynamic object which does not exactly match
3404
         the format of the output file.  */
3405
      if (info->relocatable
3406
          || !is_elf_hash_table (htab)
3407
          || info->output_bfd->xvec != abfd->xvec)
3408
        {
3409
          if (info->relocatable)
3410
            bfd_set_error (bfd_error_invalid_operation);
3411
          else
3412
            bfd_set_error (bfd_error_wrong_format);
3413
          goto error_return;
3414
        }
3415
    }
3416
 
3417
  ehdr = elf_elfheader (abfd);
3418
  if (info->warn_alternate_em
3419
      && bed->elf_machine_code != ehdr->e_machine
3420
      && ((bed->elf_machine_alt1 != 0
3421
           && ehdr->e_machine == bed->elf_machine_alt1)
3422
          || (bed->elf_machine_alt2 != 0
3423
              && ehdr->e_machine == bed->elf_machine_alt2)))
3424
    info->callbacks->einfo
3425
      (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"),
3426
       ehdr->e_machine, abfd, bed->elf_machine_code);
3427
 
3428
  /* As a GNU extension, any input sections which are named
3429
     .gnu.warning.SYMBOL are treated as warning symbols for the given
3430
     symbol.  This differs from .gnu.warning sections, which generate
3431
     warnings when they are included in an output file.  */
3432
  if (info->executable)
3433
    {
3434
      asection *s;
3435
 
3436
      for (s = abfd->sections; s != NULL; s = s->next)
3437
        {
3438
          const char *name;
3439
 
3440
          name = bfd_get_section_name (abfd, s);
3441
          if (CONST_STRNEQ (name, ".gnu.warning."))
3442
            {
3443
              char *msg;
3444
              bfd_size_type sz;
3445
 
3446
              name += sizeof ".gnu.warning." - 1;
3447
 
3448
              /* If this is a shared object, then look up the symbol
3449
                 in the hash table.  If it is there, and it is already
3450
                 been defined, then we will not be using the entry
3451
                 from this shared object, so we don't need to warn.
3452
                 FIXME: If we see the definition in a regular object
3453
                 later on, we will warn, but we shouldn't.  The only
3454
                 fix is to keep track of what warnings we are supposed
3455
                 to emit, and then handle them all at the end of the
3456
                 link.  */
3457
              if (dynamic)
3458
                {
3459
                  struct elf_link_hash_entry *h;
3460
 
3461
                  h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3462
 
3463
                  /* FIXME: What about bfd_link_hash_common?  */
3464
                  if (h != NULL
3465
                      && (h->root.type == bfd_link_hash_defined
3466
                          || h->root.type == bfd_link_hash_defweak))
3467
                    {
3468
                      /* We don't want to issue this warning.  Clobber
3469
                         the section size so that the warning does not
3470
                         get copied into the output file.  */
3471
                      s->size = 0;
3472
                      continue;
3473
                    }
3474
                }
3475
 
3476
              sz = s->size;
3477
              msg = (char *) bfd_alloc (abfd, sz + 1);
3478
              if (msg == NULL)
3479
                goto error_return;
3480
 
3481
              if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3482
                goto error_return;
3483
 
3484
              msg[sz] = '\0';
3485
 
3486
              if (! (_bfd_generic_link_add_one_symbol
3487
                     (info, abfd, name, BSF_WARNING, s, 0, msg,
3488
                      FALSE, bed->collect, NULL)))
3489
                goto error_return;
3490
 
3491
              if (! info->relocatable)
3492
                {
3493
                  /* Clobber the section size so that the warning does
3494
                     not get copied into the output file.  */
3495
                  s->size = 0;
3496
 
3497
                  /* Also set SEC_EXCLUDE, so that symbols defined in
3498
                     the warning section don't get copied to the output.  */
3499
                  s->flags |= SEC_EXCLUDE;
3500
                }
3501
            }
3502
        }
3503
    }
3504
 
3505
  add_needed = TRUE;
3506
  if (! dynamic)
3507
    {
3508
      /* If we are creating a shared library, create all the dynamic
3509
         sections immediately.  We need to attach them to something,
3510
         so we attach them to this BFD, provided it is the right
3511
         format.  FIXME: If there are no input BFD's of the same
3512
         format as the output, we can't make a shared library.  */
3513
      if (info->shared
3514
          && is_elf_hash_table (htab)
3515
          && info->output_bfd->xvec == abfd->xvec
3516
          && !htab->dynamic_sections_created)
3517
        {
3518
          if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3519
            goto error_return;
3520
        }
3521
    }
3522
  else if (!is_elf_hash_table (htab))
3523
    goto error_return;
3524
  else
3525
    {
3526
      asection *s;
3527
      const char *soname = NULL;
3528
      char *audit = NULL;
3529
      struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3530
      int ret;
3531
 
3532
      /* ld --just-symbols and dynamic objects don't mix very well.
3533
         ld shouldn't allow it.  */
3534
      if ((s = abfd->sections) != NULL
3535
          && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
3536
        abort ();
3537
 
3538
      /* If this dynamic lib was specified on the command line with
3539
         --as-needed in effect, then we don't want to add a DT_NEEDED
3540
         tag unless the lib is actually used.  Similary for libs brought
3541
         in by another lib's DT_NEEDED.  When --no-add-needed is used
3542
         on a dynamic lib, we don't want to add a DT_NEEDED entry for
3543
         any dynamic library in DT_NEEDED tags in the dynamic lib at
3544
         all.  */
3545
      add_needed = (elf_dyn_lib_class (abfd)
3546
                    & (DYN_AS_NEEDED | DYN_DT_NEEDED
3547
                       | DYN_NO_NEEDED)) == 0;
3548
 
3549
      s = bfd_get_section_by_name (abfd, ".dynamic");
3550
      if (s != NULL)
3551
        {
3552
          bfd_byte *dynbuf;
3553
          bfd_byte *extdyn;
3554
          unsigned int elfsec;
3555
          unsigned long shlink;
3556
 
3557
          if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3558
            {
3559
error_free_dyn:
3560
              free (dynbuf);
3561
              goto error_return;
3562
            }
3563
 
3564
          elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3565
          if (elfsec == SHN_BAD)
3566
            goto error_free_dyn;
3567
          shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3568
 
3569
          for (extdyn = dynbuf;
3570
               extdyn < dynbuf + s->size;
3571
               extdyn += bed->s->sizeof_dyn)
3572
            {
3573
              Elf_Internal_Dyn dyn;
3574
 
3575
              bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3576
              if (dyn.d_tag == DT_SONAME)
3577
                {
3578
                  unsigned int tagv = dyn.d_un.d_val;
3579
                  soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3580
                  if (soname == NULL)
3581
                    goto error_free_dyn;
3582
                }
3583
              if (dyn.d_tag == DT_NEEDED)
3584
                {
3585
                  struct bfd_link_needed_list *n, **pn;
3586
                  char *fnm, *anm;
3587
                  unsigned int tagv = dyn.d_un.d_val;
3588
 
3589
                  amt = sizeof (struct bfd_link_needed_list);
3590
                  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3591
                  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3592
                  if (n == NULL || fnm == NULL)
3593
                    goto error_free_dyn;
3594
                  amt = strlen (fnm) + 1;
3595
                  anm = (char *) bfd_alloc (abfd, amt);
3596
                  if (anm == NULL)
3597
                    goto error_free_dyn;
3598
                  memcpy (anm, fnm, amt);
3599
                  n->name = anm;
3600
                  n->by = abfd;
3601
                  n->next = NULL;
3602
                  for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3603
                    ;
3604
                  *pn = n;
3605
                }
3606
              if (dyn.d_tag == DT_RUNPATH)
3607
                {
3608
                  struct bfd_link_needed_list *n, **pn;
3609
                  char *fnm, *anm;
3610
                  unsigned int tagv = dyn.d_un.d_val;
3611
 
3612
                  amt = sizeof (struct bfd_link_needed_list);
3613
                  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3614
                  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3615
                  if (n == NULL || fnm == NULL)
3616
                    goto error_free_dyn;
3617
                  amt = strlen (fnm) + 1;
3618
                  anm = (char *) bfd_alloc (abfd, amt);
3619
                  if (anm == NULL)
3620
                    goto error_free_dyn;
3621
                  memcpy (anm, fnm, amt);
3622
                  n->name = anm;
3623
                  n->by = abfd;
3624
                  n->next = NULL;
3625
                  for (pn = & runpath;
3626
                       *pn != NULL;
3627
                       pn = &(*pn)->next)
3628
                    ;
3629
                  *pn = n;
3630
                }
3631
              /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3632
              if (!runpath && dyn.d_tag == DT_RPATH)
3633
                {
3634
                  struct bfd_link_needed_list *n, **pn;
3635
                  char *fnm, *anm;
3636
                  unsigned int tagv = dyn.d_un.d_val;
3637
 
3638
                  amt = sizeof (struct bfd_link_needed_list);
3639
                  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3640
                  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3641
                  if (n == NULL || fnm == NULL)
3642
                    goto error_free_dyn;
3643
                  amt = strlen (fnm) + 1;
3644
                  anm = (char *) bfd_alloc (abfd, amt);
3645
                  if (anm == NULL)
3646
                    goto error_free_dyn;
3647
                  memcpy (anm, fnm, amt);
3648
                  n->name = anm;
3649
                  n->by = abfd;
3650
                  n->next = NULL;
3651
                  for (pn = & rpath;
3652
                       *pn != NULL;
3653
                       pn = &(*pn)->next)
3654
                    ;
3655
                  *pn = n;
3656
                }
3657
              if (dyn.d_tag == DT_AUDIT)
3658
                {
3659
                  unsigned int tagv = dyn.d_un.d_val;
3660
                  audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3661
                }
3662
            }
3663
 
3664
          free (dynbuf);
3665
        }
3666
 
3667
      /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
3668
         frees all more recently bfd_alloc'd blocks as well.  */
3669
      if (runpath)
3670
        rpath = runpath;
3671
 
3672
      if (rpath)
3673
        {
3674
          struct bfd_link_needed_list **pn;
3675
          for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
3676
            ;
3677
          *pn = rpath;
3678
        }
3679
 
3680
      /* We do not want to include any of the sections in a dynamic
3681
         object in the output file.  We hack by simply clobbering the
3682
         list of sections in the BFD.  This could be handled more
3683
         cleanly by, say, a new section flag; the existing
3684
         SEC_NEVER_LOAD flag is not the one we want, because that one
3685
         still implies that the section takes up space in the output
3686
         file.  */
3687
      bfd_section_list_clear (abfd);
3688
 
3689
      /* Find the name to use in a DT_NEEDED entry that refers to this
3690
         object.  If the object has a DT_SONAME entry, we use it.
3691
         Otherwise, if the generic linker stuck something in
3692
         elf_dt_name, we use that.  Otherwise, we just use the file
3693
         name.  */
3694
      if (soname == NULL || *soname == '\0')
3695
        {
3696
          soname = elf_dt_name (abfd);
3697
          if (soname == NULL || *soname == '\0')
3698
            soname = bfd_get_filename (abfd);
3699
        }
3700
 
3701
      /* Save the SONAME because sometimes the linker emulation code
3702
         will need to know it.  */
3703
      elf_dt_name (abfd) = soname;
3704
 
3705
      ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
3706
      if (ret < 0)
3707
        goto error_return;
3708
 
3709
      /* If we have already included this dynamic object in the
3710
         link, just ignore it.  There is no reason to include a
3711
         particular dynamic object more than once.  */
3712
      if (ret > 0)
3713
        return TRUE;
3714
 
3715
      /* Save the DT_AUDIT entry for the linker emulation code. */
3716
      elf_dt_audit (abfd) = audit;
3717
    }
3718
 
3719
  /* If this is a dynamic object, we always link against the .dynsym
3720
     symbol table, not the .symtab symbol table.  The dynamic linker
3721
     will only see the .dynsym symbol table, so there is no reason to
3722
     look at .symtab for a dynamic object.  */
3723
 
3724
  if (! dynamic || elf_dynsymtab (abfd) == 0)
3725
    hdr = &elf_tdata (abfd)->symtab_hdr;
3726
  else
3727
    hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3728
 
3729
  symcount = hdr->sh_size / bed->s->sizeof_sym;
3730
 
3731
  /* The sh_info field of the symtab header tells us where the
3732
     external symbols start.  We don't care about the local symbols at
3733
     this point.  */
3734
  if (elf_bad_symtab (abfd))
3735
    {
3736
      extsymcount = symcount;
3737
      extsymoff = 0;
3738
    }
3739
  else
3740
    {
3741
      extsymcount = symcount - hdr->sh_info;
3742
      extsymoff = hdr->sh_info;
3743
    }
3744
 
3745
  sym_hash = NULL;
3746
  if (extsymcount != 0)
3747
    {
3748
      isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3749
                                      NULL, NULL, NULL);
3750
      if (isymbuf == NULL)
3751
        goto error_return;
3752
 
3753
      /* We store a pointer to the hash table entry for each external
3754
         symbol.  */
3755
      amt = extsymcount * sizeof (struct elf_link_hash_entry *);
3756
      sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt);
3757
      if (sym_hash == NULL)
3758
        goto error_free_sym;
3759
      elf_sym_hashes (abfd) = sym_hash;
3760
    }
3761
 
3762
  if (dynamic)
3763
    {
3764
      /* Read in any version definitions.  */
3765
      if (!_bfd_elf_slurp_version_tables (abfd,
3766
                                          info->default_imported_symver))
3767
        goto error_free_sym;
3768
 
3769
      /* Read in the symbol versions, but don't bother to convert them
3770
         to internal format.  */
3771
      if (elf_dynversym (abfd) != 0)
3772
        {
3773
          Elf_Internal_Shdr *versymhdr;
3774
 
3775
          versymhdr = &elf_tdata (abfd)->dynversym_hdr;
3776
          extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
3777
          if (extversym == NULL)
3778
            goto error_free_sym;
3779
          amt = versymhdr->sh_size;
3780
          if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
3781
              || bfd_bread (extversym, amt, abfd) != amt)
3782
            goto error_free_vers;
3783
        }
3784
    }
3785
 
3786
  /* If we are loading an as-needed shared lib, save the symbol table
3787
     state before we start adding symbols.  If the lib turns out
3788
     to be unneeded, restore the state.  */
3789
  if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
3790
    {
3791
      unsigned int i;
3792
      size_t entsize;
3793
 
3794
      for (entsize = 0, i = 0; i < htab->root.table.size; i++)
3795
        {
3796
          struct bfd_hash_entry *p;
3797
          struct elf_link_hash_entry *h;
3798
 
3799
          for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3800
            {
3801
              h = (struct elf_link_hash_entry *) p;
3802
              entsize += htab->root.table.entsize;
3803
              if (h->root.type == bfd_link_hash_warning)
3804
                entsize += htab->root.table.entsize;
3805
            }
3806
        }
3807
 
3808
      tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
3809
      hashsize = extsymcount * sizeof (struct elf_link_hash_entry *);
3810
      old_tab = bfd_malloc (tabsize + entsize + hashsize);
3811
      if (old_tab == NULL)
3812
        goto error_free_vers;
3813
 
3814
      /* Remember the current objalloc pointer, so that all mem for
3815
         symbols added can later be reclaimed.  */
3816
      alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
3817
      if (alloc_mark == NULL)
3818
        goto error_free_vers;
3819
 
3820
      /* Make a special call to the linker "notice" function to
3821
         tell it that we are about to handle an as-needed lib.  */
3822
      if (!(*info->callbacks->notice) (info, NULL, abfd, NULL,
3823
                                       notice_as_needed))
3824
        goto error_free_vers;
3825
 
3826
      /* Clone the symbol table and sym hashes.  Remember some
3827
         pointers into the symbol table, and dynamic symbol count.  */
3828
      old_hash = (char *) old_tab + tabsize;
3829
      old_ent = (char *) old_hash + hashsize;
3830
      memcpy (old_tab, htab->root.table.table, tabsize);
3831
      memcpy (old_hash, sym_hash, hashsize);
3832
      old_undefs = htab->root.undefs;
3833
      old_undefs_tail = htab->root.undefs_tail;
3834
      old_table = htab->root.table.table;
3835
      old_size = htab->root.table.size;
3836
      old_count = htab->root.table.count;
3837
      old_dynsymcount = htab->dynsymcount;
3838
 
3839
      for (i = 0; i < htab->root.table.size; i++)
3840
        {
3841
          struct bfd_hash_entry *p;
3842
          struct elf_link_hash_entry *h;
3843
 
3844
          for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3845
            {
3846
              memcpy (old_ent, p, htab->root.table.entsize);
3847
              old_ent = (char *) old_ent + htab->root.table.entsize;
3848
              h = (struct elf_link_hash_entry *) p;
3849
              if (h->root.type == bfd_link_hash_warning)
3850
                {
3851
                  memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
3852
                  old_ent = (char *) old_ent + htab->root.table.entsize;
3853
                }
3854
            }
3855
        }
3856
    }
3857
 
3858
  weaks = NULL;
3859
  ever = extversym != NULL ? extversym + extsymoff : NULL;
3860
  for (isym = isymbuf, isymend = isymbuf + extsymcount;
3861
       isym < isymend;
3862
       isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
3863
    {
3864
      int bind;
3865
      bfd_vma value;
3866
      asection *sec, *new_sec;
3867
      flagword flags;
3868
      const char *name;
3869
      struct elf_link_hash_entry *h;
3870
      bfd_boolean definition;
3871
      bfd_boolean size_change_ok;
3872
      bfd_boolean type_change_ok;
3873
      bfd_boolean new_weakdef;
3874
      bfd_boolean override;
3875
      bfd_boolean common;
3876
      unsigned int old_alignment;
3877
      bfd *old_bfd;
3878
      bfd * undef_bfd = NULL;
3879
 
3880
      override = FALSE;
3881
 
3882
      flags = BSF_NO_FLAGS;
3883
      sec = NULL;
3884
      value = isym->st_value;
3885
      *sym_hash = NULL;
3886
      common = bed->common_definition (isym);
3887
 
3888
      bind = ELF_ST_BIND (isym->st_info);
3889
      switch (bind)
3890
        {
3891
        case STB_LOCAL:
3892
          /* This should be impossible, since ELF requires that all
3893
             global symbols follow all local symbols, and that sh_info
3894
             point to the first global symbol.  Unfortunately, Irix 5
3895
             screws this up.  */
3896
          continue;
3897
 
3898
        case STB_GLOBAL:
3899
          if (isym->st_shndx != SHN_UNDEF && !common)
3900
            flags = BSF_GLOBAL;
3901
          break;
3902
 
3903
        case STB_WEAK:
3904
          flags = BSF_WEAK;
3905
          break;
3906
 
3907
        case STB_GNU_UNIQUE:
3908
          flags = BSF_GNU_UNIQUE;
3909
          break;
3910
 
3911
        default:
3912
          /* Leave it up to the processor backend.  */
3913
          break;
3914
        }
3915
 
3916
      if (isym->st_shndx == SHN_UNDEF)
3917
        sec = bfd_und_section_ptr;
3918
      else if (isym->st_shndx == SHN_ABS)
3919
        sec = bfd_abs_section_ptr;
3920
      else if (isym->st_shndx == SHN_COMMON)
3921
        {
3922
          sec = bfd_com_section_ptr;
3923
          /* What ELF calls the size we call the value.  What ELF
3924
             calls the value we call the alignment.  */
3925
          value = isym->st_size;
3926
        }
3927
      else
3928
        {
3929
          sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3930
          if (sec == NULL)
3931
            sec = bfd_abs_section_ptr;
3932
          else if (sec->kept_section)
3933
            {
3934
              /* Symbols from discarded section are undefined.  We keep
3935
                 its visibility.  */
3936
              sec = bfd_und_section_ptr;
3937
              isym->st_shndx = SHN_UNDEF;
3938
            }
3939
          else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
3940
            value -= sec->vma;
3941
        }
3942
 
3943
      name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3944
                                              isym->st_name);
3945
      if (name == NULL)
3946
        goto error_free_vers;
3947
 
3948
      if (isym->st_shndx == SHN_COMMON
3949
          && ELF_ST_TYPE (isym->st_info) == STT_TLS
3950
          && !info->relocatable)
3951
        {
3952
          asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
3953
 
3954
          if (tcomm == NULL)
3955
            {
3956
              tcomm = bfd_make_section_with_flags (abfd, ".tcommon",
3957
                                                   (SEC_ALLOC
3958
                                                    | SEC_IS_COMMON
3959
                                                    | SEC_LINKER_CREATED
3960
                                                    | SEC_THREAD_LOCAL));
3961
              if (tcomm == NULL)
3962
                goto error_free_vers;
3963
            }
3964
          sec = tcomm;
3965
        }
3966
      else if (bed->elf_add_symbol_hook)
3967
        {
3968
          if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
3969
                                             &sec, &value))
3970
            goto error_free_vers;
3971
 
3972
          /* The hook function sets the name to NULL if this symbol
3973
             should be skipped for some reason.  */
3974
          if (name == NULL)
3975
            continue;
3976
        }
3977
 
3978
      /* Sanity check that all possibilities were handled.  */
3979
      if (sec == NULL)
3980
        {
3981
          bfd_set_error (bfd_error_bad_value);
3982
          goto error_free_vers;
3983
        }
3984
 
3985
      if (bfd_is_und_section (sec)
3986
          || bfd_is_com_section (sec))
3987
        definition = FALSE;
3988
      else
3989
        definition = TRUE;
3990
 
3991
      size_change_ok = FALSE;
3992
      type_change_ok = bed->type_change_ok;
3993
      old_alignment = 0;
3994
      old_bfd = NULL;
3995
      new_sec = sec;
3996
 
3997
      if (is_elf_hash_table (htab))
3998
        {
3999
          Elf_Internal_Versym iver;
4000
          unsigned int vernum = 0;
4001
          bfd_boolean skip;
4002
 
4003
          /* If this is a definition of a symbol which was previously
4004
             referenced in a non-weak manner then make a note of the bfd
4005
             that contained the reference.  This is used if we need to
4006
             refer to the source of the reference later on.  */
4007
          if (! bfd_is_und_section (sec))
4008
            {
4009
              h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4010
 
4011
              if (h != NULL
4012
                  && h->root.type == bfd_link_hash_undefined
4013
                  && h->root.u.undef.abfd)
4014
                undef_bfd = h->root.u.undef.abfd;
4015
            }
4016
 
4017
          if (ever == NULL)
4018
            {
4019
              if (info->default_imported_symver)
4020
                /* Use the default symbol version created earlier.  */
4021
                iver.vs_vers = elf_tdata (abfd)->cverdefs;
4022
              else
4023
                iver.vs_vers = 0;
4024
            }
4025
          else
4026
            _bfd_elf_swap_versym_in (abfd, ever, &iver);
4027
 
4028
          vernum = iver.vs_vers & VERSYM_VERSION;
4029
 
4030
          /* If this is a hidden symbol, or if it is not version
4031
             1, we append the version name to the symbol name.
4032
             However, we do not modify a non-hidden absolute symbol
4033
             if it is not a function, because it might be the version
4034
             symbol itself.  FIXME: What if it isn't?  */
4035
          if ((iver.vs_vers & VERSYM_HIDDEN) != 0
4036
              || (vernum > 1
4037
                  && (!bfd_is_abs_section (sec)
4038
                      || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
4039
            {
4040
              const char *verstr;
4041
              size_t namelen, verlen, newlen;
4042
              char *newname, *p;
4043
 
4044
              if (isym->st_shndx != SHN_UNDEF)
4045
                {
4046
                  if (vernum > elf_tdata (abfd)->cverdefs)
4047
                    verstr = NULL;
4048
                  else if (vernum > 1)
4049
                    verstr =
4050
                      elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4051
                  else
4052
                    verstr = "";
4053
 
4054
                  if (verstr == NULL)
4055
                    {
4056
                      (*_bfd_error_handler)
4057
                        (_("%B: %s: invalid version %u (max %d)"),
4058
                         abfd, name, vernum,
4059
                         elf_tdata (abfd)->cverdefs);
4060
                      bfd_set_error (bfd_error_bad_value);
4061
                      goto error_free_vers;
4062
                    }
4063
                }
4064
              else
4065
                {
4066
                  /* We cannot simply test for the number of
4067
                     entries in the VERNEED section since the
4068
                     numbers for the needed versions do not start
4069
                     at 0.  */
4070
                  Elf_Internal_Verneed *t;
4071
 
4072
                  verstr = NULL;
4073
                  for (t = elf_tdata (abfd)->verref;
4074
                       t != NULL;
4075
                       t = t->vn_nextref)
4076
                    {
4077
                      Elf_Internal_Vernaux *a;
4078
 
4079
                      for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4080
                        {
4081
                          if (a->vna_other == vernum)
4082
                            {
4083
                              verstr = a->vna_nodename;
4084
                              break;
4085
                            }
4086
                        }
4087
                      if (a != NULL)
4088
                        break;
4089
                    }
4090
                  if (verstr == NULL)
4091
                    {
4092
                      (*_bfd_error_handler)
4093
                        (_("%B: %s: invalid needed version %d"),
4094
                         abfd, name, vernum);
4095
                      bfd_set_error (bfd_error_bad_value);
4096
                      goto error_free_vers;
4097
                    }
4098
                }
4099
 
4100
              namelen = strlen (name);
4101
              verlen = strlen (verstr);
4102
              newlen = namelen + verlen + 2;
4103
              if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4104
                  && isym->st_shndx != SHN_UNDEF)
4105
                ++newlen;
4106
 
4107
              newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
4108
              if (newname == NULL)
4109
                goto error_free_vers;
4110
              memcpy (newname, name, namelen);
4111
              p = newname + namelen;
4112
              *p++ = ELF_VER_CHR;
4113
              /* If this is a defined non-hidden version symbol,
4114
                 we add another @ to the name.  This indicates the
4115
                 default version of the symbol.  */
4116
              if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4117
                  && isym->st_shndx != SHN_UNDEF)
4118
                *p++ = ELF_VER_CHR;
4119
              memcpy (p, verstr, verlen + 1);
4120
 
4121
              name = newname;
4122
            }
4123
 
4124
          /* If necessary, make a second attempt to locate the bfd
4125
             containing an unresolved, non-weak reference to the
4126
             current symbol.  */
4127
          if (! bfd_is_und_section (sec) && undef_bfd == NULL)
4128
            {
4129
              h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4130
 
4131
              if (h != NULL
4132
                  && h->root.type == bfd_link_hash_undefined
4133
                  && h->root.u.undef.abfd)
4134
                undef_bfd = h->root.u.undef.abfd;
4135
            }
4136
 
4137
          if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec,
4138
                                      &value, &old_alignment,
4139
                                      sym_hash, &skip, &override,
4140
                                      &type_change_ok, &size_change_ok))
4141
            goto error_free_vers;
4142
 
4143
          if (skip)
4144
            continue;
4145
 
4146
          if (override)
4147
            definition = FALSE;
4148
 
4149
          h = *sym_hash;
4150
          while (h->root.type == bfd_link_hash_indirect
4151
                 || h->root.type == bfd_link_hash_warning)
4152
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
4153
 
4154
          /* Remember the old alignment if this is a common symbol, so
4155
             that we don't reduce the alignment later on.  We can't
4156
             check later, because _bfd_generic_link_add_one_symbol
4157
             will set a default for the alignment which we want to
4158
             override. We also remember the old bfd where the existing
4159
             definition comes from.  */
4160
          switch (h->root.type)
4161
            {
4162
            default:
4163
              break;
4164
 
4165
            case bfd_link_hash_defined:
4166
            case bfd_link_hash_defweak:
4167
              old_bfd = h->root.u.def.section->owner;
4168
              break;
4169
 
4170
            case bfd_link_hash_common:
4171
              old_bfd = h->root.u.c.p->section->owner;
4172
              old_alignment = h->root.u.c.p->alignment_power;
4173
              break;
4174
            }
4175
 
4176
          if (elf_tdata (abfd)->verdef != NULL
4177
              && ! override
4178
              && vernum > 1
4179
              && definition)
4180
            h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4181
        }
4182
 
4183
      if (! (_bfd_generic_link_add_one_symbol
4184
             (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4185
              (struct bfd_link_hash_entry **) sym_hash)))
4186
        goto error_free_vers;
4187
 
4188
      h = *sym_hash;
4189
      while (h->root.type == bfd_link_hash_indirect
4190
             || h->root.type == bfd_link_hash_warning)
4191
        h = (struct elf_link_hash_entry *) h->root.u.i.link;
4192
 
4193
      *sym_hash = h;
4194
      h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
4195
 
4196
      new_weakdef = FALSE;
4197
      if (dynamic
4198
          && definition
4199
          && (flags & BSF_WEAK) != 0
4200
          && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
4201
          && is_elf_hash_table (htab)
4202
          && h->u.weakdef == NULL)
4203
        {
4204
          /* Keep a list of all weak defined non function symbols from
4205
             a dynamic object, using the weakdef field.  Later in this
4206
             function we will set the weakdef field to the correct
4207
             value.  We only put non-function symbols from dynamic
4208
             objects on this list, because that happens to be the only
4209
             time we need to know the normal symbol corresponding to a
4210
             weak symbol, and the information is time consuming to
4211
             figure out.  If the weakdef field is not already NULL,
4212
             then this symbol was already defined by some previous
4213
             dynamic object, and we will be using that previous
4214
             definition anyhow.  */
4215
 
4216
          h->u.weakdef = weaks;
4217
          weaks = h;
4218
          new_weakdef = TRUE;
4219
        }
4220
 
4221
      /* Set the alignment of a common symbol.  */
4222
      if ((common || bfd_is_com_section (sec))
4223
          && h->root.type == bfd_link_hash_common)
4224
        {
4225
          unsigned int align;
4226
 
4227
          if (common)
4228
            align = bfd_log2 (isym->st_value);
4229
          else
4230
            {
4231
              /* The new symbol is a common symbol in a shared object.
4232
                 We need to get the alignment from the section.  */
4233
              align = new_sec->alignment_power;
4234
            }
4235
          if (align > old_alignment
4236
              /* Permit an alignment power of zero if an alignment of one
4237
                 is specified and no other alignments have been specified.  */
4238
              || (isym->st_value == 1 && old_alignment == 0))
4239
            h->root.u.c.p->alignment_power = align;
4240
          else
4241
            h->root.u.c.p->alignment_power = old_alignment;
4242
        }
4243
 
4244
      if (is_elf_hash_table (htab))
4245
        {
4246
          bfd_boolean dynsym;
4247
 
4248
          /* Check the alignment when a common symbol is involved. This
4249
             can change when a common symbol is overridden by a normal
4250
             definition or a common symbol is ignored due to the old
4251
             normal definition. We need to make sure the maximum
4252
             alignment is maintained.  */
4253
          if ((old_alignment || common)
4254
              && h->root.type != bfd_link_hash_common)
4255
            {
4256
              unsigned int common_align;
4257
              unsigned int normal_align;
4258
              unsigned int symbol_align;
4259
              bfd *normal_bfd;
4260
              bfd *common_bfd;
4261
 
4262
              symbol_align = ffs (h->root.u.def.value) - 1;
4263
              if (h->root.u.def.section->owner != NULL
4264
                  && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
4265
                {
4266
                  normal_align = h->root.u.def.section->alignment_power;
4267
                  if (normal_align > symbol_align)
4268
                    normal_align = symbol_align;
4269
                }
4270
              else
4271
                normal_align = symbol_align;
4272
 
4273
              if (old_alignment)
4274
                {
4275
                  common_align = old_alignment;
4276
                  common_bfd = old_bfd;
4277
                  normal_bfd = abfd;
4278
                }
4279
              else
4280
                {
4281
                  common_align = bfd_log2 (isym->st_value);
4282
                  common_bfd = abfd;
4283
                  normal_bfd = old_bfd;
4284
                }
4285
 
4286
              if (normal_align < common_align)
4287
                {
4288
                  /* PR binutils/2735 */
4289
                  if (normal_bfd == NULL)
4290
                    (*_bfd_error_handler)
4291
                      (_("Warning: alignment %u of common symbol `%s' in %B"
4292
                         " is greater than the alignment (%u) of its section %A"),
4293
                       common_bfd, h->root.u.def.section,
4294
                       1 << common_align, name, 1 << normal_align);
4295
                  else
4296
                    (*_bfd_error_handler)
4297
                      (_("Warning: alignment %u of symbol `%s' in %B"
4298
                         " is smaller than %u in %B"),
4299
                       normal_bfd, common_bfd,
4300
                       1 << normal_align, name, 1 << common_align);
4301
                }
4302
            }
4303
 
4304
          /* Remember the symbol size if it isn't undefined.  */
4305
          if ((isym->st_size != 0 && isym->st_shndx != SHN_UNDEF)
4306
              && (definition || h->size == 0))
4307
            {
4308
              if (h->size != 0
4309
                  && h->size != isym->st_size
4310
                  && ! size_change_ok)
4311
                (*_bfd_error_handler)
4312
                  (_("Warning: size of symbol `%s' changed"
4313
                     " from %lu in %B to %lu in %B"),
4314
                   old_bfd, abfd,
4315
                   name, (unsigned long) h->size,
4316
                   (unsigned long) isym->st_size);
4317
 
4318
              h->size = isym->st_size;
4319
            }
4320
 
4321
          /* If this is a common symbol, then we always want H->SIZE
4322
             to be the size of the common symbol.  The code just above
4323
             won't fix the size if a common symbol becomes larger.  We
4324
             don't warn about a size change here, because that is
4325
             covered by --warn-common.  Allow changed between different
4326
             function types.  */
4327
          if (h->root.type == bfd_link_hash_common)
4328
            h->size = h->root.u.c.size;
4329
 
4330
          if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
4331
              && (definition || h->type == STT_NOTYPE))
4332
            {
4333
              unsigned int type = ELF_ST_TYPE (isym->st_info);
4334
 
4335
              /* Turn an IFUNC symbol from a DSO into a normal FUNC
4336
                 symbol.  */
4337
              if (type == STT_GNU_IFUNC
4338
                  && (abfd->flags & DYNAMIC) != 0)
4339
                type = STT_FUNC;
4340
 
4341
              if (h->type != type)
4342
                {
4343
                  if (h->type != STT_NOTYPE && ! type_change_ok)
4344
                    (*_bfd_error_handler)
4345
                      (_("Warning: type of symbol `%s' changed"
4346
                         " from %d to %d in %B"),
4347
                       abfd, name, h->type, type);
4348
 
4349
                  h->type = type;
4350
                }
4351
            }
4352
 
4353
          /* Merge st_other field.  */
4354
          elf_merge_st_other (abfd, h, isym, definition, dynamic);
4355
 
4356
          /* Set a flag in the hash table entry indicating the type of
4357
             reference or definition we just found.  Keep a count of
4358
             the number of dynamic symbols we find.  A dynamic symbol
4359
             is one which is referenced or defined by both a regular
4360
             object and a shared object.  */
4361
          dynsym = FALSE;
4362
          if (! dynamic)
4363
            {
4364
              if (! definition)
4365
                {
4366
                  h->ref_regular = 1;
4367
                  if (bind != STB_WEAK)
4368
                    h->ref_regular_nonweak = 1;
4369
                }
4370
              else
4371
                {
4372
                  h->def_regular = 1;
4373
                  if (h->def_dynamic)
4374
                    {
4375
                      h->def_dynamic = 0;
4376
                      h->ref_dynamic = 1;
4377
                      h->dynamic_def = 1;
4378
                    }
4379
                }
4380
              if (! info->executable
4381
                  || h->def_dynamic
4382
                  || h->ref_dynamic)
4383
                dynsym = TRUE;
4384
            }
4385
          else
4386
            {
4387
              if (! definition)
4388
                h->ref_dynamic = 1;
4389
              else
4390
                h->def_dynamic = 1;
4391
              if (h->def_regular
4392
                  || h->ref_regular
4393
                  || (h->u.weakdef != NULL
4394
                      && ! new_weakdef
4395
                      && h->u.weakdef->dynindx != -1))
4396
                dynsym = TRUE;
4397
            }
4398
 
4399
          if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable)
4400
            {
4401
              /* We don't want to make debug symbol dynamic.  */
4402
              dynsym = FALSE;
4403
            }
4404
 
4405
          /* Check to see if we need to add an indirect symbol for
4406
             the default name.  */
4407
          if (definition || h->root.type == bfd_link_hash_common)
4408
            if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4409
                                              &sec, &value, &dynsym,
4410
                                              override))
4411
              goto error_free_vers;
4412
 
4413
          if (definition && !dynamic)
4414
            {
4415
              char *p = strchr (name, ELF_VER_CHR);
4416
              if (p != NULL && p[1] != ELF_VER_CHR)
4417
                {
4418
                  /* Queue non-default versions so that .symver x, x@FOO
4419
                     aliases can be checked.  */
4420
                  if (!nondeflt_vers)
4421
                    {
4422
                      amt = ((isymend - isym + 1)
4423
                             * sizeof (struct elf_link_hash_entry *));
4424
                      nondeflt_vers =
4425
                          (struct elf_link_hash_entry **) bfd_malloc (amt);
4426
                      if (!nondeflt_vers)
4427
                        goto error_free_vers;
4428
                    }
4429
                  nondeflt_vers[nondeflt_vers_cnt++] = h;
4430
                }
4431
            }
4432
 
4433
          if (dynsym && h->dynindx == -1)
4434
            {
4435
              if (! bfd_elf_link_record_dynamic_symbol (info, h))
4436
                goto error_free_vers;
4437
              if (h->u.weakdef != NULL
4438
                  && ! new_weakdef
4439
                  && h->u.weakdef->dynindx == -1)
4440
                {
4441
                  if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4442
                    goto error_free_vers;
4443
                }
4444
            }
4445
          else if (dynsym && h->dynindx != -1)
4446
            /* If the symbol already has a dynamic index, but
4447
               visibility says it should not be visible, turn it into
4448
               a local symbol.  */
4449
            switch (ELF_ST_VISIBILITY (h->other))
4450
              {
4451
              case STV_INTERNAL:
4452
              case STV_HIDDEN:
4453
                (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4454
                dynsym = FALSE;
4455
                break;
4456
              }
4457
 
4458
          if (!add_needed
4459
              && definition
4460
              && ((dynsym
4461
                   && h->ref_regular)
4462
                  || (h->ref_dynamic
4463
                      && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
4464
                      && !on_needed_list (elf_dt_name (abfd), htab->needed))))
4465
            {
4466
              int ret;
4467
              const char *soname = elf_dt_name (abfd);
4468
 
4469
              /* A symbol from a library loaded via DT_NEEDED of some
4470
                 other library is referenced by a regular object.
4471
                 Add a DT_NEEDED entry for it.  Issue an error if
4472
                 --no-add-needed is used and the reference was not
4473
                 a weak one.  */
4474
              if (undef_bfd != NULL
4475
                  && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4476
                {
4477
                  (*_bfd_error_handler)
4478
                    (_("%B: undefined reference to symbol '%s'"),
4479
                     undef_bfd, name);
4480
                  (*_bfd_error_handler)
4481
                    (_("note: '%s' is defined in DSO %B so try adding it to the linker command line"),
4482
                     abfd, name);
4483
                  bfd_set_error (bfd_error_invalid_operation);
4484
                  goto error_free_vers;
4485
                }
4486
 
4487
              elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
4488
                  (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
4489
 
4490
              add_needed = TRUE;
4491
              ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4492
              if (ret < 0)
4493
                goto error_free_vers;
4494
 
4495
              BFD_ASSERT (ret == 0);
4496
            }
4497
        }
4498
    }
4499
 
4500
  if (extversym != NULL)
4501
    {
4502
      free (extversym);
4503
      extversym = NULL;
4504
    }
4505
 
4506
  if (isymbuf != NULL)
4507
    {
4508
      free (isymbuf);
4509
      isymbuf = NULL;
4510
    }
4511
 
4512
  if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4513
    {
4514
      unsigned int i;
4515
 
4516
      /* Restore the symbol table.  */
4517
      if (bed->as_needed_cleanup)
4518
        (*bed->as_needed_cleanup) (abfd, info);
4519
      old_hash = (char *) old_tab + tabsize;
4520
      old_ent = (char *) old_hash + hashsize;
4521
      sym_hash = elf_sym_hashes (abfd);
4522
      htab->root.table.table = old_table;
4523
      htab->root.table.size = old_size;
4524
      htab->root.table.count = old_count;
4525
      memcpy (htab->root.table.table, old_tab, tabsize);
4526
      memcpy (sym_hash, old_hash, hashsize);
4527
      htab->root.undefs = old_undefs;
4528
      htab->root.undefs_tail = old_undefs_tail;
4529
      for (i = 0; i < htab->root.table.size; i++)
4530
        {
4531
          struct bfd_hash_entry *p;
4532
          struct elf_link_hash_entry *h;
4533
 
4534
          for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4535
            {
4536
              h = (struct elf_link_hash_entry *) p;
4537
              if (h->root.type == bfd_link_hash_warning)
4538
                h = (struct elf_link_hash_entry *) h->root.u.i.link;
4539
              if (h->dynindx >= old_dynsymcount)
4540
                _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index);
4541
 
4542
              memcpy (p, old_ent, htab->root.table.entsize);
4543
              old_ent = (char *) old_ent + htab->root.table.entsize;
4544
              h = (struct elf_link_hash_entry *) p;
4545
              if (h->root.type == bfd_link_hash_warning)
4546
                {
4547
                  memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4548
                  old_ent = (char *) old_ent + htab->root.table.entsize;
4549
                }
4550
            }
4551
        }
4552
 
4553
      /* Make a special call to the linker "notice" function to
4554
         tell it that symbols added for crefs may need to be removed.  */
4555
      if (!(*info->callbacks->notice) (info, NULL, abfd, NULL,
4556
                                       notice_not_needed))
4557
        goto error_free_vers;
4558
 
4559
      free (old_tab);
4560
      objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4561
                           alloc_mark);
4562
      if (nondeflt_vers != NULL)
4563
        free (nondeflt_vers);
4564
      return TRUE;
4565
    }
4566
 
4567
  if (old_tab != NULL)
4568
    {
4569
      if (!(*info->callbacks->notice) (info, NULL, abfd, NULL,
4570
                                       notice_needed))
4571
        goto error_free_vers;
4572
      free (old_tab);
4573
      old_tab = NULL;
4574
    }
4575
 
4576
  /* Now that all the symbols from this input file are created, handle
4577
     .symver foo, foo@BAR such that any relocs against foo become foo@BAR.  */
4578
  if (nondeflt_vers != NULL)
4579
    {
4580
      bfd_size_type cnt, symidx;
4581
 
4582
      for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
4583
        {
4584
          struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
4585
          char *shortname, *p;
4586
 
4587
          p = strchr (h->root.root.string, ELF_VER_CHR);
4588
          if (p == NULL
4589
              || (h->root.type != bfd_link_hash_defined
4590
                  && h->root.type != bfd_link_hash_defweak))
4591
            continue;
4592
 
4593
          amt = p - h->root.root.string;
4594
          shortname = (char *) bfd_malloc (amt + 1);
4595
          if (!shortname)
4596
            goto error_free_vers;
4597
          memcpy (shortname, h->root.root.string, amt);
4598
          shortname[amt] = '\0';
4599
 
4600
          hi = (struct elf_link_hash_entry *)
4601
               bfd_link_hash_lookup (&htab->root, shortname,
4602
                                     FALSE, FALSE, FALSE);
4603
          if (hi != NULL
4604
              && hi->root.type == h->root.type
4605
              && hi->root.u.def.value == h->root.u.def.value
4606
              && hi->root.u.def.section == h->root.u.def.section)
4607
            {
4608
              (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
4609
              hi->root.type = bfd_link_hash_indirect;
4610
              hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
4611
              (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4612
              sym_hash = elf_sym_hashes (abfd);
4613
              if (sym_hash)
4614
                for (symidx = 0; symidx < extsymcount; ++symidx)
4615
                  if (sym_hash[symidx] == hi)
4616
                    {
4617
                      sym_hash[symidx] = h;
4618
                      break;
4619
                    }
4620
            }
4621
          free (shortname);
4622
        }
4623
      free (nondeflt_vers);
4624
      nondeflt_vers = NULL;
4625
    }
4626
 
4627
  /* Now set the weakdefs field correctly for all the weak defined
4628
     symbols we found.  The only way to do this is to search all the
4629
     symbols.  Since we only need the information for non functions in
4630
     dynamic objects, that's the only time we actually put anything on
4631
     the list WEAKS.  We need this information so that if a regular
4632
     object refers to a symbol defined weakly in a dynamic object, the
4633
     real symbol in the dynamic object is also put in the dynamic
4634
     symbols; we also must arrange for both symbols to point to the
4635
     same memory location.  We could handle the general case of symbol
4636
     aliasing, but a general symbol alias can only be generated in
4637
     assembler code, handling it correctly would be very time
4638
     consuming, and other ELF linkers don't handle general aliasing
4639
     either.  */
4640
  if (weaks != NULL)
4641
    {
4642
      struct elf_link_hash_entry **hpp;
4643
      struct elf_link_hash_entry **hppend;
4644
      struct elf_link_hash_entry **sorted_sym_hash;
4645
      struct elf_link_hash_entry *h;
4646
      size_t sym_count;
4647
 
4648
      /* Since we have to search the whole symbol list for each weak
4649
         defined symbol, search time for N weak defined symbols will be
4650
         O(N^2). Binary search will cut it down to O(NlogN).  */
4651
      amt = extsymcount * sizeof (struct elf_link_hash_entry *);
4652
      sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
4653
      if (sorted_sym_hash == NULL)
4654
        goto error_return;
4655
      sym_hash = sorted_sym_hash;
4656
      hpp = elf_sym_hashes (abfd);
4657
      hppend = hpp + extsymcount;
4658
      sym_count = 0;
4659
      for (; hpp < hppend; hpp++)
4660
        {
4661
          h = *hpp;
4662
          if (h != NULL
4663
              && h->root.type == bfd_link_hash_defined
4664
              && !bed->is_function_type (h->type))
4665
            {
4666
              *sym_hash = h;
4667
              sym_hash++;
4668
              sym_count++;
4669
            }
4670
        }
4671
 
4672
      qsort (sorted_sym_hash, sym_count,
4673
             sizeof (struct elf_link_hash_entry *),
4674
             elf_sort_symbol);
4675
 
4676
      while (weaks != NULL)
4677
        {
4678
          struct elf_link_hash_entry *hlook;
4679
          asection *slook;
4680
          bfd_vma vlook;
4681
          long ilook;
4682
          size_t i, j, idx;
4683
 
4684
          hlook = weaks;
4685
          weaks = hlook->u.weakdef;
4686
          hlook->u.weakdef = NULL;
4687
 
4688
          BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4689
                      || hlook->root.type == bfd_link_hash_defweak
4690
                      || hlook->root.type == bfd_link_hash_common
4691
                      || hlook->root.type == bfd_link_hash_indirect);
4692
          slook = hlook->root.u.def.section;
4693
          vlook = hlook->root.u.def.value;
4694
 
4695
          ilook = -1;
4696
          i = 0;
4697
          j = sym_count;
4698
          while (i < j)
4699
            {
4700
              bfd_signed_vma vdiff;
4701
              idx = (i + j) / 2;
4702
              h = sorted_sym_hash [idx];
4703
              vdiff = vlook - h->root.u.def.value;
4704
              if (vdiff < 0)
4705
                j = idx;
4706
              else if (vdiff > 0)
4707
                i = idx + 1;
4708
              else
4709
                {
4710
                  long sdiff = slook->id - h->root.u.def.section->id;
4711
                  if (sdiff < 0)
4712
                    j = idx;
4713
                  else if (sdiff > 0)
4714
                    i = idx + 1;
4715
                  else
4716
                    {
4717
                      ilook = idx;
4718
                      break;
4719
                    }
4720
                }
4721
            }
4722
 
4723
          /* We didn't find a value/section match.  */
4724
          if (ilook == -1)
4725
            continue;
4726
 
4727
          for (i = ilook; i < sym_count; i++)
4728
            {
4729
              h = sorted_sym_hash [i];
4730
 
4731
              /* Stop if value or section doesn't match.  */
4732
              if (h->root.u.def.value != vlook
4733
                  || h->root.u.def.section != slook)
4734
                break;
4735
              else if (h != hlook)
4736
                {
4737
                  hlook->u.weakdef = h;
4738
 
4739
                  /* If the weak definition is in the list of dynamic
4740
                     symbols, make sure the real definition is put
4741
                     there as well.  */
4742
                  if (hlook->dynindx != -1 && h->dynindx == -1)
4743
                    {
4744
                      if (! bfd_elf_link_record_dynamic_symbol (info, h))
4745
                        {
4746
                        err_free_sym_hash:
4747
                          free (sorted_sym_hash);
4748
                          goto error_return;
4749
                        }
4750
                    }
4751
 
4752
                  /* If the real definition is in the list of dynamic
4753
                     symbols, make sure the weak definition is put
4754
                     there as well.  If we don't do this, then the
4755
                     dynamic loader might not merge the entries for the
4756
                     real definition and the weak definition.  */
4757
                  if (h->dynindx != -1 && hlook->dynindx == -1)
4758
                    {
4759
                      if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
4760
                        goto err_free_sym_hash;
4761
                    }
4762
                  break;
4763
                }
4764
            }
4765
        }
4766
 
4767
      free (sorted_sym_hash);
4768
    }
4769
 
4770
  if (bed->check_directives
4771
      && !(*bed->check_directives) (abfd, info))
4772
    return FALSE;
4773
 
4774
  /* If this object is the same format as the output object, and it is
4775
     not a shared library, then let the backend look through the
4776
     relocs.
4777
 
4778
     This is required to build global offset table entries and to
4779
     arrange for dynamic relocs.  It is not required for the
4780
     particular common case of linking non PIC code, even when linking
4781
     against shared libraries, but unfortunately there is no way of
4782
     knowing whether an object file has been compiled PIC or not.
4783
     Looking through the relocs is not particularly time consuming.
4784
     The problem is that we must either (1) keep the relocs in memory,
4785
     which causes the linker to require additional runtime memory or
4786
     (2) read the relocs twice from the input file, which wastes time.
4787
     This would be a good case for using mmap.
4788
 
4789
     I have no idea how to handle linking PIC code into a file of a
4790
     different format.  It probably can't be done.  */
4791
  if (! dynamic
4792
      && is_elf_hash_table (htab)
4793
      && bed->check_relocs != NULL
4794
      && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
4795
    {
4796
      asection *o;
4797
 
4798
      for (o = abfd->sections; o != NULL; o = o->next)
4799
        {
4800
          Elf_Internal_Rela *internal_relocs;
4801
          bfd_boolean ok;
4802
 
4803
          if ((o->flags & SEC_RELOC) == 0
4804
              || o->reloc_count == 0
4805
              || ((info->strip == strip_all || info->strip == strip_debugger)
4806
                  && (o->flags & SEC_DEBUGGING) != 0)
4807
              || bfd_is_abs_section (o->output_section))
4808
            continue;
4809
 
4810
          internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
4811
                                                       info->keep_memory);
4812
          if (internal_relocs == NULL)
4813
            goto error_return;
4814
 
4815
          ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
4816
 
4817
          if (elf_section_data (o)->relocs != internal_relocs)
4818
            free (internal_relocs);
4819
 
4820
          if (! ok)
4821
            goto error_return;
4822
        }
4823
    }
4824
 
4825
  /* If this is a non-traditional link, try to optimize the handling
4826
     of the .stab/.stabstr sections.  */
4827
  if (! dynamic
4828
      && ! info->traditional_format
4829
      && is_elf_hash_table (htab)
4830
      && (info->strip != strip_all && info->strip != strip_debugger))
4831
    {
4832
      asection *stabstr;
4833
 
4834
      stabstr = bfd_get_section_by_name (abfd, ".stabstr");
4835
      if (stabstr != NULL)
4836
        {
4837
          bfd_size_type string_offset = 0;
4838
          asection *stab;
4839
 
4840
          for (stab = abfd->sections; stab; stab = stab->next)
4841
            if (CONST_STRNEQ (stab->name, ".stab")
4842
                && (!stab->name[5] ||
4843
                    (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
4844
                && (stab->flags & SEC_MERGE) == 0
4845
                && !bfd_is_abs_section (stab->output_section))
4846
              {
4847
                struct bfd_elf_section_data *secdata;
4848
 
4849
                secdata = elf_section_data (stab);
4850
                if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
4851
                                               stabstr, &secdata->sec_info,
4852
                                               &string_offset))
4853
                  goto error_return;
4854
                if (secdata->sec_info)
4855
                  stab->sec_info_type = ELF_INFO_TYPE_STABS;
4856
            }
4857
        }
4858
    }
4859
 
4860
  if (is_elf_hash_table (htab) && add_needed)
4861
    {
4862
      /* Add this bfd to the loaded list.  */
4863
      struct elf_link_loaded_list *n;
4864
 
4865
      n = (struct elf_link_loaded_list *)
4866
          bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
4867
      if (n == NULL)
4868
        goto error_return;
4869
      n->abfd = abfd;
4870
      n->next = htab->loaded;
4871
      htab->loaded = n;
4872
    }
4873
 
4874
  return TRUE;
4875
 
4876
 error_free_vers:
4877
  if (old_tab != NULL)
4878
    free (old_tab);
4879
  if (nondeflt_vers != NULL)
4880
    free (nondeflt_vers);
4881
  if (extversym != NULL)
4882
    free (extversym);
4883
 error_free_sym:
4884
  if (isymbuf != NULL)
4885
    free (isymbuf);
4886
 error_return:
4887
  return FALSE;
4888
}
4889
 
4890
/* Return the linker hash table entry of a symbol that might be
4891
   satisfied by an archive symbol.  Return -1 on error.  */
4892
 
4893
struct elf_link_hash_entry *
4894
_bfd_elf_archive_symbol_lookup (bfd *abfd,
4895
                                struct bfd_link_info *info,
4896
                                const char *name)
4897
{
4898
  struct elf_link_hash_entry *h;
4899
  char *p, *copy;
4900
  size_t len, first;
4901
 
4902
  h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
4903
  if (h != NULL)
4904
    return h;
4905
 
4906
  /* If this is a default version (the name contains @@), look up the
4907
     symbol again with only one `@' as well as without the version.
4908
     The effect is that references to the symbol with and without the
4909
     version will be matched by the default symbol in the archive.  */
4910
 
4911
  p = strchr (name, ELF_VER_CHR);
4912
  if (p == NULL || p[1] != ELF_VER_CHR)
4913
    return h;
4914
 
4915
  /* First check with only one `@'.  */
4916
  len = strlen (name);
4917
  copy = (char *) bfd_alloc (abfd, len);
4918
  if (copy == NULL)
4919
    return (struct elf_link_hash_entry *) 0 - 1;
4920
 
4921
  first = p - name + 1;
4922
  memcpy (copy, name, first);
4923
  memcpy (copy + first, name + first + 1, len - first);
4924
 
4925
  h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, FALSE);
4926
  if (h == NULL)
4927
    {
4928
      /* We also need to check references to the symbol without the
4929
         version.  */
4930
      copy[first - 1] = '\0';
4931
      h = elf_link_hash_lookup (elf_hash_table (info), copy,
4932
                                FALSE, FALSE, FALSE);
4933
    }
4934
 
4935
  bfd_release (abfd, copy);
4936
  return h;
4937
}
4938
 
4939
/* Add symbols from an ELF archive file to the linker hash table.  We
4940
   don't use _bfd_generic_link_add_archive_symbols because of a
4941
   problem which arises on UnixWare.  The UnixWare libc.so is an
4942
   archive which includes an entry libc.so.1 which defines a bunch of
4943
   symbols.  The libc.so archive also includes a number of other
4944
   object files, which also define symbols, some of which are the same
4945
   as those defined in libc.so.1.  Correct linking requires that we
4946
   consider each object file in turn, and include it if it defines any
4947
   symbols we need.  _bfd_generic_link_add_archive_symbols does not do
4948
   this; it looks through the list of undefined symbols, and includes
4949
   any object file which defines them.  When this algorithm is used on
4950
   UnixWare, it winds up pulling in libc.so.1 early and defining a
4951
   bunch of symbols.  This means that some of the other objects in the
4952
   archive are not included in the link, which is incorrect since they
4953
   precede libc.so.1 in the archive.
4954
 
4955
   Fortunately, ELF archive handling is simpler than that done by
4956
   _bfd_generic_link_add_archive_symbols, which has to allow for a.out
4957
   oddities.  In ELF, if we find a symbol in the archive map, and the
4958
   symbol is currently undefined, we know that we must pull in that
4959
   object file.
4960
 
4961
   Unfortunately, we do have to make multiple passes over the symbol
4962
   table until nothing further is resolved.  */
4963
 
4964
static bfd_boolean
4965
elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
4966
{
4967
  symindex c;
4968
  bfd_boolean *defined = NULL;
4969
  bfd_boolean *included = NULL;
4970
  carsym *symdefs;
4971
  bfd_boolean loop;
4972
  bfd_size_type amt;
4973
  const struct elf_backend_data *bed;
4974
  struct elf_link_hash_entry * (*archive_symbol_lookup)
4975
    (bfd *, struct bfd_link_info *, const char *);
4976
 
4977
  if (! bfd_has_map (abfd))
4978
    {
4979
      /* An empty archive is a special case.  */
4980
      if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
4981
        return TRUE;
4982
      bfd_set_error (bfd_error_no_armap);
4983
      return FALSE;
4984
    }
4985
 
4986
  /* Keep track of all symbols we know to be already defined, and all
4987
     files we know to be already included.  This is to speed up the
4988
     second and subsequent passes.  */
4989
  c = bfd_ardata (abfd)->symdef_count;
4990
  if (c == 0)
4991
    return TRUE;
4992
  amt = c;
4993
  amt *= sizeof (bfd_boolean);
4994
  defined = (bfd_boolean *) bfd_zmalloc (amt);
4995
  included = (bfd_boolean *) bfd_zmalloc (amt);
4996
  if (defined == NULL || included == NULL)
4997
    goto error_return;
4998
 
4999
  symdefs = bfd_ardata (abfd)->symdefs;
5000
  bed = get_elf_backend_data (abfd);
5001
  archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
5002
 
5003
  do
5004
    {
5005
      file_ptr last;
5006
      symindex i;
5007
      carsym *symdef;
5008
      carsym *symdefend;
5009
 
5010
      loop = FALSE;
5011
      last = -1;
5012
 
5013
      symdef = symdefs;
5014
      symdefend = symdef + c;
5015
      for (i = 0; symdef < symdefend; symdef++, i++)
5016
        {
5017
          struct elf_link_hash_entry *h;
5018
          bfd *element;
5019
          struct bfd_link_hash_entry *undefs_tail;
5020
          symindex mark;
5021
 
5022
          if (defined[i] || included[i])
5023
            continue;
5024
          if (symdef->file_offset == last)
5025
            {
5026
              included[i] = TRUE;
5027
              continue;
5028
            }
5029
 
5030
          h = archive_symbol_lookup (abfd, info, symdef->name);
5031
          if (h == (struct elf_link_hash_entry *) 0 - 1)
5032
            goto error_return;
5033
 
5034
          if (h == NULL)
5035
            continue;
5036
 
5037
          if (h->root.type == bfd_link_hash_common)
5038
            {
5039
              /* We currently have a common symbol.  The archive map contains
5040
                 a reference to this symbol, so we may want to include it.  We
5041
                 only want to include it however, if this archive element
5042
                 contains a definition of the symbol, not just another common
5043
                 declaration of it.
5044
 
5045
                 Unfortunately some archivers (including GNU ar) will put
5046
                 declarations of common symbols into their archive maps, as
5047
                 well as real definitions, so we cannot just go by the archive
5048
                 map alone.  Instead we must read in the element's symbol
5049
                 table and check that to see what kind of symbol definition
5050
                 this is.  */
5051
              if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5052
                continue;
5053
            }
5054
          else if (h->root.type != bfd_link_hash_undefined)
5055
            {
5056
              if (h->root.type != bfd_link_hash_undefweak)
5057
                defined[i] = TRUE;
5058
              continue;
5059
            }
5060
 
5061
          /* We need to include this archive member.  */
5062
          element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5063
          if (element == NULL)
5064
            goto error_return;
5065
 
5066
          if (! bfd_check_format (element, bfd_object))
5067
            goto error_return;
5068
 
5069
          /* Doublecheck that we have not included this object
5070
             already--it should be impossible, but there may be
5071
             something wrong with the archive.  */
5072
          if (element->archive_pass != 0)
5073
            {
5074
              bfd_set_error (bfd_error_bad_value);
5075
              goto error_return;
5076
            }
5077
          element->archive_pass = 1;
5078
 
5079
          undefs_tail = info->hash->undefs_tail;
5080
 
5081
          if (! (*info->callbacks->add_archive_element) (info, element,
5082
                                                         symdef->name))
5083
            goto error_return;
5084
          if (! bfd_link_add_symbols (element, info))
5085
            goto error_return;
5086
 
5087
          /* If there are any new undefined symbols, we need to make
5088
             another pass through the archive in order to see whether
5089
             they can be defined.  FIXME: This isn't perfect, because
5090
             common symbols wind up on undefs_tail and because an
5091
             undefined symbol which is defined later on in this pass
5092
             does not require another pass.  This isn't a bug, but it
5093
             does make the code less efficient than it could be.  */
5094
          if (undefs_tail != info->hash->undefs_tail)
5095
            loop = TRUE;
5096
 
5097
          /* Look backward to mark all symbols from this object file
5098
             which we have already seen in this pass.  */
5099
          mark = i;
5100
          do
5101
            {
5102
              included[mark] = TRUE;
5103
              if (mark == 0)
5104
                break;
5105
              --mark;
5106
            }
5107
          while (symdefs[mark].file_offset == symdef->file_offset);
5108
 
5109
          /* We mark subsequent symbols from this object file as we go
5110
             on through the loop.  */
5111
          last = symdef->file_offset;
5112
        }
5113
    }
5114
  while (loop);
5115
 
5116
  free (defined);
5117
  free (included);
5118
 
5119
  return TRUE;
5120
 
5121
 error_return:
5122
  if (defined != NULL)
5123
    free (defined);
5124
  if (included != NULL)
5125
    free (included);
5126
  return FALSE;
5127
}
5128
 
5129
/* Given an ELF BFD, add symbols to the global hash table as
5130
   appropriate.  */
5131
 
5132
bfd_boolean
5133
bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5134
{
5135
  switch (bfd_get_format (abfd))
5136
    {
5137
    case bfd_object:
5138
      return elf_link_add_object_symbols (abfd, info);
5139
    case bfd_archive:
5140
      return elf_link_add_archive_symbols (abfd, info);
5141
    default:
5142
      bfd_set_error (bfd_error_wrong_format);
5143
      return FALSE;
5144
    }
5145
}
5146
 
5147
struct hash_codes_info
5148
{
5149
  unsigned long *hashcodes;
5150
  bfd_boolean error;
5151
};
5152
 
5153
/* This function will be called though elf_link_hash_traverse to store
5154
   all hash value of the exported symbols in an array.  */
5155
 
5156
static bfd_boolean
5157
elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5158
{
5159
  struct hash_codes_info *inf = (struct hash_codes_info *) data;
5160
  const char *name;
5161
  char *p;
5162
  unsigned long ha;
5163
  char *alc = NULL;
5164
 
5165
  if (h->root.type == bfd_link_hash_warning)
5166
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5167
 
5168
  /* Ignore indirect symbols.  These are added by the versioning code.  */
5169
  if (h->dynindx == -1)
5170
    return TRUE;
5171
 
5172
  name = h->root.root.string;
5173
  p = strchr (name, ELF_VER_CHR);
5174
  if (p != NULL)
5175
    {
5176
      alc = (char *) bfd_malloc (p - name + 1);
5177
      if (alc == NULL)
5178
        {
5179
          inf->error = TRUE;
5180
          return FALSE;
5181
        }
5182
      memcpy (alc, name, p - name);
5183
      alc[p - name] = '\0';
5184
      name = alc;
5185
    }
5186
 
5187
  /* Compute the hash value.  */
5188
  ha = bfd_elf_hash (name);
5189
 
5190
  /* Store the found hash value in the array given as the argument.  */
5191
  *(inf->hashcodes)++ = ha;
5192
 
5193
  /* And store it in the struct so that we can put it in the hash table
5194
     later.  */
5195
  h->u.elf_hash_value = ha;
5196
 
5197
  if (alc != NULL)
5198
    free (alc);
5199
 
5200
  return TRUE;
5201
}
5202
 
5203
struct collect_gnu_hash_codes
5204
{
5205
  bfd *output_bfd;
5206
  const struct elf_backend_data *bed;
5207
  unsigned long int nsyms;
5208
  unsigned long int maskbits;
5209
  unsigned long int *hashcodes;
5210
  unsigned long int *hashval;
5211
  unsigned long int *indx;
5212
  unsigned long int *counts;
5213
  bfd_vma *bitmask;
5214
  bfd_byte *contents;
5215
  long int min_dynindx;
5216
  unsigned long int bucketcount;
5217
  unsigned long int symindx;
5218
  long int local_indx;
5219
  long int shift1, shift2;
5220
  unsigned long int mask;
5221
  bfd_boolean error;
5222
};
5223
 
5224
/* This function will be called though elf_link_hash_traverse to store
5225
   all hash value of the exported symbols in an array.  */
5226
 
5227
static bfd_boolean
5228
elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5229
{
5230
  struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5231
  const char *name;
5232
  char *p;
5233
  unsigned long ha;
5234
  char *alc = NULL;
5235
 
5236
  if (h->root.type == bfd_link_hash_warning)
5237
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5238
 
5239
  /* Ignore indirect symbols.  These are added by the versioning code.  */
5240
  if (h->dynindx == -1)
5241
    return TRUE;
5242
 
5243
  /* Ignore also local symbols and undefined symbols.  */
5244
  if (! (*s->bed->elf_hash_symbol) (h))
5245
    return TRUE;
5246
 
5247
  name = h->root.root.string;
5248
  p = strchr (name, ELF_VER_CHR);
5249
  if (p != NULL)
5250
    {
5251
      alc = (char *) bfd_malloc (p - name + 1);
5252
      if (alc == NULL)
5253
        {
5254
          s->error = TRUE;
5255
          return FALSE;
5256
        }
5257
      memcpy (alc, name, p - name);
5258
      alc[p - name] = '\0';
5259
      name = alc;
5260
    }
5261
 
5262
  /* Compute the hash value.  */
5263
  ha = bfd_elf_gnu_hash (name);
5264
 
5265
  /* Store the found hash value in the array for compute_bucket_count,
5266
     and also for .dynsym reordering purposes.  */
5267
  s->hashcodes[s->nsyms] = ha;
5268
  s->hashval[h->dynindx] = ha;
5269
  ++s->nsyms;
5270
  if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5271
    s->min_dynindx = h->dynindx;
5272
 
5273
  if (alc != NULL)
5274
    free (alc);
5275
 
5276
  return TRUE;
5277
}
5278
 
5279
/* This function will be called though elf_link_hash_traverse to do
5280
   final dynaminc symbol renumbering.  */
5281
 
5282
static bfd_boolean
5283
elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5284
{
5285
  struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5286
  unsigned long int bucket;
5287
  unsigned long int val;
5288
 
5289
  if (h->root.type == bfd_link_hash_warning)
5290
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
5291
 
5292
  /* Ignore indirect symbols.  */
5293
  if (h->dynindx == -1)
5294
    return TRUE;
5295
 
5296
  /* Ignore also local symbols and undefined symbols.  */
5297
  if (! (*s->bed->elf_hash_symbol) (h))
5298
    {
5299
      if (h->dynindx >= s->min_dynindx)
5300
        h->dynindx = s->local_indx++;
5301
      return TRUE;
5302
    }
5303
 
5304
  bucket = s->hashval[h->dynindx] % s->bucketcount;
5305
  val = (s->hashval[h->dynindx] >> s->shift1)
5306
        & ((s->maskbits >> s->shift1) - 1);
5307
  s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5308
  s->bitmask[val]
5309
    |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5310
  val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5311
  if (s->counts[bucket] == 1)
5312
    /* Last element terminates the chain.  */
5313
    val |= 1;
5314
  bfd_put_32 (s->output_bfd, val,
5315
              s->contents + (s->indx[bucket] - s->symindx) * 4);
5316
  --s->counts[bucket];
5317
  h->dynindx = s->indx[bucket]++;
5318
  return TRUE;
5319
}
5320
 
5321
/* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
5322
 
5323
bfd_boolean
5324
_bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5325
{
5326
  return !(h->forced_local
5327
           || h->root.type == bfd_link_hash_undefined
5328
           || h->root.type == bfd_link_hash_undefweak
5329
           || ((h->root.type == bfd_link_hash_defined
5330
                || h->root.type == bfd_link_hash_defweak)
5331
               && h->root.u.def.section->output_section == NULL));
5332
}
5333
 
5334
/* Array used to determine the number of hash table buckets to use
5335
   based on the number of symbols there are.  If there are fewer than
5336
   3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5337
   fewer than 37 we use 17 buckets, and so forth.  We never use more
5338
   than 32771 buckets.  */
5339
 
5340
static const size_t elf_buckets[] =
5341
{
5342
  1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5343
  16411, 32771, 0
5344
};
5345
 
5346
/* Compute bucket count for hashing table.  We do not use a static set
5347
   of possible tables sizes anymore.  Instead we determine for all
5348
   possible reasonable sizes of the table the outcome (i.e., the
5349
   number of collisions etc) and choose the best solution.  The
5350
   weighting functions are not too simple to allow the table to grow
5351
   without bounds.  Instead one of the weighting factors is the size.
5352
   Therefore the result is always a good payoff between few collisions
5353
   (= short chain lengths) and table size.  */
5354
static size_t
5355
compute_bucket_count (struct bfd_link_info *info,
5356
                      unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5357
                      unsigned long int nsyms,
5358
                      int gnu_hash)
5359
{
5360
  size_t best_size = 0;
5361
  unsigned long int i;
5362
 
5363
  /* We have a problem here.  The following code to optimize the table
5364
     size requires an integer type with more the 32 bits.  If
5365
     BFD_HOST_U_64_BIT is set we know about such a type.  */
5366
#ifdef BFD_HOST_U_64_BIT
5367
  if (info->optimize)
5368
    {
5369
      size_t minsize;
5370
      size_t maxsize;
5371
      BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5372
      bfd *dynobj = elf_hash_table (info)->dynobj;
5373
      size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5374
      const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
5375
      unsigned long int *counts;
5376
      bfd_size_type amt;
5377
 
5378
      /* Possible optimization parameters: if we have NSYMS symbols we say
5379
         that the hashing table must at least have NSYMS/4 and at most
5380
         2*NSYMS buckets.  */
5381
      minsize = nsyms / 4;
5382
      if (minsize == 0)
5383
        minsize = 1;
5384
      best_size = maxsize = nsyms * 2;
5385
      if (gnu_hash)
5386
        {
5387
          if (minsize < 2)
5388
            minsize = 2;
5389
          if ((best_size & 31) == 0)
5390
            ++best_size;
5391
        }
5392
 
5393
      /* Create array where we count the collisions in.  We must use bfd_malloc
5394
         since the size could be large.  */
5395
      amt = maxsize;
5396
      amt *= sizeof (unsigned long int);
5397
      counts = (unsigned long int *) bfd_malloc (amt);
5398
      if (counts == NULL)
5399
        return 0;
5400
 
5401
      /* Compute the "optimal" size for the hash table.  The criteria is a
5402
         minimal chain length.  The minor criteria is (of course) the size
5403
         of the table.  */
5404
      for (i = minsize; i < maxsize; ++i)
5405
        {
5406
          /* Walk through the array of hashcodes and count the collisions.  */
5407
          BFD_HOST_U_64_BIT max;
5408
          unsigned long int j;
5409
          unsigned long int fact;
5410
 
5411
          if (gnu_hash && (i & 31) == 0)
5412
            continue;
5413
 
5414
          memset (counts, '\0', i * sizeof (unsigned long int));
5415
 
5416
          /* Determine how often each hash bucket is used.  */
5417
          for (j = 0; j < nsyms; ++j)
5418
            ++counts[hashcodes[j] % i];
5419
 
5420
          /* For the weight function we need some information about the
5421
             pagesize on the target.  This is information need not be 100%
5422
             accurate.  Since this information is not available (so far) we
5423
             define it here to a reasonable default value.  If it is crucial
5424
             to have a better value some day simply define this value.  */
5425
# ifndef BFD_TARGET_PAGESIZE
5426
#  define BFD_TARGET_PAGESIZE   (4096)
5427
# endif
5428
 
5429
          /* We in any case need 2 + DYNSYMCOUNT entries for the size values
5430
             and the chains.  */
5431
          max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
5432
 
5433
# if 1
5434
          /* Variant 1: optimize for short chains.  We add the squares
5435
             of all the chain lengths (which favors many small chain
5436
             over a few long chains).  */
5437
          for (j = 0; j < i; ++j)
5438
            max += counts[j] * counts[j];
5439
 
5440
          /* This adds penalties for the overall size of the table.  */
5441
          fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5442
          max *= fact * fact;
5443
# else
5444
          /* Variant 2: Optimize a lot more for small table.  Here we
5445
             also add squares of the size but we also add penalties for
5446
             empty slots (the +1 term).  */
5447
          for (j = 0; j < i; ++j)
5448
            max += (1 + counts[j]) * (1 + counts[j]);
5449
 
5450
          /* The overall size of the table is considered, but not as
5451
             strong as in variant 1, where it is squared.  */
5452
          fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5453
          max *= fact;
5454
# endif
5455
 
5456
          /* Compare with current best results.  */
5457
          if (max < best_chlen)
5458
            {
5459
              best_chlen = max;
5460
              best_size = i;
5461
            }
5462
        }
5463
 
5464
      free (counts);
5465
    }
5466
  else
5467
#endif /* defined (BFD_HOST_U_64_BIT) */
5468
    {
5469
      /* This is the fallback solution if no 64bit type is available or if we
5470
         are not supposed to spend much time on optimizations.  We select the
5471
         bucket count using a fixed set of numbers.  */
5472
      for (i = 0; elf_buckets[i] != 0; i++)
5473
        {
5474
          best_size = elf_buckets[i];
5475
          if (nsyms < elf_buckets[i + 1])
5476
            break;
5477
        }
5478
      if (gnu_hash && best_size < 2)
5479
        best_size = 2;
5480
    }
5481
 
5482
  return best_size;
5483
}
5484
 
5485
/* Size any SHT_GROUP section for ld -r.  */
5486
 
5487
bfd_boolean
5488
_bfd_elf_size_group_sections (struct bfd_link_info *info)
5489
{
5490
  bfd *ibfd;
5491
 
5492
  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
5493
    if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
5494
        && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
5495
      return FALSE;
5496
  return TRUE;
5497
}
5498
 
5499
/* Set up the sizes and contents of the ELF dynamic sections.  This is
5500
   called by the ELF linker emulation before_allocation routine.  We
5501
   must set the sizes of the sections before the linker sets the
5502
   addresses of the various sections.  */
5503
 
5504
bfd_boolean
5505
bfd_elf_size_dynamic_sections (bfd *output_bfd,
5506
                               const char *soname,
5507
                               const char *rpath,
5508
                               const char *filter_shlib,
5509
                               const char *audit,
5510
                               const char *depaudit,
5511
                               const char * const *auxiliary_filters,
5512
                               struct bfd_link_info *info,
5513
                               asection **sinterpptr,
5514
                               struct bfd_elf_version_tree *verdefs)
5515
{
5516
  bfd_size_type soname_indx;
5517
  bfd *dynobj;
5518
  const struct elf_backend_data *bed;
5519
  struct elf_info_failed asvinfo;
5520
 
5521
  *sinterpptr = NULL;
5522
 
5523
  soname_indx = (bfd_size_type) -1;
5524
 
5525
  if (!is_elf_hash_table (info->hash))
5526
    return TRUE;
5527
 
5528
  bed = get_elf_backend_data (output_bfd);
5529
  if (info->execstack)
5530
    elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
5531
  else if (info->noexecstack)
5532
    elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
5533
  else
5534
    {
5535
      bfd *inputobj;
5536
      asection *notesec = NULL;
5537
      int exec = 0;
5538
 
5539
      for (inputobj = info->input_bfds;
5540
           inputobj;
5541
           inputobj = inputobj->link_next)
5542
        {
5543
          asection *s;
5544
 
5545
          if (inputobj->flags & (DYNAMIC | EXEC_P | BFD_LINKER_CREATED))
5546
            continue;
5547
          s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
5548
          if (s)
5549
            {
5550
              if (s->flags & SEC_CODE)
5551
                exec = PF_X;
5552
              notesec = s;
5553
            }
5554
          else if (bed->default_execstack)
5555
            exec = PF_X;
5556
        }
5557
      if (notesec)
5558
        {
5559
          elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | exec;
5560
          if (exec && info->relocatable
5561
              && notesec->output_section != bfd_abs_section_ptr)
5562
            notesec->output_section->flags |= SEC_CODE;
5563
        }
5564
    }
5565
 
5566
  /* Any syms created from now on start with -1 in
5567
     got.refcount/offset and plt.refcount/offset.  */
5568
  elf_hash_table (info)->init_got_refcount
5569
    = elf_hash_table (info)->init_got_offset;
5570
  elf_hash_table (info)->init_plt_refcount
5571
    = elf_hash_table (info)->init_plt_offset;
5572
 
5573
  if (info->relocatable
5574
      && !_bfd_elf_size_group_sections (info))
5575
    return FALSE;
5576
 
5577
  /* The backend may have to create some sections regardless of whether
5578
     we're dynamic or not.  */
5579
  if (bed->elf_backend_always_size_sections
5580
      && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
5581
    return FALSE;
5582
 
5583
  if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
5584
    return FALSE;
5585
 
5586
  dynobj = elf_hash_table (info)->dynobj;
5587
 
5588
  /* If there were no dynamic objects in the link, there is nothing to
5589
     do here.  */
5590
  if (dynobj == NULL)
5591
    return TRUE;
5592
 
5593
  if (elf_hash_table (info)->dynamic_sections_created)
5594
    {
5595
      struct elf_info_failed eif;
5596
      struct elf_link_hash_entry *h;
5597
      asection *dynstr;
5598
      struct bfd_elf_version_tree *t;
5599
      struct bfd_elf_version_expr *d;
5600
      asection *s;
5601
      bfd_boolean all_defined;
5602
 
5603
      *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
5604
      BFD_ASSERT (*sinterpptr != NULL || !info->executable);
5605
 
5606
      if (soname != NULL)
5607
        {
5608
          soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5609
                                             soname, TRUE);
5610
          if (soname_indx == (bfd_size_type) -1
5611
              || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
5612
            return FALSE;
5613
        }
5614
 
5615
      if (info->symbolic)
5616
        {
5617
          if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
5618
            return FALSE;
5619
          info->flags |= DF_SYMBOLIC;
5620
        }
5621
 
5622
      if (rpath != NULL)
5623
        {
5624
          bfd_size_type indx;
5625
 
5626
          indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
5627
                                      TRUE);
5628
          if (indx == (bfd_size_type) -1
5629
              || !_bfd_elf_add_dynamic_entry (info, DT_RPATH, indx))
5630
            return FALSE;
5631
 
5632
          if  (info->new_dtags)
5633
            {
5634
              _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr, indx);
5635
              if (!_bfd_elf_add_dynamic_entry (info, DT_RUNPATH, indx))
5636
                return FALSE;
5637
            }
5638
        }
5639
 
5640
      if (filter_shlib != NULL)
5641
        {
5642
          bfd_size_type indx;
5643
 
5644
          indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5645
                                      filter_shlib, TRUE);
5646
          if (indx == (bfd_size_type) -1
5647
              || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
5648
            return FALSE;
5649
        }
5650
 
5651
      if (auxiliary_filters != NULL)
5652
        {
5653
          const char * const *p;
5654
 
5655
          for (p = auxiliary_filters; *p != NULL; p++)
5656
            {
5657
              bfd_size_type indx;
5658
 
5659
              indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5660
                                          *p, TRUE);
5661
              if (indx == (bfd_size_type) -1
5662
                  || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
5663
                return FALSE;
5664
            }
5665
        }
5666
 
5667
      if (audit != NULL)
5668
        {
5669
          bfd_size_type indx;
5670
 
5671
          indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
5672
                                      TRUE);
5673
          if (indx == (bfd_size_type) -1
5674
              || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
5675
            return FALSE;
5676
        }
5677
 
5678
      if (depaudit != NULL)
5679
        {
5680
          bfd_size_type indx;
5681
 
5682
          indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
5683
                                      TRUE);
5684
          if (indx == (bfd_size_type) -1
5685
              || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
5686
            return FALSE;
5687
        }
5688
 
5689
      eif.info = info;
5690
      eif.verdefs = verdefs;
5691
      eif.failed = FALSE;
5692
 
5693
      /* If we are supposed to export all symbols into the dynamic symbol
5694
         table (this is not the normal case), then do so.  */
5695
      if (info->export_dynamic
5696
          || (info->executable && info->dynamic))
5697
        {
5698
          elf_link_hash_traverse (elf_hash_table (info),
5699
                                  _bfd_elf_export_symbol,
5700
                                  &eif);
5701
          if (eif.failed)
5702
            return FALSE;
5703
        }
5704
 
5705
      /* Make all global versions with definition.  */
5706
      for (t = verdefs; t != NULL; t = t->next)
5707
        for (d = t->globals.list; d != NULL; d = d->next)
5708
          if (!d->symver && d->literal)
5709
            {
5710
              const char *verstr, *name;
5711
              size_t namelen, verlen, newlen;
5712
              char *newname, *p;
5713
              struct elf_link_hash_entry *newh;
5714
 
5715
              name = d->pattern;
5716
              namelen = strlen (name);
5717
              verstr = t->name;
5718
              verlen = strlen (verstr);
5719
              newlen = namelen + verlen + 3;
5720
 
5721
              newname = (char *) bfd_malloc (newlen);
5722
              if (newname == NULL)
5723
                return FALSE;
5724
              memcpy (newname, name, namelen);
5725
 
5726
              /* Check the hidden versioned definition.  */
5727
              p = newname + namelen;
5728
              *p++ = ELF_VER_CHR;
5729
              memcpy (p, verstr, verlen + 1);
5730
              newh = elf_link_hash_lookup (elf_hash_table (info),
5731
                                           newname, FALSE, FALSE,
5732
                                           FALSE);
5733
              if (newh == NULL
5734
                  || (newh->root.type != bfd_link_hash_defined
5735
                      && newh->root.type != bfd_link_hash_defweak))
5736
                {
5737
                  /* Check the default versioned definition.  */
5738
                  *p++ = ELF_VER_CHR;
5739
                  memcpy (p, verstr, verlen + 1);
5740
                  newh = elf_link_hash_lookup (elf_hash_table (info),
5741
                                               newname, FALSE, FALSE,
5742
                                               FALSE);
5743
                }
5744
              free (newname);
5745
 
5746
              /* Mark this version if there is a definition and it is
5747
                 not defined in a shared object.  */
5748
              if (newh != NULL
5749
                  && !newh->def_dynamic
5750
                  && (newh->root.type == bfd_link_hash_defined
5751
                      || newh->root.type == bfd_link_hash_defweak))
5752
                d->symver = 1;
5753
            }
5754
 
5755
      /* Attach all the symbols to their version information.  */
5756
      asvinfo.info = info;
5757
      asvinfo.verdefs = verdefs;
5758
      asvinfo.failed = FALSE;
5759
 
5760
      elf_link_hash_traverse (elf_hash_table (info),
5761
                              _bfd_elf_link_assign_sym_version,
5762
                              &asvinfo);
5763
      if (asvinfo.failed)
5764
        return FALSE;
5765
 
5766
      if (!info->allow_undefined_version)
5767
        {
5768
          /* Check if all global versions have a definition.  */
5769
          all_defined = TRUE;
5770
          for (t = verdefs; t != NULL; t = t->next)
5771
            for (d = t->globals.list; d != NULL; d = d->next)
5772
              if (d->literal && !d->symver && !d->script)
5773
                {
5774
                  (*_bfd_error_handler)
5775
                    (_("%s: undefined version: %s"),
5776
                     d->pattern, t->name);
5777
                  all_defined = FALSE;
5778
                }
5779
 
5780
          if (!all_defined)
5781
            {
5782
              bfd_set_error (bfd_error_bad_value);
5783
              return FALSE;
5784
            }
5785
        }
5786
 
5787
      /* Find all symbols which were defined in a dynamic object and make
5788
         the backend pick a reasonable value for them.  */
5789
      elf_link_hash_traverse (elf_hash_table (info),
5790
                              _bfd_elf_adjust_dynamic_symbol,
5791
                              &eif);
5792
      if (eif.failed)
5793
        return FALSE;
5794
 
5795
      /* Add some entries to the .dynamic section.  We fill in some of the
5796
         values later, in bfd_elf_final_link, but we must add the entries
5797
         now so that we know the final size of the .dynamic section.  */
5798
 
5799
      /* If there are initialization and/or finalization functions to
5800
         call then add the corresponding DT_INIT/DT_FINI entries.  */
5801
      h = (info->init_function
5802
           ? elf_link_hash_lookup (elf_hash_table (info),
5803
                                   info->init_function, FALSE,
5804
                                   FALSE, FALSE)
5805
           : NULL);
5806
      if (h != NULL
5807
          && (h->ref_regular
5808
              || h->def_regular))
5809
        {
5810
          if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
5811
            return FALSE;
5812
        }
5813
      h = (info->fini_function
5814
           ? elf_link_hash_lookup (elf_hash_table (info),
5815
                                   info->fini_function, FALSE,
5816
                                   FALSE, FALSE)
5817
           : NULL);
5818
      if (h != NULL
5819
          && (h->ref_regular
5820
              || h->def_regular))
5821
        {
5822
          if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
5823
            return FALSE;
5824
        }
5825
 
5826
      s = bfd_get_section_by_name (output_bfd, ".preinit_array");
5827
      if (s != NULL && s->linker_has_input)
5828
        {
5829
          /* DT_PREINIT_ARRAY is not allowed in shared library.  */
5830
          if (! info->executable)
5831
            {
5832
              bfd *sub;
5833
              asection *o;
5834
 
5835
              for (sub = info->input_bfds; sub != NULL;
5836
                   sub = sub->link_next)
5837
                if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
5838
                  for (o = sub->sections; o != NULL; o = o->next)
5839
                    if (elf_section_data (o)->this_hdr.sh_type
5840
                        == SHT_PREINIT_ARRAY)
5841
                      {
5842
                        (*_bfd_error_handler)
5843
                          (_("%B: .preinit_array section is not allowed in DSO"),
5844
                           sub);
5845
                        break;
5846
                      }
5847
 
5848
              bfd_set_error (bfd_error_nonrepresentable_section);
5849
              return FALSE;
5850
            }
5851
 
5852
          if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
5853
              || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
5854
            return FALSE;
5855
        }
5856
      s = bfd_get_section_by_name (output_bfd, ".init_array");
5857
      if (s != NULL && s->linker_has_input)
5858
        {
5859
          if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
5860
              || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
5861
            return FALSE;
5862
        }
5863
      s = bfd_get_section_by_name (output_bfd, ".fini_array");
5864
      if (s != NULL && s->linker_has_input)
5865
        {
5866
          if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
5867
              || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
5868
            return FALSE;
5869
        }
5870
 
5871
      dynstr = bfd_get_section_by_name (dynobj, ".dynstr");
5872
      /* If .dynstr is excluded from the link, we don't want any of
5873
         these tags.  Strictly, we should be checking each section
5874
         individually;  This quick check covers for the case where
5875
         someone does a /DISCARD/ : { *(*) }.  */
5876
      if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
5877
        {
5878
          bfd_size_type strsize;
5879
 
5880
          strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5881
          if ((info->emit_hash
5882
               && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
5883
              || (info->emit_gnu_hash
5884
                  && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
5885
              || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
5886
              || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
5887
              || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
5888
              || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
5889
                                              bed->s->sizeof_sym))
5890
            return FALSE;
5891
        }
5892
    }
5893
 
5894
  /* The backend must work out the sizes of all the other dynamic
5895
     sections.  */
5896
  if (bed->elf_backend_size_dynamic_sections
5897
      && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
5898
    return FALSE;
5899
 
5900
  if (elf_hash_table (info)->dynamic_sections_created)
5901
    {
5902
      unsigned long section_sym_count;
5903
      asection *s;
5904
 
5905
      /* Set up the version definition section.  */
5906
      s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
5907
      BFD_ASSERT (s != NULL);
5908
 
5909
      /* We may have created additional version definitions if we are
5910
         just linking a regular application.  */
5911
      verdefs = asvinfo.verdefs;
5912
 
5913
      /* Skip anonymous version tag.  */
5914
      if (verdefs != NULL && verdefs->vernum == 0)
5915
        verdefs = verdefs->next;
5916
 
5917
      if (verdefs == NULL && !info->create_default_symver)
5918
        s->flags |= SEC_EXCLUDE;
5919
      else
5920
        {
5921
          unsigned int cdefs;
5922
          bfd_size_type size;
5923
          struct bfd_elf_version_tree *t;
5924
          bfd_byte *p;
5925
          Elf_Internal_Verdef def;
5926
          Elf_Internal_Verdaux defaux;
5927
          struct bfd_link_hash_entry *bh;
5928
          struct elf_link_hash_entry *h;
5929
          const char *name;
5930
 
5931
          cdefs = 0;
5932
          size = 0;
5933
 
5934
          /* Make space for the base version.  */
5935
          size += sizeof (Elf_External_Verdef);
5936
          size += sizeof (Elf_External_Verdaux);
5937
          ++cdefs;
5938
 
5939
          /* Make space for the default version.  */
5940
          if (info->create_default_symver)
5941
            {
5942
              size += sizeof (Elf_External_Verdef);
5943
              ++cdefs;
5944
            }
5945
 
5946
          for (t = verdefs; t != NULL; t = t->next)
5947
            {
5948
              struct bfd_elf_version_deps *n;
5949
 
5950
              /* Don't emit base version twice.  */
5951
              if (t->vernum == 0)
5952
                continue;
5953
 
5954
              size += sizeof (Elf_External_Verdef);
5955
              size += sizeof (Elf_External_Verdaux);
5956
              ++cdefs;
5957
 
5958
              for (n = t->deps; n != NULL; n = n->next)
5959
                size += sizeof (Elf_External_Verdaux);
5960
            }
5961
 
5962
          s->size = size;
5963
          s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
5964
          if (s->contents == NULL && s->size != 0)
5965
            return FALSE;
5966
 
5967
          /* Fill in the version definition section.  */
5968
 
5969
          p = s->contents;
5970
 
5971
          def.vd_version = VER_DEF_CURRENT;
5972
          def.vd_flags = VER_FLG_BASE;
5973
          def.vd_ndx = 1;
5974
          def.vd_cnt = 1;
5975
          if (info->create_default_symver)
5976
            {
5977
              def.vd_aux = 2 * sizeof (Elf_External_Verdef);
5978
              def.vd_next = sizeof (Elf_External_Verdef);
5979
            }
5980
          else
5981
            {
5982
              def.vd_aux = sizeof (Elf_External_Verdef);
5983
              def.vd_next = (sizeof (Elf_External_Verdef)
5984
                             + sizeof (Elf_External_Verdaux));
5985
            }
5986
 
5987
          if (soname_indx != (bfd_size_type) -1)
5988
            {
5989
              _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
5990
                                      soname_indx);
5991
              def.vd_hash = bfd_elf_hash (soname);
5992
              defaux.vda_name = soname_indx;
5993
              name = soname;
5994
            }
5995
          else
5996
            {
5997
              bfd_size_type indx;
5998
 
5999
              name = lbasename (output_bfd->filename);
6000
              def.vd_hash = bfd_elf_hash (name);
6001
              indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6002
                                          name, FALSE);
6003
              if (indx == (bfd_size_type) -1)
6004
                return FALSE;
6005
              defaux.vda_name = indx;
6006
            }
6007
          defaux.vda_next = 0;
6008
 
6009
          _bfd_elf_swap_verdef_out (output_bfd, &def,
6010
                                    (Elf_External_Verdef *) p);
6011
          p += sizeof (Elf_External_Verdef);
6012
          if (info->create_default_symver)
6013
            {
6014
              /* Add a symbol representing this version.  */
6015
              bh = NULL;
6016
              if (! (_bfd_generic_link_add_one_symbol
6017
                     (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6018
                      0, NULL, FALSE,
6019
                      get_elf_backend_data (dynobj)->collect, &bh)))
6020
                return FALSE;
6021
              h = (struct elf_link_hash_entry *) bh;
6022
              h->non_elf = 0;
6023
              h->def_regular = 1;
6024
              h->type = STT_OBJECT;
6025
              h->verinfo.vertree = NULL;
6026
 
6027
              if (! bfd_elf_link_record_dynamic_symbol (info, h))
6028
                return FALSE;
6029
 
6030
              /* Create a duplicate of the base version with the same
6031
                 aux block, but different flags.  */
6032
              def.vd_flags = 0;
6033
              def.vd_ndx = 2;
6034
              def.vd_aux = sizeof (Elf_External_Verdef);
6035
              if (verdefs)
6036
                def.vd_next = (sizeof (Elf_External_Verdef)
6037
                               + sizeof (Elf_External_Verdaux));
6038
              else
6039
                def.vd_next = 0;
6040
              _bfd_elf_swap_verdef_out (output_bfd, &def,
6041
                                        (Elf_External_Verdef *) p);
6042
              p += sizeof (Elf_External_Verdef);
6043
            }
6044
          _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6045
                                     (Elf_External_Verdaux *) p);
6046
          p += sizeof (Elf_External_Verdaux);
6047
 
6048
          for (t = verdefs; t != NULL; t = t->next)
6049
            {
6050
              unsigned int cdeps;
6051
              struct bfd_elf_version_deps *n;
6052
 
6053
              /* Don't emit the base version twice.  */
6054
              if (t->vernum == 0)
6055
                continue;
6056
 
6057
              cdeps = 0;
6058
              for (n = t->deps; n != NULL; n = n->next)
6059
                ++cdeps;
6060
 
6061
              /* Add a symbol representing this version.  */
6062
              bh = NULL;
6063
              if (! (_bfd_generic_link_add_one_symbol
6064
                     (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6065
                      0, NULL, FALSE,
6066
                      get_elf_backend_data (dynobj)->collect, &bh)))
6067
                return FALSE;
6068
              h = (struct elf_link_hash_entry *) bh;
6069
              h->non_elf = 0;
6070
              h->def_regular = 1;
6071
              h->type = STT_OBJECT;
6072
              h->verinfo.vertree = t;
6073
 
6074
              if (! bfd_elf_link_record_dynamic_symbol (info, h))
6075
                return FALSE;
6076
 
6077
              def.vd_version = VER_DEF_CURRENT;
6078
              def.vd_flags = 0;
6079
              if (t->globals.list == NULL
6080
                  && t->locals.list == NULL
6081
                  && ! t->used)
6082
                def.vd_flags |= VER_FLG_WEAK;
6083
              def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
6084
              def.vd_cnt = cdeps + 1;
6085
              def.vd_hash = bfd_elf_hash (t->name);
6086
              def.vd_aux = sizeof (Elf_External_Verdef);
6087
              def.vd_next = 0;
6088
 
6089
              /* If a basever node is next, it *must* be the last node in
6090
                 the chain, otherwise Verdef construction breaks.  */
6091
              if (t->next != NULL && t->next->vernum == 0)
6092
                BFD_ASSERT (t->next->next == NULL);
6093
 
6094
              if (t->next != NULL && t->next->vernum != 0)
6095
                def.vd_next = (sizeof (Elf_External_Verdef)
6096
                               + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6097
 
6098
              _bfd_elf_swap_verdef_out (output_bfd, &def,
6099
                                        (Elf_External_Verdef *) p);
6100
              p += sizeof (Elf_External_Verdef);
6101
 
6102
              defaux.vda_name = h->dynstr_index;
6103
              _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6104
                                      h->dynstr_index);
6105
              defaux.vda_next = 0;
6106
              if (t->deps != NULL)
6107
                defaux.vda_next = sizeof (Elf_External_Verdaux);
6108
              t->name_indx = defaux.vda_name;
6109
 
6110
              _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6111
                                         (Elf_External_Verdaux *) p);
6112
              p += sizeof (Elf_External_Verdaux);
6113
 
6114
              for (n = t->deps; n != NULL; n = n->next)
6115
                {
6116
                  if (n->version_needed == NULL)
6117
                    {
6118
                      /* This can happen if there was an error in the
6119
                         version script.  */
6120
                      defaux.vda_name = 0;
6121
                    }
6122
                  else
6123
                    {
6124
                      defaux.vda_name = n->version_needed->name_indx;
6125
                      _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6126
                                              defaux.vda_name);
6127
                    }
6128
                  if (n->next == NULL)
6129
                    defaux.vda_next = 0;
6130
                  else
6131
                    defaux.vda_next = sizeof (Elf_External_Verdaux);
6132
 
6133
                  _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6134
                                             (Elf_External_Verdaux *) p);
6135
                  p += sizeof (Elf_External_Verdaux);
6136
                }
6137
            }
6138
 
6139
          if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
6140
              || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
6141
            return FALSE;
6142
 
6143
          elf_tdata (output_bfd)->cverdefs = cdefs;
6144
        }
6145
 
6146
      if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
6147
        {
6148
          if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
6149
            return FALSE;
6150
        }
6151
      else if (info->flags & DF_BIND_NOW)
6152
        {
6153
          if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
6154
            return FALSE;
6155
        }
6156
 
6157
      if (info->flags_1)
6158
        {
6159
          if (info->executable)
6160
            info->flags_1 &= ~ (DF_1_INITFIRST
6161
                                | DF_1_NODELETE
6162
                                | DF_1_NOOPEN);
6163
          if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
6164
            return FALSE;
6165
        }
6166
 
6167
      /* Work out the size of the version reference section.  */
6168
 
6169
      s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
6170
      BFD_ASSERT (s != NULL);
6171
      {
6172
        struct elf_find_verdep_info sinfo;
6173
 
6174
        sinfo.info = info;
6175
        sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6176
        if (sinfo.vers == 0)
6177
          sinfo.vers = 1;
6178
        sinfo.failed = FALSE;
6179
 
6180
        elf_link_hash_traverse (elf_hash_table (info),
6181
                                _bfd_elf_link_find_version_dependencies,
6182
                                &sinfo);
6183
        if (sinfo.failed)
6184
          return FALSE;
6185
 
6186
        if (elf_tdata (output_bfd)->verref == NULL)
6187
          s->flags |= SEC_EXCLUDE;
6188
        else
6189
          {
6190
            Elf_Internal_Verneed *t;
6191
            unsigned int size;
6192
            unsigned int crefs;
6193
            bfd_byte *p;
6194
 
6195
            /* Build the version dependency section.  */
6196
            size = 0;
6197
            crefs = 0;
6198
            for (t = elf_tdata (output_bfd)->verref;
6199
                 t != NULL;
6200
                 t = t->vn_nextref)
6201
              {
6202
                Elf_Internal_Vernaux *a;
6203
 
6204
                size += sizeof (Elf_External_Verneed);
6205
                ++crefs;
6206
                for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6207
                  size += sizeof (Elf_External_Vernaux);
6208
              }
6209
 
6210
            s->size = size;
6211
            s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6212
            if (s->contents == NULL)
6213
              return FALSE;
6214
 
6215
            p = s->contents;
6216
            for (t = elf_tdata (output_bfd)->verref;
6217
                 t != NULL;
6218
                 t = t->vn_nextref)
6219
              {
6220
                unsigned int caux;
6221
                Elf_Internal_Vernaux *a;
6222
                bfd_size_type indx;
6223
 
6224
                caux = 0;
6225
                for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6226
                  ++caux;
6227
 
6228
                t->vn_version = VER_NEED_CURRENT;
6229
                t->vn_cnt = caux;
6230
                indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6231
                                            elf_dt_name (t->vn_bfd) != NULL
6232
                                            ? elf_dt_name (t->vn_bfd)
6233
                                            : lbasename (t->vn_bfd->filename),
6234
                                            FALSE);
6235
                if (indx == (bfd_size_type) -1)
6236
                  return FALSE;
6237
                t->vn_file = indx;
6238
                t->vn_aux = sizeof (Elf_External_Verneed);
6239
                if (t->vn_nextref == NULL)
6240
                  t->vn_next = 0;
6241
                else
6242
                  t->vn_next = (sizeof (Elf_External_Verneed)
6243
                                + caux * sizeof (Elf_External_Vernaux));
6244
 
6245
                _bfd_elf_swap_verneed_out (output_bfd, t,
6246
                                           (Elf_External_Verneed *) p);
6247
                p += sizeof (Elf_External_Verneed);
6248
 
6249
                for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6250
                  {
6251
                    a->vna_hash = bfd_elf_hash (a->vna_nodename);
6252
                    indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6253
                                                a->vna_nodename, FALSE);
6254
                    if (indx == (bfd_size_type) -1)
6255
                      return FALSE;
6256
                    a->vna_name = indx;
6257
                    if (a->vna_nextptr == NULL)
6258
                      a->vna_next = 0;
6259
                    else
6260
                      a->vna_next = sizeof (Elf_External_Vernaux);
6261
 
6262
                    _bfd_elf_swap_vernaux_out (output_bfd, a,
6263
                                               (Elf_External_Vernaux *) p);
6264
                    p += sizeof (Elf_External_Vernaux);
6265
                  }
6266
              }
6267
 
6268
            if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
6269
                || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
6270
              return FALSE;
6271
 
6272
            elf_tdata (output_bfd)->cverrefs = crefs;
6273
          }
6274
      }
6275
 
6276
      if ((elf_tdata (output_bfd)->cverrefs == 0
6277
           && elf_tdata (output_bfd)->cverdefs == 0)
6278
          || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6279
                                             &section_sym_count) == 0)
6280
        {
6281
          s = bfd_get_section_by_name (dynobj, ".gnu.version");
6282
          s->flags |= SEC_EXCLUDE;
6283
        }
6284
    }
6285
  return TRUE;
6286
}
6287
 
6288
/* Find the first non-excluded output section.  We'll use its
6289
   section symbol for some emitted relocs.  */
6290
void
6291
_bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
6292
{
6293
  asection *s;
6294
 
6295
  for (s = output_bfd->sections; s != NULL; s = s->next)
6296
    if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
6297
        && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6298
      {
6299
        elf_hash_table (info)->text_index_section = s;
6300
        break;
6301
      }
6302
}
6303
 
6304
/* Find two non-excluded output sections, one for code, one for data.
6305
   We'll use their section symbols for some emitted relocs.  */
6306
void
6307
_bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
6308
{
6309
  asection *s;
6310
 
6311
  /* Data first, since setting text_index_section changes
6312
     _bfd_elf_link_omit_section_dynsym.  */
6313
  for (s = output_bfd->sections; s != NULL; s = s->next)
6314
    if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
6315
        && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6316
      {
6317
        elf_hash_table (info)->data_index_section = s;
6318
        break;
6319
      }
6320
 
6321
  for (s = output_bfd->sections; s != NULL; s = s->next)
6322
    if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
6323
         == (SEC_ALLOC | SEC_READONLY))
6324
        && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6325
      {
6326
        elf_hash_table (info)->text_index_section = s;
6327
        break;
6328
      }
6329
 
6330
  if (elf_hash_table (info)->text_index_section == NULL)
6331
    elf_hash_table (info)->text_index_section
6332
      = elf_hash_table (info)->data_index_section;
6333
}
6334
 
6335
bfd_boolean
6336
bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
6337
{
6338
  const struct elf_backend_data *bed;
6339
 
6340
  if (!is_elf_hash_table (info->hash))
6341
    return TRUE;
6342
 
6343
  bed = get_elf_backend_data (output_bfd);
6344
  (*bed->elf_backend_init_index_section) (output_bfd, info);
6345
 
6346
  if (elf_hash_table (info)->dynamic_sections_created)
6347
    {
6348
      bfd *dynobj;
6349
      asection *s;
6350
      bfd_size_type dynsymcount;
6351
      unsigned long section_sym_count;
6352
      unsigned int dtagcount;
6353
 
6354
      dynobj = elf_hash_table (info)->dynobj;
6355
 
6356
      /* Assign dynsym indicies.  In a shared library we generate a
6357
         section symbol for each output section, which come first.
6358
         Next come all of the back-end allocated local dynamic syms,
6359
         followed by the rest of the global symbols.  */
6360
 
6361
      dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6362
                                                    &section_sym_count);
6363
 
6364
      /* Work out the size of the symbol version section.  */
6365
      s = bfd_get_section_by_name (dynobj, ".gnu.version");
6366
      BFD_ASSERT (s != NULL);
6367
      if (dynsymcount != 0
6368
          && (s->flags & SEC_EXCLUDE) == 0)
6369
        {
6370
          s->size = dynsymcount * sizeof (Elf_External_Versym);
6371
          s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6372
          if (s->contents == NULL)
6373
            return FALSE;
6374
 
6375
          if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
6376
            return FALSE;
6377
        }
6378
 
6379
      /* Set the size of the .dynsym and .hash sections.  We counted
6380
         the number of dynamic symbols in elf_link_add_object_symbols.
6381
         We will build the contents of .dynsym and .hash when we build
6382
         the final symbol table, because until then we do not know the
6383
         correct value to give the symbols.  We built the .dynstr
6384
         section as we went along in elf_link_add_object_symbols.  */
6385
      s = bfd_get_section_by_name (dynobj, ".dynsym");
6386
      BFD_ASSERT (s != NULL);
6387
      s->size = dynsymcount * bed->s->sizeof_sym;
6388
 
6389
      if (dynsymcount != 0)
6390
        {
6391
          s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6392
          if (s->contents == NULL)
6393
            return FALSE;
6394
 
6395
          /* The first entry in .dynsym is a dummy symbol.
6396
             Clear all the section syms, in case we don't output them all.  */
6397
          ++section_sym_count;
6398
          memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
6399
        }
6400
 
6401
      elf_hash_table (info)->bucketcount = 0;
6402
 
6403
      /* Compute the size of the hashing table.  As a side effect this
6404
         computes the hash values for all the names we export.  */
6405
      if (info->emit_hash)
6406
        {
6407
          unsigned long int *hashcodes;
6408
          struct hash_codes_info hashinf;
6409
          bfd_size_type amt;
6410
          unsigned long int nsyms;
6411
          size_t bucketcount;
6412
          size_t hash_entry_size;
6413
 
6414
          /* Compute the hash values for all exported symbols.  At the same
6415
             time store the values in an array so that we could use them for
6416
             optimizations.  */
6417
          amt = dynsymcount * sizeof (unsigned long int);
6418
          hashcodes = (unsigned long int *) bfd_malloc (amt);
6419
          if (hashcodes == NULL)
6420
            return FALSE;
6421
          hashinf.hashcodes = hashcodes;
6422
          hashinf.error = FALSE;
6423
 
6424
          /* Put all hash values in HASHCODES.  */
6425
          elf_link_hash_traverse (elf_hash_table (info),
6426
                                  elf_collect_hash_codes, &hashinf);
6427
          if (hashinf.error)
6428
            {
6429
              free (hashcodes);
6430
              return FALSE;
6431
            }
6432
 
6433
          nsyms = hashinf.hashcodes - hashcodes;
6434
          bucketcount
6435
            = compute_bucket_count (info, hashcodes, nsyms, 0);
6436
          free (hashcodes);
6437
 
6438
          if (bucketcount == 0)
6439
            return FALSE;
6440
 
6441
          elf_hash_table (info)->bucketcount = bucketcount;
6442
 
6443
          s = bfd_get_section_by_name (dynobj, ".hash");
6444
          BFD_ASSERT (s != NULL);
6445
          hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
6446
          s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
6447
          s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6448
          if (s->contents == NULL)
6449
            return FALSE;
6450
 
6451
          bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
6452
          bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
6453
                   s->contents + hash_entry_size);
6454
        }
6455
 
6456
      if (info->emit_gnu_hash)
6457
        {
6458
          size_t i, cnt;
6459
          unsigned char *contents;
6460
          struct collect_gnu_hash_codes cinfo;
6461
          bfd_size_type amt;
6462
          size_t bucketcount;
6463
 
6464
          memset (&cinfo, 0, sizeof (cinfo));
6465
 
6466
          /* Compute the hash values for all exported symbols.  At the same
6467
             time store the values in an array so that we could use them for
6468
             optimizations.  */
6469
          amt = dynsymcount * 2 * sizeof (unsigned long int);
6470
          cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
6471
          if (cinfo.hashcodes == NULL)
6472
            return FALSE;
6473
 
6474
          cinfo.hashval = cinfo.hashcodes + dynsymcount;
6475
          cinfo.min_dynindx = -1;
6476
          cinfo.output_bfd = output_bfd;
6477
          cinfo.bed = bed;
6478
 
6479
          /* Put all hash values in HASHCODES.  */
6480
          elf_link_hash_traverse (elf_hash_table (info),
6481
                                  elf_collect_gnu_hash_codes, &cinfo);
6482
          if (cinfo.error)
6483
            {
6484
              free (cinfo.hashcodes);
6485
              return FALSE;
6486
            }
6487
 
6488
          bucketcount
6489
            = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
6490
 
6491
          if (bucketcount == 0)
6492
            {
6493
              free (cinfo.hashcodes);
6494
              return FALSE;
6495
            }
6496
 
6497
          s = bfd_get_section_by_name (dynobj, ".gnu.hash");
6498
          BFD_ASSERT (s != NULL);
6499
 
6500
          if (cinfo.nsyms == 0)
6501
            {
6502
              /* Empty .gnu.hash section is special.  */
6503
              BFD_ASSERT (cinfo.min_dynindx == -1);
6504
              free (cinfo.hashcodes);
6505
              s->size = 5 * 4 + bed->s->arch_size / 8;
6506
              contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6507
              if (contents == NULL)
6508
                return FALSE;
6509
              s->contents = contents;
6510
              /* 1 empty bucket.  */
6511
              bfd_put_32 (output_bfd, 1, contents);
6512
              /* SYMIDX above the special symbol 0.  */
6513
              bfd_put_32 (output_bfd, 1, contents + 4);
6514
              /* Just one word for bitmask.  */
6515
              bfd_put_32 (output_bfd, 1, contents + 8);
6516
              /* Only hash fn bloom filter.  */
6517
              bfd_put_32 (output_bfd, 0, contents + 12);
6518
              /* No hashes are valid - empty bitmask.  */
6519
              bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
6520
              /* No hashes in the only bucket.  */
6521
              bfd_put_32 (output_bfd, 0,
6522
                          contents + 16 + bed->s->arch_size / 8);
6523
            }
6524
          else
6525
            {
6526
              unsigned long int maskwords, maskbitslog2;
6527
              BFD_ASSERT (cinfo.min_dynindx != -1);
6528
 
6529
              maskbitslog2 = bfd_log2 (cinfo.nsyms) + 1;
6530
              if (maskbitslog2 < 3)
6531
                maskbitslog2 = 5;
6532
              else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
6533
                maskbitslog2 = maskbitslog2 + 3;
6534
              else
6535
                maskbitslog2 = maskbitslog2 + 2;
6536
              if (bed->s->arch_size == 64)
6537
                {
6538
                  if (maskbitslog2 == 5)
6539
                    maskbitslog2 = 6;
6540
                  cinfo.shift1 = 6;
6541
                }
6542
              else
6543
                cinfo.shift1 = 5;
6544
              cinfo.mask = (1 << cinfo.shift1) - 1;
6545
              cinfo.shift2 = maskbitslog2;
6546
              cinfo.maskbits = 1 << maskbitslog2;
6547
              maskwords = 1 << (maskbitslog2 - cinfo.shift1);
6548
              amt = bucketcount * sizeof (unsigned long int) * 2;
6549
              amt += maskwords * sizeof (bfd_vma);
6550
              cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
6551
              if (cinfo.bitmask == NULL)
6552
                {
6553
                  free (cinfo.hashcodes);
6554
                  return FALSE;
6555
                }
6556
 
6557
              cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
6558
              cinfo.indx = cinfo.counts + bucketcount;
6559
              cinfo.symindx = dynsymcount - cinfo.nsyms;
6560
              memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
6561
 
6562
              /* Determine how often each hash bucket is used.  */
6563
              memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
6564
              for (i = 0; i < cinfo.nsyms; ++i)
6565
                ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
6566
 
6567
              for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
6568
                if (cinfo.counts[i] != 0)
6569
                  {
6570
                    cinfo.indx[i] = cnt;
6571
                    cnt += cinfo.counts[i];
6572
                  }
6573
              BFD_ASSERT (cnt == dynsymcount);
6574
              cinfo.bucketcount = bucketcount;
6575
              cinfo.local_indx = cinfo.min_dynindx;
6576
 
6577
              s->size = (4 + bucketcount + cinfo.nsyms) * 4;
6578
              s->size += cinfo.maskbits / 8;
6579
              contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6580
              if (contents == NULL)
6581
                {
6582
                  free (cinfo.bitmask);
6583
                  free (cinfo.hashcodes);
6584
                  return FALSE;
6585
                }
6586
 
6587
              s->contents = contents;
6588
              bfd_put_32 (output_bfd, bucketcount, contents);
6589
              bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
6590
              bfd_put_32 (output_bfd, maskwords, contents + 8);
6591
              bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
6592
              contents += 16 + cinfo.maskbits / 8;
6593
 
6594
              for (i = 0; i < bucketcount; ++i)
6595
                {
6596
                  if (cinfo.counts[i] == 0)
6597
                    bfd_put_32 (output_bfd, 0, contents);
6598
                  else
6599
                    bfd_put_32 (output_bfd, cinfo.indx[i], contents);
6600
                  contents += 4;
6601
                }
6602
 
6603
              cinfo.contents = contents;
6604
 
6605
              /* Renumber dynamic symbols, populate .gnu.hash section.  */
6606
              elf_link_hash_traverse (elf_hash_table (info),
6607
                                      elf_renumber_gnu_hash_syms, &cinfo);
6608
 
6609
              contents = s->contents + 16;
6610
              for (i = 0; i < maskwords; ++i)
6611
                {
6612
                  bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
6613
                           contents);
6614
                  contents += bed->s->arch_size / 8;
6615
                }
6616
 
6617
              free (cinfo.bitmask);
6618
              free (cinfo.hashcodes);
6619
            }
6620
        }
6621
 
6622
      s = bfd_get_section_by_name (dynobj, ".dynstr");
6623
      BFD_ASSERT (s != NULL);
6624
 
6625
      elf_finalize_dynstr (output_bfd, info);
6626
 
6627
      s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6628
 
6629
      for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
6630
        if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
6631
          return FALSE;
6632
    }
6633
 
6634
  return TRUE;
6635
}
6636
 
6637
/* Indicate that we are only retrieving symbol values from this
6638
   section.  */
6639
 
6640
void
6641
_bfd_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
6642
{
6643
  if (is_elf_hash_table (info->hash))
6644
    sec->sec_info_type = ELF_INFO_TYPE_JUST_SYMS;
6645
  _bfd_generic_link_just_syms (sec, info);
6646
}
6647
 
6648
/* Make sure sec_info_type is cleared if sec_info is cleared too.  */
6649
 
6650
static void
6651
merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
6652
                            asection *sec)
6653
{
6654
  BFD_ASSERT (sec->sec_info_type == ELF_INFO_TYPE_MERGE);
6655
  sec->sec_info_type = ELF_INFO_TYPE_NONE;
6656
}
6657
 
6658
/* Finish SHF_MERGE section merging.  */
6659
 
6660
bfd_boolean
6661
_bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info)
6662
{
6663
  bfd *ibfd;
6664
  asection *sec;
6665
 
6666
  if (!is_elf_hash_table (info->hash))
6667
    return FALSE;
6668
 
6669
  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
6670
    if ((ibfd->flags & DYNAMIC) == 0)
6671
      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
6672
        if ((sec->flags & SEC_MERGE) != 0
6673
            && !bfd_is_abs_section (sec->output_section))
6674
          {
6675
            struct bfd_elf_section_data *secdata;
6676
 
6677
            secdata = elf_section_data (sec);
6678
            if (! _bfd_add_merge_section (abfd,
6679
                                          &elf_hash_table (info)->merge_info,
6680
                                          sec, &secdata->sec_info))
6681
              return FALSE;
6682
            else if (secdata->sec_info)
6683
              sec->sec_info_type = ELF_INFO_TYPE_MERGE;
6684
          }
6685
 
6686
  if (elf_hash_table (info)->merge_info != NULL)
6687
    _bfd_merge_sections (abfd, info, elf_hash_table (info)->merge_info,
6688
                         merge_sections_remove_hook);
6689
  return TRUE;
6690
}
6691
 
6692
/* Create an entry in an ELF linker hash table.  */
6693
 
6694
struct bfd_hash_entry *
6695
_bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
6696
                            struct bfd_hash_table *table,
6697
                            const char *string)
6698
{
6699
  /* Allocate the structure if it has not already been allocated by a
6700
     subclass.  */
6701
  if (entry == NULL)
6702
    {
6703
      entry = (struct bfd_hash_entry *)
6704
          bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
6705
      if (entry == NULL)
6706
        return entry;
6707
    }
6708
 
6709
  /* Call the allocation method of the superclass.  */
6710
  entry = _bfd_link_hash_newfunc (entry, table, string);
6711
  if (entry != NULL)
6712
    {
6713
      struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
6714
      struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
6715
 
6716
      /* Set local fields.  */
6717
      ret->indx = -1;
6718
      ret->dynindx = -1;
6719
      ret->got = htab->init_got_refcount;
6720
      ret->plt = htab->init_plt_refcount;
6721
      memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
6722
                              - offsetof (struct elf_link_hash_entry, size)));
6723
      /* Assume that we have been called by a non-ELF symbol reader.
6724
         This flag is then reset by the code which reads an ELF input
6725
         file.  This ensures that a symbol created by a non-ELF symbol
6726
         reader will have the flag set correctly.  */
6727
      ret->non_elf = 1;
6728
    }
6729
 
6730
  return entry;
6731
}
6732
 
6733
/* Copy data from an indirect symbol to its direct symbol, hiding the
6734
   old indirect symbol.  Also used for copying flags to a weakdef.  */
6735
 
6736
void
6737
_bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
6738
                                  struct elf_link_hash_entry *dir,
6739
                                  struct elf_link_hash_entry *ind)
6740
{
6741
  struct elf_link_hash_table *htab;
6742
 
6743
  /* Copy down any references that we may have already seen to the
6744
     symbol which just became indirect.  */
6745
 
6746
  dir->ref_dynamic |= ind->ref_dynamic;
6747
  dir->ref_regular |= ind->ref_regular;
6748
  dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
6749
  dir->non_got_ref |= ind->non_got_ref;
6750
  dir->needs_plt |= ind->needs_plt;
6751
  dir->pointer_equality_needed |= ind->pointer_equality_needed;
6752
 
6753
  if (ind->root.type != bfd_link_hash_indirect)
6754
    return;
6755
 
6756
  /* Copy over the global and procedure linkage table refcount entries.
6757
     These may have been already set up by a check_relocs routine.  */
6758
  htab = elf_hash_table (info);
6759
  if (ind->got.refcount > htab->init_got_refcount.refcount)
6760
    {
6761
      if (dir->got.refcount < 0)
6762
        dir->got.refcount = 0;
6763
      dir->got.refcount += ind->got.refcount;
6764
      ind->got.refcount = htab->init_got_refcount.refcount;
6765
    }
6766
 
6767
  if (ind->plt.refcount > htab->init_plt_refcount.refcount)
6768
    {
6769
      if (dir->plt.refcount < 0)
6770
        dir->plt.refcount = 0;
6771
      dir->plt.refcount += ind->plt.refcount;
6772
      ind->plt.refcount = htab->init_plt_refcount.refcount;
6773
    }
6774
 
6775
  if (ind->dynindx != -1)
6776
    {
6777
      if (dir->dynindx != -1)
6778
        _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
6779
      dir->dynindx = ind->dynindx;
6780
      dir->dynstr_index = ind->dynstr_index;
6781
      ind->dynindx = -1;
6782
      ind->dynstr_index = 0;
6783
    }
6784
}
6785
 
6786
void
6787
_bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
6788
                                struct elf_link_hash_entry *h,
6789
                                bfd_boolean force_local)
6790
{
6791
  /* STT_GNU_IFUNC symbol must go through PLT.  */
6792
  if (h->type != STT_GNU_IFUNC)
6793
    {
6794
      h->plt = elf_hash_table (info)->init_plt_offset;
6795
      h->needs_plt = 0;
6796
    }
6797
  if (force_local)
6798
    {
6799
      h->forced_local = 1;
6800
      if (h->dynindx != -1)
6801
        {
6802
          h->dynindx = -1;
6803
          _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
6804
                                  h->dynstr_index);
6805
        }
6806
    }
6807
}
6808
 
6809
/* Initialize an ELF linker hash table.  */
6810
 
6811
bfd_boolean
6812
_bfd_elf_link_hash_table_init
6813
  (struct elf_link_hash_table *table,
6814
   bfd *abfd,
6815
   struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
6816
                                      struct bfd_hash_table *,
6817
                                      const char *),
6818
   unsigned int entsize,
6819
   enum elf_target_id target_id)
6820
{
6821
  bfd_boolean ret;
6822
  int can_refcount = get_elf_backend_data (abfd)->can_refcount;
6823
 
6824
  memset (table, 0, sizeof * table);
6825
  table->init_got_refcount.refcount = can_refcount - 1;
6826
  table->init_plt_refcount.refcount = can_refcount - 1;
6827
  table->init_got_offset.offset = -(bfd_vma) 1;
6828
  table->init_plt_offset.offset = -(bfd_vma) 1;
6829
  /* The first dynamic symbol is a dummy.  */
6830
  table->dynsymcount = 1;
6831
 
6832
  ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
6833
 
6834
  table->root.type = bfd_link_elf_hash_table;
6835
  table->hash_table_id = target_id;
6836
 
6837
  return ret;
6838
}
6839
 
6840
/* Create an ELF linker hash table.  */
6841
 
6842
struct bfd_link_hash_table *
6843
_bfd_elf_link_hash_table_create (bfd *abfd)
6844
{
6845
  struct elf_link_hash_table *ret;
6846
  bfd_size_type amt = sizeof (struct elf_link_hash_table);
6847
 
6848
  ret = (struct elf_link_hash_table *) bfd_malloc (amt);
6849
  if (ret == NULL)
6850
    return NULL;
6851
 
6852
  if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
6853
                                       sizeof (struct elf_link_hash_entry),
6854
                                       GENERIC_ELF_DATA))
6855
    {
6856
      free (ret);
6857
      return NULL;
6858
    }
6859
 
6860
  return &ret->root;
6861
}
6862
 
6863
/* This is a hook for the ELF emulation code in the generic linker to
6864
   tell the backend linker what file name to use for the DT_NEEDED
6865
   entry for a dynamic object.  */
6866
 
6867
void
6868
bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
6869
{
6870
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6871
      && bfd_get_format (abfd) == bfd_object)
6872
    elf_dt_name (abfd) = name;
6873
}
6874
 
6875
int
6876
bfd_elf_get_dyn_lib_class (bfd *abfd)
6877
{
6878
  int lib_class;
6879
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6880
      && bfd_get_format (abfd) == bfd_object)
6881
    lib_class = elf_dyn_lib_class (abfd);
6882
  else
6883
    lib_class = 0;
6884
  return lib_class;
6885
}
6886
 
6887
void
6888
bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
6889
{
6890
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6891
      && bfd_get_format (abfd) == bfd_object)
6892
    elf_dyn_lib_class (abfd) = lib_class;
6893
}
6894
 
6895
/* Get the list of DT_NEEDED entries for a link.  This is a hook for
6896
   the linker ELF emulation code.  */
6897
 
6898
struct bfd_link_needed_list *
6899
bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
6900
                         struct bfd_link_info *info)
6901
{
6902
  if (! is_elf_hash_table (info->hash))
6903
    return NULL;
6904
  return elf_hash_table (info)->needed;
6905
}
6906
 
6907
/* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
6908
   hook for the linker ELF emulation code.  */
6909
 
6910
struct bfd_link_needed_list *
6911
bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
6912
                          struct bfd_link_info *info)
6913
{
6914
  if (! is_elf_hash_table (info->hash))
6915
    return NULL;
6916
  return elf_hash_table (info)->runpath;
6917
}
6918
 
6919
/* Get the name actually used for a dynamic object for a link.  This
6920
   is the SONAME entry if there is one.  Otherwise, it is the string
6921
   passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
6922
 
6923
const char *
6924
bfd_elf_get_dt_soname (bfd *abfd)
6925
{
6926
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6927
      && bfd_get_format (abfd) == bfd_object)
6928
    return elf_dt_name (abfd);
6929
  return NULL;
6930
}
6931
 
6932
/* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
6933
   the ELF linker emulation code.  */
6934
 
6935
bfd_boolean
6936
bfd_elf_get_bfd_needed_list (bfd *abfd,
6937
                             struct bfd_link_needed_list **pneeded)
6938
{
6939
  asection *s;
6940
  bfd_byte *dynbuf = NULL;
6941
  unsigned int elfsec;
6942
  unsigned long shlink;
6943
  bfd_byte *extdyn, *extdynend;
6944
  size_t extdynsize;
6945
  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
6946
 
6947
  *pneeded = NULL;
6948
 
6949
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
6950
      || bfd_get_format (abfd) != bfd_object)
6951
    return TRUE;
6952
 
6953
  s = bfd_get_section_by_name (abfd, ".dynamic");
6954
  if (s == NULL || s->size == 0)
6955
    return TRUE;
6956
 
6957
  if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
6958
    goto error_return;
6959
 
6960
  elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
6961
  if (elfsec == SHN_BAD)
6962
    goto error_return;
6963
 
6964
  shlink = elf_elfsections (abfd)[elfsec]->sh_link;
6965
 
6966
  extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
6967
  swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
6968
 
6969
  extdyn = dynbuf;
6970
  extdynend = extdyn + s->size;
6971
  for (; extdyn < extdynend; extdyn += extdynsize)
6972
    {
6973
      Elf_Internal_Dyn dyn;
6974
 
6975
      (*swap_dyn_in) (abfd, extdyn, &dyn);
6976
 
6977
      if (dyn.d_tag == DT_NULL)
6978
        break;
6979
 
6980
      if (dyn.d_tag == DT_NEEDED)
6981
        {
6982
          const char *string;
6983
          struct bfd_link_needed_list *l;
6984
          unsigned int tagv = dyn.d_un.d_val;
6985
          bfd_size_type amt;
6986
 
6987
          string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
6988
          if (string == NULL)
6989
            goto error_return;
6990
 
6991
          amt = sizeof *l;
6992
          l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
6993
          if (l == NULL)
6994
            goto error_return;
6995
 
6996
          l->by = abfd;
6997
          l->name = string;
6998
          l->next = *pneeded;
6999
          *pneeded = l;
7000
        }
7001
    }
7002
 
7003
  free (dynbuf);
7004
 
7005
  return TRUE;
7006
 
7007
 error_return:
7008
  if (dynbuf != NULL)
7009
    free (dynbuf);
7010
  return FALSE;
7011
}
7012
 
7013
struct elf_symbuf_symbol
7014
{
7015
  unsigned long st_name;        /* Symbol name, index in string tbl */
7016
  unsigned char st_info;        /* Type and binding attributes */
7017
  unsigned char st_other;       /* Visibilty, and target specific */
7018
};
7019
 
7020
struct elf_symbuf_head
7021
{
7022
  struct elf_symbuf_symbol *ssym;
7023
  bfd_size_type count;
7024
  unsigned int st_shndx;
7025
};
7026
 
7027
struct elf_symbol
7028
{
7029
  union
7030
    {
7031
      Elf_Internal_Sym *isym;
7032
      struct elf_symbuf_symbol *ssym;
7033
    } u;
7034
  const char *name;
7035
};
7036
 
7037
/* Sort references to symbols by ascending section number.  */
7038
 
7039
static int
7040
elf_sort_elf_symbol (const void *arg1, const void *arg2)
7041
{
7042
  const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7043
  const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7044
 
7045
  return s1->st_shndx - s2->st_shndx;
7046
}
7047
 
7048
static int
7049
elf_sym_name_compare (const void *arg1, const void *arg2)
7050
{
7051
  const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7052
  const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7053
  return strcmp (s1->name, s2->name);
7054
}
7055
 
7056
static struct elf_symbuf_head *
7057
elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf)
7058
{
7059
  Elf_Internal_Sym **ind, **indbufend, **indbuf;
7060
  struct elf_symbuf_symbol *ssym;
7061
  struct elf_symbuf_head *ssymbuf, *ssymhead;
7062
  bfd_size_type i, shndx_count, total_size;
7063
 
7064
  indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7065
  if (indbuf == NULL)
7066
    return NULL;
7067
 
7068
  for (ind = indbuf, i = 0; i < symcount; i++)
7069
    if (isymbuf[i].st_shndx != SHN_UNDEF)
7070
      *ind++ = &isymbuf[i];
7071
  indbufend = ind;
7072
 
7073
  qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7074
         elf_sort_elf_symbol);
7075
 
7076
  shndx_count = 0;
7077
  if (indbufend > indbuf)
7078
    for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7079
      if (ind[0]->st_shndx != ind[1]->st_shndx)
7080
        shndx_count++;
7081
 
7082
  total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7083
                + (indbufend - indbuf) * sizeof (*ssym));
7084
  ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7085
  if (ssymbuf == NULL)
7086
    {
7087
      free (indbuf);
7088
      return NULL;
7089
    }
7090
 
7091
  ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7092
  ssymbuf->ssym = NULL;
7093
  ssymbuf->count = shndx_count;
7094
  ssymbuf->st_shndx = 0;
7095
  for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7096
    {
7097
      if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7098
        {
7099
          ssymhead++;
7100
          ssymhead->ssym = ssym;
7101
          ssymhead->count = 0;
7102
          ssymhead->st_shndx = (*ind)->st_shndx;
7103
        }
7104
      ssym->st_name = (*ind)->st_name;
7105
      ssym->st_info = (*ind)->st_info;
7106
      ssym->st_other = (*ind)->st_other;
7107
      ssymhead->count++;
7108
    }
7109
  BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count
7110
              && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7111
                  == total_size));
7112
 
7113
  free (indbuf);
7114
  return ssymbuf;
7115
}
7116
 
7117
/* Check if 2 sections define the same set of local and global
7118
   symbols.  */
7119
 
7120
static bfd_boolean
7121
bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7122
                                   struct bfd_link_info *info)
7123
{
7124
  bfd *bfd1, *bfd2;
7125
  const struct elf_backend_data *bed1, *bed2;
7126
  Elf_Internal_Shdr *hdr1, *hdr2;
7127
  bfd_size_type symcount1, symcount2;
7128
  Elf_Internal_Sym *isymbuf1, *isymbuf2;
7129
  struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7130
  Elf_Internal_Sym *isym, *isymend;
7131
  struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7132
  bfd_size_type count1, count2, i;
7133
  unsigned int shndx1, shndx2;
7134
  bfd_boolean result;
7135
 
7136
  bfd1 = sec1->owner;
7137
  bfd2 = sec2->owner;
7138
 
7139
  /* Both sections have to be in ELF.  */
7140
  if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7141
      || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7142
    return FALSE;
7143
 
7144
  if (elf_section_type (sec1) != elf_section_type (sec2))
7145
    return FALSE;
7146
 
7147
  shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7148
  shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7149
  if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7150
    return FALSE;
7151
 
7152
  bed1 = get_elf_backend_data (bfd1);
7153
  bed2 = get_elf_backend_data (bfd2);
7154
  hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7155
  symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7156
  hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7157
  symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7158
 
7159
  if (symcount1 == 0 || symcount2 == 0)
7160
    return FALSE;
7161
 
7162
  result = FALSE;
7163
  isymbuf1 = NULL;
7164
  isymbuf2 = NULL;
7165
  ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7166
  ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7167
 
7168
  if (ssymbuf1 == NULL)
7169
    {
7170
      isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7171
                                       NULL, NULL, NULL);
7172
      if (isymbuf1 == NULL)
7173
        goto done;
7174
 
7175
      if (!info->reduce_memory_overheads)
7176
        elf_tdata (bfd1)->symbuf = ssymbuf1
7177
          = elf_create_symbuf (symcount1, isymbuf1);
7178
    }
7179
 
7180
  if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7181
    {
7182
      isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7183
                                       NULL, NULL, NULL);
7184
      if (isymbuf2 == NULL)
7185
        goto done;
7186
 
7187
      if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7188
        elf_tdata (bfd2)->symbuf = ssymbuf2
7189
          = elf_create_symbuf (symcount2, isymbuf2);
7190
    }
7191
 
7192
  if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7193
    {
7194
      /* Optimized faster version.  */
7195
      bfd_size_type lo, hi, mid;
7196
      struct elf_symbol *symp;
7197
      struct elf_symbuf_symbol *ssym, *ssymend;
7198
 
7199
      lo = 0;
7200
      hi = ssymbuf1->count;
7201
      ssymbuf1++;
7202
      count1 = 0;
7203
      while (lo < hi)
7204
        {
7205
          mid = (lo + hi) / 2;
7206
          if (shndx1 < ssymbuf1[mid].st_shndx)
7207
            hi = mid;
7208
          else if (shndx1 > ssymbuf1[mid].st_shndx)
7209
            lo = mid + 1;
7210
          else
7211
            {
7212
              count1 = ssymbuf1[mid].count;
7213
              ssymbuf1 += mid;
7214
              break;
7215
            }
7216
        }
7217
 
7218
      lo = 0;
7219
      hi = ssymbuf2->count;
7220
      ssymbuf2++;
7221
      count2 = 0;
7222
      while (lo < hi)
7223
        {
7224
          mid = (lo + hi) / 2;
7225
          if (shndx2 < ssymbuf2[mid].st_shndx)
7226
            hi = mid;
7227
          else if (shndx2 > ssymbuf2[mid].st_shndx)
7228
            lo = mid + 1;
7229
          else
7230
            {
7231
              count2 = ssymbuf2[mid].count;
7232
              ssymbuf2 += mid;
7233
              break;
7234
            }
7235
        }
7236
 
7237
      if (count1 == 0 || count2 == 0 || count1 != count2)
7238
        goto done;
7239
 
7240
      symtable1 = (struct elf_symbol *)
7241
          bfd_malloc (count1 * sizeof (struct elf_symbol));
7242
      symtable2 = (struct elf_symbol *)
7243
          bfd_malloc (count2 * sizeof (struct elf_symbol));
7244
      if (symtable1 == NULL || symtable2 == NULL)
7245
        goto done;
7246
 
7247
      symp = symtable1;
7248
      for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7249
           ssym < ssymend; ssym++, symp++)
7250
        {
7251
          symp->u.ssym = ssym;
7252
          symp->name = bfd_elf_string_from_elf_section (bfd1,
7253
                                                        hdr1->sh_link,
7254
                                                        ssym->st_name);
7255
        }
7256
 
7257
      symp = symtable2;
7258
      for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
7259
           ssym < ssymend; ssym++, symp++)
7260
        {
7261
          symp->u.ssym = ssym;
7262
          symp->name = bfd_elf_string_from_elf_section (bfd2,
7263
                                                        hdr2->sh_link,
7264
                                                        ssym->st_name);
7265
        }
7266
 
7267
      /* Sort symbol by name.  */
7268
      qsort (symtable1, count1, sizeof (struct elf_symbol),
7269
             elf_sym_name_compare);
7270
      qsort (symtable2, count1, sizeof (struct elf_symbol),
7271
             elf_sym_name_compare);
7272
 
7273
      for (i = 0; i < count1; i++)
7274
        /* Two symbols must have the same binding, type and name.  */
7275
        if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
7276
            || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
7277
            || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7278
          goto done;
7279
 
7280
      result = TRUE;
7281
      goto done;
7282
    }
7283
 
7284
  symtable1 = (struct elf_symbol *)
7285
      bfd_malloc (symcount1 * sizeof (struct elf_symbol));
7286
  symtable2 = (struct elf_symbol *)
7287
      bfd_malloc (symcount2 * sizeof (struct elf_symbol));
7288
  if (symtable1 == NULL || symtable2 == NULL)
7289
    goto done;
7290
 
7291
  /* Count definitions in the section.  */
7292
  count1 = 0;
7293
  for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
7294
    if (isym->st_shndx == shndx1)
7295
      symtable1[count1++].u.isym = isym;
7296
 
7297
  count2 = 0;
7298
  for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
7299
    if (isym->st_shndx == shndx2)
7300
      symtable2[count2++].u.isym = isym;
7301
 
7302
  if (count1 == 0 || count2 == 0 || count1 != count2)
7303
    goto done;
7304
 
7305
  for (i = 0; i < count1; i++)
7306
    symtable1[i].name
7307
      = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
7308
                                         symtable1[i].u.isym->st_name);
7309
 
7310
  for (i = 0; i < count2; i++)
7311
    symtable2[i].name
7312
      = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
7313
                                         symtable2[i].u.isym->st_name);
7314
 
7315
  /* Sort symbol by name.  */
7316
  qsort (symtable1, count1, sizeof (struct elf_symbol),
7317
         elf_sym_name_compare);
7318
  qsort (symtable2, count1, sizeof (struct elf_symbol),
7319
         elf_sym_name_compare);
7320
 
7321
  for (i = 0; i < count1; i++)
7322
    /* Two symbols must have the same binding, type and name.  */
7323
    if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
7324
        || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
7325
        || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7326
      goto done;
7327
 
7328
  result = TRUE;
7329
 
7330
done:
7331
  if (symtable1)
7332
    free (symtable1);
7333
  if (symtable2)
7334
    free (symtable2);
7335
  if (isymbuf1)
7336
    free (isymbuf1);
7337
  if (isymbuf2)
7338
    free (isymbuf2);
7339
 
7340
  return result;
7341
}
7342
 
7343
/* Return TRUE if 2 section types are compatible.  */
7344
 
7345
bfd_boolean
7346
_bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
7347
                                 bfd *bbfd, const asection *bsec)
7348
{
7349
  if (asec == NULL
7350
      || bsec == NULL
7351
      || abfd->xvec->flavour != bfd_target_elf_flavour
7352
      || bbfd->xvec->flavour != bfd_target_elf_flavour)
7353
    return TRUE;
7354
 
7355
  return elf_section_type (asec) == elf_section_type (bsec);
7356
}
7357
 
7358
/* Final phase of ELF linker.  */
7359
 
7360
/* A structure we use to avoid passing large numbers of arguments.  */
7361
 
7362
struct elf_final_link_info
7363
{
7364
  /* General link information.  */
7365
  struct bfd_link_info *info;
7366
  /* Output BFD.  */
7367
  bfd *output_bfd;
7368
  /* Symbol string table.  */
7369
  struct bfd_strtab_hash *symstrtab;
7370
  /* .dynsym section.  */
7371
  asection *dynsym_sec;
7372
  /* .hash section.  */
7373
  asection *hash_sec;
7374
  /* symbol version section (.gnu.version).  */
7375
  asection *symver_sec;
7376
  /* Buffer large enough to hold contents of any section.  */
7377
  bfd_byte *contents;
7378
  /* Buffer large enough to hold external relocs of any section.  */
7379
  void *external_relocs;
7380
  /* Buffer large enough to hold internal relocs of any section.  */
7381
  Elf_Internal_Rela *internal_relocs;
7382
  /* Buffer large enough to hold external local symbols of any input
7383
     BFD.  */
7384
  bfd_byte *external_syms;
7385
  /* And a buffer for symbol section indices.  */
7386
  Elf_External_Sym_Shndx *locsym_shndx;
7387
  /* Buffer large enough to hold internal local symbols of any input
7388
     BFD.  */
7389
  Elf_Internal_Sym *internal_syms;
7390
  /* Array large enough to hold a symbol index for each local symbol
7391
     of any input BFD.  */
7392
  long *indices;
7393
  /* Array large enough to hold a section pointer for each local
7394
     symbol of any input BFD.  */
7395
  asection **sections;
7396
  /* Buffer to hold swapped out symbols.  */
7397
  bfd_byte *symbuf;
7398
  /* And one for symbol section indices.  */
7399
  Elf_External_Sym_Shndx *symshndxbuf;
7400
  /* Number of swapped out symbols in buffer.  */
7401
  size_t symbuf_count;
7402
  /* Number of symbols which fit in symbuf.  */
7403
  size_t symbuf_size;
7404
  /* And same for symshndxbuf.  */
7405
  size_t shndxbuf_size;
7406
};
7407
 
7408
/* This struct is used to pass information to elf_link_output_extsym.  */
7409
 
7410
struct elf_outext_info
7411
{
7412
  bfd_boolean failed;
7413
  bfd_boolean localsyms;
7414
  struct elf_final_link_info *finfo;
7415
};
7416
 
7417
 
7418
/* Support for evaluating a complex relocation.
7419
 
7420
   Complex relocations are generalized, self-describing relocations.  The
7421
   implementation of them consists of two parts: complex symbols, and the
7422
   relocations themselves.
7423
 
7424
   The relocations are use a reserved elf-wide relocation type code (R_RELC
7425
   external / BFD_RELOC_RELC internal) and an encoding of relocation field
7426
   information (start bit, end bit, word width, etc) into the addend.  This
7427
   information is extracted from CGEN-generated operand tables within gas.
7428
 
7429
   Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
7430
   internal) representing prefix-notation expressions, including but not
7431
   limited to those sorts of expressions normally encoded as addends in the
7432
   addend field.  The symbol mangling format is:
7433
 
7434
   <node> := <literal>
7435
          |  <unary-operator> ':' <node>
7436
          |  <binary-operator> ':' <node> ':' <node>
7437
          ;
7438
 
7439
   <literal> := 's' <digits=N> ':' <N character symbol name>
7440
             |  'S' <digits=N> ':' <N character section name>
7441
             |  '#' <hexdigits>
7442
             ;
7443
 
7444
   <binary-operator> := as in C
7445
   <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
7446
 
7447
static void
7448
set_symbol_value (bfd *bfd_with_globals,
7449
                  Elf_Internal_Sym *isymbuf,
7450
                  size_t locsymcount,
7451
                  size_t symidx,
7452
                  bfd_vma val)
7453
{
7454
  struct elf_link_hash_entry **sym_hashes;
7455
  struct elf_link_hash_entry *h;
7456
  size_t extsymoff = locsymcount;
7457
 
7458
  if (symidx < locsymcount)
7459
    {
7460
      Elf_Internal_Sym *sym;
7461
 
7462
      sym = isymbuf + symidx;
7463
      if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
7464
        {
7465
          /* It is a local symbol: move it to the
7466
             "absolute" section and give it a value.  */
7467
          sym->st_shndx = SHN_ABS;
7468
          sym->st_value = val;
7469
          return;
7470
        }
7471
      BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
7472
      extsymoff = 0;
7473
    }
7474
 
7475
  /* It is a global symbol: set its link type
7476
     to "defined" and give it a value.  */
7477
 
7478
  sym_hashes = elf_sym_hashes (bfd_with_globals);
7479
  h = sym_hashes [symidx - extsymoff];
7480
  while (h->root.type == bfd_link_hash_indirect
7481
         || h->root.type == bfd_link_hash_warning)
7482
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
7483
  h->root.type = bfd_link_hash_defined;
7484
  h->root.u.def.value = val;
7485
  h->root.u.def.section = bfd_abs_section_ptr;
7486
}
7487
 
7488
static bfd_boolean
7489
resolve_symbol (const char *name,
7490
                bfd *input_bfd,
7491
                struct elf_final_link_info *finfo,
7492
                bfd_vma *result,
7493
                Elf_Internal_Sym *isymbuf,
7494
                size_t locsymcount)
7495
{
7496
  Elf_Internal_Sym *sym;
7497
  struct bfd_link_hash_entry *global_entry;
7498
  const char *candidate = NULL;
7499
  Elf_Internal_Shdr *symtab_hdr;
7500
  size_t i;
7501
 
7502
  symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
7503
 
7504
  for (i = 0; i < locsymcount; ++ i)
7505
    {
7506
      sym = isymbuf + i;
7507
 
7508
      if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
7509
        continue;
7510
 
7511
      candidate = bfd_elf_string_from_elf_section (input_bfd,
7512
                                                   symtab_hdr->sh_link,
7513
                                                   sym->st_name);
7514
#ifdef DEBUG
7515
      printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
7516
              name, candidate, (unsigned long) sym->st_value);
7517
#endif
7518
      if (candidate && strcmp (candidate, name) == 0)
7519
        {
7520
          asection *sec = finfo->sections [i];
7521
 
7522
          *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
7523
          *result += sec->output_offset + sec->output_section->vma;
7524
#ifdef DEBUG
7525
          printf ("Found symbol with value %8.8lx\n",
7526
                  (unsigned long) *result);
7527
#endif
7528
          return TRUE;
7529
        }
7530
    }
7531
 
7532
  /* Hmm, haven't found it yet. perhaps it is a global.  */
7533
  global_entry = bfd_link_hash_lookup (finfo->info->hash, name,
7534
                                       FALSE, FALSE, TRUE);
7535
  if (!global_entry)
7536
    return FALSE;
7537
 
7538
  if (global_entry->type == bfd_link_hash_defined
7539
      || global_entry->type == bfd_link_hash_defweak)
7540
    {
7541
      *result = (global_entry->u.def.value
7542
                 + global_entry->u.def.section->output_section->vma
7543
                 + global_entry->u.def.section->output_offset);
7544
#ifdef DEBUG
7545
      printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
7546
              global_entry->root.string, (unsigned long) *result);
7547
#endif
7548
      return TRUE;
7549
    }
7550
 
7551
  return FALSE;
7552
}
7553
 
7554
static bfd_boolean
7555
resolve_section (const char *name,
7556
                 asection *sections,
7557
                 bfd_vma *result)
7558
{
7559
  asection *curr;
7560
  unsigned int len;
7561
 
7562
  for (curr = sections; curr; curr = curr->next)
7563
    if (strcmp (curr->name, name) == 0)
7564
      {
7565
        *result = curr->vma;
7566
        return TRUE;
7567
      }
7568
 
7569
  /* Hmm. still haven't found it. try pseudo-section names.  */
7570
  for (curr = sections; curr; curr = curr->next)
7571
    {
7572
      len = strlen (curr->name);
7573
      if (len > strlen (name))
7574
        continue;
7575
 
7576
      if (strncmp (curr->name, name, len) == 0)
7577
        {
7578
          if (strncmp (".end", name + len, 4) == 0)
7579
            {
7580
              *result = curr->vma + curr->size;
7581
              return TRUE;
7582
            }
7583
 
7584
          /* Insert more pseudo-section names here, if you like.  */
7585
        }
7586
    }
7587
 
7588
  return FALSE;
7589
}
7590
 
7591
static void
7592
undefined_reference (const char *reftype, const char *name)
7593
{
7594
  _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
7595
                      reftype, name);
7596
}
7597
 
7598
static bfd_boolean
7599
eval_symbol (bfd_vma *result,
7600
             const char **symp,
7601
             bfd *input_bfd,
7602
             struct elf_final_link_info *finfo,
7603
             bfd_vma dot,
7604
             Elf_Internal_Sym *isymbuf,
7605
             size_t locsymcount,
7606
             int signed_p)
7607
{
7608
  size_t len;
7609
  size_t symlen;
7610
  bfd_vma a;
7611
  bfd_vma b;
7612
  char symbuf[4096];
7613
  const char *sym = *symp;
7614
  const char *symend;
7615
  bfd_boolean symbol_is_section = FALSE;
7616
 
7617
  len = strlen (sym);
7618
  symend = sym + len;
7619
 
7620
  if (len < 1 || len > sizeof (symbuf))
7621
    {
7622
      bfd_set_error (bfd_error_invalid_operation);
7623
      return FALSE;
7624
    }
7625
 
7626
  switch (* sym)
7627
    {
7628
    case '.':
7629
      *result = dot;
7630
      *symp = sym + 1;
7631
      return TRUE;
7632
 
7633
    case '#':
7634
      ++sym;
7635
      *result = strtoul (sym, (char **) symp, 16);
7636
      return TRUE;
7637
 
7638
    case 'S':
7639
      symbol_is_section = TRUE;
7640
    case 's':
7641
      ++sym;
7642
      symlen = strtol (sym, (char **) symp, 10);
7643
      sym = *symp + 1; /* Skip the trailing ':'.  */
7644
 
7645
      if (symend < sym || symlen + 1 > sizeof (symbuf))
7646
        {
7647
          bfd_set_error (bfd_error_invalid_operation);
7648
          return FALSE;
7649
        }
7650
 
7651
      memcpy (symbuf, sym, symlen);
7652
      symbuf[symlen] = '\0';
7653
      *symp = sym + symlen;
7654
 
7655
      /* Is it always possible, with complex symbols, that gas "mis-guessed"
7656
         the symbol as a section, or vice-versa. so we're pretty liberal in our
7657
         interpretation here; section means "try section first", not "must be a
7658
         section", and likewise with symbol.  */
7659
 
7660
      if (symbol_is_section)
7661
        {
7662
          if (!resolve_section (symbuf, finfo->output_bfd->sections, result)
7663
              && !resolve_symbol (symbuf, input_bfd, finfo, result,
7664
                                  isymbuf, locsymcount))
7665
            {
7666
              undefined_reference ("section", symbuf);
7667
              return FALSE;
7668
            }
7669
        }
7670
      else
7671
        {
7672
          if (!resolve_symbol (symbuf, input_bfd, finfo, result,
7673
                               isymbuf, locsymcount)
7674
              && !resolve_section (symbuf, finfo->output_bfd->sections,
7675
                                   result))
7676
            {
7677
              undefined_reference ("symbol", symbuf);
7678
              return FALSE;
7679
            }
7680
        }
7681
 
7682
      return TRUE;
7683
 
7684
      /* All that remains are operators.  */
7685
 
7686
#define UNARY_OP(op)                                            \
7687
  if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7688
    {                                                           \
7689
      sym += strlen (#op);                                      \
7690
      if (*sym == ':')                                          \
7691
        ++sym;                                                  \
7692
      *symp = sym;                                              \
7693
      if (!eval_symbol (&a, symp, input_bfd, finfo, dot,        \
7694
                        isymbuf, locsymcount, signed_p))        \
7695
        return FALSE;                                           \
7696
      if (signed_p)                                             \
7697
        *result = op ((bfd_signed_vma) a);                      \
7698
      else                                                      \
7699
        *result = op a;                                         \
7700
      return TRUE;                                              \
7701
    }
7702
 
7703
#define BINARY_OP(op)                                           \
7704
  if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7705
    {                                                           \
7706
      sym += strlen (#op);                                      \
7707
      if (*sym == ':')                                          \
7708
        ++sym;                                                  \
7709
      *symp = sym;                                              \
7710
      if (!eval_symbol (&a, symp, input_bfd, finfo, dot,        \
7711
                        isymbuf, locsymcount, signed_p))        \
7712
        return FALSE;                                           \
7713
      ++*symp;                                                  \
7714
      if (!eval_symbol (&b, symp, input_bfd, finfo, dot,        \
7715
                        isymbuf, locsymcount, signed_p))        \
7716
        return FALSE;                                           \
7717
      if (signed_p)                                             \
7718
        *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
7719
      else                                                      \
7720
        *result = a op b;                                       \
7721
      return TRUE;                                              \
7722
    }
7723
 
7724
    default:
7725
      UNARY_OP  (0-);
7726
      BINARY_OP (<<);
7727
      BINARY_OP (>>);
7728
      BINARY_OP (==);
7729
      BINARY_OP (!=);
7730
      BINARY_OP (<=);
7731
      BINARY_OP (>=);
7732
      BINARY_OP (&&);
7733
      BINARY_OP (||);
7734
      UNARY_OP  (~);
7735
      UNARY_OP  (!);
7736
      BINARY_OP (*);
7737
      BINARY_OP (/);
7738
      BINARY_OP (%);
7739
      BINARY_OP (^);
7740
      BINARY_OP (|);
7741
      BINARY_OP (&);
7742
      BINARY_OP (+);
7743
      BINARY_OP (-);
7744
      BINARY_OP (<);
7745
      BINARY_OP (>);
7746
#undef UNARY_OP
7747
#undef BINARY_OP
7748
      _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
7749
      bfd_set_error (bfd_error_invalid_operation);
7750
      return FALSE;
7751
    }
7752
}
7753
 
7754
static void
7755
put_value (bfd_vma size,
7756
           unsigned long chunksz,
7757
           bfd *input_bfd,
7758
           bfd_vma x,
7759
           bfd_byte *location)
7760
{
7761
  location += (size - chunksz);
7762
 
7763
  for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8))
7764
    {
7765
      switch (chunksz)
7766
        {
7767
        default:
7768
        case 0:
7769
          abort ();
7770
        case 1:
7771
          bfd_put_8 (input_bfd, x, location);
7772
          break;
7773
        case 2:
7774
          bfd_put_16 (input_bfd, x, location);
7775
          break;
7776
        case 4:
7777
          bfd_put_32 (input_bfd, x, location);
7778
          break;
7779
        case 8:
7780
#ifdef BFD64
7781
          bfd_put_64 (input_bfd, x, location);
7782
#else
7783
          abort ();
7784
#endif
7785
          break;
7786
        }
7787
    }
7788
}
7789
 
7790
static bfd_vma
7791
get_value (bfd_vma size,
7792
           unsigned long chunksz,
7793
           bfd *input_bfd,
7794
           bfd_byte *location)
7795
{
7796
  bfd_vma x = 0;
7797
 
7798
  for (; size; size -= chunksz, location += chunksz)
7799
    {
7800
      switch (chunksz)
7801
        {
7802
        default:
7803
        case 0:
7804
          abort ();
7805
        case 1:
7806
          x = (x << (8 * chunksz)) | bfd_get_8 (input_bfd, location);
7807
          break;
7808
        case 2:
7809
          x = (x << (8 * chunksz)) | bfd_get_16 (input_bfd, location);
7810
          break;
7811
        case 4:
7812
          x = (x << (8 * chunksz)) | bfd_get_32 (input_bfd, location);
7813
          break;
7814
        case 8:
7815
#ifdef BFD64
7816
          x = (x << (8 * chunksz)) | bfd_get_64 (input_bfd, location);
7817
#else
7818
          abort ();
7819
#endif
7820
          break;
7821
        }
7822
    }
7823
  return x;
7824
}
7825
 
7826
static void
7827
decode_complex_addend (unsigned long *start,   /* in bits */
7828
                       unsigned long *oplen,   /* in bits */
7829
                       unsigned long *len,     /* in bits */
7830
                       unsigned long *wordsz,  /* in bytes */
7831
                       unsigned long *chunksz, /* in bytes */
7832
                       unsigned long *lsb0_p,
7833
                       unsigned long *signed_p,
7834
                       unsigned long *trunc_p,
7835
                       unsigned long encoded)
7836
{
7837
  * start     =  encoded        & 0x3F;
7838
  * len       = (encoded >>  6) & 0x3F;
7839
  * oplen     = (encoded >> 12) & 0x3F;
7840
  * wordsz    = (encoded >> 18) & 0xF;
7841
  * chunksz   = (encoded >> 22) & 0xF;
7842
  * lsb0_p    = (encoded >> 27) & 1;
7843
  * signed_p  = (encoded >> 28) & 1;
7844
  * trunc_p   = (encoded >> 29) & 1;
7845
}
7846
 
7847
bfd_reloc_status_type
7848
bfd_elf_perform_complex_relocation (bfd *input_bfd,
7849
                                    asection *input_section ATTRIBUTE_UNUSED,
7850
                                    bfd_byte *contents,
7851
                                    Elf_Internal_Rela *rel,
7852
                                    bfd_vma relocation)
7853
{
7854
  bfd_vma shift, x, mask;
7855
  unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
7856
  bfd_reloc_status_type r;
7857
 
7858
  /*  Perform this reloc, since it is complex.
7859
      (this is not to say that it necessarily refers to a complex
7860
      symbol; merely that it is a self-describing CGEN based reloc.
7861
      i.e. the addend has the complete reloc information (bit start, end,
7862
      word size, etc) encoded within it.).  */
7863
 
7864
  decode_complex_addend (&start, &oplen, &len, &wordsz,
7865
                         &chunksz, &lsb0_p, &signed_p,
7866
                         &trunc_p, rel->r_addend);
7867
 
7868
  mask = (((1L << (len - 1)) - 1) << 1) | 1;
7869
 
7870
  if (lsb0_p)
7871
    shift = (start + 1) - len;
7872
  else
7873
    shift = (8 * wordsz) - (start + len);
7874
 
7875
  /* FIXME: octets_per_byte.  */
7876
  x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset);
7877
 
7878
#ifdef DEBUG
7879
  printf ("Doing complex reloc: "
7880
          "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
7881
          "chunksz %ld, start %ld, len %ld, oplen %ld\n"
7882
          "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
7883
          lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
7884
          oplen, x, mask,  relocation);
7885
#endif
7886
 
7887
  r = bfd_reloc_ok;
7888
  if (! trunc_p)
7889
    /* Now do an overflow check.  */
7890
    r = bfd_check_overflow ((signed_p
7891
                             ? complain_overflow_signed
7892
                             : complain_overflow_unsigned),
7893
                            len, 0, (8 * wordsz),
7894
                            relocation);
7895
 
7896
  /* Do the deed.  */
7897
  x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
7898
 
7899
#ifdef DEBUG
7900
  printf ("           relocation: %8.8lx\n"
7901
          "         shifted mask: %8.8lx\n"
7902
          " shifted/masked reloc: %8.8lx\n"
7903
          "               result: %8.8lx\n",
7904
          relocation, (mask << shift),
7905
          ((relocation & mask) << shift), x);
7906
#endif
7907
  /* FIXME: octets_per_byte.  */
7908
  put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
7909
  return r;
7910
}
7911
 
7912
/* When performing a relocatable link, the input relocations are
7913
   preserved.  But, if they reference global symbols, the indices
7914
   referenced must be updated.  Update all the relocations in
7915
   REL_HDR (there are COUNT of them), using the data in REL_HASH.  */
7916
 
7917
static void
7918
elf_link_adjust_relocs (bfd *abfd,
7919
                        Elf_Internal_Shdr *rel_hdr,
7920
                        unsigned int count,
7921
                        struct elf_link_hash_entry **rel_hash)
7922
{
7923
  unsigned int i;
7924
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7925
  bfd_byte *erela;
7926
  void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
7927
  void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
7928
  bfd_vma r_type_mask;
7929
  int r_sym_shift;
7930
 
7931
  if (rel_hdr->sh_entsize == bed->s->sizeof_rel)
7932
    {
7933
      swap_in = bed->s->swap_reloc_in;
7934
      swap_out = bed->s->swap_reloc_out;
7935
    }
7936
  else if (rel_hdr->sh_entsize == bed->s->sizeof_rela)
7937
    {
7938
      swap_in = bed->s->swap_reloca_in;
7939
      swap_out = bed->s->swap_reloca_out;
7940
    }
7941
  else
7942
    abort ();
7943
 
7944
  if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
7945
    abort ();
7946
 
7947
  if (bed->s->arch_size == 32)
7948
    {
7949
      r_type_mask = 0xff;
7950
      r_sym_shift = 8;
7951
    }
7952
  else
7953
    {
7954
      r_type_mask = 0xffffffff;
7955
      r_sym_shift = 32;
7956
    }
7957
 
7958
  erela = rel_hdr->contents;
7959
  for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize)
7960
    {
7961
      Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
7962
      unsigned int j;
7963
 
7964
      if (*rel_hash == NULL)
7965
        continue;
7966
 
7967
      BFD_ASSERT ((*rel_hash)->indx >= 0);
7968
 
7969
      (*swap_in) (abfd, erela, irela);
7970
      for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
7971
        irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
7972
                           | (irela[j].r_info & r_type_mask));
7973
      (*swap_out) (abfd, irela, erela);
7974
    }
7975
}
7976
 
7977
struct elf_link_sort_rela
7978
{
7979
  union {
7980
    bfd_vma offset;
7981
    bfd_vma sym_mask;
7982
  } u;
7983
  enum elf_reloc_type_class type;
7984
  /* We use this as an array of size int_rels_per_ext_rel.  */
7985
  Elf_Internal_Rela rela[1];
7986
};
7987
 
7988
static int
7989
elf_link_sort_cmp1 (const void *A, const void *B)
7990
{
7991
  const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
7992
  const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
7993
  int relativea, relativeb;
7994
 
7995
  relativea = a->type == reloc_class_relative;
7996
  relativeb = b->type == reloc_class_relative;
7997
 
7998
  if (relativea < relativeb)
7999
    return 1;
8000
  if (relativea > relativeb)
8001
    return -1;
8002
  if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8003
    return -1;
8004
  if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8005
    return 1;
8006
  if (a->rela->r_offset < b->rela->r_offset)
8007
    return -1;
8008
  if (a->rela->r_offset > b->rela->r_offset)
8009
    return 1;
8010
  return 0;
8011
}
8012
 
8013
static int
8014
elf_link_sort_cmp2 (const void *A, const void *B)
8015
{
8016
  const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8017
  const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8018
  int copya, copyb;
8019
 
8020
  if (a->u.offset < b->u.offset)
8021
    return -1;
8022
  if (a->u.offset > b->u.offset)
8023
    return 1;
8024
  copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
8025
  copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
8026
  if (copya < copyb)
8027
    return -1;
8028
  if (copya > copyb)
8029
    return 1;
8030
  if (a->rela->r_offset < b->rela->r_offset)
8031
    return -1;
8032
  if (a->rela->r_offset > b->rela->r_offset)
8033
    return 1;
8034
  return 0;
8035
}
8036
 
8037
static size_t
8038
elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8039
{
8040
  asection *dynamic_relocs;
8041
  asection *rela_dyn;
8042
  asection *rel_dyn;
8043
  bfd_size_type count, size;
8044
  size_t i, ret, sort_elt, ext_size;
8045
  bfd_byte *sort, *s_non_relative, *p;
8046
  struct elf_link_sort_rela *sq;
8047
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8048
  int i2e = bed->s->int_rels_per_ext_rel;
8049
  void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8050
  void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8051
  struct bfd_link_order *lo;
8052
  bfd_vma r_sym_mask;
8053
  bfd_boolean use_rela;
8054
 
8055
  /* Find a dynamic reloc section.  */
8056
  rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8057
  rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8058
  if (rela_dyn != NULL && rela_dyn->size > 0
8059
      && rel_dyn != NULL && rel_dyn->size > 0)
8060
    {
8061
      bfd_boolean use_rela_initialised = FALSE;
8062
 
8063
      /* This is just here to stop gcc from complaining.
8064
         It's initialization checking code is not perfect.  */
8065
      use_rela = TRUE;
8066
 
8067
      /* Both sections are present.  Examine the sizes
8068
         of the indirect sections to help us choose.  */
8069
      for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8070
        if (lo->type == bfd_indirect_link_order)
8071
          {
8072
            asection *o = lo->u.indirect.section;
8073
 
8074
            if ((o->size % bed->s->sizeof_rela) == 0)
8075
              {
8076
                if ((o->size % bed->s->sizeof_rel) == 0)
8077
                  /* Section size is divisible by both rel and rela sizes.
8078
                     It is of no help to us.  */
8079
                  ;
8080
                else
8081
                  {
8082
                    /* Section size is only divisible by rela.  */
8083
                    if (use_rela_initialised && (use_rela == FALSE))
8084
                      {
8085
                        _bfd_error_handler
8086
                          (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8087
                        bfd_set_error (bfd_error_invalid_operation);
8088
                        return 0;
8089
                      }
8090
                    else
8091
                      {
8092
                        use_rela = TRUE;
8093
                        use_rela_initialised = TRUE;
8094
                      }
8095
                  }
8096
              }
8097
            else if ((o->size % bed->s->sizeof_rel) == 0)
8098
              {
8099
                /* Section size is only divisible by rel.  */
8100
                if (use_rela_initialised && (use_rela == TRUE))
8101
                  {
8102
                    _bfd_error_handler
8103
                      (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8104
                    bfd_set_error (bfd_error_invalid_operation);
8105
                    return 0;
8106
                  }
8107
                else
8108
                  {
8109
                    use_rela = FALSE;
8110
                    use_rela_initialised = TRUE;
8111
                  }
8112
              }
8113
            else
8114
              {
8115
                /* The section size is not divisible by either - something is wrong.  */
8116
                _bfd_error_handler
8117
                  (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8118
                bfd_set_error (bfd_error_invalid_operation);
8119
                return 0;
8120
              }
8121
          }
8122
 
8123
      for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8124
        if (lo->type == bfd_indirect_link_order)
8125
          {
8126
            asection *o = lo->u.indirect.section;
8127
 
8128
            if ((o->size % bed->s->sizeof_rela) == 0)
8129
              {
8130
                if ((o->size % bed->s->sizeof_rel) == 0)
8131
                  /* Section size is divisible by both rel and rela sizes.
8132
                     It is of no help to us.  */
8133
                  ;
8134
                else
8135
                  {
8136
                    /* Section size is only divisible by rela.  */
8137
                    if (use_rela_initialised && (use_rela == FALSE))
8138
                      {
8139
                        _bfd_error_handler
8140
                          (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8141
                        bfd_set_error (bfd_error_invalid_operation);
8142
                        return 0;
8143
                      }
8144
                    else
8145
                      {
8146
                        use_rela = TRUE;
8147
                        use_rela_initialised = TRUE;
8148
                      }
8149
                  }
8150
              }
8151
            else if ((o->size % bed->s->sizeof_rel) == 0)
8152
              {
8153
                /* Section size is only divisible by rel.  */
8154
                if (use_rela_initialised && (use_rela == TRUE))
8155
                  {
8156
                    _bfd_error_handler
8157
                      (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8158
                    bfd_set_error (bfd_error_invalid_operation);
8159
                    return 0;
8160
                  }
8161
                else
8162
                  {
8163
                    use_rela = FALSE;
8164
                    use_rela_initialised = TRUE;
8165
                  }
8166
              }
8167
            else
8168
              {
8169
                /* The section size is not divisible by either - something is wrong.  */
8170
                _bfd_error_handler
8171
                  (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8172
                bfd_set_error (bfd_error_invalid_operation);
8173
                return 0;
8174
              }
8175
          }
8176
 
8177
      if (! use_rela_initialised)
8178
        /* Make a guess.  */
8179
        use_rela = TRUE;
8180
    }
8181
  else if (rela_dyn != NULL && rela_dyn->size > 0)
8182
    use_rela = TRUE;
8183
  else if (rel_dyn != NULL && rel_dyn->size > 0)
8184
    use_rela = FALSE;
8185
  else
8186
    return 0;
8187
 
8188
  if (use_rela)
8189
    {
8190
      dynamic_relocs = rela_dyn;
8191
      ext_size = bed->s->sizeof_rela;
8192
      swap_in = bed->s->swap_reloca_in;
8193
      swap_out = bed->s->swap_reloca_out;
8194
    }
8195
  else
8196
    {
8197
      dynamic_relocs = rel_dyn;
8198
      ext_size = bed->s->sizeof_rel;
8199
      swap_in = bed->s->swap_reloc_in;
8200
      swap_out = bed->s->swap_reloc_out;
8201
    }
8202
 
8203
  size = 0;
8204
  for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8205
    if (lo->type == bfd_indirect_link_order)
8206
      size += lo->u.indirect.section->size;
8207
 
8208
  if (size != dynamic_relocs->size)
8209
    return 0;
8210
 
8211
  sort_elt = (sizeof (struct elf_link_sort_rela)
8212
              + (i2e - 1) * sizeof (Elf_Internal_Rela));
8213
 
8214
  count = dynamic_relocs->size / ext_size;
8215
  if (count == 0)
8216
    return 0;
8217
  sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8218
 
8219
  if (sort == NULL)
8220
    {
8221
      (*info->callbacks->warning)
8222
        (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8223
      return 0;
8224
    }
8225
 
8226
  if (bed->s->arch_size == 32)
8227
    r_sym_mask = ~(bfd_vma) 0xff;
8228
  else
8229
    r_sym_mask = ~(bfd_vma) 0xffffffff;
8230
 
8231
  for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8232
    if (lo->type == bfd_indirect_link_order)
8233
      {
8234
        bfd_byte *erel, *erelend;
8235
        asection *o = lo->u.indirect.section;
8236
 
8237
        if (o->contents == NULL && o->size != 0)
8238
          {
8239
            /* This is a reloc section that is being handled as a normal
8240
               section.  See bfd_section_from_shdr.  We can't combine
8241
               relocs in this case.  */
8242
            free (sort);
8243
            return 0;
8244
          }
8245
        erel = o->contents;
8246
        erelend = o->contents + o->size;
8247
        /* FIXME: octets_per_byte.  */
8248
        p = sort + o->output_offset / ext_size * sort_elt;
8249
 
8250
        while (erel < erelend)
8251
          {
8252
            struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8253
 
8254
            (*swap_in) (abfd, erel, s->rela);
8255
            s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
8256
            s->u.sym_mask = r_sym_mask;
8257
            p += sort_elt;
8258
            erel += ext_size;
8259
          }
8260
      }
8261
 
8262
  qsort (sort, count, sort_elt, elf_link_sort_cmp1);
8263
 
8264
  for (i = 0, p = sort; i < count; i++, p += sort_elt)
8265
    {
8266
      struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8267
      if (s->type != reloc_class_relative)
8268
        break;
8269
    }
8270
  ret = i;
8271
  s_non_relative = p;
8272
 
8273
  sq = (struct elf_link_sort_rela *) s_non_relative;
8274
  for (; i < count; i++, p += sort_elt)
8275
    {
8276
      struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
8277
      if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
8278
        sq = sp;
8279
      sp->u.offset = sq->rela->r_offset;
8280
    }
8281
 
8282
  qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
8283
 
8284
  for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8285
    if (lo->type == bfd_indirect_link_order)
8286
      {
8287
        bfd_byte *erel, *erelend;
8288
        asection *o = lo->u.indirect.section;
8289
 
8290
        erel = o->contents;
8291
        erelend = o->contents + o->size;
8292
        /* FIXME: octets_per_byte.  */
8293
        p = sort + o->output_offset / ext_size * sort_elt;
8294
        while (erel < erelend)
8295
          {
8296
            struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8297
            (*swap_out) (abfd, s->rela, erel);
8298
            p += sort_elt;
8299
            erel += ext_size;
8300
          }
8301
      }
8302
 
8303
  free (sort);
8304
  *psec = dynamic_relocs;
8305
  return ret;
8306
}
8307
 
8308
/* Flush the output symbols to the file.  */
8309
 
8310
static bfd_boolean
8311
elf_link_flush_output_syms (struct elf_final_link_info *finfo,
8312
                            const struct elf_backend_data *bed)
8313
{
8314
  if (finfo->symbuf_count > 0)
8315
    {
8316
      Elf_Internal_Shdr *hdr;
8317
      file_ptr pos;
8318
      bfd_size_type amt;
8319
 
8320
      hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
8321
      pos = hdr->sh_offset + hdr->sh_size;
8322
      amt = finfo->symbuf_count * bed->s->sizeof_sym;
8323
      if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
8324
          || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
8325
        return FALSE;
8326
 
8327
      hdr->sh_size += amt;
8328
      finfo->symbuf_count = 0;
8329
    }
8330
 
8331
  return TRUE;
8332
}
8333
 
8334
/* Add a symbol to the output symbol table.  */
8335
 
8336
static int
8337
elf_link_output_sym (struct elf_final_link_info *finfo,
8338
                     const char *name,
8339
                     Elf_Internal_Sym *elfsym,
8340
                     asection *input_sec,
8341
                     struct elf_link_hash_entry *h)
8342
{
8343
  bfd_byte *dest;
8344
  Elf_External_Sym_Shndx *destshndx;
8345
  int (*output_symbol_hook)
8346
    (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
8347
     struct elf_link_hash_entry *);
8348
  const struct elf_backend_data *bed;
8349
 
8350
  bed = get_elf_backend_data (finfo->output_bfd);
8351
  output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
8352
  if (output_symbol_hook != NULL)
8353
    {
8354
      int ret = (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h);
8355
      if (ret != 1)
8356
        return ret;
8357
    }
8358
 
8359
  if (name == NULL || *name == '\0')
8360
    elfsym->st_name = 0;
8361
  else if (input_sec->flags & SEC_EXCLUDE)
8362
    elfsym->st_name = 0;
8363
  else
8364
    {
8365
      elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
8366
                                                            name, TRUE, FALSE);
8367
      if (elfsym->st_name == (unsigned long) -1)
8368
        return 0;
8369
    }
8370
 
8371
  if (finfo->symbuf_count >= finfo->symbuf_size)
8372
    {
8373
      if (! elf_link_flush_output_syms (finfo, bed))
8374
        return 0;
8375
    }
8376
 
8377
  dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym;
8378
  destshndx = finfo->symshndxbuf;
8379
  if (destshndx != NULL)
8380
    {
8381
      if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
8382
        {
8383
          bfd_size_type amt;
8384
 
8385
          amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
8386
          destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx,
8387
                                                              amt * 2);
8388
          if (destshndx == NULL)
8389
            return 0;
8390
          finfo->symshndxbuf = destshndx;
8391
          memset ((char *) destshndx + amt, 0, amt);
8392
          finfo->shndxbuf_size *= 2;
8393
        }
8394
      destshndx += bfd_get_symcount (finfo->output_bfd);
8395
    }
8396
 
8397
  bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
8398
  finfo->symbuf_count += 1;
8399
  bfd_get_symcount (finfo->output_bfd) += 1;
8400
 
8401
  return 1;
8402
}
8403
 
8404
/* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
8405
 
8406
static bfd_boolean
8407
check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
8408
{
8409
  if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
8410
      && sym->st_shndx < SHN_LORESERVE)
8411
    {
8412
      /* The gABI doesn't support dynamic symbols in output sections
8413
         beyond 64k.  */
8414
      (*_bfd_error_handler)
8415
        (_("%B: Too many sections: %d (>= %d)"),
8416
         abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
8417
      bfd_set_error (bfd_error_nonrepresentable_section);
8418
      return FALSE;
8419
    }
8420
  return TRUE;
8421
}
8422
 
8423
/* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
8424
   allowing an unsatisfied unversioned symbol in the DSO to match a
8425
   versioned symbol that would normally require an explicit version.
8426
   We also handle the case that a DSO references a hidden symbol
8427
   which may be satisfied by a versioned symbol in another DSO.  */
8428
 
8429
static bfd_boolean
8430
elf_link_check_versioned_symbol (struct bfd_link_info *info,
8431
                                 const struct elf_backend_data *bed,
8432
                                 struct elf_link_hash_entry *h)
8433
{
8434
  bfd *abfd;
8435
  struct elf_link_loaded_list *loaded;
8436
 
8437
  if (!is_elf_hash_table (info->hash))
8438
    return FALSE;
8439
 
8440
  switch (h->root.type)
8441
    {
8442
    default:
8443
      abfd = NULL;
8444
      break;
8445
 
8446
    case bfd_link_hash_undefined:
8447
    case bfd_link_hash_undefweak:
8448
      abfd = h->root.u.undef.abfd;
8449
      if ((abfd->flags & DYNAMIC) == 0
8450
          || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
8451
        return FALSE;
8452
      break;
8453
 
8454
    case bfd_link_hash_defined:
8455
    case bfd_link_hash_defweak:
8456
      abfd = h->root.u.def.section->owner;
8457
      break;
8458
 
8459
    case bfd_link_hash_common:
8460
      abfd = h->root.u.c.p->section->owner;
8461
      break;
8462
    }
8463
  BFD_ASSERT (abfd != NULL);
8464
 
8465
  for (loaded = elf_hash_table (info)->loaded;
8466
       loaded != NULL;
8467
       loaded = loaded->next)
8468
    {
8469
      bfd *input;
8470
      Elf_Internal_Shdr *hdr;
8471
      bfd_size_type symcount;
8472
      bfd_size_type extsymcount;
8473
      bfd_size_type extsymoff;
8474
      Elf_Internal_Shdr *versymhdr;
8475
      Elf_Internal_Sym *isym;
8476
      Elf_Internal_Sym *isymend;
8477
      Elf_Internal_Sym *isymbuf;
8478
      Elf_External_Versym *ever;
8479
      Elf_External_Versym *extversym;
8480
 
8481
      input = loaded->abfd;
8482
 
8483
      /* We check each DSO for a possible hidden versioned definition.  */
8484
      if (input == abfd
8485
          || (input->flags & DYNAMIC) == 0
8486
          || elf_dynversym (input) == 0)
8487
        continue;
8488
 
8489
      hdr = &elf_tdata (input)->dynsymtab_hdr;
8490
 
8491
      symcount = hdr->sh_size / bed->s->sizeof_sym;
8492
      if (elf_bad_symtab (input))
8493
        {
8494
          extsymcount = symcount;
8495
          extsymoff = 0;
8496
        }
8497
      else
8498
        {
8499
          extsymcount = symcount - hdr->sh_info;
8500
          extsymoff = hdr->sh_info;
8501
        }
8502
 
8503
      if (extsymcount == 0)
8504
        continue;
8505
 
8506
      isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
8507
                                      NULL, NULL, NULL);
8508
      if (isymbuf == NULL)
8509
        return FALSE;
8510
 
8511
      /* Read in any version definitions.  */
8512
      versymhdr = &elf_tdata (input)->dynversym_hdr;
8513
      extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
8514
      if (extversym == NULL)
8515
        goto error_ret;
8516
 
8517
      if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
8518
          || (bfd_bread (extversym, versymhdr->sh_size, input)
8519
              != versymhdr->sh_size))
8520
        {
8521
          free (extversym);
8522
        error_ret:
8523
          free (isymbuf);
8524
          return FALSE;
8525
        }
8526
 
8527
      ever = extversym + extsymoff;
8528
      isymend = isymbuf + extsymcount;
8529
      for (isym = isymbuf; isym < isymend; isym++, ever++)
8530
        {
8531
          const char *name;
8532
          Elf_Internal_Versym iver;
8533
          unsigned short version_index;
8534
 
8535
          if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
8536
              || isym->st_shndx == SHN_UNDEF)
8537
            continue;
8538
 
8539
          name = bfd_elf_string_from_elf_section (input,
8540
                                                  hdr->sh_link,
8541
                                                  isym->st_name);
8542
          if (strcmp (name, h->root.root.string) != 0)
8543
            continue;
8544
 
8545
          _bfd_elf_swap_versym_in (input, ever, &iver);
8546
 
8547
          if ((iver.vs_vers & VERSYM_HIDDEN) == 0
8548
              && !(h->def_regular
8549
                   && h->forced_local))
8550
            {
8551
              /* If we have a non-hidden versioned sym, then it should
8552
                 have provided a definition for the undefined sym unless
8553
                 it is defined in a non-shared object and forced local.
8554
               */
8555
              abort ();
8556
            }
8557
 
8558
          version_index = iver.vs_vers & VERSYM_VERSION;
8559
          if (version_index == 1 || version_index == 2)
8560
            {
8561
              /* This is the base or first version.  We can use it.  */
8562
              free (extversym);
8563
              free (isymbuf);
8564
              return TRUE;
8565
            }
8566
        }
8567
 
8568
      free (extversym);
8569
      free (isymbuf);
8570
    }
8571
 
8572
  return FALSE;
8573
}
8574
 
8575
/* Add an external symbol to the symbol table.  This is called from
8576
   the hash table traversal routine.  When generating a shared object,
8577
   we go through the symbol table twice.  The first time we output
8578
   anything that might have been forced to local scope in a version
8579
   script.  The second time we output the symbols that are still
8580
   global symbols.  */
8581
 
8582
static bfd_boolean
8583
elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
8584
{
8585
  struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
8586
  struct elf_final_link_info *finfo = eoinfo->finfo;
8587
  bfd_boolean strip;
8588
  Elf_Internal_Sym sym;
8589
  asection *input_sec;
8590
  const struct elf_backend_data *bed;
8591
  long indx;
8592
  int ret;
8593
 
8594
  if (h->root.type == bfd_link_hash_warning)
8595
    {
8596
      h = (struct elf_link_hash_entry *) h->root.u.i.link;
8597
      if (h->root.type == bfd_link_hash_new)
8598
        return TRUE;
8599
    }
8600
 
8601
  /* Decide whether to output this symbol in this pass.  */
8602
  if (eoinfo->localsyms)
8603
    {
8604
      if (!h->forced_local)
8605
        return TRUE;
8606
    }
8607
  else
8608
    {
8609
      if (h->forced_local)
8610
        return TRUE;
8611
    }
8612
 
8613
  bed = get_elf_backend_data (finfo->output_bfd);
8614
 
8615
  if (h->root.type == bfd_link_hash_undefined)
8616
    {
8617
      /* If we have an undefined symbol reference here then it must have
8618
         come from a shared library that is being linked in.  (Undefined
8619
         references in regular files have already been handled unless
8620
         they are in unreferenced sections which are removed by garbage
8621
         collection).  */
8622
      bfd_boolean ignore_undef = FALSE;
8623
 
8624
      /* Some symbols may be special in that the fact that they're
8625
         undefined can be safely ignored - let backend determine that.  */
8626
      if (bed->elf_backend_ignore_undef_symbol)
8627
        ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
8628
 
8629
      /* If we are reporting errors for this situation then do so now.  */
8630
      if (ignore_undef == FALSE
8631
          && h->ref_dynamic
8632
          && (!h->ref_regular || finfo->info->gc_sections)
8633
          && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
8634
          && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
8635
        {
8636
          if (! (finfo->info->callbacks->undefined_symbol
8637
                 (finfo->info, h->root.root.string,
8638
                  h->ref_regular ? NULL : h->root.u.undef.abfd,
8639
                  NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
8640
            {
8641
              eoinfo->failed = TRUE;
8642
              return FALSE;
8643
            }
8644
        }
8645
    }
8646
 
8647
  /* We should also warn if a forced local symbol is referenced from
8648
     shared libraries.  */
8649
  if (! finfo->info->relocatable
8650
      && (! finfo->info->shared)
8651
      && h->forced_local
8652
      && h->ref_dynamic
8653
      && !h->dynamic_def
8654
      && !h->dynamic_weak
8655
      && ! elf_link_check_versioned_symbol (finfo->info, bed, h))
8656
    {
8657
      (*_bfd_error_handler)
8658
        (_("%B: %s symbol `%s' in %B is referenced by DSO"),
8659
         finfo->output_bfd,
8660
         h->root.u.def.section == bfd_abs_section_ptr
8661
         ? finfo->output_bfd : h->root.u.def.section->owner,
8662
         ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
8663
         ? "internal"
8664
         : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
8665
         ? "hidden" : "local",
8666
         h->root.root.string);
8667
      eoinfo->failed = TRUE;
8668
      return FALSE;
8669
    }
8670
 
8671
  /* We don't want to output symbols that have never been mentioned by
8672
     a regular file, or that we have been told to strip.  However, if
8673
     h->indx is set to -2, the symbol is used by a reloc and we must
8674
     output it.  */
8675
  if (h->indx == -2)
8676
    strip = FALSE;
8677
  else if ((h->def_dynamic
8678
            || h->ref_dynamic
8679
            || h->root.type == bfd_link_hash_new)
8680
           && !h->def_regular
8681
           && !h->ref_regular)
8682
    strip = TRUE;
8683
  else if (finfo->info->strip == strip_all)
8684
    strip = TRUE;
8685
  else if (finfo->info->strip == strip_some
8686
           && bfd_hash_lookup (finfo->info->keep_hash,
8687
                               h->root.root.string, FALSE, FALSE) == NULL)
8688
    strip = TRUE;
8689
  else if (finfo->info->strip_discarded
8690
           && (h->root.type == bfd_link_hash_defined
8691
               || h->root.type == bfd_link_hash_defweak)
8692
           && elf_discarded_section (h->root.u.def.section))
8693
    strip = TRUE;
8694
  else
8695
    strip = FALSE;
8696
 
8697
  /* If we're stripping it, and it's not a dynamic symbol, there's
8698
     nothing else to do unless it is a forced local symbol or a
8699
     STT_GNU_IFUNC symbol.  */
8700
  if (strip
8701
      && h->dynindx == -1
8702
      && h->type != STT_GNU_IFUNC
8703
      && !h->forced_local)
8704
    return TRUE;
8705
 
8706
  sym.st_value = 0;
8707
  sym.st_size = h->size;
8708
  sym.st_other = h->other;
8709
  if (h->forced_local)
8710
    {
8711
      sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
8712
      /* Turn off visibility on local symbol.  */
8713
      sym.st_other &= ~ELF_ST_VISIBILITY (-1);
8714
    }
8715
  else if (h->unique_global)
8716
    sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type);
8717
  else if (h->root.type == bfd_link_hash_undefweak
8718
           || h->root.type == bfd_link_hash_defweak)
8719
    sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
8720
  else
8721
    sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
8722
 
8723
  switch (h->root.type)
8724
    {
8725
    default:
8726
    case bfd_link_hash_new:
8727
    case bfd_link_hash_warning:
8728
      abort ();
8729
      return FALSE;
8730
 
8731
    case bfd_link_hash_undefined:
8732
    case bfd_link_hash_undefweak:
8733
      input_sec = bfd_und_section_ptr;
8734
      sym.st_shndx = SHN_UNDEF;
8735
      break;
8736
 
8737
    case bfd_link_hash_defined:
8738
    case bfd_link_hash_defweak:
8739
      {
8740
        input_sec = h->root.u.def.section;
8741
        if (input_sec->output_section != NULL)
8742
          {
8743
            sym.st_shndx =
8744
              _bfd_elf_section_from_bfd_section (finfo->output_bfd,
8745
                                                 input_sec->output_section);
8746
            if (sym.st_shndx == SHN_BAD)
8747
              {
8748
                (*_bfd_error_handler)
8749
                  (_("%B: could not find output section %A for input section %A"),
8750
                   finfo->output_bfd, input_sec->output_section, input_sec);
8751
                eoinfo->failed = TRUE;
8752
                return FALSE;
8753
              }
8754
 
8755
            /* ELF symbols in relocatable files are section relative,
8756
               but in nonrelocatable files they are virtual
8757
               addresses.  */
8758
            sym.st_value = h->root.u.def.value + input_sec->output_offset;
8759
            if (! finfo->info->relocatable)
8760
              {
8761
                sym.st_value += input_sec->output_section->vma;
8762
                if (h->type == STT_TLS)
8763
                  {
8764
                    asection *tls_sec = elf_hash_table (finfo->info)->tls_sec;
8765
                    if (tls_sec != NULL)
8766
                      sym.st_value -= tls_sec->vma;
8767
                    else
8768
                      {
8769
                        /* The TLS section may have been garbage collected.  */
8770
                        BFD_ASSERT (finfo->info->gc_sections
8771
                                    && !input_sec->gc_mark);
8772
                      }
8773
                  }
8774
              }
8775
          }
8776
        else
8777
          {
8778
            BFD_ASSERT (input_sec->owner == NULL
8779
                        || (input_sec->owner->flags & DYNAMIC) != 0);
8780
            sym.st_shndx = SHN_UNDEF;
8781
            input_sec = bfd_und_section_ptr;
8782
          }
8783
      }
8784
      break;
8785
 
8786
    case bfd_link_hash_common:
8787
      input_sec = h->root.u.c.p->section;
8788
      sym.st_shndx = bed->common_section_index (input_sec);
8789
      sym.st_value = 1 << h->root.u.c.p->alignment_power;
8790
      break;
8791
 
8792
    case bfd_link_hash_indirect:
8793
      /* These symbols are created by symbol versioning.  They point
8794
         to the decorated version of the name.  For example, if the
8795
         symbol foo@@GNU_1.2 is the default, which should be used when
8796
         foo is used with no version, then we add an indirect symbol
8797
         foo which points to foo@@GNU_1.2.  We ignore these symbols,
8798
         since the indirected symbol is already in the hash table.  */
8799
      return TRUE;
8800
    }
8801
 
8802
  /* Give the processor backend a chance to tweak the symbol value,
8803
     and also to finish up anything that needs to be done for this
8804
     symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
8805
     forced local syms when non-shared is due to a historical quirk.
8806
     STT_GNU_IFUNC symbol must go through PLT.  */
8807
  if ((h->type == STT_GNU_IFUNC
8808
       && h->def_regular
8809
       && !finfo->info->relocatable)
8810
      || ((h->dynindx != -1
8811
           || h->forced_local)
8812
          && ((finfo->info->shared
8813
               && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8814
                   || h->root.type != bfd_link_hash_undefweak))
8815
              || !h->forced_local)
8816
          && elf_hash_table (finfo->info)->dynamic_sections_created))
8817
    {
8818
      if (! ((*bed->elf_backend_finish_dynamic_symbol)
8819
             (finfo->output_bfd, finfo->info, h, &sym)))
8820
        {
8821
          eoinfo->failed = TRUE;
8822
          return FALSE;
8823
        }
8824
    }
8825
 
8826
  /* If we are marking the symbol as undefined, and there are no
8827
     non-weak references to this symbol from a regular object, then
8828
     mark the symbol as weak undefined; if there are non-weak
8829
     references, mark the symbol as strong.  We can't do this earlier,
8830
     because it might not be marked as undefined until the
8831
     finish_dynamic_symbol routine gets through with it.  */
8832
  if (sym.st_shndx == SHN_UNDEF
8833
      && h->ref_regular
8834
      && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
8835
          || ELF_ST_BIND (sym.st_info) == STB_WEAK))
8836
    {
8837
      int bindtype;
8838
      unsigned int type = ELF_ST_TYPE (sym.st_info);
8839
 
8840
      /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
8841
      if (type == STT_GNU_IFUNC)
8842
        type = STT_FUNC;
8843
 
8844
      if (h->ref_regular_nonweak)
8845
        bindtype = STB_GLOBAL;
8846
      else
8847
        bindtype = STB_WEAK;
8848
      sym.st_info = ELF_ST_INFO (bindtype, type);
8849
    }
8850
 
8851
  /* If this is a symbol defined in a dynamic library, don't use the
8852
     symbol size from the dynamic library.  Relinking an executable
8853
     against a new library may introduce gratuitous changes in the
8854
     executable's symbols if we keep the size.  */
8855
  if (sym.st_shndx == SHN_UNDEF
8856
      && !h->def_regular
8857
      && h->def_dynamic)
8858
    sym.st_size = 0;
8859
 
8860
  /* If a non-weak symbol with non-default visibility is not defined
8861
     locally, it is a fatal error.  */
8862
  if (! finfo->info->relocatable
8863
      && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
8864
      && ELF_ST_BIND (sym.st_info) != STB_WEAK
8865
      && h->root.type == bfd_link_hash_undefined
8866
      && !h->def_regular)
8867
    {
8868
      (*_bfd_error_handler)
8869
        (_("%B: %s symbol `%s' isn't defined"),
8870
         finfo->output_bfd,
8871
         ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED
8872
         ? "protected"
8873
         : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL
8874
         ? "internal" : "hidden",
8875
         h->root.root.string);
8876
      eoinfo->failed = TRUE;
8877
      return FALSE;
8878
    }
8879
 
8880
  /* If this symbol should be put in the .dynsym section, then put it
8881
     there now.  We already know the symbol index.  We also fill in
8882
     the entry in the .hash section.  */
8883
  if (h->dynindx != -1
8884
      && elf_hash_table (finfo->info)->dynamic_sections_created)
8885
    {
8886
      bfd_byte *esym;
8887
 
8888
      sym.st_name = h->dynstr_index;
8889
      esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
8890
      if (! check_dynsym (finfo->output_bfd, &sym))
8891
        {
8892
          eoinfo->failed = TRUE;
8893
          return FALSE;
8894
        }
8895
      bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
8896
 
8897
      if (finfo->hash_sec != NULL)
8898
        {
8899
          size_t hash_entry_size;
8900
          bfd_byte *bucketpos;
8901
          bfd_vma chain;
8902
          size_t bucketcount;
8903
          size_t bucket;
8904
 
8905
          bucketcount = elf_hash_table (finfo->info)->bucketcount;
8906
          bucket = h->u.elf_hash_value % bucketcount;
8907
 
8908
          hash_entry_size
8909
            = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
8910
          bucketpos = ((bfd_byte *) finfo->hash_sec->contents
8911
                       + (bucket + 2) * hash_entry_size);
8912
          chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
8913
          bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
8914
          bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
8915
                   ((bfd_byte *) finfo->hash_sec->contents
8916
                    + (bucketcount + 2 + h->dynindx) * hash_entry_size));
8917
        }
8918
 
8919
      if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
8920
        {
8921
          Elf_Internal_Versym iversym;
8922
          Elf_External_Versym *eversym;
8923
 
8924
          if (!h->def_regular)
8925
            {
8926
              if (h->verinfo.verdef == NULL)
8927
                iversym.vs_vers = 0;
8928
              else
8929
                iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
8930
            }
8931
          else
8932
            {
8933
              if (h->verinfo.vertree == NULL)
8934
                iversym.vs_vers = 1;
8935
              else
8936
                iversym.vs_vers = h->verinfo.vertree->vernum + 1;
8937
              if (finfo->info->create_default_symver)
8938
                iversym.vs_vers++;
8939
            }
8940
 
8941
          if (h->hidden)
8942
            iversym.vs_vers |= VERSYM_HIDDEN;
8943
 
8944
          eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
8945
          eversym += h->dynindx;
8946
          _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
8947
        }
8948
    }
8949
 
8950
  /* If we're stripping it, then it was just a dynamic symbol, and
8951
     there's nothing else to do.  */
8952
  if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
8953
    return TRUE;
8954
 
8955
  indx = bfd_get_symcount (finfo->output_bfd);
8956
  ret = elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h);
8957
  if (ret == 0)
8958
    {
8959
      eoinfo->failed = TRUE;
8960
      return FALSE;
8961
    }
8962
  else if (ret == 1)
8963
    h->indx = indx;
8964
  else if (h->indx == -2)
8965
    abort();
8966
 
8967
  return TRUE;
8968
}
8969
 
8970
/* Return TRUE if special handling is done for relocs in SEC against
8971
   symbols defined in discarded sections.  */
8972
 
8973
static bfd_boolean
8974
elf_section_ignore_discarded_relocs (asection *sec)
8975
{
8976
  const struct elf_backend_data *bed;
8977
 
8978
  switch (sec->sec_info_type)
8979
    {
8980
    case ELF_INFO_TYPE_STABS:
8981
    case ELF_INFO_TYPE_EH_FRAME:
8982
      return TRUE;
8983
    default:
8984
      break;
8985
    }
8986
 
8987
  bed = get_elf_backend_data (sec->owner);
8988
  if (bed->elf_backend_ignore_discarded_relocs != NULL
8989
      && (*bed->elf_backend_ignore_discarded_relocs) (sec))
8990
    return TRUE;
8991
 
8992
  return FALSE;
8993
}
8994
 
8995
/* Return a mask saying how ld should treat relocations in SEC against
8996
   symbols defined in discarded sections.  If this function returns
8997
   COMPLAIN set, ld will issue a warning message.  If this function
8998
   returns PRETEND set, and the discarded section was link-once and the
8999
   same size as the kept link-once section, ld will pretend that the
9000
   symbol was actually defined in the kept section.  Otherwise ld will
9001
   zero the reloc (at least that is the intent, but some cooperation by
9002
   the target dependent code is needed, particularly for REL targets).  */
9003
 
9004
unsigned int
9005
_bfd_elf_default_action_discarded (asection *sec)
9006
{
9007
  if (sec->flags & SEC_DEBUGGING)
9008
    return PRETEND;
9009
 
9010
  if (strcmp (".eh_frame", sec->name) == 0)
9011
    return 0;
9012
 
9013
  if (strcmp (".gcc_except_table", sec->name) == 0)
9014
    return 0;
9015
 
9016
  return COMPLAIN | PRETEND;
9017
}
9018
 
9019
/* Find a match between a section and a member of a section group.  */
9020
 
9021
static asection *
9022
match_group_member (asection *sec, asection *group,
9023
                    struct bfd_link_info *info)
9024
{
9025
  asection *first = elf_next_in_group (group);
9026
  asection *s = first;
9027
 
9028
  while (s != NULL)
9029
    {
9030
      if (bfd_elf_match_symbols_in_sections (s, sec, info))
9031
        return s;
9032
 
9033
      s = elf_next_in_group (s);
9034
      if (s == first)
9035
        break;
9036
    }
9037
 
9038
  return NULL;
9039
}
9040
 
9041
/* Check if the kept section of a discarded section SEC can be used
9042
   to replace it.  Return the replacement if it is OK.  Otherwise return
9043
   NULL.  */
9044
 
9045
asection *
9046
_bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
9047
{
9048
  asection *kept;
9049
 
9050
  kept = sec->kept_section;
9051
  if (kept != NULL)
9052
    {
9053
      if ((kept->flags & SEC_GROUP) != 0)
9054
        kept = match_group_member (sec, kept, info);
9055
      if (kept != NULL
9056
          && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
9057
              != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
9058
        kept = NULL;
9059
      sec->kept_section = kept;
9060
    }
9061
  return kept;
9062
}
9063
 
9064
/* Link an input file into the linker output file.  This function
9065
   handles all the sections and relocations of the input file at once.
9066
   This is so that we only have to read the local symbols once, and
9067
   don't have to keep them in memory.  */
9068
 
9069
static bfd_boolean
9070
elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
9071
{
9072
  int (*relocate_section)
9073
    (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
9074
     Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
9075
  bfd *output_bfd;
9076
  Elf_Internal_Shdr *symtab_hdr;
9077
  size_t locsymcount;
9078
  size_t extsymoff;
9079
  Elf_Internal_Sym *isymbuf;
9080
  Elf_Internal_Sym *isym;
9081
  Elf_Internal_Sym *isymend;
9082
  long *pindex;
9083
  asection **ppsection;
9084
  asection *o;
9085
  const struct elf_backend_data *bed;
9086
  struct elf_link_hash_entry **sym_hashes;
9087
 
9088
  output_bfd = finfo->output_bfd;
9089
  bed = get_elf_backend_data (output_bfd);
9090
  relocate_section = bed->elf_backend_relocate_section;
9091
 
9092
  /* If this is a dynamic object, we don't want to do anything here:
9093
     we don't want the local symbols, and we don't want the section
9094
     contents.  */
9095
  if ((input_bfd->flags & DYNAMIC) != 0)
9096
    return TRUE;
9097
 
9098
  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9099
  if (elf_bad_symtab (input_bfd))
9100
    {
9101
      locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9102
      extsymoff = 0;
9103
    }
9104
  else
9105
    {
9106
      locsymcount = symtab_hdr->sh_info;
9107
      extsymoff = symtab_hdr->sh_info;
9108
    }
9109
 
9110
  /* Read the local symbols.  */
9111
  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
9112
  if (isymbuf == NULL && locsymcount != 0)
9113
    {
9114
      isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
9115
                                      finfo->internal_syms,
9116
                                      finfo->external_syms,
9117
                                      finfo->locsym_shndx);
9118
      if (isymbuf == NULL)
9119
        return FALSE;
9120
    }
9121
 
9122
  /* Find local symbol sections and adjust values of symbols in
9123
     SEC_MERGE sections.  Write out those local symbols we know are
9124
     going into the output file.  */
9125
  isymend = isymbuf + locsymcount;
9126
  for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
9127
       isym < isymend;
9128
       isym++, pindex++, ppsection++)
9129
    {
9130
      asection *isec;
9131
      const char *name;
9132
      Elf_Internal_Sym osym;
9133
      long indx;
9134
      int ret;
9135
 
9136
      *pindex = -1;
9137
 
9138
      if (elf_bad_symtab (input_bfd))
9139
        {
9140
          if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
9141
            {
9142
              *ppsection = NULL;
9143
              continue;
9144
            }
9145
        }
9146
 
9147
      if (isym->st_shndx == SHN_UNDEF)
9148
        isec = bfd_und_section_ptr;
9149
      else if (isym->st_shndx == SHN_ABS)
9150
        isec = bfd_abs_section_ptr;
9151
      else if (isym->st_shndx == SHN_COMMON)
9152
        isec = bfd_com_section_ptr;
9153
      else
9154
        {
9155
          isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
9156
          if (isec == NULL)
9157
            {
9158
              /* Don't attempt to output symbols with st_shnx in the
9159
                 reserved range other than SHN_ABS and SHN_COMMON.  */
9160
              *ppsection = NULL;
9161
              continue;
9162
            }
9163
          else if (isec->sec_info_type == ELF_INFO_TYPE_MERGE
9164
                   && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
9165
            isym->st_value =
9166
              _bfd_merged_section_offset (output_bfd, &isec,
9167
                                          elf_section_data (isec)->sec_info,
9168
                                          isym->st_value);
9169
        }
9170
 
9171
      *ppsection = isec;
9172
 
9173
      /* Don't output the first, undefined, symbol.  */
9174
      if (ppsection == finfo->sections)
9175
        continue;
9176
 
9177
      if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
9178
        {
9179
          /* We never output section symbols.  Instead, we use the
9180
             section symbol of the corresponding section in the output
9181
             file.  */
9182
          continue;
9183
        }
9184
 
9185
      /* If we are stripping all symbols, we don't want to output this
9186
         one.  */
9187
      if (finfo->info->strip == strip_all)
9188
        continue;
9189
 
9190
      /* If we are discarding all local symbols, we don't want to
9191
         output this one.  If we are generating a relocatable output
9192
         file, then some of the local symbols may be required by
9193
         relocs; we output them below as we discover that they are
9194
         needed.  */
9195
      if (finfo->info->discard == discard_all)
9196
        continue;
9197
 
9198
      /* If this symbol is defined in a section which we are
9199
         discarding, we don't need to keep it.  */
9200
      if (isym->st_shndx != SHN_UNDEF
9201
          && isym->st_shndx < SHN_LORESERVE
9202
          && bfd_section_removed_from_list (output_bfd,
9203
                                            isec->output_section))
9204
        continue;
9205
 
9206
      /* Get the name of the symbol.  */
9207
      name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
9208
                                              isym->st_name);
9209
      if (name == NULL)
9210
        return FALSE;
9211
 
9212
      /* See if we are discarding symbols with this name.  */
9213
      if ((finfo->info->strip == strip_some
9214
           && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
9215
               == NULL))
9216
          || (((finfo->info->discard == discard_sec_merge
9217
                && (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
9218
               || finfo->info->discard == discard_l)
9219
              && bfd_is_local_label_name (input_bfd, name)))
9220
        continue;
9221
 
9222
      osym = *isym;
9223
 
9224
      /* Adjust the section index for the output file.  */
9225
      osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9226
                                                         isec->output_section);
9227
      if (osym.st_shndx == SHN_BAD)
9228
        return FALSE;
9229
 
9230
      /* ELF symbols in relocatable files are section relative, but
9231
         in executable files they are virtual addresses.  Note that
9232
         this code assumes that all ELF sections have an associated
9233
         BFD section with a reasonable value for output_offset; below
9234
         we assume that they also have a reasonable value for
9235
         output_section.  Any special sections must be set up to meet
9236
         these requirements.  */
9237
      osym.st_value += isec->output_offset;
9238
      if (! finfo->info->relocatable)
9239
        {
9240
          osym.st_value += isec->output_section->vma;
9241
          if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
9242
            {
9243
              /* STT_TLS symbols are relative to PT_TLS segment base.  */
9244
              BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
9245
              osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
9246
            }
9247
        }
9248
 
9249
      indx = bfd_get_symcount (output_bfd);
9250
      ret = elf_link_output_sym (finfo, name, &osym, isec, NULL);
9251
      if (ret == 0)
9252
        return FALSE;
9253
      else if (ret == 1)
9254
        *pindex = indx;
9255
    }
9256
 
9257
  /* Relocate the contents of each section.  */
9258
  sym_hashes = elf_sym_hashes (input_bfd);
9259
  for (o = input_bfd->sections; o != NULL; o = o->next)
9260
    {
9261
      bfd_byte *contents;
9262
 
9263
      if (! o->linker_mark)
9264
        {
9265
          /* This section was omitted from the link.  */
9266
          continue;
9267
        }
9268
 
9269
      if (finfo->info->relocatable
9270
          && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
9271
        {
9272
          /* Deal with the group signature symbol.  */
9273
          struct bfd_elf_section_data *sec_data = elf_section_data (o);
9274
          unsigned long symndx = sec_data->this_hdr.sh_info;
9275
          asection *osec = o->output_section;
9276
 
9277
          if (symndx >= locsymcount
9278
              || (elf_bad_symtab (input_bfd)
9279
                  && finfo->sections[symndx] == NULL))
9280
            {
9281
              struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
9282
              while (h->root.type == bfd_link_hash_indirect
9283
                     || h->root.type == bfd_link_hash_warning)
9284
                h = (struct elf_link_hash_entry *) h->root.u.i.link;
9285
              /* Arrange for symbol to be output.  */
9286
              h->indx = -2;
9287
              elf_section_data (osec)->this_hdr.sh_info = -2;
9288
            }
9289
          else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
9290
            {
9291
              /* We'll use the output section target_index.  */
9292
              asection *sec = finfo->sections[symndx]->output_section;
9293
              elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
9294
            }
9295
          else
9296
            {
9297
              if (finfo->indices[symndx] == -1)
9298
                {
9299
                  /* Otherwise output the local symbol now.  */
9300
                  Elf_Internal_Sym sym = isymbuf[symndx];
9301
                  asection *sec = finfo->sections[symndx]->output_section;
9302
                  const char *name;
9303
                  long indx;
9304
                  int ret;
9305
 
9306
                  name = bfd_elf_string_from_elf_section (input_bfd,
9307
                                                          symtab_hdr->sh_link,
9308
                                                          sym.st_name);
9309
                  if (name == NULL)
9310
                    return FALSE;
9311
 
9312
                  sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9313
                                                                    sec);
9314
                  if (sym.st_shndx == SHN_BAD)
9315
                    return FALSE;
9316
 
9317
                  sym.st_value += o->output_offset;
9318
 
9319
                  indx = bfd_get_symcount (output_bfd);
9320
                  ret = elf_link_output_sym (finfo, name, &sym, o, NULL);
9321
                  if (ret == 0)
9322
                    return FALSE;
9323
                  else if (ret == 1)
9324
                    finfo->indices[symndx] = indx;
9325
                  else
9326
                    abort ();
9327
                }
9328
              elf_section_data (osec)->this_hdr.sh_info
9329
                = finfo->indices[symndx];
9330
            }
9331
        }
9332
 
9333
      if ((o->flags & SEC_HAS_CONTENTS) == 0
9334
          || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
9335
        continue;
9336
 
9337
      if ((o->flags & SEC_LINKER_CREATED) != 0)
9338
        {
9339
          /* Section was created by _bfd_elf_link_create_dynamic_sections
9340
             or somesuch.  */
9341
          continue;
9342
        }
9343
 
9344
      /* Get the contents of the section.  They have been cached by a
9345
         relaxation routine.  Note that o is a section in an input
9346
         file, so the contents field will not have been set by any of
9347
         the routines which work on output files.  */
9348
      if (elf_section_data (o)->this_hdr.contents != NULL)
9349
        contents = elf_section_data (o)->this_hdr.contents;
9350
      else
9351
        {
9352
          bfd_size_type amt = o->rawsize ? o->rawsize : o->size;
9353
 
9354
          contents = finfo->contents;
9355
          if (! bfd_get_section_contents (input_bfd, o, contents, 0, amt))
9356
            return FALSE;
9357
        }
9358
 
9359
      if ((o->flags & SEC_RELOC) != 0)
9360
        {
9361
          Elf_Internal_Rela *internal_relocs;
9362
          Elf_Internal_Rela *rel, *relend;
9363
          bfd_vma r_type_mask;
9364
          int r_sym_shift;
9365
          int action_discarded;
9366
          int ret;
9367
 
9368
          /* Get the swapped relocs.  */
9369
          internal_relocs
9370
            = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
9371
                                         finfo->internal_relocs, FALSE);
9372
          if (internal_relocs == NULL
9373
              && o->reloc_count > 0)
9374
            return FALSE;
9375
 
9376
          if (bed->s->arch_size == 32)
9377
            {
9378
              r_type_mask = 0xff;
9379
              r_sym_shift = 8;
9380
            }
9381
          else
9382
            {
9383
              r_type_mask = 0xffffffff;
9384
              r_sym_shift = 32;
9385
            }
9386
 
9387
          action_discarded = -1;
9388
          if (!elf_section_ignore_discarded_relocs (o))
9389
            action_discarded = (*bed->action_discarded) (o);
9390
 
9391
          /* Run through the relocs evaluating complex reloc symbols and
9392
             looking for relocs against symbols from discarded sections
9393
             or section symbols from removed link-once sections.
9394
             Complain about relocs against discarded sections.  Zero
9395
             relocs against removed link-once sections.  */
9396
 
9397
          rel = internal_relocs;
9398
          relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
9399
          for ( ; rel < relend; rel++)
9400
            {
9401
              unsigned long r_symndx = rel->r_info >> r_sym_shift;
9402
              unsigned int s_type;
9403
              asection **ps, *sec;
9404
              struct elf_link_hash_entry *h = NULL;
9405
              const char *sym_name;
9406
 
9407
              if (r_symndx == STN_UNDEF)
9408
                continue;
9409
 
9410
              if (r_symndx >= locsymcount
9411
                  || (elf_bad_symtab (input_bfd)
9412
                      && finfo->sections[r_symndx] == NULL))
9413
                {
9414
                  h = sym_hashes[r_symndx - extsymoff];
9415
 
9416
                  /* Badly formatted input files can contain relocs that
9417
                     reference non-existant symbols.  Check here so that
9418
                     we do not seg fault.  */
9419
                  if (h == NULL)
9420
                    {
9421
                      char buffer [32];
9422
 
9423
                      sprintf_vma (buffer, rel->r_info);
9424
                      (*_bfd_error_handler)
9425
                        (_("error: %B contains a reloc (0x%s) for section %A "
9426
                           "that references a non-existent global symbol"),
9427
                         input_bfd, o, buffer);
9428
                      bfd_set_error (bfd_error_bad_value);
9429
                      return FALSE;
9430
                    }
9431
 
9432
                  while (h->root.type == bfd_link_hash_indirect
9433
                         || h->root.type == bfd_link_hash_warning)
9434
                    h = (struct elf_link_hash_entry *) h->root.u.i.link;
9435
 
9436
                  s_type = h->type;
9437
 
9438
                  ps = NULL;
9439
                  if (h->root.type == bfd_link_hash_defined
9440
                      || h->root.type == bfd_link_hash_defweak)
9441
                    ps = &h->root.u.def.section;
9442
 
9443
                  sym_name = h->root.root.string;
9444
                }
9445
              else
9446
                {
9447
                  Elf_Internal_Sym *sym = isymbuf + r_symndx;
9448
 
9449
                  s_type = ELF_ST_TYPE (sym->st_info);
9450
                  ps = &finfo->sections[r_symndx];
9451
                  sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9452
                                               sym, *ps);
9453
                }
9454
 
9455
              if ((s_type == STT_RELC || s_type == STT_SRELC)
9456
                  && !finfo->info->relocatable)
9457
                {
9458
                  bfd_vma val;
9459
                  bfd_vma dot = (rel->r_offset
9460
                                 + o->output_offset + o->output_section->vma);
9461
#ifdef DEBUG
9462
                  printf ("Encountered a complex symbol!");
9463
                  printf (" (input_bfd %s, section %s, reloc %ld\n",
9464
                          input_bfd->filename, o->name, rel - internal_relocs);
9465
                  printf (" symbol: idx  %8.8lx, name %s\n",
9466
                          r_symndx, sym_name);
9467
                  printf (" reloc : info %8.8lx, addr %8.8lx\n",
9468
                          (unsigned long) rel->r_info,
9469
                          (unsigned long) rel->r_offset);
9470
#endif
9471
                  if (!eval_symbol (&val, &sym_name, input_bfd, finfo, dot,
9472
                                    isymbuf, locsymcount, s_type == STT_SRELC))
9473
                    return FALSE;
9474
 
9475
                  /* Symbol evaluated OK.  Update to absolute value.  */
9476
                  set_symbol_value (input_bfd, isymbuf, locsymcount,
9477
                                    r_symndx, val);
9478
                  continue;
9479
                }
9480
 
9481
              if (action_discarded != -1 && ps != NULL)
9482
                {
9483
                  /* Complain if the definition comes from a
9484
                     discarded section.  */
9485
                  if ((sec = *ps) != NULL && elf_discarded_section (sec))
9486
                    {
9487
                      BFD_ASSERT (r_symndx != 0);
9488
                      if (action_discarded & COMPLAIN)
9489
                        (*finfo->info->callbacks->einfo)
9490
                          (_("%X`%s' referenced in section `%A' of %B: "
9491
                             "defined in discarded section `%A' of %B\n"),
9492
                           sym_name, o, input_bfd, sec, sec->owner);
9493
 
9494
                      /* Try to do the best we can to support buggy old
9495
                         versions of gcc.  Pretend that the symbol is
9496
                         really defined in the kept linkonce section.
9497
                         FIXME: This is quite broken.  Modifying the
9498
                         symbol here means we will be changing all later
9499
                         uses of the symbol, not just in this section.  */
9500
                      if (action_discarded & PRETEND)
9501
                        {
9502
                          asection *kept;
9503
 
9504
                          kept = _bfd_elf_check_kept_section (sec,
9505
                                                              finfo->info);
9506
                          if (kept != NULL)
9507
                            {
9508
                              *ps = kept;
9509
                              continue;
9510
                            }
9511
                        }
9512
                    }
9513
                }
9514
            }
9515
 
9516
          /* Relocate the section by invoking a back end routine.
9517
 
9518
             The back end routine is responsible for adjusting the
9519
             section contents as necessary, and (if using Rela relocs
9520
             and generating a relocatable output file) adjusting the
9521
             reloc addend as necessary.
9522
 
9523
             The back end routine does not have to worry about setting
9524
             the reloc address or the reloc symbol index.
9525
 
9526
             The back end routine is given a pointer to the swapped in
9527
             internal symbols, and can access the hash table entries
9528
             for the external symbols via elf_sym_hashes (input_bfd).
9529
 
9530
             When generating relocatable output, the back end routine
9531
             must handle STB_LOCAL/STT_SECTION symbols specially.  The
9532
             output symbol is going to be a section symbol
9533
             corresponding to the output section, which will require
9534
             the addend to be adjusted.  */
9535
 
9536
          ret = (*relocate_section) (output_bfd, finfo->info,
9537
                                     input_bfd, o, contents,
9538
                                     internal_relocs,
9539
                                     isymbuf,
9540
                                     finfo->sections);
9541
          if (!ret)
9542
            return FALSE;
9543
 
9544
          if (ret == 2
9545
              || finfo->info->relocatable
9546
              || finfo->info->emitrelocations)
9547
            {
9548
              Elf_Internal_Rela *irela;
9549
              Elf_Internal_Rela *irelaend;
9550
              bfd_vma last_offset;
9551
              struct elf_link_hash_entry **rel_hash;
9552
              struct elf_link_hash_entry **rel_hash_list;
9553
              Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
9554
              unsigned int next_erel;
9555
              bfd_boolean rela_normal;
9556
 
9557
              input_rel_hdr = &elf_section_data (o)->rel_hdr;
9558
              rela_normal = (bed->rela_normal
9559
                             && (input_rel_hdr->sh_entsize
9560
                                 == bed->s->sizeof_rela));
9561
 
9562
              /* Adjust the reloc addresses and symbol indices.  */
9563
 
9564
              irela = internal_relocs;
9565
              irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
9566
              rel_hash = (elf_section_data (o->output_section)->rel_hashes
9567
                          + elf_section_data (o->output_section)->rel_count
9568
                          + elf_section_data (o->output_section)->rel_count2);
9569
              rel_hash_list = rel_hash;
9570
              last_offset = o->output_offset;
9571
              if (!finfo->info->relocatable)
9572
                last_offset += o->output_section->vma;
9573
              for (next_erel = 0; irela < irelaend; irela++, next_erel++)
9574
                {
9575
                  unsigned long r_symndx;
9576
                  asection *sec;
9577
                  Elf_Internal_Sym sym;
9578
 
9579
                  if (next_erel == bed->s->int_rels_per_ext_rel)
9580
                    {
9581
                      rel_hash++;
9582
                      next_erel = 0;
9583
                    }
9584
 
9585
                  irela->r_offset = _bfd_elf_section_offset (output_bfd,
9586
                                                             finfo->info, o,
9587
                                                             irela->r_offset);
9588
                  if (irela->r_offset >= (bfd_vma) -2)
9589
                    {
9590
                      /* This is a reloc for a deleted entry or somesuch.
9591
                         Turn it into an R_*_NONE reloc, at the same
9592
                         offset as the last reloc.  elf_eh_frame.c and
9593
                         bfd_elf_discard_info rely on reloc offsets
9594
                         being ordered.  */
9595
                      irela->r_offset = last_offset;
9596
                      irela->r_info = 0;
9597
                      irela->r_addend = 0;
9598
                      continue;
9599
                    }
9600
 
9601
                  irela->r_offset += o->output_offset;
9602
 
9603
                  /* Relocs in an executable have to be virtual addresses.  */
9604
                  if (!finfo->info->relocatable)
9605
                    irela->r_offset += o->output_section->vma;
9606
 
9607
                  last_offset = irela->r_offset;
9608
 
9609
                  r_symndx = irela->r_info >> r_sym_shift;
9610
                  if (r_symndx == STN_UNDEF)
9611
                    continue;
9612
 
9613
                  if (r_symndx >= locsymcount
9614
                      || (elf_bad_symtab (input_bfd)
9615
                          && finfo->sections[r_symndx] == NULL))
9616
                    {
9617
                      struct elf_link_hash_entry *rh;
9618
                      unsigned long indx;
9619
 
9620
                      /* This is a reloc against a global symbol.  We
9621
                         have not yet output all the local symbols, so
9622
                         we do not know the symbol index of any global
9623
                         symbol.  We set the rel_hash entry for this
9624
                         reloc to point to the global hash table entry
9625
                         for this symbol.  The symbol index is then
9626
                         set at the end of bfd_elf_final_link.  */
9627
                      indx = r_symndx - extsymoff;
9628
                      rh = elf_sym_hashes (input_bfd)[indx];
9629
                      while (rh->root.type == bfd_link_hash_indirect
9630
                             || rh->root.type == bfd_link_hash_warning)
9631
                        rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
9632
 
9633
                      /* Setting the index to -2 tells
9634
                         elf_link_output_extsym that this symbol is
9635
                         used by a reloc.  */
9636
                      BFD_ASSERT (rh->indx < 0);
9637
                      rh->indx = -2;
9638
 
9639
                      *rel_hash = rh;
9640
 
9641
                      continue;
9642
                    }
9643
 
9644
                  /* This is a reloc against a local symbol.  */
9645
 
9646
                  *rel_hash = NULL;
9647
                  sym = isymbuf[r_symndx];
9648
                  sec = finfo->sections[r_symndx];
9649
                  if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
9650
                    {
9651
                      /* I suppose the backend ought to fill in the
9652
                         section of any STT_SECTION symbol against a
9653
                         processor specific section.  */
9654
                      r_symndx = 0;
9655
                      if (bfd_is_abs_section (sec))
9656
                        ;
9657
                      else if (sec == NULL || sec->owner == NULL)
9658
                        {
9659
                          bfd_set_error (bfd_error_bad_value);
9660
                          return FALSE;
9661
                        }
9662
                      else
9663
                        {
9664
                          asection *osec = sec->output_section;
9665
 
9666
                          /* If we have discarded a section, the output
9667
                             section will be the absolute section.  In
9668
                             case of discarded SEC_MERGE sections, use
9669
                             the kept section.  relocate_section should
9670
                             have already handled discarded linkonce
9671
                             sections.  */
9672
                          if (bfd_is_abs_section (osec)
9673
                              && sec->kept_section != NULL
9674
                              && sec->kept_section->output_section != NULL)
9675
                            {
9676
                              osec = sec->kept_section->output_section;
9677
                              irela->r_addend -= osec->vma;
9678
                            }
9679
 
9680
                          if (!bfd_is_abs_section (osec))
9681
                            {
9682
                              r_symndx = osec->target_index;
9683
                              if (r_symndx == 0)
9684
                                {
9685
                                  struct elf_link_hash_table *htab;
9686
                                  asection *oi;
9687
 
9688
                                  htab = elf_hash_table (finfo->info);
9689
                                  oi = htab->text_index_section;
9690
                                  if ((osec->flags & SEC_READONLY) == 0
9691
                                      && htab->data_index_section != NULL)
9692
                                    oi = htab->data_index_section;
9693
 
9694
                                  if (oi != NULL)
9695
                                    {
9696
                                      irela->r_addend += osec->vma - oi->vma;
9697
                                      r_symndx = oi->target_index;
9698
                                    }
9699
                                }
9700
 
9701
                              BFD_ASSERT (r_symndx != 0);
9702
                            }
9703
                        }
9704
 
9705
                      /* Adjust the addend according to where the
9706
                         section winds up in the output section.  */
9707
                      if (rela_normal)
9708
                        irela->r_addend += sec->output_offset;
9709
                    }
9710
                  else
9711
                    {
9712
                      if (finfo->indices[r_symndx] == -1)
9713
                        {
9714
                          unsigned long shlink;
9715
                          const char *name;
9716
                          asection *osec;
9717
                          long indx;
9718
 
9719
                          if (finfo->info->strip == strip_all)
9720
                            {
9721
                              /* You can't do ld -r -s.  */
9722
                              bfd_set_error (bfd_error_invalid_operation);
9723
                              return FALSE;
9724
                            }
9725
 
9726
                          /* This symbol was skipped earlier, but
9727
                             since it is needed by a reloc, we
9728
                             must output it now.  */
9729
                          shlink = symtab_hdr->sh_link;
9730
                          name = (bfd_elf_string_from_elf_section
9731
                                  (input_bfd, shlink, sym.st_name));
9732
                          if (name == NULL)
9733
                            return FALSE;
9734
 
9735
                          osec = sec->output_section;
9736
                          sym.st_shndx =
9737
                            _bfd_elf_section_from_bfd_section (output_bfd,
9738
                                                               osec);
9739
                          if (sym.st_shndx == SHN_BAD)
9740
                            return FALSE;
9741
 
9742
                          sym.st_value += sec->output_offset;
9743
                          if (! finfo->info->relocatable)
9744
                            {
9745
                              sym.st_value += osec->vma;
9746
                              if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
9747
                                {
9748
                                  /* STT_TLS symbols are relative to PT_TLS
9749
                                     segment base.  */
9750
                                  BFD_ASSERT (elf_hash_table (finfo->info)
9751
                                              ->tls_sec != NULL);
9752
                                  sym.st_value -= (elf_hash_table (finfo->info)
9753
                                                   ->tls_sec->vma);
9754
                                }
9755
                            }
9756
 
9757
                          indx = bfd_get_symcount (output_bfd);
9758
                          ret = elf_link_output_sym (finfo, name, &sym, sec,
9759
                                                     NULL);
9760
                          if (ret == 0)
9761
                            return FALSE;
9762
                          else if (ret == 1)
9763
                            finfo->indices[r_symndx] = indx;
9764
                          else
9765
                            abort ();
9766
                        }
9767
 
9768
                      r_symndx = finfo->indices[r_symndx];
9769
                    }
9770
 
9771
                  irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
9772
                                   | (irela->r_info & r_type_mask));
9773
                }
9774
 
9775
              /* Swap out the relocs.  */
9776
              if (input_rel_hdr->sh_size != 0
9777
                  && !bed->elf_backend_emit_relocs (output_bfd, o,
9778
                                                    input_rel_hdr,
9779
                                                    internal_relocs,
9780
                                                    rel_hash_list))
9781
                return FALSE;
9782
 
9783
              input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
9784
              if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
9785
                {
9786
                  internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
9787
                                      * bed->s->int_rels_per_ext_rel);
9788
                  rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
9789
                  if (!bed->elf_backend_emit_relocs (output_bfd, o,
9790
                                                     input_rel_hdr2,
9791
                                                     internal_relocs,
9792
                                                     rel_hash_list))
9793
                    return FALSE;
9794
                }
9795
            }
9796
        }
9797
 
9798
      /* Write out the modified section contents.  */
9799
      if (bed->elf_backend_write_section
9800
          && (*bed->elf_backend_write_section) (output_bfd, finfo->info, o,
9801
                                                contents))
9802
        {
9803
          /* Section written out.  */
9804
        }
9805
      else switch (o->sec_info_type)
9806
        {
9807
        case ELF_INFO_TYPE_STABS:
9808
          if (! (_bfd_write_section_stabs
9809
                 (output_bfd,
9810
                  &elf_hash_table (finfo->info)->stab_info,
9811
                  o, &elf_section_data (o)->sec_info, contents)))
9812
            return FALSE;
9813
          break;
9814
        case ELF_INFO_TYPE_MERGE:
9815
          if (! _bfd_write_merged_section (output_bfd, o,
9816
                                           elf_section_data (o)->sec_info))
9817
            return FALSE;
9818
          break;
9819
        case ELF_INFO_TYPE_EH_FRAME:
9820
          {
9821
            if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
9822
                                                   o, contents))
9823
              return FALSE;
9824
          }
9825
          break;
9826
        default:
9827
          {
9828
            /* FIXME: octets_per_byte.  */
9829
            if (! (o->flags & SEC_EXCLUDE)
9830
                && ! (o->output_section->flags & SEC_NEVER_LOAD)
9831
                && ! bfd_set_section_contents (output_bfd, o->output_section,
9832
                                               contents,
9833
                                               (file_ptr) o->output_offset,
9834
                                               o->size))
9835
              return FALSE;
9836
          }
9837
          break;
9838
        }
9839
    }
9840
 
9841
  return TRUE;
9842
}
9843
 
9844
/* Generate a reloc when linking an ELF file.  This is a reloc
9845
   requested by the linker, and does not come from any input file.  This
9846
   is used to build constructor and destructor tables when linking
9847
   with -Ur.  */
9848
 
9849
static bfd_boolean
9850
elf_reloc_link_order (bfd *output_bfd,
9851
                      struct bfd_link_info *info,
9852
                      asection *output_section,
9853
                      struct bfd_link_order *link_order)
9854
{
9855
  reloc_howto_type *howto;
9856
  long indx;
9857
  bfd_vma offset;
9858
  bfd_vma addend;
9859
  struct elf_link_hash_entry **rel_hash_ptr;
9860
  Elf_Internal_Shdr *rel_hdr;
9861
  const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9862
  Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
9863
  bfd_byte *erel;
9864
  unsigned int i;
9865
 
9866
  howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
9867
  if (howto == NULL)
9868
    {
9869
      bfd_set_error (bfd_error_bad_value);
9870
      return FALSE;
9871
    }
9872
 
9873
  addend = link_order->u.reloc.p->addend;
9874
 
9875
  /* Figure out the symbol index.  */
9876
  rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
9877
                  + elf_section_data (output_section)->rel_count
9878
                  + elf_section_data (output_section)->rel_count2);
9879
  if (link_order->type == bfd_section_reloc_link_order)
9880
    {
9881
      indx = link_order->u.reloc.p->u.section->target_index;
9882
      BFD_ASSERT (indx != 0);
9883
      *rel_hash_ptr = NULL;
9884
    }
9885
  else
9886
    {
9887
      struct elf_link_hash_entry *h;
9888
 
9889
      /* Treat a reloc against a defined symbol as though it were
9890
         actually against the section.  */
9891
      h = ((struct elf_link_hash_entry *)
9892
           bfd_wrapped_link_hash_lookup (output_bfd, info,
9893
                                         link_order->u.reloc.p->u.name,
9894
                                         FALSE, FALSE, TRUE));
9895
      if (h != NULL
9896
          && (h->root.type == bfd_link_hash_defined
9897
              || h->root.type == bfd_link_hash_defweak))
9898
        {
9899
          asection *section;
9900
 
9901
          section = h->root.u.def.section;
9902
          indx = section->output_section->target_index;
9903
          *rel_hash_ptr = NULL;
9904
          /* It seems that we ought to add the symbol value to the
9905
             addend here, but in practice it has already been added
9906
             because it was passed to constructor_callback.  */
9907
          addend += section->output_section->vma + section->output_offset;
9908
        }
9909
      else if (h != NULL)
9910
        {
9911
          /* Setting the index to -2 tells elf_link_output_extsym that
9912
             this symbol is used by a reloc.  */
9913
          h->indx = -2;
9914
          *rel_hash_ptr = h;
9915
          indx = 0;
9916
        }
9917
      else
9918
        {
9919
          if (! ((*info->callbacks->unattached_reloc)
9920
                 (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
9921
            return FALSE;
9922
          indx = 0;
9923
        }
9924
    }
9925
 
9926
  /* If this is an inplace reloc, we must write the addend into the
9927
     object file.  */
9928
  if (howto->partial_inplace && addend != 0)
9929
    {
9930
      bfd_size_type size;
9931
      bfd_reloc_status_type rstat;
9932
      bfd_byte *buf;
9933
      bfd_boolean ok;
9934
      const char *sym_name;
9935
 
9936
      size = (bfd_size_type) bfd_get_reloc_size (howto);
9937
      buf = (bfd_byte *) bfd_zmalloc (size);
9938
      if (buf == NULL)
9939
        return FALSE;
9940
      rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
9941
      switch (rstat)
9942
        {
9943
        case bfd_reloc_ok:
9944
          break;
9945
 
9946
        default:
9947
        case bfd_reloc_outofrange:
9948
          abort ();
9949
 
9950
        case bfd_reloc_overflow:
9951
          if (link_order->type == bfd_section_reloc_link_order)
9952
            sym_name = bfd_section_name (output_bfd,
9953
                                         link_order->u.reloc.p->u.section);
9954
          else
9955
            sym_name = link_order->u.reloc.p->u.name;
9956
          if (! ((*info->callbacks->reloc_overflow)
9957
                 (info, NULL, sym_name, howto->name, addend, NULL,
9958
                  NULL, (bfd_vma) 0)))
9959
            {
9960
              free (buf);
9961
              return FALSE;
9962
            }
9963
          break;
9964
        }
9965
      ok = bfd_set_section_contents (output_bfd, output_section, buf,
9966
                                     link_order->offset, size);
9967
      free (buf);
9968
      if (! ok)
9969
        return FALSE;
9970
    }
9971
 
9972
  /* The address of a reloc is relative to the section in a
9973
     relocatable file, and is a virtual address in an executable
9974
     file.  */
9975
  offset = link_order->offset;
9976
  if (! info->relocatable)
9977
    offset += output_section->vma;
9978
 
9979
  for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
9980
    {
9981
      irel[i].r_offset = offset;
9982
      irel[i].r_info = 0;
9983
      irel[i].r_addend = 0;
9984
    }
9985
  if (bed->s->arch_size == 32)
9986
    irel[0].r_info = ELF32_R_INFO (indx, howto->type);
9987
  else
9988
    irel[0].r_info = ELF64_R_INFO (indx, howto->type);
9989
 
9990
  rel_hdr = &elf_section_data (output_section)->rel_hdr;
9991
  erel = rel_hdr->contents;
9992
  if (rel_hdr->sh_type == SHT_REL)
9993
    {
9994
      erel += (elf_section_data (output_section)->rel_count
9995
               * bed->s->sizeof_rel);
9996
      (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
9997
    }
9998
  else
9999
    {
10000
      irel[0].r_addend = addend;
10001
      erel += (elf_section_data (output_section)->rel_count
10002
               * bed->s->sizeof_rela);
10003
      (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
10004
    }
10005
 
10006
  ++elf_section_data (output_section)->rel_count;
10007
 
10008
  return TRUE;
10009
}
10010
 
10011
 
10012
/* Get the output vma of the section pointed to by the sh_link field.  */
10013
 
10014
static bfd_vma
10015
elf_get_linked_section_vma (struct bfd_link_order *p)
10016
{
10017
  Elf_Internal_Shdr **elf_shdrp;
10018
  asection *s;
10019
  int elfsec;
10020
 
10021
  s = p->u.indirect.section;
10022
  elf_shdrp = elf_elfsections (s->owner);
10023
  elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
10024
  elfsec = elf_shdrp[elfsec]->sh_link;
10025
  /* PR 290:
10026
     The Intel C compiler generates SHT_IA_64_UNWIND with
10027
     SHF_LINK_ORDER.  But it doesn't set the sh_link or
10028
     sh_info fields.  Hence we could get the situation
10029
     where elfsec is 0.  */
10030
  if (elfsec == 0)
10031
    {
10032
      const struct elf_backend_data *bed
10033
        = get_elf_backend_data (s->owner);
10034
      if (bed->link_order_error_handler)
10035
        bed->link_order_error_handler
10036
          (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
10037
      return 0;
10038
    }
10039
  else
10040
    {
10041
      s = elf_shdrp[elfsec]->bfd_section;
10042
      return s->output_section->vma + s->output_offset;
10043
    }
10044
}
10045
 
10046
 
10047
/* Compare two sections based on the locations of the sections they are
10048
   linked to.  Used by elf_fixup_link_order.  */
10049
 
10050
static int
10051
compare_link_order (const void * a, const void * b)
10052
{
10053
  bfd_vma apos;
10054
  bfd_vma bpos;
10055
 
10056
  apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
10057
  bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
10058
  if (apos < bpos)
10059
    return -1;
10060
  return apos > bpos;
10061
}
10062
 
10063
 
10064
/* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
10065
   order as their linked sections.  Returns false if this could not be done
10066
   because an output section includes both ordered and unordered
10067
   sections.  Ideally we'd do this in the linker proper.  */
10068
 
10069
static bfd_boolean
10070
elf_fixup_link_order (bfd *abfd, asection *o)
10071
{
10072
  int seen_linkorder;
10073
  int seen_other;
10074
  int n;
10075
  struct bfd_link_order *p;
10076
  bfd *sub;
10077
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10078
  unsigned elfsec;
10079
  struct bfd_link_order **sections;
10080
  asection *s, *other_sec, *linkorder_sec;
10081
  bfd_vma offset;
10082
 
10083
  other_sec = NULL;
10084
  linkorder_sec = NULL;
10085
  seen_other = 0;
10086
  seen_linkorder = 0;
10087
  for (p = o->map_head.link_order; p != NULL; p = p->next)
10088
    {
10089
      if (p->type == bfd_indirect_link_order)
10090
        {
10091
          s = p->u.indirect.section;
10092
          sub = s->owner;
10093
          if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10094
              && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
10095
              && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
10096
              && elfsec < elf_numsections (sub)
10097
              && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
10098
              && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
10099
            {
10100
              seen_linkorder++;
10101
              linkorder_sec = s;
10102
            }
10103
          else
10104
            {
10105
              seen_other++;
10106
              other_sec = s;
10107
            }
10108
        }
10109
      else
10110
        seen_other++;
10111
 
10112
      if (seen_other && seen_linkorder)
10113
        {
10114
          if (other_sec && linkorder_sec)
10115
            (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
10116
                                   o, linkorder_sec,
10117
                                   linkorder_sec->owner, other_sec,
10118
                                   other_sec->owner);
10119
          else
10120
            (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
10121
                                   o);
10122
          bfd_set_error (bfd_error_bad_value);
10123
          return FALSE;
10124
        }
10125
    }
10126
 
10127
  if (!seen_linkorder)
10128
    return TRUE;
10129
 
10130
  sections = (struct bfd_link_order **)
10131
    bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
10132
  if (sections == NULL)
10133
    return FALSE;
10134
  seen_linkorder = 0;
10135
 
10136
  for (p = o->map_head.link_order; p != NULL; p = p->next)
10137
    {
10138
      sections[seen_linkorder++] = p;
10139
    }
10140
  /* Sort the input sections in the order of their linked section.  */
10141
  qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
10142
         compare_link_order);
10143
 
10144
  /* Change the offsets of the sections.  */
10145
  offset = 0;
10146
  for (n = 0; n < seen_linkorder; n++)
10147
    {
10148
      s = sections[n]->u.indirect.section;
10149
      offset &= ~(bfd_vma) 0 << s->alignment_power;
10150
      s->output_offset = offset;
10151
      sections[n]->offset = offset;
10152
      /* FIXME: octets_per_byte.  */
10153
      offset += sections[n]->size;
10154
    }
10155
 
10156
  free (sections);
10157
  return TRUE;
10158
}
10159
 
10160
 
10161
/* Do the final step of an ELF link.  */
10162
 
10163
bfd_boolean
10164
bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10165
{
10166
  bfd_boolean dynamic;
10167
  bfd_boolean emit_relocs;
10168
  bfd *dynobj;
10169
  struct elf_final_link_info finfo;
10170
  asection *o;
10171
  struct bfd_link_order *p;
10172
  bfd *sub;
10173
  bfd_size_type max_contents_size;
10174
  bfd_size_type max_external_reloc_size;
10175
  bfd_size_type max_internal_reloc_count;
10176
  bfd_size_type max_sym_count;
10177
  bfd_size_type max_sym_shndx_count;
10178
  file_ptr off;
10179
  Elf_Internal_Sym elfsym;
10180
  unsigned int i;
10181
  Elf_Internal_Shdr *symtab_hdr;
10182
  Elf_Internal_Shdr *symtab_shndx_hdr;
10183
  Elf_Internal_Shdr *symstrtab_hdr;
10184
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10185
  struct elf_outext_info eoinfo;
10186
  bfd_boolean merged;
10187
  size_t relativecount = 0;
10188
  asection *reldyn = 0;
10189
  bfd_size_type amt;
10190
  asection *attr_section = NULL;
10191
  bfd_vma attr_size = 0;
10192
  const char *std_attrs_section;
10193
 
10194
  if (! is_elf_hash_table (info->hash))
10195
    return FALSE;
10196
 
10197
  if (info->shared)
10198
    abfd->flags |= DYNAMIC;
10199
 
10200
  dynamic = elf_hash_table (info)->dynamic_sections_created;
10201
  dynobj = elf_hash_table (info)->dynobj;
10202
 
10203
  emit_relocs = (info->relocatable
10204
                 || info->emitrelocations);
10205
 
10206
  finfo.info = info;
10207
  finfo.output_bfd = abfd;
10208
  finfo.symstrtab = _bfd_elf_stringtab_init ();
10209
  if (finfo.symstrtab == NULL)
10210
    return FALSE;
10211
 
10212
  if (! dynamic)
10213
    {
10214
      finfo.dynsym_sec = NULL;
10215
      finfo.hash_sec = NULL;
10216
      finfo.symver_sec = NULL;
10217
    }
10218
  else
10219
    {
10220
      finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
10221
      finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
10222
      BFD_ASSERT (finfo.dynsym_sec != NULL);
10223
      finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
10224
      /* Note that it is OK if symver_sec is NULL.  */
10225
    }
10226
 
10227
  finfo.contents = NULL;
10228
  finfo.external_relocs = NULL;
10229
  finfo.internal_relocs = NULL;
10230
  finfo.external_syms = NULL;
10231
  finfo.locsym_shndx = NULL;
10232
  finfo.internal_syms = NULL;
10233
  finfo.indices = NULL;
10234
  finfo.sections = NULL;
10235
  finfo.symbuf = NULL;
10236
  finfo.symshndxbuf = NULL;
10237
  finfo.symbuf_count = 0;
10238
  finfo.shndxbuf_size = 0;
10239
 
10240
  /* The object attributes have been merged.  Remove the input
10241
     sections from the link, and set the contents of the output
10242
     secton.  */
10243
  std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
10244
  for (o = abfd->sections; o != NULL; o = o->next)
10245
    {
10246
      if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
10247
          || strcmp (o->name, ".gnu.attributes") == 0)
10248
        {
10249
          for (p = o->map_head.link_order; p != NULL; p = p->next)
10250
            {
10251
              asection *input_section;
10252
 
10253
              if (p->type != bfd_indirect_link_order)
10254
                continue;
10255
              input_section = p->u.indirect.section;
10256
              /* Hack: reset the SEC_HAS_CONTENTS flag so that
10257
                 elf_link_input_bfd ignores this section.  */
10258
              input_section->flags &= ~SEC_HAS_CONTENTS;
10259
            }
10260
 
10261
          attr_size = bfd_elf_obj_attr_size (abfd);
10262
          if (attr_size)
10263
            {
10264
              bfd_set_section_size (abfd, o, attr_size);
10265
              attr_section = o;
10266
              /* Skip this section later on.  */
10267
              o->map_head.link_order = NULL;
10268
            }
10269
          else
10270
            o->flags |= SEC_EXCLUDE;
10271
        }
10272
    }
10273
 
10274
  /* Count up the number of relocations we will output for each output
10275
     section, so that we know the sizes of the reloc sections.  We
10276
     also figure out some maximum sizes.  */
10277
  max_contents_size = 0;
10278
  max_external_reloc_size = 0;
10279
  max_internal_reloc_count = 0;
10280
  max_sym_count = 0;
10281
  max_sym_shndx_count = 0;
10282
  merged = FALSE;
10283
  for (o = abfd->sections; o != NULL; o = o->next)
10284
    {
10285
      struct bfd_elf_section_data *esdo = elf_section_data (o);
10286
      o->reloc_count = 0;
10287
 
10288
      for (p = o->map_head.link_order; p != NULL; p = p->next)
10289
        {
10290
          unsigned int reloc_count = 0;
10291
          struct bfd_elf_section_data *esdi = NULL;
10292
          unsigned int *rel_count1;
10293
 
10294
          if (p->type == bfd_section_reloc_link_order
10295
              || p->type == bfd_symbol_reloc_link_order)
10296
            reloc_count = 1;
10297
          else if (p->type == bfd_indirect_link_order)
10298
            {
10299
              asection *sec;
10300
 
10301
              sec = p->u.indirect.section;
10302
              esdi = elf_section_data (sec);
10303
 
10304
              /* Mark all sections which are to be included in the
10305
                 link.  This will normally be every section.  We need
10306
                 to do this so that we can identify any sections which
10307
                 the linker has decided to not include.  */
10308
              sec->linker_mark = TRUE;
10309
 
10310
              if (sec->flags & SEC_MERGE)
10311
                merged = TRUE;
10312
 
10313
              if (info->relocatable || info->emitrelocations)
10314
                reloc_count = sec->reloc_count;
10315
              else if (bed->elf_backend_count_relocs)
10316
                reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
10317
 
10318
              if (sec->rawsize > max_contents_size)
10319
                max_contents_size = sec->rawsize;
10320
              if (sec->size > max_contents_size)
10321
                max_contents_size = sec->size;
10322
 
10323
              /* We are interested in just local symbols, not all
10324
                 symbols.  */
10325
              if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
10326
                  && (sec->owner->flags & DYNAMIC) == 0)
10327
                {
10328
                  size_t sym_count;
10329
 
10330
                  if (elf_bad_symtab (sec->owner))
10331
                    sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
10332
                                 / bed->s->sizeof_sym);
10333
                  else
10334
                    sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
10335
 
10336
                  if (sym_count > max_sym_count)
10337
                    max_sym_count = sym_count;
10338
 
10339
                  if (sym_count > max_sym_shndx_count
10340
                      && elf_symtab_shndx (sec->owner) != 0)
10341
                    max_sym_shndx_count = sym_count;
10342
 
10343
                  if ((sec->flags & SEC_RELOC) != 0)
10344
                    {
10345
                      size_t ext_size;
10346
 
10347
                      ext_size = elf_section_data (sec)->rel_hdr.sh_size;
10348
                      if (ext_size > max_external_reloc_size)
10349
                        max_external_reloc_size = ext_size;
10350
                      if (sec->reloc_count > max_internal_reloc_count)
10351
                        max_internal_reloc_count = sec->reloc_count;
10352
                    }
10353
                }
10354
            }
10355
 
10356
          if (reloc_count == 0)
10357
            continue;
10358
 
10359
          o->reloc_count += reloc_count;
10360
 
10361
          /* MIPS may have a mix of REL and RELA relocs on sections.
10362
             To support this curious ABI we keep reloc counts in
10363
             elf_section_data too.  We must be careful to add the
10364
             relocations from the input section to the right output
10365
             count.  FIXME: Get rid of one count.  We have
10366
             o->reloc_count == esdo->rel_count + esdo->rel_count2.  */
10367
          rel_count1 = &esdo->rel_count;
10368
          if (esdi != NULL)
10369
            {
10370
              bfd_boolean same_size;
10371
              bfd_size_type entsize1;
10372
 
10373
              entsize1 = esdi->rel_hdr.sh_entsize;
10374
              /* PR 9827: If the header size has not been set yet then
10375
                 assume that it will match the output section's reloc type.  */
10376
              if (entsize1 == 0)
10377
                entsize1 = o->use_rela_p ? bed->s->sizeof_rela : bed->s->sizeof_rel;
10378
              else
10379
                BFD_ASSERT (entsize1 == bed->s->sizeof_rel
10380
                            || entsize1 == bed->s->sizeof_rela);
10381
              same_size = !o->use_rela_p == (entsize1 == bed->s->sizeof_rel);
10382
 
10383
              if (!same_size)
10384
                rel_count1 = &esdo->rel_count2;
10385
 
10386
              if (esdi->rel_hdr2 != NULL)
10387
                {
10388
                  bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize;
10389
                  unsigned int alt_count;
10390
                  unsigned int *rel_count2;
10391
 
10392
                  BFD_ASSERT (entsize2 != entsize1
10393
                              && (entsize2 == bed->s->sizeof_rel
10394
                                  || entsize2 == bed->s->sizeof_rela));
10395
 
10396
                  rel_count2 = &esdo->rel_count2;
10397
                  if (!same_size)
10398
                    rel_count2 = &esdo->rel_count;
10399
 
10400
                  /* The following is probably too simplistic if the
10401
                     backend counts output relocs unusually.  */
10402
                  BFD_ASSERT (bed->elf_backend_count_relocs == NULL);
10403
                  alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2);
10404
                  *rel_count2 += alt_count;
10405
                  reloc_count -= alt_count;
10406
                }
10407
            }
10408
          *rel_count1 += reloc_count;
10409
        }
10410
 
10411
      if (o->reloc_count > 0)
10412
        o->flags |= SEC_RELOC;
10413
      else
10414
        {
10415
          /* Explicitly clear the SEC_RELOC flag.  The linker tends to
10416
             set it (this is probably a bug) and if it is set
10417
             assign_section_numbers will create a reloc section.  */
10418
          o->flags &=~ SEC_RELOC;
10419
        }
10420
 
10421
      /* If the SEC_ALLOC flag is not set, force the section VMA to
10422
         zero.  This is done in elf_fake_sections as well, but forcing
10423
         the VMA to 0 here will ensure that relocs against these
10424
         sections are handled correctly.  */
10425
      if ((o->flags & SEC_ALLOC) == 0
10426
          && ! o->user_set_vma)
10427
        o->vma = 0;
10428
    }
10429
 
10430
  if (! info->relocatable && merged)
10431
    elf_link_hash_traverse (elf_hash_table (info),
10432
                            _bfd_elf_link_sec_merge_syms, abfd);
10433
 
10434
  /* Figure out the file positions for everything but the symbol table
10435
     and the relocs.  We set symcount to force assign_section_numbers
10436
     to create a symbol table.  */
10437
  bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
10438
  BFD_ASSERT (! abfd->output_has_begun);
10439
  if (! _bfd_elf_compute_section_file_positions (abfd, info))
10440
    goto error_return;
10441
 
10442
  /* Set sizes, and assign file positions for reloc sections.  */
10443
  for (o = abfd->sections; o != NULL; o = o->next)
10444
    {
10445
      if ((o->flags & SEC_RELOC) != 0)
10446
        {
10447
          if (!(_bfd_elf_link_size_reloc_section
10448
                (abfd, &elf_section_data (o)->rel_hdr, o)))
10449
            goto error_return;
10450
 
10451
          if (elf_section_data (o)->rel_hdr2
10452
              && !(_bfd_elf_link_size_reloc_section
10453
                   (abfd, elf_section_data (o)->rel_hdr2, o)))
10454
            goto error_return;
10455
        }
10456
 
10457
      /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
10458
         to count upwards while actually outputting the relocations.  */
10459
      elf_section_data (o)->rel_count = 0;
10460
      elf_section_data (o)->rel_count2 = 0;
10461
    }
10462
 
10463
  _bfd_elf_assign_file_positions_for_relocs (abfd);
10464
 
10465
  /* We have now assigned file positions for all the sections except
10466
     .symtab and .strtab.  We start the .symtab section at the current
10467
     file position, and write directly to it.  We build the .strtab
10468
     section in memory.  */
10469
  bfd_get_symcount (abfd) = 0;
10470
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
10471
  /* sh_name is set in prep_headers.  */
10472
  symtab_hdr->sh_type = SHT_SYMTAB;
10473
  /* sh_flags, sh_addr and sh_size all start off zero.  */
10474
  symtab_hdr->sh_entsize = bed->s->sizeof_sym;
10475
  /* sh_link is set in assign_section_numbers.  */
10476
  /* sh_info is set below.  */
10477
  /* sh_offset is set just below.  */
10478
  symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
10479
 
10480
  off = elf_tdata (abfd)->next_file_pos;
10481
  off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
10482
 
10483
  /* Note that at this point elf_tdata (abfd)->next_file_pos is
10484
     incorrect.  We do not yet know the size of the .symtab section.
10485
     We correct next_file_pos below, after we do know the size.  */
10486
 
10487
  /* Allocate a buffer to hold swapped out symbols.  This is to avoid
10488
     continuously seeking to the right position in the file.  */
10489
  if (! info->keep_memory || max_sym_count < 20)
10490
    finfo.symbuf_size = 20;
10491
  else
10492
    finfo.symbuf_size = max_sym_count;
10493
  amt = finfo.symbuf_size;
10494
  amt *= bed->s->sizeof_sym;
10495
  finfo.symbuf = (bfd_byte *) bfd_malloc (amt);
10496
  if (finfo.symbuf == NULL)
10497
    goto error_return;
10498
  if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
10499
    {
10500
      /* Wild guess at number of output symbols.  realloc'd as needed.  */
10501
      amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
10502
      finfo.shndxbuf_size = amt;
10503
      amt *= sizeof (Elf_External_Sym_Shndx);
10504
      finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
10505
      if (finfo.symshndxbuf == NULL)
10506
        goto error_return;
10507
    }
10508
 
10509
  /* Start writing out the symbol table.  The first symbol is always a
10510
     dummy symbol.  */
10511
  if (info->strip != strip_all
10512
      || emit_relocs)
10513
    {
10514
      elfsym.st_value = 0;
10515
      elfsym.st_size = 0;
10516
      elfsym.st_info = 0;
10517
      elfsym.st_other = 0;
10518
      elfsym.st_shndx = SHN_UNDEF;
10519
      if (elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr,
10520
                               NULL) != 1)
10521
        goto error_return;
10522
    }
10523
 
10524
  /* Output a symbol for each section.  We output these even if we are
10525
     discarding local symbols, since they are used for relocs.  These
10526
     symbols have no names.  We store the index of each one in the
10527
     index field of the section, so that we can find it again when
10528
     outputting relocs.  */
10529
  if (info->strip != strip_all
10530
      || emit_relocs)
10531
    {
10532
      elfsym.st_size = 0;
10533
      elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10534
      elfsym.st_other = 0;
10535
      elfsym.st_value = 0;
10536
      for (i = 1; i < elf_numsections (abfd); i++)
10537
        {
10538
          o = bfd_section_from_elf_index (abfd, i);
10539
          if (o != NULL)
10540
            {
10541
              o->target_index = bfd_get_symcount (abfd);
10542
              elfsym.st_shndx = i;
10543
              if (!info->relocatable)
10544
                elfsym.st_value = o->vma;
10545
              if (elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL) != 1)
10546
                goto error_return;
10547
            }
10548
        }
10549
    }
10550
 
10551
  /* Allocate some memory to hold information read in from the input
10552
     files.  */
10553
  if (max_contents_size != 0)
10554
    {
10555
      finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
10556
      if (finfo.contents == NULL)
10557
        goto error_return;
10558
    }
10559
 
10560
  if (max_external_reloc_size != 0)
10561
    {
10562
      finfo.external_relocs = bfd_malloc (max_external_reloc_size);
10563
      if (finfo.external_relocs == NULL)
10564
        goto error_return;
10565
    }
10566
 
10567
  if (max_internal_reloc_count != 0)
10568
    {
10569
      amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
10570
      amt *= sizeof (Elf_Internal_Rela);
10571
      finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
10572
      if (finfo.internal_relocs == NULL)
10573
        goto error_return;
10574
    }
10575
 
10576
  if (max_sym_count != 0)
10577
    {
10578
      amt = max_sym_count * bed->s->sizeof_sym;
10579
      finfo.external_syms = (bfd_byte *) bfd_malloc (amt);
10580
      if (finfo.external_syms == NULL)
10581
        goto error_return;
10582
 
10583
      amt = max_sym_count * sizeof (Elf_Internal_Sym);
10584
      finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
10585
      if (finfo.internal_syms == NULL)
10586
        goto error_return;
10587
 
10588
      amt = max_sym_count * sizeof (long);
10589
      finfo.indices = (long int *) bfd_malloc (amt);
10590
      if (finfo.indices == NULL)
10591
        goto error_return;
10592
 
10593
      amt = max_sym_count * sizeof (asection *);
10594
      finfo.sections = (asection **) bfd_malloc (amt);
10595
      if (finfo.sections == NULL)
10596
        goto error_return;
10597
    }
10598
 
10599
  if (max_sym_shndx_count != 0)
10600
    {
10601
      amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
10602
      finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
10603
      if (finfo.locsym_shndx == NULL)
10604
        goto error_return;
10605
    }
10606
 
10607
  if (elf_hash_table (info)->tls_sec)
10608
    {
10609
      bfd_vma base, end = 0;
10610
      asection *sec;
10611
 
10612
      for (sec = elf_hash_table (info)->tls_sec;
10613
           sec && (sec->flags & SEC_THREAD_LOCAL);
10614
           sec = sec->next)
10615
        {
10616
          bfd_size_type size = sec->size;
10617
 
10618
          if (size == 0
10619
              && (sec->flags & SEC_HAS_CONTENTS) == 0)
10620
            {
10621
              struct bfd_link_order *ord = sec->map_tail.link_order;
10622
 
10623
              if (ord != NULL)
10624
                size = ord->offset + ord->size;
10625
            }
10626
          end = sec->vma + size;
10627
        }
10628
      base = elf_hash_table (info)->tls_sec->vma;
10629
      end = align_power (end, elf_hash_table (info)->tls_sec->alignment_power);
10630
      elf_hash_table (info)->tls_size = end - base;
10631
    }
10632
 
10633
  /* Reorder SHF_LINK_ORDER sections.  */
10634
  for (o = abfd->sections; o != NULL; o = o->next)
10635
    {
10636
      if (!elf_fixup_link_order (abfd, o))
10637
        return FALSE;
10638
    }
10639
 
10640
  /* Since ELF permits relocations to be against local symbols, we
10641
     must have the local symbols available when we do the relocations.
10642
     Since we would rather only read the local symbols once, and we
10643
     would rather not keep them in memory, we handle all the
10644
     relocations for a single input file at the same time.
10645
 
10646
     Unfortunately, there is no way to know the total number of local
10647
     symbols until we have seen all of them, and the local symbol
10648
     indices precede the global symbol indices.  This means that when
10649
     we are generating relocatable output, and we see a reloc against
10650
     a global symbol, we can not know the symbol index until we have
10651
     finished examining all the local symbols to see which ones we are
10652
     going to output.  To deal with this, we keep the relocations in
10653
     memory, and don't output them until the end of the link.  This is
10654
     an unfortunate waste of memory, but I don't see a good way around
10655
     it.  Fortunately, it only happens when performing a relocatable
10656
     link, which is not the common case.  FIXME: If keep_memory is set
10657
     we could write the relocs out and then read them again; I don't
10658
     know how bad the memory loss will be.  */
10659
 
10660
  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
10661
    sub->output_has_begun = FALSE;
10662
  for (o = abfd->sections; o != NULL; o = o->next)
10663
    {
10664
      for (p = o->map_head.link_order; p != NULL; p = p->next)
10665
        {
10666
          if (p->type == bfd_indirect_link_order
10667
              && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
10668
                  == bfd_target_elf_flavour)
10669
              && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
10670
            {
10671
              if (! sub->output_has_begun)
10672
                {
10673
                  if (! elf_link_input_bfd (&finfo, sub))
10674
                    goto error_return;
10675
                  sub->output_has_begun = TRUE;
10676
                }
10677
            }
10678
          else if (p->type == bfd_section_reloc_link_order
10679
                   || p->type == bfd_symbol_reloc_link_order)
10680
            {
10681
              if (! elf_reloc_link_order (abfd, info, o, p))
10682
                goto error_return;
10683
            }
10684
          else
10685
            {
10686
              if (! _bfd_default_link_order (abfd, info, o, p))
10687
                goto error_return;
10688
            }
10689
        }
10690
    }
10691
 
10692
  /* Free symbol buffer if needed.  */
10693
  if (!info->reduce_memory_overheads)
10694
    {
10695
      for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
10696
        if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10697
            && elf_tdata (sub)->symbuf)
10698
          {
10699
            free (elf_tdata (sub)->symbuf);
10700
            elf_tdata (sub)->symbuf = NULL;
10701
          }
10702
    }
10703
 
10704
  /* Output any global symbols that got converted to local in a
10705
     version script or due to symbol visibility.  We do this in a
10706
     separate step since ELF requires all local symbols to appear
10707
     prior to any global symbols.  FIXME: We should only do this if
10708
     some global symbols were, in fact, converted to become local.
10709
     FIXME: Will this work correctly with the Irix 5 linker?  */
10710
  eoinfo.failed = FALSE;
10711
  eoinfo.finfo = &finfo;
10712
  eoinfo.localsyms = TRUE;
10713
  elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
10714
                          &eoinfo);
10715
  if (eoinfo.failed)
10716
    return FALSE;
10717
 
10718
  /* If backend needs to output some local symbols not present in the hash
10719
     table, do it now.  */
10720
  if (bed->elf_backend_output_arch_local_syms)
10721
    {
10722
      typedef int (*out_sym_func)
10723
        (void *, const char *, Elf_Internal_Sym *, asection *,
10724
         struct elf_link_hash_entry *);
10725
 
10726
      if (! ((*bed->elf_backend_output_arch_local_syms)
10727
             (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
10728
        return FALSE;
10729
    }
10730
 
10731
  /* That wrote out all the local symbols.  Finish up the symbol table
10732
     with the global symbols. Even if we want to strip everything we
10733
     can, we still need to deal with those global symbols that got
10734
     converted to local in a version script.  */
10735
 
10736
  /* The sh_info field records the index of the first non local symbol.  */
10737
  symtab_hdr->sh_info = bfd_get_symcount (abfd);
10738
 
10739
  if (dynamic
10740
      && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
10741
    {
10742
      Elf_Internal_Sym sym;
10743
      bfd_byte *dynsym = finfo.dynsym_sec->contents;
10744
      long last_local = 0;
10745
 
10746
      /* Write out the section symbols for the output sections.  */
10747
      if (info->shared || elf_hash_table (info)->is_relocatable_executable)
10748
        {
10749
          asection *s;
10750
 
10751
          sym.st_size = 0;
10752
          sym.st_name = 0;
10753
          sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10754
          sym.st_other = 0;
10755
 
10756
          for (s = abfd->sections; s != NULL; s = s->next)
10757
            {
10758
              int indx;
10759
              bfd_byte *dest;
10760
              long dynindx;
10761
 
10762
              dynindx = elf_section_data (s)->dynindx;
10763
              if (dynindx <= 0)
10764
                continue;
10765
              indx = elf_section_data (s)->this_idx;
10766
              BFD_ASSERT (indx > 0);
10767
              sym.st_shndx = indx;
10768
              if (! check_dynsym (abfd, &sym))
10769
                return FALSE;
10770
              sym.st_value = s->vma;
10771
              dest = dynsym + dynindx * bed->s->sizeof_sym;
10772
              if (last_local < dynindx)
10773
                last_local = dynindx;
10774
              bed->s->swap_symbol_out (abfd, &sym, dest, 0);
10775
            }
10776
        }
10777
 
10778
      /* Write out the local dynsyms.  */
10779
      if (elf_hash_table (info)->dynlocal)
10780
        {
10781
          struct elf_link_local_dynamic_entry *e;
10782
          for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
10783
            {
10784
              asection *s;
10785
              bfd_byte *dest;
10786
 
10787
              /* Copy the internal symbol and turn off visibility.
10788
                 Note that we saved a word of storage and overwrote
10789
                 the original st_name with the dynstr_index.  */
10790
              sym = e->isym;
10791
              sym.st_other &= ~ELF_ST_VISIBILITY (-1);
10792
 
10793
              s = bfd_section_from_elf_index (e->input_bfd,
10794
                                              e->isym.st_shndx);
10795
              if (s != NULL)
10796
                {
10797
                  sym.st_shndx =
10798
                    elf_section_data (s->output_section)->this_idx;
10799
                  if (! check_dynsym (abfd, &sym))
10800
                    return FALSE;
10801
                  sym.st_value = (s->output_section->vma
10802
                                  + s->output_offset
10803
                                  + e->isym.st_value);
10804
                }
10805
 
10806
              if (last_local < e->dynindx)
10807
                last_local = e->dynindx;
10808
 
10809
              dest = dynsym + e->dynindx * bed->s->sizeof_sym;
10810
              bed->s->swap_symbol_out (abfd, &sym, dest, 0);
10811
            }
10812
        }
10813
 
10814
      elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
10815
        last_local + 1;
10816
    }
10817
 
10818
  /* We get the global symbols from the hash table.  */
10819
  eoinfo.failed = FALSE;
10820
  eoinfo.localsyms = FALSE;
10821
  eoinfo.finfo = &finfo;
10822
  elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
10823
                          &eoinfo);
10824
  if (eoinfo.failed)
10825
    return FALSE;
10826
 
10827
  /* If backend needs to output some symbols not present in the hash
10828
     table, do it now.  */
10829
  if (bed->elf_backend_output_arch_syms)
10830
    {
10831
      typedef int (*out_sym_func)
10832
        (void *, const char *, Elf_Internal_Sym *, asection *,
10833
         struct elf_link_hash_entry *);
10834
 
10835
      if (! ((*bed->elf_backend_output_arch_syms)
10836
             (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
10837
        return FALSE;
10838
    }
10839
 
10840
  /* Flush all symbols to the file.  */
10841
  if (! elf_link_flush_output_syms (&finfo, bed))
10842
    return FALSE;
10843
 
10844
  /* Now we know the size of the symtab section.  */
10845
  off += symtab_hdr->sh_size;
10846
 
10847
  symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
10848
  if (symtab_shndx_hdr->sh_name != 0)
10849
    {
10850
      symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
10851
      symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
10852
      symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
10853
      amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
10854
      symtab_shndx_hdr->sh_size = amt;
10855
 
10856
      off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
10857
                                                       off, TRUE);
10858
 
10859
      if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
10860
          || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
10861
        return FALSE;
10862
    }
10863
 
10864
 
10865
  /* Finish up and write out the symbol string table (.strtab)
10866
     section.  */
10867
  symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
10868
  /* sh_name was set in prep_headers.  */
10869
  symstrtab_hdr->sh_type = SHT_STRTAB;
10870
  symstrtab_hdr->sh_flags = 0;
10871
  symstrtab_hdr->sh_addr = 0;
10872
  symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
10873
  symstrtab_hdr->sh_entsize = 0;
10874
  symstrtab_hdr->sh_link = 0;
10875
  symstrtab_hdr->sh_info = 0;
10876
  /* sh_offset is set just below.  */
10877
  symstrtab_hdr->sh_addralign = 1;
10878
 
10879
  off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
10880
  elf_tdata (abfd)->next_file_pos = off;
10881
 
10882
  if (bfd_get_symcount (abfd) > 0)
10883
    {
10884
      if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
10885
          || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
10886
        return FALSE;
10887
    }
10888
 
10889
  /* Adjust the relocs to have the correct symbol indices.  */
10890
  for (o = abfd->sections; o != NULL; o = o->next)
10891
    {
10892
      if ((o->flags & SEC_RELOC) == 0)
10893
        continue;
10894
 
10895
      elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
10896
                              elf_section_data (o)->rel_count,
10897
                              elf_section_data (o)->rel_hashes);
10898
      if (elf_section_data (o)->rel_hdr2 != NULL)
10899
        elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
10900
                                elf_section_data (o)->rel_count2,
10901
                                (elf_section_data (o)->rel_hashes
10902
                                 + elf_section_data (o)->rel_count));
10903
 
10904
      /* Set the reloc_count field to 0 to prevent write_relocs from
10905
         trying to swap the relocs out itself.  */
10906
      o->reloc_count = 0;
10907
    }
10908
 
10909
  if (dynamic && info->combreloc && dynobj != NULL)
10910
    relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
10911
 
10912
  /* If we are linking against a dynamic object, or generating a
10913
     shared library, finish up the dynamic linking information.  */
10914
  if (dynamic)
10915
    {
10916
      bfd_byte *dyncon, *dynconend;
10917
 
10918
      /* Fix up .dynamic entries.  */
10919
      o = bfd_get_section_by_name (dynobj, ".dynamic");
10920
      BFD_ASSERT (o != NULL);
10921
 
10922
      dyncon = o->contents;
10923
      dynconend = o->contents + o->size;
10924
      for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
10925
        {
10926
          Elf_Internal_Dyn dyn;
10927
          const char *name;
10928
          unsigned int type;
10929
 
10930
          bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
10931
 
10932
          switch (dyn.d_tag)
10933
            {
10934
            default:
10935
              continue;
10936
            case DT_NULL:
10937
              if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
10938
                {
10939
                  switch (elf_section_data (reldyn)->this_hdr.sh_type)
10940
                    {
10941
                    case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
10942
                    case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
10943
                    default: continue;
10944
                    }
10945
                  dyn.d_un.d_val = relativecount;
10946
                  relativecount = 0;
10947
                  break;
10948
                }
10949
              continue;
10950
 
10951
            case DT_INIT:
10952
              name = info->init_function;
10953
              goto get_sym;
10954
            case DT_FINI:
10955
              name = info->fini_function;
10956
            get_sym:
10957
              {
10958
                struct elf_link_hash_entry *h;
10959
 
10960
                h = elf_link_hash_lookup (elf_hash_table (info), name,
10961
                                          FALSE, FALSE, TRUE);
10962
                if (h != NULL
10963
                    && (h->root.type == bfd_link_hash_defined
10964
                        || h->root.type == bfd_link_hash_defweak))
10965
                  {
10966
                    dyn.d_un.d_ptr = h->root.u.def.value;
10967
                    o = h->root.u.def.section;
10968
                    if (o->output_section != NULL)
10969
                      dyn.d_un.d_ptr += (o->output_section->vma
10970
                                         + o->output_offset);
10971
                    else
10972
                      {
10973
                        /* The symbol is imported from another shared
10974
                           library and does not apply to this one.  */
10975
                        dyn.d_un.d_ptr = 0;
10976
                      }
10977
                    break;
10978
                  }
10979
              }
10980
              continue;
10981
 
10982
            case DT_PREINIT_ARRAYSZ:
10983
              name = ".preinit_array";
10984
              goto get_size;
10985
            case DT_INIT_ARRAYSZ:
10986
              name = ".init_array";
10987
              goto get_size;
10988
            case DT_FINI_ARRAYSZ:
10989
              name = ".fini_array";
10990
            get_size:
10991
              o = bfd_get_section_by_name (abfd, name);
10992
              if (o == NULL)
10993
                {
10994
                  (*_bfd_error_handler)
10995
                    (_("%B: could not find output section %s"), abfd, name);
10996
                  goto error_return;
10997
                }
10998
              if (o->size == 0)
10999
                (*_bfd_error_handler)
11000
                  (_("warning: %s section has zero size"), name);
11001
              dyn.d_un.d_val = o->size;
11002
              break;
11003
 
11004
            case DT_PREINIT_ARRAY:
11005
              name = ".preinit_array";
11006
              goto get_vma;
11007
            case DT_INIT_ARRAY:
11008
              name = ".init_array";
11009
              goto get_vma;
11010
            case DT_FINI_ARRAY:
11011
              name = ".fini_array";
11012
              goto get_vma;
11013
 
11014
            case DT_HASH:
11015
              name = ".hash";
11016
              goto get_vma;
11017
            case DT_GNU_HASH:
11018
              name = ".gnu.hash";
11019
              goto get_vma;
11020
            case DT_STRTAB:
11021
              name = ".dynstr";
11022
              goto get_vma;
11023
            case DT_SYMTAB:
11024
              name = ".dynsym";
11025
              goto get_vma;
11026
            case DT_VERDEF:
11027
              name = ".gnu.version_d";
11028
              goto get_vma;
11029
            case DT_VERNEED:
11030
              name = ".gnu.version_r";
11031
              goto get_vma;
11032
            case DT_VERSYM:
11033
              name = ".gnu.version";
11034
            get_vma:
11035
              o = bfd_get_section_by_name (abfd, name);
11036
              if (o == NULL)
11037
                {
11038
                  (*_bfd_error_handler)
11039
                    (_("%B: could not find output section %s"), abfd, name);
11040
                  goto error_return;
11041
                }
11042
              dyn.d_un.d_ptr = o->vma;
11043
              break;
11044
 
11045
            case DT_REL:
11046
            case DT_RELA:
11047
            case DT_RELSZ:
11048
            case DT_RELASZ:
11049
              if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
11050
                type = SHT_REL;
11051
              else
11052
                type = SHT_RELA;
11053
              dyn.d_un.d_val = 0;
11054
              dyn.d_un.d_ptr = 0;
11055
              for (i = 1; i < elf_numsections (abfd); i++)
11056
                {
11057
                  Elf_Internal_Shdr *hdr;
11058
 
11059
                  hdr = elf_elfsections (abfd)[i];
11060
                  if (hdr->sh_type == type
11061
                      && (hdr->sh_flags & SHF_ALLOC) != 0)
11062
                    {
11063
                      if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
11064
                        dyn.d_un.d_val += hdr->sh_size;
11065
                      else
11066
                        {
11067
                          if (dyn.d_un.d_ptr == 0
11068
                              || hdr->sh_addr < dyn.d_un.d_ptr)
11069
                            dyn.d_un.d_ptr = hdr->sh_addr;
11070
                        }
11071
                    }
11072
                }
11073
              break;
11074
            }
11075
          bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
11076
        }
11077
    }
11078
 
11079
  /* If we have created any dynamic sections, then output them.  */
11080
  if (dynobj != NULL)
11081
    {
11082
      if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
11083
        goto error_return;
11084
 
11085
      /* Check for DT_TEXTREL (late, in case the backend removes it).  */
11086
      if (info->warn_shared_textrel && info->shared)
11087
        {
11088
          bfd_byte *dyncon, *dynconend;
11089
 
11090
          /* Fix up .dynamic entries.  */
11091
          o = bfd_get_section_by_name (dynobj, ".dynamic");
11092
          BFD_ASSERT (o != NULL);
11093
 
11094
          dyncon = o->contents;
11095
          dynconend = o->contents + o->size;
11096
          for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11097
            {
11098
              Elf_Internal_Dyn dyn;
11099
 
11100
              bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11101
 
11102
              if (dyn.d_tag == DT_TEXTREL)
11103
                {
11104
                 info->callbacks->einfo
11105
                    (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
11106
                  break;
11107
                }
11108
            }
11109
        }
11110
 
11111
      for (o = dynobj->sections; o != NULL; o = o->next)
11112
        {
11113
          if ((o->flags & SEC_HAS_CONTENTS) == 0
11114
              || o->size == 0
11115
              || o->output_section == bfd_abs_section_ptr)
11116
            continue;
11117
          if ((o->flags & SEC_LINKER_CREATED) == 0)
11118
            {
11119
              /* At this point, we are only interested in sections
11120
                 created by _bfd_elf_link_create_dynamic_sections.  */
11121
              continue;
11122
            }
11123
          if (elf_hash_table (info)->stab_info.stabstr == o)
11124
            continue;
11125
          if (elf_hash_table (info)->eh_info.hdr_sec == o)
11126
            continue;
11127
          if ((elf_section_data (o->output_section)->this_hdr.sh_type
11128
               != SHT_STRTAB)
11129
              || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
11130
            {
11131
              /* FIXME: octets_per_byte.  */
11132
              if (! bfd_set_section_contents (abfd, o->output_section,
11133
                                              o->contents,
11134
                                              (file_ptr) o->output_offset,
11135
                                              o->size))
11136
                goto error_return;
11137
            }
11138
          else
11139
            {
11140
              /* The contents of the .dynstr section are actually in a
11141
                 stringtab.  */
11142
              off = elf_section_data (o->output_section)->this_hdr.sh_offset;
11143
              if (bfd_seek (abfd, off, SEEK_SET) != 0
11144
                  || ! _bfd_elf_strtab_emit (abfd,
11145
                                             elf_hash_table (info)->dynstr))
11146
                goto error_return;
11147
            }
11148
        }
11149
    }
11150
 
11151
  if (info->relocatable)
11152
    {
11153
      bfd_boolean failed = FALSE;
11154
 
11155
      bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
11156
      if (failed)
11157
        goto error_return;
11158
    }
11159
 
11160
  /* If we have optimized stabs strings, output them.  */
11161
  if (elf_hash_table (info)->stab_info.stabstr != NULL)
11162
    {
11163
      if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
11164
        goto error_return;
11165
    }
11166
 
11167
  if (info->eh_frame_hdr)
11168
    {
11169
      if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
11170
        goto error_return;
11171
    }
11172
 
11173
  if (finfo.symstrtab != NULL)
11174
    _bfd_stringtab_free (finfo.symstrtab);
11175
  if (finfo.contents != NULL)
11176
    free (finfo.contents);
11177
  if (finfo.external_relocs != NULL)
11178
    free (finfo.external_relocs);
11179
  if (finfo.internal_relocs != NULL)
11180
    free (finfo.internal_relocs);
11181
  if (finfo.external_syms != NULL)
11182
    free (finfo.external_syms);
11183
  if (finfo.locsym_shndx != NULL)
11184
    free (finfo.locsym_shndx);
11185
  if (finfo.internal_syms != NULL)
11186
    free (finfo.internal_syms);
11187
  if (finfo.indices != NULL)
11188
    free (finfo.indices);
11189
  if (finfo.sections != NULL)
11190
    free (finfo.sections);
11191
  if (finfo.symbuf != NULL)
11192
    free (finfo.symbuf);
11193
  if (finfo.symshndxbuf != NULL)
11194
    free (finfo.symshndxbuf);
11195
  for (o = abfd->sections; o != NULL; o = o->next)
11196
    {
11197
      if ((o->flags & SEC_RELOC) != 0
11198
          && elf_section_data (o)->rel_hashes != NULL)
11199
        free (elf_section_data (o)->rel_hashes);
11200
    }
11201
 
11202
  elf_tdata (abfd)->linker = TRUE;
11203
 
11204
  if (attr_section)
11205
    {
11206
      bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
11207
      if (contents == NULL)
11208
        return FALSE;   /* Bail out and fail.  */
11209
      bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
11210
      bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
11211
      free (contents);
11212
    }
11213
 
11214
  return TRUE;
11215
 
11216
 error_return:
11217
  if (finfo.symstrtab != NULL)
11218
    _bfd_stringtab_free (finfo.symstrtab);
11219
  if (finfo.contents != NULL)
11220
    free (finfo.contents);
11221
  if (finfo.external_relocs != NULL)
11222
    free (finfo.external_relocs);
11223
  if (finfo.internal_relocs != NULL)
11224
    free (finfo.internal_relocs);
11225
  if (finfo.external_syms != NULL)
11226
    free (finfo.external_syms);
11227
  if (finfo.locsym_shndx != NULL)
11228
    free (finfo.locsym_shndx);
11229
  if (finfo.internal_syms != NULL)
11230
    free (finfo.internal_syms);
11231
  if (finfo.indices != NULL)
11232
    free (finfo.indices);
11233
  if (finfo.sections != NULL)
11234
    free (finfo.sections);
11235
  if (finfo.symbuf != NULL)
11236
    free (finfo.symbuf);
11237
  if (finfo.symshndxbuf != NULL)
11238
    free (finfo.symshndxbuf);
11239
  for (o = abfd->sections; o != NULL; o = o->next)
11240
    {
11241
      if ((o->flags & SEC_RELOC) != 0
11242
          && elf_section_data (o)->rel_hashes != NULL)
11243
        free (elf_section_data (o)->rel_hashes);
11244
    }
11245
 
11246
  return FALSE;
11247
}
11248
 
11249
/* Initialize COOKIE for input bfd ABFD.  */
11250
 
11251
static bfd_boolean
11252
init_reloc_cookie (struct elf_reloc_cookie *cookie,
11253
                   struct bfd_link_info *info, bfd *abfd)
11254
{
11255
  Elf_Internal_Shdr *symtab_hdr;
11256
  const struct elf_backend_data *bed;
11257
 
11258
  bed = get_elf_backend_data (abfd);
11259
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11260
 
11261
  cookie->abfd = abfd;
11262
  cookie->sym_hashes = elf_sym_hashes (abfd);
11263
  cookie->bad_symtab = elf_bad_symtab (abfd);
11264
  if (cookie->bad_symtab)
11265
    {
11266
      cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
11267
      cookie->extsymoff = 0;
11268
    }
11269
  else
11270
    {
11271
      cookie->locsymcount = symtab_hdr->sh_info;
11272
      cookie->extsymoff = symtab_hdr->sh_info;
11273
    }
11274
 
11275
  if (bed->s->arch_size == 32)
11276
    cookie->r_sym_shift = 8;
11277
  else
11278
    cookie->r_sym_shift = 32;
11279
 
11280
  cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
11281
  if (cookie->locsyms == NULL && cookie->locsymcount != 0)
11282
    {
11283
      cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
11284
                                              cookie->locsymcount, 0,
11285
                                              NULL, NULL, NULL);
11286
      if (cookie->locsyms == NULL)
11287
        {
11288
          info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
11289
          return FALSE;
11290
        }
11291
      if (info->keep_memory)
11292
        symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
11293
    }
11294
  return TRUE;
11295
}
11296
 
11297
/* Free the memory allocated by init_reloc_cookie, if appropriate.  */
11298
 
11299
static void
11300
fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
11301
{
11302
  Elf_Internal_Shdr *symtab_hdr;
11303
 
11304
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11305
  if (cookie->locsyms != NULL
11306
      && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
11307
    free (cookie->locsyms);
11308
}
11309
 
11310
/* Initialize the relocation information in COOKIE for input section SEC
11311
   of input bfd ABFD.  */
11312
 
11313
static bfd_boolean
11314
init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11315
                        struct bfd_link_info *info, bfd *abfd,
11316
                        asection *sec)
11317
{
11318
  const struct elf_backend_data *bed;
11319
 
11320
  if (sec->reloc_count == 0)
11321
    {
11322
      cookie->rels = NULL;
11323
      cookie->relend = NULL;
11324
    }
11325
  else
11326
    {
11327
      bed = get_elf_backend_data (abfd);
11328
 
11329
      cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
11330
                                                info->keep_memory);
11331
      if (cookie->rels == NULL)
11332
        return FALSE;
11333
      cookie->rel = cookie->rels;
11334
      cookie->relend = (cookie->rels
11335
                        + sec->reloc_count * bed->s->int_rels_per_ext_rel);
11336
    }
11337
  cookie->rel = cookie->rels;
11338
  return TRUE;
11339
}
11340
 
11341
/* Free the memory allocated by init_reloc_cookie_rels,
11342
   if appropriate.  */
11343
 
11344
static void
11345
fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11346
                        asection *sec)
11347
{
11348
  if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
11349
    free (cookie->rels);
11350
}
11351
 
11352
/* Initialize the whole of COOKIE for input section SEC.  */
11353
 
11354
static bfd_boolean
11355
init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11356
                               struct bfd_link_info *info,
11357
                               asection *sec)
11358
{
11359
  if (!init_reloc_cookie (cookie, info, sec->owner))
11360
    goto error1;
11361
  if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
11362
    goto error2;
11363
  return TRUE;
11364
 
11365
 error2:
11366
  fini_reloc_cookie (cookie, sec->owner);
11367
 error1:
11368
  return FALSE;
11369
}
11370
 
11371
/* Free the memory allocated by init_reloc_cookie_for_section,
11372
   if appropriate.  */
11373
 
11374
static void
11375
fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11376
                               asection *sec)
11377
{
11378
  fini_reloc_cookie_rels (cookie, sec);
11379
  fini_reloc_cookie (cookie, sec->owner);
11380
}
11381
 
11382
/* Garbage collect unused sections.  */
11383
 
11384
/* Default gc_mark_hook.  */
11385
 
11386
asection *
11387
_bfd_elf_gc_mark_hook (asection *sec,
11388
                       struct bfd_link_info *info ATTRIBUTE_UNUSED,
11389
                       Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
11390
                       struct elf_link_hash_entry *h,
11391
                       Elf_Internal_Sym *sym)
11392
{
11393
  const char *sec_name;
11394
 
11395
  if (h != NULL)
11396
    {
11397
      switch (h->root.type)
11398
        {
11399
        case bfd_link_hash_defined:
11400
        case bfd_link_hash_defweak:
11401
          return h->root.u.def.section;
11402
 
11403
        case bfd_link_hash_common:
11404
          return h->root.u.c.p->section;
11405
 
11406
        case bfd_link_hash_undefined:
11407
        case bfd_link_hash_undefweak:
11408
          /* To work around a glibc bug, keep all XXX input sections
11409
             when there is an as yet undefined reference to __start_XXX
11410
             or __stop_XXX symbols.  The linker will later define such
11411
             symbols for orphan input sections that have a name
11412
             representable as a C identifier.  */
11413
          if (strncmp (h->root.root.string, "__start_", 8) == 0)
11414
            sec_name = h->root.root.string + 8;
11415
          else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
11416
            sec_name = h->root.root.string + 7;
11417
          else
11418
            sec_name = NULL;
11419
 
11420
          if (sec_name && *sec_name != '\0')
11421
            {
11422
              bfd *i;
11423
 
11424
              for (i = info->input_bfds; i; i = i->link_next)
11425
                {
11426
                  sec = bfd_get_section_by_name (i, sec_name);
11427
                  if (sec)
11428
                    sec->flags |= SEC_KEEP;
11429
                }
11430
            }
11431
          break;
11432
 
11433
        default:
11434
          break;
11435
        }
11436
    }
11437
  else
11438
    return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
11439
 
11440
  return NULL;
11441
}
11442
 
11443
/* COOKIE->rel describes a relocation against section SEC, which is
11444
   a section we've decided to keep.  Return the section that contains
11445
   the relocation symbol, or NULL if no section contains it.  */
11446
 
11447
asection *
11448
_bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
11449
                       elf_gc_mark_hook_fn gc_mark_hook,
11450
                       struct elf_reloc_cookie *cookie)
11451
{
11452
  unsigned long r_symndx;
11453
  struct elf_link_hash_entry *h;
11454
 
11455
  r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
11456
  if (r_symndx == 0)
11457
    return NULL;
11458
 
11459
  if (r_symndx >= cookie->locsymcount
11460
      || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
11461
    {
11462
      h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
11463
      while (h->root.type == bfd_link_hash_indirect
11464
             || h->root.type == bfd_link_hash_warning)
11465
        h = (struct elf_link_hash_entry *) h->root.u.i.link;
11466
      return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
11467
    }
11468
 
11469
  return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
11470
                          &cookie->locsyms[r_symndx]);
11471
}
11472
 
11473
/* COOKIE->rel describes a relocation against section SEC, which is
11474
   a section we've decided to keep.  Mark the section that contains
11475
   the relocation symbol.  */
11476
 
11477
bfd_boolean
11478
_bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
11479
                        asection *sec,
11480
                        elf_gc_mark_hook_fn gc_mark_hook,
11481
                        struct elf_reloc_cookie *cookie)
11482
{
11483
  asection *rsec;
11484
 
11485
  rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
11486
  if (rsec && !rsec->gc_mark)
11487
    {
11488
      if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
11489
        rsec->gc_mark = 1;
11490
      else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
11491
        return FALSE;
11492
    }
11493
  return TRUE;
11494
}
11495
 
11496
/* The mark phase of garbage collection.  For a given section, mark
11497
   it and any sections in this section's group, and all the sections
11498
   which define symbols to which it refers.  */
11499
 
11500
bfd_boolean
11501
_bfd_elf_gc_mark (struct bfd_link_info *info,
11502
                  asection *sec,
11503
                  elf_gc_mark_hook_fn gc_mark_hook)
11504
{
11505
  bfd_boolean ret;
11506
  asection *group_sec, *eh_frame;
11507
 
11508
  sec->gc_mark = 1;
11509
 
11510
  /* Mark all the sections in the group.  */
11511
  group_sec = elf_section_data (sec)->next_in_group;
11512
  if (group_sec && !group_sec->gc_mark)
11513
    if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
11514
      return FALSE;
11515
 
11516
  /* Look through the section relocs.  */
11517
  ret = TRUE;
11518
  eh_frame = elf_eh_frame_section (sec->owner);
11519
  if ((sec->flags & SEC_RELOC) != 0
11520
      && sec->reloc_count > 0
11521
      && sec != eh_frame)
11522
    {
11523
      struct elf_reloc_cookie cookie;
11524
 
11525
      if (!init_reloc_cookie_for_section (&cookie, info, sec))
11526
        ret = FALSE;
11527
      else
11528
        {
11529
          for (; cookie.rel < cookie.relend; cookie.rel++)
11530
            if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
11531
              {
11532
                ret = FALSE;
11533
                break;
11534
              }
11535
          fini_reloc_cookie_for_section (&cookie, sec);
11536
        }
11537
    }
11538
 
11539
  if (ret && eh_frame && elf_fde_list (sec))
11540
    {
11541
      struct elf_reloc_cookie cookie;
11542
 
11543
      if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
11544
        ret = FALSE;
11545
      else
11546
        {
11547
          if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
11548
                                      gc_mark_hook, &cookie))
11549
            ret = FALSE;
11550
          fini_reloc_cookie_for_section (&cookie, eh_frame);
11551
        }
11552
    }
11553
 
11554
  return ret;
11555
}
11556
 
11557
/* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
11558
 
11559
struct elf_gc_sweep_symbol_info
11560
{
11561
  struct bfd_link_info *info;
11562
  void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
11563
                       bfd_boolean);
11564
};
11565
 
11566
static bfd_boolean
11567
elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
11568
{
11569
  if (h->root.type == bfd_link_hash_warning)
11570
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
11571
 
11572
  if ((h->root.type == bfd_link_hash_defined
11573
       || h->root.type == bfd_link_hash_defweak)
11574
      && !h->root.u.def.section->gc_mark
11575
      && !(h->root.u.def.section->owner->flags & DYNAMIC))
11576
    {
11577
      struct elf_gc_sweep_symbol_info *inf =
11578
          (struct elf_gc_sweep_symbol_info *) data;
11579
      (*inf->hide_symbol) (inf->info, h, TRUE);
11580
    }
11581
 
11582
  return TRUE;
11583
}
11584
 
11585
/* The sweep phase of garbage collection.  Remove all garbage sections.  */
11586
 
11587
typedef bfd_boolean (*gc_sweep_hook_fn)
11588
  (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
11589
 
11590
static bfd_boolean
11591
elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
11592
{
11593
  bfd *sub;
11594
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11595
  gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
11596
  unsigned long section_sym_count;
11597
  struct elf_gc_sweep_symbol_info sweep_info;
11598
 
11599
  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11600
    {
11601
      asection *o;
11602
 
11603
      if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
11604
        continue;
11605
 
11606
      for (o = sub->sections; o != NULL; o = o->next)
11607
        {
11608
          /* When any section in a section group is kept, we keep all
11609
             sections in the section group.  If the first member of
11610
             the section group is excluded, we will also exclude the
11611
             group section.  */
11612
          if (o->flags & SEC_GROUP)
11613
            {
11614
              asection *first = elf_next_in_group (o);
11615
              o->gc_mark = first->gc_mark;
11616
            }
11617
          else if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
11618
                   || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0
11619
                   || elf_section_data (o)->this_hdr.sh_type == SHT_NOTE)
11620
            {
11621
              /* Keep debug, special and SHT_NOTE sections.  */
11622
              o->gc_mark = 1;
11623
            }
11624
 
11625
          if (o->gc_mark)
11626
            continue;
11627
 
11628
          /* Skip sweeping sections already excluded.  */
11629
          if (o->flags & SEC_EXCLUDE)
11630
            continue;
11631
 
11632
          /* Since this is early in the link process, it is simple
11633
             to remove a section from the output.  */
11634
          o->flags |= SEC_EXCLUDE;
11635
 
11636
          if (info->print_gc_sections && o->size != 0)
11637
            _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
11638
 
11639
          /* But we also have to update some of the relocation
11640
             info we collected before.  */
11641
          if (gc_sweep_hook
11642
              && (o->flags & SEC_RELOC) != 0
11643
              && o->reloc_count > 0
11644
              && !bfd_is_abs_section (o->output_section))
11645
            {
11646
              Elf_Internal_Rela *internal_relocs;
11647
              bfd_boolean r;
11648
 
11649
              internal_relocs
11650
                = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
11651
                                             info->keep_memory);
11652
              if (internal_relocs == NULL)
11653
                return FALSE;
11654
 
11655
              r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
11656
 
11657
              if (elf_section_data (o)->relocs != internal_relocs)
11658
                free (internal_relocs);
11659
 
11660
              if (!r)
11661
                return FALSE;
11662
            }
11663
        }
11664
    }
11665
 
11666
  /* Remove the symbols that were in the swept sections from the dynamic
11667
     symbol table.  GCFIXME: Anyone know how to get them out of the
11668
     static symbol table as well?  */
11669
  sweep_info.info = info;
11670
  sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
11671
  elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
11672
                          &sweep_info);
11673
 
11674
  _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
11675
  return TRUE;
11676
}
11677
 
11678
/* Propagate collected vtable information.  This is called through
11679
   elf_link_hash_traverse.  */
11680
 
11681
static bfd_boolean
11682
elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
11683
{
11684
  if (h->root.type == bfd_link_hash_warning)
11685
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
11686
 
11687
  /* Those that are not vtables.  */
11688
  if (h->vtable == NULL || h->vtable->parent == NULL)
11689
    return TRUE;
11690
 
11691
  /* Those vtables that do not have parents, we cannot merge.  */
11692
  if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
11693
    return TRUE;
11694
 
11695
  /* If we've already been done, exit.  */
11696
  if (h->vtable->used && h->vtable->used[-1])
11697
    return TRUE;
11698
 
11699
  /* Make sure the parent's table is up to date.  */
11700
  elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
11701
 
11702
  if (h->vtable->used == NULL)
11703
    {
11704
      /* None of this table's entries were referenced.  Re-use the
11705
         parent's table.  */
11706
      h->vtable->used = h->vtable->parent->vtable->used;
11707
      h->vtable->size = h->vtable->parent->vtable->size;
11708
    }
11709
  else
11710
    {
11711
      size_t n;
11712
      bfd_boolean *cu, *pu;
11713
 
11714
      /* Or the parent's entries into ours.  */
11715
      cu = h->vtable->used;
11716
      cu[-1] = TRUE;
11717
      pu = h->vtable->parent->vtable->used;
11718
      if (pu != NULL)
11719
        {
11720
          const struct elf_backend_data *bed;
11721
          unsigned int log_file_align;
11722
 
11723
          bed = get_elf_backend_data (h->root.u.def.section->owner);
11724
          log_file_align = bed->s->log_file_align;
11725
          n = h->vtable->parent->vtable->size >> log_file_align;
11726
          while (n--)
11727
            {
11728
              if (*pu)
11729
                *cu = TRUE;
11730
              pu++;
11731
              cu++;
11732
            }
11733
        }
11734
    }
11735
 
11736
  return TRUE;
11737
}
11738
 
11739
static bfd_boolean
11740
elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
11741
{
11742
  asection *sec;
11743
  bfd_vma hstart, hend;
11744
  Elf_Internal_Rela *relstart, *relend, *rel;
11745
  const struct elf_backend_data *bed;
11746
  unsigned int log_file_align;
11747
 
11748
  if (h->root.type == bfd_link_hash_warning)
11749
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
11750
 
11751
  /* Take care of both those symbols that do not describe vtables as
11752
     well as those that are not loaded.  */
11753
  if (h->vtable == NULL || h->vtable->parent == NULL)
11754
    return TRUE;
11755
 
11756
  BFD_ASSERT (h->root.type == bfd_link_hash_defined
11757
              || h->root.type == bfd_link_hash_defweak);
11758
 
11759
  sec = h->root.u.def.section;
11760
  hstart = h->root.u.def.value;
11761
  hend = hstart + h->size;
11762
 
11763
  relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
11764
  if (!relstart)
11765
    return *(bfd_boolean *) okp = FALSE;
11766
  bed = get_elf_backend_data (sec->owner);
11767
  log_file_align = bed->s->log_file_align;
11768
 
11769
  relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
11770
 
11771
  for (rel = relstart; rel < relend; ++rel)
11772
    if (rel->r_offset >= hstart && rel->r_offset < hend)
11773
      {
11774
        /* If the entry is in use, do nothing.  */
11775
        if (h->vtable->used
11776
            && (rel->r_offset - hstart) < h->vtable->size)
11777
          {
11778
            bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
11779
            if (h->vtable->used[entry])
11780
              continue;
11781
          }
11782
        /* Otherwise, kill it.  */
11783
        rel->r_offset = rel->r_info = rel->r_addend = 0;
11784
      }
11785
 
11786
  return TRUE;
11787
}
11788
 
11789
/* Mark sections containing dynamically referenced symbols.  When
11790
   building shared libraries, we must assume that any visible symbol is
11791
   referenced.  */
11792
 
11793
bfd_boolean
11794
bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
11795
{
11796
  struct bfd_link_info *info = (struct bfd_link_info *) inf;
11797
 
11798
  if (h->root.type == bfd_link_hash_warning)
11799
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
11800
 
11801
  if ((h->root.type == bfd_link_hash_defined
11802
       || h->root.type == bfd_link_hash_defweak)
11803
      && (h->ref_dynamic
11804
          || (!info->executable
11805
              && h->def_regular
11806
              && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
11807
              && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN)))
11808
    h->root.u.def.section->flags |= SEC_KEEP;
11809
 
11810
  return TRUE;
11811
}
11812
 
11813
/* Keep all sections containing symbols undefined on the command-line,
11814
   and the section containing the entry symbol.  */
11815
 
11816
void
11817
_bfd_elf_gc_keep (struct bfd_link_info *info)
11818
{
11819
  struct bfd_sym_chain *sym;
11820
 
11821
  for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
11822
    {
11823
      struct elf_link_hash_entry *h;
11824
 
11825
      h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
11826
                                FALSE, FALSE, FALSE);
11827
 
11828
      if (h != NULL
11829
          && (h->root.type == bfd_link_hash_defined
11830
              || h->root.type == bfd_link_hash_defweak)
11831
          && !bfd_is_abs_section (h->root.u.def.section))
11832
        h->root.u.def.section->flags |= SEC_KEEP;
11833
    }
11834
}
11835
 
11836
/* Do mark and sweep of unused sections.  */
11837
 
11838
bfd_boolean
11839
bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
11840
{
11841
  bfd_boolean ok = TRUE;
11842
  bfd *sub;
11843
  elf_gc_mark_hook_fn gc_mark_hook;
11844
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11845
 
11846
  if (!bed->can_gc_sections
11847
      || !is_elf_hash_table (info->hash))
11848
    {
11849
      (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
11850
      return TRUE;
11851
    }
11852
 
11853
  bed->gc_keep (info);
11854
 
11855
  /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
11856
     at the .eh_frame section if we can mark the FDEs individually.  */
11857
  _bfd_elf_begin_eh_frame_parsing (info);
11858
  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11859
    {
11860
      asection *sec;
11861
      struct elf_reloc_cookie cookie;
11862
 
11863
      sec = bfd_get_section_by_name (sub, ".eh_frame");
11864
      if (sec && init_reloc_cookie_for_section (&cookie, info, sec))
11865
        {
11866
          _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
11867
          if (elf_section_data (sec)->sec_info)
11868
            elf_eh_frame_section (sub) = sec;
11869
          fini_reloc_cookie_for_section (&cookie, sec);
11870
        }
11871
    }
11872
  _bfd_elf_end_eh_frame_parsing (info);
11873
 
11874
  /* Apply transitive closure to the vtable entry usage info.  */
11875
  elf_link_hash_traverse (elf_hash_table (info),
11876
                          elf_gc_propagate_vtable_entries_used,
11877
                          &ok);
11878
  if (!ok)
11879
    return FALSE;
11880
 
11881
  /* Kill the vtable relocations that were not used.  */
11882
  elf_link_hash_traverse (elf_hash_table (info),
11883
                          elf_gc_smash_unused_vtentry_relocs,
11884
                          &ok);
11885
  if (!ok)
11886
    return FALSE;
11887
 
11888
  /* Mark dynamically referenced symbols.  */
11889
  if (elf_hash_table (info)->dynamic_sections_created)
11890
    elf_link_hash_traverse (elf_hash_table (info),
11891
                            bed->gc_mark_dynamic_ref,
11892
                            info);
11893
 
11894
  /* Grovel through relocs to find out who stays ...  */
11895
  gc_mark_hook = bed->gc_mark_hook;
11896
  for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11897
    {
11898
      asection *o;
11899
 
11900
      if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
11901
        continue;
11902
 
11903
      for (o = sub->sections; o != NULL; o = o->next)
11904
        if ((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP && !o->gc_mark)
11905
          if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
11906
            return FALSE;
11907
    }
11908
 
11909
  /* Allow the backend to mark additional target specific sections.  */
11910
  if (bed->gc_mark_extra_sections)
11911
    bed->gc_mark_extra_sections (info, gc_mark_hook);
11912
 
11913
  /* ... and mark SEC_EXCLUDE for those that go.  */
11914
  return elf_gc_sweep (abfd, info);
11915
}
11916
 
11917
/* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
11918
 
11919
bfd_boolean
11920
bfd_elf_gc_record_vtinherit (bfd *abfd,
11921
                             asection *sec,
11922
                             struct elf_link_hash_entry *h,
11923
                             bfd_vma offset)
11924
{
11925
  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
11926
  struct elf_link_hash_entry **search, *child;
11927
  bfd_size_type extsymcount;
11928
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11929
 
11930
  /* The sh_info field of the symtab header tells us where the
11931
     external symbols start.  We don't care about the local symbols at
11932
     this point.  */
11933
  extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
11934
  if (!elf_bad_symtab (abfd))
11935
    extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
11936
 
11937
  sym_hashes = elf_sym_hashes (abfd);
11938
  sym_hashes_end = sym_hashes + extsymcount;
11939
 
11940
  /* Hunt down the child symbol, which is in this section at the same
11941
     offset as the relocation.  */
11942
  for (search = sym_hashes; search != sym_hashes_end; ++search)
11943
    {
11944
      if ((child = *search) != NULL
11945
          && (child->root.type == bfd_link_hash_defined
11946
              || child->root.type == bfd_link_hash_defweak)
11947
          && child->root.u.def.section == sec
11948
          && child->root.u.def.value == offset)
11949
        goto win;
11950
    }
11951
 
11952
  (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
11953
                         abfd, sec, (unsigned long) offset);
11954
  bfd_set_error (bfd_error_invalid_operation);
11955
  return FALSE;
11956
 
11957
 win:
11958
  if (!child->vtable)
11959
    {
11960
      child->vtable = (struct elf_link_virtual_table_entry *)
11961
          bfd_zalloc (abfd, sizeof (*child->vtable));
11962
      if (!child->vtable)
11963
        return FALSE;
11964
    }
11965
  if (!h)
11966
    {
11967
      /* This *should* only be the absolute section.  It could potentially
11968
         be that someone has defined a non-global vtable though, which
11969
         would be bad.  It isn't worth paging in the local symbols to be
11970
         sure though; that case should simply be handled by the assembler.  */
11971
 
11972
      child->vtable->parent = (struct elf_link_hash_entry *) -1;
11973
    }
11974
  else
11975
    child->vtable->parent = h;
11976
 
11977
  return TRUE;
11978
}
11979
 
11980
/* Called from check_relocs to record the existence of a VTENTRY reloc.  */
11981
 
11982
bfd_boolean
11983
bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
11984
                           asection *sec ATTRIBUTE_UNUSED,
11985
                           struct elf_link_hash_entry *h,
11986
                           bfd_vma addend)
11987
{
11988
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11989
  unsigned int log_file_align = bed->s->log_file_align;
11990
 
11991
  if (!h->vtable)
11992
    {
11993
      h->vtable = (struct elf_link_virtual_table_entry *)
11994
          bfd_zalloc (abfd, sizeof (*h->vtable));
11995
      if (!h->vtable)
11996
        return FALSE;
11997
    }
11998
 
11999
  if (addend >= h->vtable->size)
12000
    {
12001
      size_t size, bytes, file_align;
12002
      bfd_boolean *ptr = h->vtable->used;
12003
 
12004
      /* While the symbol is undefined, we have to be prepared to handle
12005
         a zero size.  */
12006
      file_align = 1 << log_file_align;
12007
      if (h->root.type == bfd_link_hash_undefined)
12008
        size = addend + file_align;
12009
      else
12010
        {
12011
          size = h->size;
12012
          if (addend >= size)
12013
            {
12014
              /* Oops!  We've got a reference past the defined end of
12015
                 the table.  This is probably a bug -- shall we warn?  */
12016
              size = addend + file_align;
12017
            }
12018
        }
12019
      size = (size + file_align - 1) & -file_align;
12020
 
12021
      /* Allocate one extra entry for use as a "done" flag for the
12022
         consolidation pass.  */
12023
      bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
12024
 
12025
      if (ptr)
12026
        {
12027
          ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
12028
 
12029
          if (ptr != NULL)
12030
            {
12031
              size_t oldbytes;
12032
 
12033
              oldbytes = (((h->vtable->size >> log_file_align) + 1)
12034
                          * sizeof (bfd_boolean));
12035
              memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
12036
            }
12037
        }
12038
      else
12039
        ptr = (bfd_boolean *) bfd_zmalloc (bytes);
12040
 
12041
      if (ptr == NULL)
12042
        return FALSE;
12043
 
12044
      /* And arrange for that done flag to be at index -1.  */
12045
      h->vtable->used = ptr + 1;
12046
      h->vtable->size = size;
12047
    }
12048
 
12049
  h->vtable->used[addend >> log_file_align] = TRUE;
12050
 
12051
  return TRUE;
12052
}
12053
 
12054
struct alloc_got_off_arg {
12055
  bfd_vma gotoff;
12056
  struct bfd_link_info *info;
12057
};
12058
 
12059
/* We need a special top-level link routine to convert got reference counts
12060
   to real got offsets.  */
12061
 
12062
static bfd_boolean
12063
elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
12064
{
12065
  struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
12066
  bfd *obfd = gofarg->info->output_bfd;
12067
  const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12068
 
12069
  if (h->root.type == bfd_link_hash_warning)
12070
    h = (struct elf_link_hash_entry *) h->root.u.i.link;
12071
 
12072
  if (h->got.refcount > 0)
12073
    {
12074
      h->got.offset = gofarg->gotoff;
12075
      gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
12076
    }
12077
  else
12078
    h->got.offset = (bfd_vma) -1;
12079
 
12080
  return TRUE;
12081
}
12082
 
12083
/* And an accompanying bit to work out final got entry offsets once
12084
   we're done.  Should be called from final_link.  */
12085
 
12086
bfd_boolean
12087
bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
12088
                                        struct bfd_link_info *info)
12089
{
12090
  bfd *i;
12091
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12092
  bfd_vma gotoff;
12093
  struct alloc_got_off_arg gofarg;
12094
 
12095
  BFD_ASSERT (abfd == info->output_bfd);
12096
 
12097
  if (! is_elf_hash_table (info->hash))
12098
    return FALSE;
12099
 
12100
  /* The GOT offset is relative to the .got section, but the GOT header is
12101
     put into the .got.plt section, if the backend uses it.  */
12102
  if (bed->want_got_plt)
12103
    gotoff = 0;
12104
  else
12105
    gotoff = bed->got_header_size;
12106
 
12107
  /* Do the local .got entries first.  */
12108
  for (i = info->input_bfds; i; i = i->link_next)
12109
    {
12110
      bfd_signed_vma *local_got;
12111
      bfd_size_type j, locsymcount;
12112
      Elf_Internal_Shdr *symtab_hdr;
12113
 
12114
      if (bfd_get_flavour (i) != bfd_target_elf_flavour)
12115
        continue;
12116
 
12117
      local_got = elf_local_got_refcounts (i);
12118
      if (!local_got)
12119
        continue;
12120
 
12121
      symtab_hdr = &elf_tdata (i)->symtab_hdr;
12122
      if (elf_bad_symtab (i))
12123
        locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12124
      else
12125
        locsymcount = symtab_hdr->sh_info;
12126
 
12127
      for (j = 0; j < locsymcount; ++j)
12128
        {
12129
          if (local_got[j] > 0)
12130
            {
12131
              local_got[j] = gotoff;
12132
              gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
12133
            }
12134
          else
12135
            local_got[j] = (bfd_vma) -1;
12136
        }
12137
    }
12138
 
12139
  /* Then the global .got entries.  .plt refcounts are handled by
12140
     adjust_dynamic_symbol  */
12141
  gofarg.gotoff = gotoff;
12142
  gofarg.info = info;
12143
  elf_link_hash_traverse (elf_hash_table (info),
12144
                          elf_gc_allocate_got_offsets,
12145
                          &gofarg);
12146
  return TRUE;
12147
}
12148
 
12149
/* Many folk need no more in the way of final link than this, once
12150
   got entry reference counting is enabled.  */
12151
 
12152
bfd_boolean
12153
bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
12154
{
12155
  if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
12156
    return FALSE;
12157
 
12158
  /* Invoke the regular ELF backend linker to do all the work.  */
12159
  return bfd_elf_final_link (abfd, info);
12160
}
12161
 
12162
bfd_boolean
12163
bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
12164
{
12165
  struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
12166
 
12167
  if (rcookie->bad_symtab)
12168
    rcookie->rel = rcookie->rels;
12169
 
12170
  for (; rcookie->rel < rcookie->relend; rcookie->rel++)
12171
    {
12172
      unsigned long r_symndx;
12173
 
12174
      if (! rcookie->bad_symtab)
12175
        if (rcookie->rel->r_offset > offset)
12176
          return FALSE;
12177
      if (rcookie->rel->r_offset != offset)
12178
        continue;
12179
 
12180
      r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
12181
      if (r_symndx == SHN_UNDEF)
12182
        return TRUE;
12183
 
12184
      if (r_symndx >= rcookie->locsymcount
12185
          || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12186
        {
12187
          struct elf_link_hash_entry *h;
12188
 
12189
          h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
12190
 
12191
          while (h->root.type == bfd_link_hash_indirect
12192
                 || h->root.type == bfd_link_hash_warning)
12193
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
12194
 
12195
          if ((h->root.type == bfd_link_hash_defined
12196
               || h->root.type == bfd_link_hash_defweak)
12197
              && elf_discarded_section (h->root.u.def.section))
12198
            return TRUE;
12199
          else
12200
            return FALSE;
12201
        }
12202
      else
12203
        {
12204
          /* It's not a relocation against a global symbol,
12205
             but it could be a relocation against a local
12206
             symbol for a discarded section.  */
12207
          asection *isec;
12208
          Elf_Internal_Sym *isym;
12209
 
12210
          /* Need to: get the symbol; get the section.  */
12211
          isym = &rcookie->locsyms[r_symndx];
12212
          isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
12213
          if (isec != NULL && elf_discarded_section (isec))
12214
            return TRUE;
12215
        }
12216
      return FALSE;
12217
    }
12218
  return FALSE;
12219
}
12220
 
12221
/* Discard unneeded references to discarded sections.
12222
   Returns TRUE if any section's size was changed.  */
12223
/* This function assumes that the relocations are in sorted order,
12224
   which is true for all known assemblers.  */
12225
 
12226
bfd_boolean
12227
bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
12228
{
12229
  struct elf_reloc_cookie cookie;
12230
  asection *stab, *eh;
12231
  const struct elf_backend_data *bed;
12232
  bfd *abfd;
12233
  bfd_boolean ret = FALSE;
12234
 
12235
  if (info->traditional_format
12236
      || !is_elf_hash_table (info->hash))
12237
    return FALSE;
12238
 
12239
  _bfd_elf_begin_eh_frame_parsing (info);
12240
  for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
12241
    {
12242
      if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12243
        continue;
12244
 
12245
      bed = get_elf_backend_data (abfd);
12246
 
12247
      if ((abfd->flags & DYNAMIC) != 0)
12248
        continue;
12249
 
12250
      eh = NULL;
12251
      if (!info->relocatable)
12252
        {
12253
          eh = bfd_get_section_by_name (abfd, ".eh_frame");
12254
          if (eh != NULL
12255
              && (eh->size == 0
12256
                  || bfd_is_abs_section (eh->output_section)))
12257
            eh = NULL;
12258
        }
12259
 
12260
      stab = bfd_get_section_by_name (abfd, ".stab");
12261
      if (stab != NULL
12262
          && (stab->size == 0
12263
              || bfd_is_abs_section (stab->output_section)
12264
              || stab->sec_info_type != ELF_INFO_TYPE_STABS))
12265
        stab = NULL;
12266
 
12267
      if (stab == NULL
12268
          && eh == NULL
12269
          && bed->elf_backend_discard_info == NULL)
12270
        continue;
12271
 
12272
      if (!init_reloc_cookie (&cookie, info, abfd))
12273
        return FALSE;
12274
 
12275
      if (stab != NULL
12276
          && stab->reloc_count > 0
12277
          && init_reloc_cookie_rels (&cookie, info, abfd, stab))
12278
        {
12279
          if (_bfd_discard_section_stabs (abfd, stab,
12280
                                          elf_section_data (stab)->sec_info,
12281
                                          bfd_elf_reloc_symbol_deleted_p,
12282
                                          &cookie))
12283
            ret = TRUE;
12284
          fini_reloc_cookie_rels (&cookie, stab);
12285
        }
12286
 
12287
      if (eh != NULL
12288
          && init_reloc_cookie_rels (&cookie, info, abfd, eh))
12289
        {
12290
          _bfd_elf_parse_eh_frame (abfd, info, eh, &cookie);
12291
          if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
12292
                                                 bfd_elf_reloc_symbol_deleted_p,
12293
                                                 &cookie))
12294
            ret = TRUE;
12295
          fini_reloc_cookie_rels (&cookie, eh);
12296
        }
12297
 
12298
      if (bed->elf_backend_discard_info != NULL
12299
          && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
12300
        ret = TRUE;
12301
 
12302
      fini_reloc_cookie (&cookie, abfd);
12303
    }
12304
  _bfd_elf_end_eh_frame_parsing (info);
12305
 
12306
  if (info->eh_frame_hdr
12307
      && !info->relocatable
12308
      && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
12309
    ret = TRUE;
12310
 
12311
  return ret;
12312
}
12313
 
12314
/* For a SHT_GROUP section, return the group signature.  For other
12315
   sections, return the normal section name.  */
12316
 
12317
static const char *
12318
section_signature (asection *sec)
12319
{
12320
  if ((sec->flags & SEC_GROUP) != 0
12321
      && elf_next_in_group (sec) != NULL
12322
      && elf_group_name (elf_next_in_group (sec)) != NULL)
12323
    return elf_group_name (elf_next_in_group (sec));
12324
  return sec->name;
12325
}
12326
 
12327
void
12328
_bfd_elf_section_already_linked (bfd *abfd, asection *sec,
12329
                                 struct bfd_link_info *info)
12330
{
12331
  flagword flags;
12332
  const char *name, *p;
12333
  struct bfd_section_already_linked *l;
12334
  struct bfd_section_already_linked_hash_entry *already_linked_list;
12335
 
12336
  if (sec->output_section == bfd_abs_section_ptr)
12337
    return;
12338
 
12339
  flags = sec->flags;
12340
 
12341
  /* Return if it isn't a linkonce section.  A comdat group section
12342
     also has SEC_LINK_ONCE set.  */
12343
  if ((flags & SEC_LINK_ONCE) == 0)
12344
    return;
12345
 
12346
  /* Don't put group member sections on our list of already linked
12347
     sections.  They are handled as a group via their group section.  */
12348
  if (elf_sec_group (sec) != NULL)
12349
    return;
12350
 
12351
  /* FIXME: When doing a relocatable link, we may have trouble
12352
     copying relocations in other sections that refer to local symbols
12353
     in the section being discarded.  Those relocations will have to
12354
     be converted somehow; as of this writing I'm not sure that any of
12355
     the backends handle that correctly.
12356
 
12357
     It is tempting to instead not discard link once sections when
12358
     doing a relocatable link (technically, they should be discarded
12359
     whenever we are building constructors).  However, that fails,
12360
     because the linker winds up combining all the link once sections
12361
     into a single large link once section, which defeats the purpose
12362
     of having link once sections in the first place.
12363
 
12364
     Also, not merging link once sections in a relocatable link
12365
     causes trouble for MIPS ELF, which relies on link once semantics
12366
     to handle the .reginfo section correctly.  */
12367
 
12368
  name = section_signature (sec);
12369
 
12370
  if (CONST_STRNEQ (name, ".gnu.linkonce.")
12371
      && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
12372
    p++;
12373
  else
12374
    p = name;
12375
 
12376
  already_linked_list = bfd_section_already_linked_table_lookup (p);
12377
 
12378
  for (l = already_linked_list->entry; l != NULL; l = l->next)
12379
    {
12380
      /* We may have 2 different types of sections on the list: group
12381
         sections and linkonce sections.  Match like sections.  */
12382
      if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
12383
          && strcmp (name, section_signature (l->sec)) == 0
12384
          && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
12385
        {
12386
          /* The section has already been linked.  See if we should
12387
             issue a warning.  */
12388
          switch (flags & SEC_LINK_DUPLICATES)
12389
            {
12390
            default:
12391
              abort ();
12392
 
12393
            case SEC_LINK_DUPLICATES_DISCARD:
12394
              break;
12395
 
12396
            case SEC_LINK_DUPLICATES_ONE_ONLY:
12397
              (*_bfd_error_handler)
12398
                (_("%B: ignoring duplicate section `%A'"),
12399
                 abfd, sec);
12400
              break;
12401
 
12402
            case SEC_LINK_DUPLICATES_SAME_SIZE:
12403
              if (sec->size != l->sec->size)
12404
                (*_bfd_error_handler)
12405
                  (_("%B: duplicate section `%A' has different size"),
12406
                   abfd, sec);
12407
              break;
12408
 
12409
            case SEC_LINK_DUPLICATES_SAME_CONTENTS:
12410
              if (sec->size != l->sec->size)
12411
                (*_bfd_error_handler)
12412
                  (_("%B: duplicate section `%A' has different size"),
12413
                   abfd, sec);
12414
              else if (sec->size != 0)
12415
                {
12416
                  bfd_byte *sec_contents, *l_sec_contents;
12417
 
12418
                  if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents))
12419
                    (*_bfd_error_handler)
12420
                      (_("%B: warning: could not read contents of section `%A'"),
12421
                       abfd, sec);
12422
                  else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
12423
                                                        &l_sec_contents))
12424
                    (*_bfd_error_handler)
12425
                      (_("%B: warning: could not read contents of section `%A'"),
12426
                       l->sec->owner, l->sec);
12427
                  else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
12428
                    (*_bfd_error_handler)
12429
                      (_("%B: warning: duplicate section `%A' has different contents"),
12430
                       abfd, sec);
12431
 
12432
                  if (sec_contents)
12433
                    free (sec_contents);
12434
                  if (l_sec_contents)
12435
                    free (l_sec_contents);
12436
                }
12437
              break;
12438
            }
12439
 
12440
          /* Set the output_section field so that lang_add_section
12441
             does not create a lang_input_section structure for this
12442
             section.  Since there might be a symbol in the section
12443
             being discarded, we must retain a pointer to the section
12444
             which we are really going to use.  */
12445
          sec->output_section = bfd_abs_section_ptr;
12446
          sec->kept_section = l->sec;
12447
 
12448
          if (flags & SEC_GROUP)
12449
            {
12450
              asection *first = elf_next_in_group (sec);
12451
              asection *s = first;
12452
 
12453
              while (s != NULL)
12454
                {
12455
                  s->output_section = bfd_abs_section_ptr;
12456
                  /* Record which group discards it.  */
12457
                  s->kept_section = l->sec;
12458
                  s = elf_next_in_group (s);
12459
                  /* These lists are circular.  */
12460
                  if (s == first)
12461
                    break;
12462
                }
12463
            }
12464
 
12465
          return;
12466
        }
12467
    }
12468
 
12469
  /* A single member comdat group section may be discarded by a
12470
     linkonce section and vice versa.  */
12471
 
12472
  if ((flags & SEC_GROUP) != 0)
12473
    {
12474
      asection *first = elf_next_in_group (sec);
12475
 
12476
      if (first != NULL && elf_next_in_group (first) == first)
12477
        /* Check this single member group against linkonce sections.  */
12478
        for (l = already_linked_list->entry; l != NULL; l = l->next)
12479
          if ((l->sec->flags & SEC_GROUP) == 0
12480
              && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
12481
              && bfd_elf_match_symbols_in_sections (l->sec, first, info))
12482
            {
12483
              first->output_section = bfd_abs_section_ptr;
12484
              first->kept_section = l->sec;
12485
              sec->output_section = bfd_abs_section_ptr;
12486
              break;
12487
            }
12488
    }
12489
  else
12490
    /* Check this linkonce section against single member groups.  */
12491
    for (l = already_linked_list->entry; l != NULL; l = l->next)
12492
      if (l->sec->flags & SEC_GROUP)
12493
        {
12494
          asection *first = elf_next_in_group (l->sec);
12495
 
12496
          if (first != NULL
12497
              && elf_next_in_group (first) == first
12498
              && bfd_elf_match_symbols_in_sections (first, sec, info))
12499
            {
12500
              sec->output_section = bfd_abs_section_ptr;
12501
              sec->kept_section = first;
12502
              break;
12503
            }
12504
        }
12505
 
12506
  /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
12507
     referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
12508
     specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
12509
     prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
12510
     matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
12511
     but its `.gnu.linkonce.t.F' is discarded means we chose one-only
12512
     `.gnu.linkonce.t.F' section from a different bfd not requiring any
12513
     `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
12514
     The reverse order cannot happen as there is never a bfd with only the
12515
     `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
12516
     matter as here were are looking only for cross-bfd sections.  */
12517
 
12518
  if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
12519
    for (l = already_linked_list->entry; l != NULL; l = l->next)
12520
      if ((l->sec->flags & SEC_GROUP) == 0
12521
          && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
12522
        {
12523
          if (abfd != l->sec->owner)
12524
            sec->output_section = bfd_abs_section_ptr;
12525
          break;
12526
        }
12527
 
12528
  /* This is the first section with this name.  Record it.  */
12529
  if (! bfd_section_already_linked_table_insert (already_linked_list, sec))
12530
    info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
12531
}
12532
 
12533
bfd_boolean
12534
_bfd_elf_common_definition (Elf_Internal_Sym *sym)
12535
{
12536
  return sym->st_shndx == SHN_COMMON;
12537
}
12538
 
12539
unsigned int
12540
_bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
12541
{
12542
  return SHN_COMMON;
12543
}
12544
 
12545
asection *
12546
_bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
12547
{
12548
  return bfd_com_section_ptr;
12549
}
12550
 
12551
bfd_vma
12552
_bfd_elf_default_got_elt_size (bfd *abfd,
12553
                               struct bfd_link_info *info ATTRIBUTE_UNUSED,
12554
                               struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
12555
                               bfd *ibfd ATTRIBUTE_UNUSED,
12556
                               unsigned long symndx ATTRIBUTE_UNUSED)
12557
{
12558
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12559
  return bed->s->arch_size / 8;
12560
}
12561
 
12562
/* Routines to support the creation of dynamic relocs.  */
12563
 
12564
/* Return true if NAME is a name of a relocation
12565
   section associated with section S.  */
12566
 
12567
static bfd_boolean
12568
is_reloc_section (bfd_boolean rela, const char * name, asection * s)
12569
{
12570
  if (rela)
12571
    return CONST_STRNEQ (name, ".rela")
12572
      && strcmp (bfd_get_section_name (NULL, s), name + 5) == 0;
12573
 
12574
  return CONST_STRNEQ (name, ".rel")
12575
    && strcmp (bfd_get_section_name (NULL, s), name + 4) == 0;
12576
}
12577
 
12578
/* Returns the name of the dynamic reloc section associated with SEC.  */
12579
 
12580
static const char *
12581
get_dynamic_reloc_section_name (bfd *       abfd,
12582
                                asection *  sec,
12583
                                bfd_boolean is_rela)
12584
{
12585
  const char * name;
12586
  unsigned int strndx = elf_elfheader (abfd)->e_shstrndx;
12587
  unsigned int shnam = elf_section_data (sec)->rel_hdr.sh_name;
12588
 
12589
  name = bfd_elf_string_from_elf_section (abfd, strndx, shnam);
12590
  if (name == NULL)
12591
    return NULL;
12592
 
12593
  if (! is_reloc_section (is_rela, name, sec))
12594
    {
12595
      static bfd_boolean complained = FALSE;
12596
 
12597
      if (! complained)
12598
        {
12599
          (*_bfd_error_handler)
12600
            (_("%B: bad relocation section name `%s\'"),  abfd, name);
12601
          complained = TRUE;
12602
        }
12603
      name = NULL;
12604
    }
12605
 
12606
  return name;
12607
}
12608
 
12609
/* Returns the dynamic reloc section associated with SEC.
12610
   If necessary compute the name of the dynamic reloc section based
12611
   on SEC's name (looked up in ABFD's string table) and the setting
12612
   of IS_RELA.  */
12613
 
12614
asection *
12615
_bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
12616
                                    asection *  sec,
12617
                                    bfd_boolean is_rela)
12618
{
12619
  asection * reloc_sec = elf_section_data (sec)->sreloc;
12620
 
12621
  if (reloc_sec == NULL)
12622
    {
12623
      const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
12624
 
12625
      if (name != NULL)
12626
        {
12627
          reloc_sec = bfd_get_section_by_name (abfd, name);
12628
 
12629
          if (reloc_sec != NULL)
12630
            elf_section_data (sec)->sreloc = reloc_sec;
12631
        }
12632
    }
12633
 
12634
  return reloc_sec;
12635
}
12636
 
12637
/* Returns the dynamic reloc section associated with SEC.  If the
12638
   section does not exist it is created and attached to the DYNOBJ
12639
   bfd and stored in the SRELOC field of SEC's elf_section_data
12640
   structure.
12641
 
12642
   ALIGNMENT is the alignment for the newly created section and
12643
   IS_RELA defines whether the name should be .rela.<SEC's name>
12644
   or .rel.<SEC's name>.  The section name is looked up in the
12645
   string table associated with ABFD.  */
12646
 
12647
asection *
12648
_bfd_elf_make_dynamic_reloc_section (asection *         sec,
12649
                                     bfd *              dynobj,
12650
                                     unsigned int       alignment,
12651
                                     bfd *              abfd,
12652
                                     bfd_boolean        is_rela)
12653
{
12654
  asection * reloc_sec = elf_section_data (sec)->sreloc;
12655
 
12656
  if (reloc_sec == NULL)
12657
    {
12658
      const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
12659
 
12660
      if (name == NULL)
12661
        return NULL;
12662
 
12663
      reloc_sec = bfd_get_section_by_name (dynobj, name);
12664
 
12665
      if (reloc_sec == NULL)
12666
        {
12667
          flagword flags;
12668
 
12669
          flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_IN_MEMORY | SEC_LINKER_CREATED);
12670
          if ((sec->flags & SEC_ALLOC) != 0)
12671
            flags |= SEC_ALLOC | SEC_LOAD;
12672
 
12673
          reloc_sec = bfd_make_section_with_flags (dynobj, name, flags);
12674
          if (reloc_sec != NULL)
12675
            {
12676
              if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
12677
                reloc_sec = NULL;
12678
            }
12679
        }
12680
 
12681
      elf_section_data (sec)->sreloc = reloc_sec;
12682
    }
12683
 
12684
  return reloc_sec;
12685
}
12686
 
12687
/* Copy the ELF symbol type associated with a linker hash entry.  */
12688
void
12689
_bfd_elf_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
12690
    struct bfd_link_hash_entry * hdest,
12691
    struct bfd_link_hash_entry * hsrc)
12692
{
12693
  struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *)hdest;
12694
  struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *)hsrc;
12695
 
12696
  ehdest->type = ehsrc->type;
12697
}

powered by: WebSVN 2.1.0

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