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