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