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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [bfd/] [elflink.c] - Blame information for rev 422

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

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

powered by: WebSVN 2.1.0

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