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