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