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