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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gdb-6.8/] [pre-binutils-2.20.1-sync/] [bfd/] [elflink.c] - Blame information for rev 298

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

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

powered by: WebSVN 2.1.0

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