* elflink.c (elf_link_add_object_symbols): Look up name of
[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 {
6787   bfd_boolean ret;
6788   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
6789
6790   memset (table, 0, sizeof * table);
6791   table->init_got_refcount.refcount = can_refcount - 1;
6792   table->init_plt_refcount.refcount = can_refcount - 1;
6793   table->init_got_offset.offset = -(bfd_vma) 1;
6794   table->init_plt_offset.offset = -(bfd_vma) 1;
6795   /* The first dynamic symbol is a dummy.  */
6796   table->dynsymcount = 1;
6797
6798   ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
6799   table->root.type = bfd_link_elf_hash_table;
6800
6801   return ret;
6802 }
6803
6804 /* Create an ELF linker hash table.  */
6805
6806 struct bfd_link_hash_table *
6807 _bfd_elf_link_hash_table_create (bfd *abfd)
6808 {
6809   struct elf_link_hash_table *ret;
6810   bfd_size_type amt = sizeof (struct elf_link_hash_table);
6811
6812   ret = (struct elf_link_hash_table *) bfd_malloc (amt);
6813   if (ret == NULL)
6814     return NULL;
6815
6816   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
6817                                        sizeof (struct elf_link_hash_entry)))
6818     {
6819       free (ret);
6820       return NULL;
6821     }
6822
6823   return &ret->root;
6824 }
6825
6826 /* This is a hook for the ELF emulation code in the generic linker to
6827    tell the backend linker what file name to use for the DT_NEEDED
6828    entry for a dynamic object.  */
6829
6830 void
6831 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
6832 {
6833   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6834       && bfd_get_format (abfd) == bfd_object)
6835     elf_dt_name (abfd) = name;
6836 }
6837
6838 int
6839 bfd_elf_get_dyn_lib_class (bfd *abfd)
6840 {
6841   int lib_class;
6842   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6843       && bfd_get_format (abfd) == bfd_object)
6844     lib_class = elf_dyn_lib_class (abfd);
6845   else
6846     lib_class = 0;
6847   return lib_class;
6848 }
6849
6850 void
6851 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
6852 {
6853   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6854       && bfd_get_format (abfd) == bfd_object)
6855     elf_dyn_lib_class (abfd) = lib_class;
6856 }
6857
6858 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
6859    the linker ELF emulation code.  */
6860
6861 struct bfd_link_needed_list *
6862 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
6863                          struct bfd_link_info *info)
6864 {
6865   if (! is_elf_hash_table (info->hash))
6866     return NULL;
6867   return elf_hash_table (info)->needed;
6868 }
6869
6870 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
6871    hook for the linker ELF emulation code.  */
6872
6873 struct bfd_link_needed_list *
6874 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
6875                           struct bfd_link_info *info)
6876 {
6877   if (! is_elf_hash_table (info->hash))
6878     return NULL;
6879   return elf_hash_table (info)->runpath;
6880 }
6881
6882 /* Get the name actually used for a dynamic object for a link.  This
6883    is the SONAME entry if there is one.  Otherwise, it is the string
6884    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
6885
6886 const char *
6887 bfd_elf_get_dt_soname (bfd *abfd)
6888 {
6889   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6890       && bfd_get_format (abfd) == bfd_object)
6891     return elf_dt_name (abfd);
6892   return NULL;
6893 }
6894
6895 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
6896    the ELF linker emulation code.  */
6897
6898 bfd_boolean
6899 bfd_elf_get_bfd_needed_list (bfd *abfd,
6900                              struct bfd_link_needed_list **pneeded)
6901 {
6902   asection *s;
6903   bfd_byte *dynbuf = NULL;
6904   unsigned int elfsec;
6905   unsigned long shlink;
6906   bfd_byte *extdyn, *extdynend;
6907   size_t extdynsize;
6908   void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
6909
6910   *pneeded = NULL;
6911
6912   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
6913       || bfd_get_format (abfd) != bfd_object)
6914     return TRUE;
6915
6916   s = bfd_get_section_by_name (abfd, ".dynamic");
6917   if (s == NULL || s->size == 0)
6918     return TRUE;
6919
6920   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
6921     goto error_return;
6922
6923   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
6924   if (elfsec == SHN_BAD)
6925     goto error_return;
6926
6927   shlink = elf_elfsections (abfd)[elfsec]->sh_link;
6928
6929   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
6930   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
6931
6932   extdyn = dynbuf;
6933   extdynend = extdyn + s->size;
6934   for (; extdyn < extdynend; extdyn += extdynsize)
6935     {
6936       Elf_Internal_Dyn dyn;
6937
6938       (*swap_dyn_in) (abfd, extdyn, &dyn);
6939
6940       if (dyn.d_tag == DT_NULL)
6941         break;
6942
6943       if (dyn.d_tag == DT_NEEDED)
6944         {
6945           const char *string;
6946           struct bfd_link_needed_list *l;
6947           unsigned int tagv = dyn.d_un.d_val;
6948           bfd_size_type amt;
6949
6950           string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
6951           if (string == NULL)
6952             goto error_return;
6953
6954           amt = sizeof *l;
6955           l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
6956           if (l == NULL)
6957             goto error_return;
6958
6959           l->by = abfd;
6960           l->name = string;
6961           l->next = *pneeded;
6962           *pneeded = l;
6963         }
6964     }
6965
6966   free (dynbuf);
6967
6968   return TRUE;
6969
6970  error_return:
6971   if (dynbuf != NULL)
6972     free (dynbuf);
6973   return FALSE;
6974 }
6975
6976 struct elf_symbuf_symbol
6977 {
6978   unsigned long st_name;        /* Symbol name, index in string tbl */
6979   unsigned char st_info;        /* Type and binding attributes */
6980   unsigned char st_other;       /* Visibilty, and target specific */
6981 };
6982
6983 struct elf_symbuf_head
6984 {
6985   struct elf_symbuf_symbol *ssym;
6986   bfd_size_type count;
6987   unsigned int st_shndx;
6988 };
6989
6990 struct elf_symbol
6991 {
6992   union
6993     {
6994       Elf_Internal_Sym *isym;
6995       struct elf_symbuf_symbol *ssym;
6996     } u;
6997   const char *name;
6998 };
6999
7000 /* Sort references to symbols by ascending section number.  */
7001
7002 static int
7003 elf_sort_elf_symbol (const void *arg1, const void *arg2)
7004 {
7005   const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7006   const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7007
7008   return s1->st_shndx - s2->st_shndx;
7009 }
7010
7011 static int
7012 elf_sym_name_compare (const void *arg1, const void *arg2)
7013 {
7014   const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7015   const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7016   return strcmp (s1->name, s2->name);
7017 }
7018
7019 static struct elf_symbuf_head *
7020 elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf)
7021 {
7022   Elf_Internal_Sym **ind, **indbufend, **indbuf;
7023   struct elf_symbuf_symbol *ssym;
7024   struct elf_symbuf_head *ssymbuf, *ssymhead;
7025   bfd_size_type i, shndx_count, total_size;
7026
7027   indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7028   if (indbuf == NULL)
7029     return NULL;
7030
7031   for (ind = indbuf, i = 0; i < symcount; i++)
7032     if (isymbuf[i].st_shndx != SHN_UNDEF)
7033       *ind++ = &isymbuf[i];
7034   indbufend = ind;
7035
7036   qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7037          elf_sort_elf_symbol);
7038
7039   shndx_count = 0;
7040   if (indbufend > indbuf)
7041     for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7042       if (ind[0]->st_shndx != ind[1]->st_shndx)
7043         shndx_count++;
7044
7045   total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7046                 + (indbufend - indbuf) * sizeof (*ssym));
7047   ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7048   if (ssymbuf == NULL)
7049     {
7050       free (indbuf);
7051       return NULL;
7052     }
7053
7054   ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7055   ssymbuf->ssym = NULL;
7056   ssymbuf->count = shndx_count;
7057   ssymbuf->st_shndx = 0;
7058   for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7059     {
7060       if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7061         {
7062           ssymhead++;
7063           ssymhead->ssym = ssym;
7064           ssymhead->count = 0;
7065           ssymhead->st_shndx = (*ind)->st_shndx;
7066         }
7067       ssym->st_name = (*ind)->st_name;
7068       ssym->st_info = (*ind)->st_info;
7069       ssym->st_other = (*ind)->st_other;
7070       ssymhead->count++;
7071     }
7072   BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count
7073               && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7074                   == total_size));
7075
7076   free (indbuf);
7077   return ssymbuf;
7078 }
7079
7080 /* Check if 2 sections define the same set of local and global
7081    symbols.  */
7082
7083 static bfd_boolean
7084 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7085                                    struct bfd_link_info *info)
7086 {
7087   bfd *bfd1, *bfd2;
7088   const struct elf_backend_data *bed1, *bed2;
7089   Elf_Internal_Shdr *hdr1, *hdr2;
7090   bfd_size_type symcount1, symcount2;
7091   Elf_Internal_Sym *isymbuf1, *isymbuf2;
7092   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7093   Elf_Internal_Sym *isym, *isymend;
7094   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7095   bfd_size_type count1, count2, i;
7096   unsigned int shndx1, shndx2;
7097   bfd_boolean result;
7098
7099   bfd1 = sec1->owner;
7100   bfd2 = sec2->owner;
7101
7102   /* Both sections have to be in ELF.  */
7103   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7104       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7105     return FALSE;
7106
7107   if (elf_section_type (sec1) != elf_section_type (sec2))
7108     return FALSE;
7109
7110   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7111   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7112   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7113     return FALSE;
7114
7115   bed1 = get_elf_backend_data (bfd1);
7116   bed2 = get_elf_backend_data (bfd2);
7117   hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7118   symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7119   hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7120   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7121
7122   if (symcount1 == 0 || symcount2 == 0)
7123     return FALSE;
7124
7125   result = FALSE;
7126   isymbuf1 = NULL;
7127   isymbuf2 = NULL;
7128   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7129   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7130
7131   if (ssymbuf1 == NULL)
7132     {
7133       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7134                                        NULL, NULL, NULL);
7135       if (isymbuf1 == NULL)
7136         goto done;
7137
7138       if (!info->reduce_memory_overheads)
7139         elf_tdata (bfd1)->symbuf = ssymbuf1
7140           = elf_create_symbuf (symcount1, isymbuf1);
7141     }
7142
7143   if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7144     {
7145       isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7146                                        NULL, NULL, NULL);
7147       if (isymbuf2 == NULL)
7148         goto done;
7149
7150       if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7151         elf_tdata (bfd2)->symbuf = ssymbuf2
7152           = elf_create_symbuf (symcount2, isymbuf2);
7153     }
7154
7155   if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7156     {
7157       /* Optimized faster version.  */
7158       bfd_size_type lo, hi, mid;
7159       struct elf_symbol *symp;
7160       struct elf_symbuf_symbol *ssym, *ssymend;
7161
7162       lo = 0;
7163       hi = ssymbuf1->count;
7164       ssymbuf1++;
7165       count1 = 0;
7166       while (lo < hi)
7167         {
7168           mid = (lo + hi) / 2;
7169           if (shndx1 < ssymbuf1[mid].st_shndx)
7170             hi = mid;
7171           else if (shndx1 > ssymbuf1[mid].st_shndx)
7172             lo = mid + 1;
7173           else
7174             {
7175               count1 = ssymbuf1[mid].count;
7176               ssymbuf1 += mid;
7177               break;
7178             }
7179         }
7180
7181       lo = 0;
7182       hi = ssymbuf2->count;
7183       ssymbuf2++;
7184       count2 = 0;
7185       while (lo < hi)
7186         {
7187           mid = (lo + hi) / 2;
7188           if (shndx2 < ssymbuf2[mid].st_shndx)
7189             hi = mid;
7190           else if (shndx2 > ssymbuf2[mid].st_shndx)
7191             lo = mid + 1;
7192           else
7193             {
7194               count2 = ssymbuf2[mid].count;
7195               ssymbuf2 += mid;
7196               break;
7197             }
7198         }
7199
7200       if (count1 == 0 || count2 == 0 || count1 != count2)
7201         goto done;
7202
7203       symtable1 = (struct elf_symbol *)
7204           bfd_malloc (count1 * sizeof (struct elf_symbol));
7205       symtable2 = (struct elf_symbol *)
7206           bfd_malloc (count2 * sizeof (struct elf_symbol));
7207       if (symtable1 == NULL || symtable2 == NULL)
7208         goto done;
7209
7210       symp = symtable1;
7211       for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7212            ssym < ssymend; ssym++, symp++)
7213         {
7214           symp->u.ssym = ssym;
7215           symp->name = bfd_elf_string_from_elf_section (bfd1,
7216                                                         hdr1->sh_link,
7217                                                         ssym->st_name);
7218         }
7219
7220       symp = symtable2;
7221       for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
7222            ssym < ssymend; ssym++, symp++)
7223         {
7224           symp->u.ssym = ssym;
7225           symp->name = bfd_elf_string_from_elf_section (bfd2,
7226                                                         hdr2->sh_link,
7227                                                         ssym->st_name);
7228         }
7229
7230       /* Sort symbol by name.  */
7231       qsort (symtable1, count1, sizeof (struct elf_symbol),
7232              elf_sym_name_compare);
7233       qsort (symtable2, count1, sizeof (struct elf_symbol),
7234              elf_sym_name_compare);
7235
7236       for (i = 0; i < count1; i++)
7237         /* Two symbols must have the same binding, type and name.  */
7238         if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
7239             || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
7240             || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7241           goto done;
7242
7243       result = TRUE;
7244       goto done;
7245     }
7246
7247   symtable1 = (struct elf_symbol *)
7248       bfd_malloc (symcount1 * sizeof (struct elf_symbol));
7249   symtable2 = (struct elf_symbol *)
7250       bfd_malloc (symcount2 * sizeof (struct elf_symbol));
7251   if (symtable1 == NULL || symtable2 == NULL)
7252     goto done;
7253
7254   /* Count definitions in the section.  */
7255   count1 = 0;
7256   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
7257     if (isym->st_shndx == shndx1)
7258       symtable1[count1++].u.isym = isym;
7259
7260   count2 = 0;
7261   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
7262     if (isym->st_shndx == shndx2)
7263       symtable2[count2++].u.isym = isym;
7264
7265   if (count1 == 0 || count2 == 0 || count1 != count2)
7266     goto done;
7267
7268   for (i = 0; i < count1; i++)
7269     symtable1[i].name
7270       = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
7271                                          symtable1[i].u.isym->st_name);
7272
7273   for (i = 0; i < count2; i++)
7274     symtable2[i].name
7275       = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
7276                                          symtable2[i].u.isym->st_name);
7277
7278   /* Sort symbol by name.  */
7279   qsort (symtable1, count1, sizeof (struct elf_symbol),
7280          elf_sym_name_compare);
7281   qsort (symtable2, count1, sizeof (struct elf_symbol),
7282          elf_sym_name_compare);
7283
7284   for (i = 0; i < count1; i++)
7285     /* Two symbols must have the same binding, type and name.  */
7286     if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
7287         || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
7288         || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7289       goto done;
7290
7291   result = TRUE;
7292
7293 done:
7294   if (symtable1)
7295     free (symtable1);
7296   if (symtable2)
7297     free (symtable2);
7298   if (isymbuf1)
7299     free (isymbuf1);
7300   if (isymbuf2)
7301     free (isymbuf2);
7302
7303   return result;
7304 }
7305
7306 /* Return TRUE if 2 section types are compatible.  */
7307
7308 bfd_boolean
7309 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
7310                                  bfd *bbfd, const asection *bsec)
7311 {
7312   if (asec == NULL
7313       || bsec == NULL
7314       || abfd->xvec->flavour != bfd_target_elf_flavour
7315       || bbfd->xvec->flavour != bfd_target_elf_flavour)
7316     return TRUE;
7317
7318   return elf_section_type (asec) == elf_section_type (bsec);
7319 }
7320 \f
7321 /* Final phase of ELF linker.  */
7322
7323 /* A structure we use to avoid passing large numbers of arguments.  */
7324
7325 struct elf_final_link_info
7326 {
7327   /* General link information.  */
7328   struct bfd_link_info *info;
7329   /* Output BFD.  */
7330   bfd *output_bfd;
7331   /* Symbol string table.  */
7332   struct bfd_strtab_hash *symstrtab;
7333   /* .dynsym section.  */
7334   asection *dynsym_sec;
7335   /* .hash section.  */
7336   asection *hash_sec;
7337   /* symbol version section (.gnu.version).  */
7338   asection *symver_sec;
7339   /* Buffer large enough to hold contents of any section.  */
7340   bfd_byte *contents;
7341   /* Buffer large enough to hold external relocs of any section.  */
7342   void *external_relocs;
7343   /* Buffer large enough to hold internal relocs of any section.  */
7344   Elf_Internal_Rela *internal_relocs;
7345   /* Buffer large enough to hold external local symbols of any input
7346      BFD.  */
7347   bfd_byte *external_syms;
7348   /* And a buffer for symbol section indices.  */
7349   Elf_External_Sym_Shndx *locsym_shndx;
7350   /* Buffer large enough to hold internal local symbols of any input
7351      BFD.  */
7352   Elf_Internal_Sym *internal_syms;
7353   /* Array large enough to hold a symbol index for each local symbol
7354      of any input BFD.  */
7355   long *indices;
7356   /* Array large enough to hold a section pointer for each local
7357      symbol of any input BFD.  */
7358   asection **sections;
7359   /* Buffer to hold swapped out symbols.  */
7360   bfd_byte *symbuf;
7361   /* And one for symbol section indices.  */
7362   Elf_External_Sym_Shndx *symshndxbuf;
7363   /* Number of swapped out symbols in buffer.  */
7364   size_t symbuf_count;
7365   /* Number of symbols which fit in symbuf.  */
7366   size_t symbuf_size;
7367   /* And same for symshndxbuf.  */
7368   size_t shndxbuf_size;
7369 };
7370
7371 /* This struct is used to pass information to elf_link_output_extsym.  */
7372
7373 struct elf_outext_info
7374 {
7375   bfd_boolean failed;
7376   bfd_boolean localsyms;
7377   struct elf_final_link_info *finfo;
7378 };
7379
7380
7381 /* Support for evaluating a complex relocation.
7382
7383    Complex relocations are generalized, self-describing relocations.  The
7384    implementation of them consists of two parts: complex symbols, and the
7385    relocations themselves.
7386
7387    The relocations are use a reserved elf-wide relocation type code (R_RELC
7388    external / BFD_RELOC_RELC internal) and an encoding of relocation field
7389    information (start bit, end bit, word width, etc) into the addend.  This
7390    information is extracted from CGEN-generated operand tables within gas.
7391
7392    Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
7393    internal) representing prefix-notation expressions, including but not
7394    limited to those sorts of expressions normally encoded as addends in the
7395    addend field.  The symbol mangling format is:
7396
7397    <node> := <literal>
7398           |  <unary-operator> ':' <node>
7399           |  <binary-operator> ':' <node> ':' <node>
7400           ;
7401
7402    <literal> := 's' <digits=N> ':' <N character symbol name>
7403              |  'S' <digits=N> ':' <N character section name>
7404              |  '#' <hexdigits>
7405              ;
7406
7407    <binary-operator> := as in C
7408    <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
7409
7410 static void
7411 set_symbol_value (bfd *bfd_with_globals,
7412                   Elf_Internal_Sym *isymbuf,
7413                   size_t locsymcount,
7414                   size_t symidx,
7415                   bfd_vma val)
7416 {
7417   struct elf_link_hash_entry **sym_hashes;
7418   struct elf_link_hash_entry *h;
7419   size_t extsymoff = locsymcount;
7420
7421   if (symidx < locsymcount)
7422     {
7423       Elf_Internal_Sym *sym;
7424
7425       sym = isymbuf + symidx;
7426       if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
7427         {
7428           /* It is a local symbol: move it to the
7429              "absolute" section and give it a value.  */
7430           sym->st_shndx = SHN_ABS;
7431           sym->st_value = val;
7432           return;
7433         }
7434       BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
7435       extsymoff = 0;
7436     }
7437
7438   /* It is a global symbol: set its link type
7439      to "defined" and give it a value.  */
7440
7441   sym_hashes = elf_sym_hashes (bfd_with_globals);
7442   h = sym_hashes [symidx - extsymoff];
7443   while (h->root.type == bfd_link_hash_indirect
7444          || h->root.type == bfd_link_hash_warning)
7445     h = (struct elf_link_hash_entry *) h->root.u.i.link;
7446   h->root.type = bfd_link_hash_defined;
7447   h->root.u.def.value = val;
7448   h->root.u.def.section = bfd_abs_section_ptr;
7449 }
7450
7451 static bfd_boolean
7452 resolve_symbol (const char *name,
7453                 bfd *input_bfd,
7454                 struct elf_final_link_info *finfo,
7455                 bfd_vma *result,
7456                 Elf_Internal_Sym *isymbuf,
7457                 size_t locsymcount)
7458 {
7459   Elf_Internal_Sym *sym;
7460   struct bfd_link_hash_entry *global_entry;
7461   const char *candidate = NULL;
7462   Elf_Internal_Shdr *symtab_hdr;
7463   size_t i;
7464
7465   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
7466
7467   for (i = 0; i < locsymcount; ++ i)
7468     {
7469       sym = isymbuf + i;
7470
7471       if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
7472         continue;
7473
7474       candidate = bfd_elf_string_from_elf_section (input_bfd,
7475                                                    symtab_hdr->sh_link,
7476                                                    sym->st_name);
7477 #ifdef DEBUG
7478       printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
7479               name, candidate, (unsigned long) sym->st_value);
7480 #endif
7481       if (candidate && strcmp (candidate, name) == 0)
7482         {
7483           asection *sec = finfo->sections [i];
7484
7485           *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
7486           *result += sec->output_offset + sec->output_section->vma;
7487 #ifdef DEBUG
7488           printf ("Found symbol with value %8.8lx\n",
7489                   (unsigned long) *result);
7490 #endif
7491           return TRUE;
7492         }
7493     }
7494
7495   /* Hmm, haven't found it yet. perhaps it is a global.  */
7496   global_entry = bfd_link_hash_lookup (finfo->info->hash, name,
7497                                        FALSE, FALSE, TRUE);
7498   if (!global_entry)
7499     return FALSE;
7500
7501   if (global_entry->type == bfd_link_hash_defined
7502       || global_entry->type == bfd_link_hash_defweak)
7503     {
7504       *result = (global_entry->u.def.value
7505                  + global_entry->u.def.section->output_section->vma
7506                  + global_entry->u.def.section->output_offset);
7507 #ifdef DEBUG
7508       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
7509               global_entry->root.string, (unsigned long) *result);
7510 #endif
7511       return TRUE;
7512     }
7513
7514   return FALSE;
7515 }
7516
7517 static bfd_boolean
7518 resolve_section (const char *name,
7519                  asection *sections,
7520                  bfd_vma *result)
7521 {
7522   asection *curr;
7523   unsigned int len;
7524
7525   for (curr = sections; curr; curr = curr->next)
7526     if (strcmp (curr->name, name) == 0)
7527       {
7528         *result = curr->vma;
7529         return TRUE;
7530       }
7531
7532   /* Hmm. still haven't found it. try pseudo-section names.  */
7533   for (curr = sections; curr; curr = curr->next)
7534     {
7535       len = strlen (curr->name);
7536       if (len > strlen (name))
7537         continue;
7538
7539       if (strncmp (curr->name, name, len) == 0)
7540         {
7541           if (strncmp (".end", name + len, 4) == 0)
7542             {
7543               *result = curr->vma + curr->size;
7544               return TRUE;
7545             }
7546
7547           /* Insert more pseudo-section names here, if you like.  */
7548         }
7549     }
7550
7551   return FALSE;
7552 }
7553
7554 static void
7555 undefined_reference (const char *reftype, const char *name)
7556 {
7557   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
7558                       reftype, name);
7559 }
7560
7561 static bfd_boolean
7562 eval_symbol (bfd_vma *result,
7563              const char **symp,
7564              bfd *input_bfd,
7565              struct elf_final_link_info *finfo,
7566              bfd_vma dot,
7567              Elf_Internal_Sym *isymbuf,
7568              size_t locsymcount,
7569              int signed_p)
7570 {
7571   size_t len;
7572   size_t symlen;
7573   bfd_vma a;
7574   bfd_vma b;
7575   char symbuf[4096];
7576   const char *sym = *symp;
7577   const char *symend;
7578   bfd_boolean symbol_is_section = FALSE;
7579
7580   len = strlen (sym);
7581   symend = sym + len;
7582
7583   if (len < 1 || len > sizeof (symbuf))
7584     {
7585       bfd_set_error (bfd_error_invalid_operation);
7586       return FALSE;
7587     }
7588
7589   switch (* sym)
7590     {
7591     case '.':
7592       *result = dot;
7593       *symp = sym + 1;
7594       return TRUE;
7595
7596     case '#':
7597       ++sym;
7598       *result = strtoul (sym, (char **) symp, 16);
7599       return TRUE;
7600
7601     case 'S':
7602       symbol_is_section = TRUE;
7603     case 's':
7604       ++sym;
7605       symlen = strtol (sym, (char **) symp, 10);
7606       sym = *symp + 1; /* Skip the trailing ':'.  */
7607
7608       if (symend < sym || symlen + 1 > sizeof (symbuf))
7609         {
7610           bfd_set_error (bfd_error_invalid_operation);
7611           return FALSE;
7612         }
7613
7614       memcpy (symbuf, sym, symlen);
7615       symbuf[symlen] = '\0';
7616       *symp = sym + symlen;
7617
7618       /* Is it always possible, with complex symbols, that gas "mis-guessed"
7619          the symbol as a section, or vice-versa. so we're pretty liberal in our
7620          interpretation here; section means "try section first", not "must be a
7621          section", and likewise with symbol.  */
7622
7623       if (symbol_is_section)
7624         {
7625           if (!resolve_section (symbuf, finfo->output_bfd->sections, result)
7626               && !resolve_symbol (symbuf, input_bfd, finfo, result,
7627                                   isymbuf, locsymcount))
7628             {
7629               undefined_reference ("section", symbuf);
7630               return FALSE;
7631             }
7632         }
7633       else
7634         {
7635           if (!resolve_symbol (symbuf, input_bfd, finfo, result,
7636                                isymbuf, locsymcount)
7637               && !resolve_section (symbuf, finfo->output_bfd->sections,
7638                                    result))
7639             {
7640               undefined_reference ("symbol", symbuf);
7641               return FALSE;
7642             }
7643         }
7644
7645       return TRUE;
7646
7647       /* All that remains are operators.  */
7648
7649 #define UNARY_OP(op)                                            \
7650   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7651     {                                                           \
7652       sym += strlen (#op);                                      \
7653       if (*sym == ':')                                          \
7654         ++sym;                                                  \
7655       *symp = sym;                                              \
7656       if (!eval_symbol (&a, symp, input_bfd, finfo, dot,        \
7657                         isymbuf, locsymcount, signed_p))        \
7658         return FALSE;                                           \
7659       if (signed_p)                                             \
7660         *result = op ((bfd_signed_vma) a);                      \
7661       else                                                      \
7662         *result = op a;                                         \
7663       return TRUE;                                              \
7664     }
7665
7666 #define BINARY_OP(op)                                           \
7667   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7668     {                                                           \
7669       sym += strlen (#op);                                      \
7670       if (*sym == ':')                                          \
7671         ++sym;                                                  \
7672       *symp = sym;                                              \
7673       if (!eval_symbol (&a, symp, input_bfd, finfo, dot,        \
7674                         isymbuf, locsymcount, signed_p))        \
7675         return FALSE;                                           \
7676       ++*symp;                                                  \
7677       if (!eval_symbol (&b, symp, input_bfd, finfo, dot,        \
7678                         isymbuf, locsymcount, signed_p))        \
7679         return FALSE;                                           \
7680       if (signed_p)                                             \
7681         *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
7682       else                                                      \
7683         *result = a op b;                                       \
7684       return TRUE;                                              \
7685     }
7686
7687     default:
7688       UNARY_OP  (0-);
7689       BINARY_OP (<<);
7690       BINARY_OP (>>);
7691       BINARY_OP (==);
7692       BINARY_OP (!=);
7693       BINARY_OP (<=);
7694       BINARY_OP (>=);
7695       BINARY_OP (&&);
7696       BINARY_OP (||);
7697       UNARY_OP  (~);
7698       UNARY_OP  (!);
7699       BINARY_OP (*);
7700       BINARY_OP (/);
7701       BINARY_OP (%);
7702       BINARY_OP (^);
7703       BINARY_OP (|);
7704       BINARY_OP (&);
7705       BINARY_OP (+);
7706       BINARY_OP (-);
7707       BINARY_OP (<);
7708       BINARY_OP (>);
7709 #undef UNARY_OP
7710 #undef BINARY_OP
7711       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
7712       bfd_set_error (bfd_error_invalid_operation);
7713       return FALSE;
7714     }
7715 }
7716
7717 static void
7718 put_value (bfd_vma size,
7719            unsigned long chunksz,
7720            bfd *input_bfd,
7721            bfd_vma x,
7722            bfd_byte *location)
7723 {
7724   location += (size - chunksz);
7725
7726   for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8))
7727     {
7728       switch (chunksz)
7729         {
7730         default:
7731         case 0:
7732           abort ();
7733         case 1:
7734           bfd_put_8 (input_bfd, x, location);
7735           break;
7736         case 2:
7737           bfd_put_16 (input_bfd, x, location);
7738           break;
7739         case 4:
7740           bfd_put_32 (input_bfd, x, location);
7741           break;
7742         case 8:
7743 #ifdef BFD64
7744           bfd_put_64 (input_bfd, x, location);
7745 #else
7746           abort ();
7747 #endif
7748           break;
7749         }
7750     }
7751 }
7752
7753 static bfd_vma
7754 get_value (bfd_vma size,
7755            unsigned long chunksz,
7756            bfd *input_bfd,
7757            bfd_byte *location)
7758 {
7759   bfd_vma x = 0;
7760
7761   for (; size; size -= chunksz, location += chunksz)
7762     {
7763       switch (chunksz)
7764         {
7765         default:
7766         case 0:
7767           abort ();
7768         case 1:
7769           x = (x << (8 * chunksz)) | bfd_get_8 (input_bfd, location);
7770           break;
7771         case 2:
7772           x = (x << (8 * chunksz)) | bfd_get_16 (input_bfd, location);
7773           break;
7774         case 4:
7775           x = (x << (8 * chunksz)) | bfd_get_32 (input_bfd, location);
7776           break;
7777         case 8:
7778 #ifdef BFD64
7779           x = (x << (8 * chunksz)) | bfd_get_64 (input_bfd, location);
7780 #else
7781           abort ();
7782 #endif
7783           break;
7784         }
7785     }
7786   return x;
7787 }
7788
7789 static void
7790 decode_complex_addend (unsigned long *start,   /* in bits */
7791                        unsigned long *oplen,   /* in bits */
7792                        unsigned long *len,     /* in bits */
7793                        unsigned long *wordsz,  /* in bytes */
7794                        unsigned long *chunksz, /* in bytes */
7795                        unsigned long *lsb0_p,
7796                        unsigned long *signed_p,
7797                        unsigned long *trunc_p,
7798                        unsigned long encoded)
7799 {
7800   * start     =  encoded        & 0x3F;
7801   * len       = (encoded >>  6) & 0x3F;
7802   * oplen     = (encoded >> 12) & 0x3F;
7803   * wordsz    = (encoded >> 18) & 0xF;
7804   * chunksz   = (encoded >> 22) & 0xF;
7805   * lsb0_p    = (encoded >> 27) & 1;
7806   * signed_p  = (encoded >> 28) & 1;
7807   * trunc_p   = (encoded >> 29) & 1;
7808 }
7809
7810 bfd_reloc_status_type
7811 bfd_elf_perform_complex_relocation (bfd *input_bfd,
7812                                     asection *input_section ATTRIBUTE_UNUSED,
7813                                     bfd_byte *contents,
7814                                     Elf_Internal_Rela *rel,
7815                                     bfd_vma relocation)
7816 {
7817   bfd_vma shift, x, mask;
7818   unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
7819   bfd_reloc_status_type r;
7820
7821   /*  Perform this reloc, since it is complex.
7822       (this is not to say that it necessarily refers to a complex
7823       symbol; merely that it is a self-describing CGEN based reloc.
7824       i.e. the addend has the complete reloc information (bit start, end,
7825       word size, etc) encoded within it.).  */
7826
7827   decode_complex_addend (&start, &oplen, &len, &wordsz,
7828                          &chunksz, &lsb0_p, &signed_p,
7829                          &trunc_p, rel->r_addend);
7830
7831   mask = (((1L << (len - 1)) - 1) << 1) | 1;
7832
7833   if (lsb0_p)
7834     shift = (start + 1) - len;
7835   else
7836     shift = (8 * wordsz) - (start + len);
7837
7838   /* FIXME: octets_per_byte.  */
7839   x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset);
7840
7841 #ifdef DEBUG
7842   printf ("Doing complex reloc: "
7843           "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
7844           "chunksz %ld, start %ld, len %ld, oplen %ld\n"
7845           "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
7846           lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
7847           oplen, x, mask,  relocation);
7848 #endif
7849
7850   r = bfd_reloc_ok;
7851   if (! trunc_p)
7852     /* Now do an overflow check.  */
7853     r = bfd_check_overflow ((signed_p
7854                              ? complain_overflow_signed
7855                              : complain_overflow_unsigned),
7856                             len, 0, (8 * wordsz),
7857                             relocation);
7858
7859   /* Do the deed.  */
7860   x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
7861
7862 #ifdef DEBUG
7863   printf ("           relocation: %8.8lx\n"
7864           "         shifted mask: %8.8lx\n"
7865           " shifted/masked reloc: %8.8lx\n"
7866           "               result: %8.8lx\n",
7867           relocation, (mask << shift),
7868           ((relocation & mask) << shift), x);
7869 #endif
7870   /* FIXME: octets_per_byte.  */
7871   put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
7872   return r;
7873 }
7874
7875 /* When performing a relocatable link, the input relocations are
7876    preserved.  But, if they reference global symbols, the indices
7877    referenced must be updated.  Update all the relocations in
7878    REL_HDR (there are COUNT of them), using the data in REL_HASH.  */
7879
7880 static void
7881 elf_link_adjust_relocs (bfd *abfd,
7882                         Elf_Internal_Shdr *rel_hdr,
7883                         unsigned int count,
7884                         struct elf_link_hash_entry **rel_hash)
7885 {
7886   unsigned int i;
7887   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7888   bfd_byte *erela;
7889   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
7890   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
7891   bfd_vma r_type_mask;
7892   int r_sym_shift;
7893
7894   if (rel_hdr->sh_entsize == bed->s->sizeof_rel)
7895     {
7896       swap_in = bed->s->swap_reloc_in;
7897       swap_out = bed->s->swap_reloc_out;
7898     }
7899   else if (rel_hdr->sh_entsize == bed->s->sizeof_rela)
7900     {
7901       swap_in = bed->s->swap_reloca_in;
7902       swap_out = bed->s->swap_reloca_out;
7903     }
7904   else
7905     abort ();
7906
7907   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
7908     abort ();
7909
7910   if (bed->s->arch_size == 32)
7911     {
7912       r_type_mask = 0xff;
7913       r_sym_shift = 8;
7914     }
7915   else
7916     {
7917       r_type_mask = 0xffffffff;
7918       r_sym_shift = 32;
7919     }
7920
7921   erela = rel_hdr->contents;
7922   for (i = 0; i < count; i++, rel_hash++, erela += rel_hdr->sh_entsize)
7923     {
7924       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
7925       unsigned int j;
7926
7927       if (*rel_hash == NULL)
7928         continue;
7929
7930       BFD_ASSERT ((*rel_hash)->indx >= 0);
7931
7932       (*swap_in) (abfd, erela, irela);
7933       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
7934         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
7935                            | (irela[j].r_info & r_type_mask));
7936       (*swap_out) (abfd, irela, erela);
7937     }
7938 }
7939
7940 struct elf_link_sort_rela
7941 {
7942   union {
7943     bfd_vma offset;
7944     bfd_vma sym_mask;
7945   } u;
7946   enum elf_reloc_type_class type;
7947   /* We use this as an array of size int_rels_per_ext_rel.  */
7948   Elf_Internal_Rela rela[1];
7949 };
7950
7951 static int
7952 elf_link_sort_cmp1 (const void *A, const void *B)
7953 {
7954   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
7955   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
7956   int relativea, relativeb;
7957
7958   relativea = a->type == reloc_class_relative;
7959   relativeb = b->type == reloc_class_relative;
7960
7961   if (relativea < relativeb)
7962     return 1;
7963   if (relativea > relativeb)
7964     return -1;
7965   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
7966     return -1;
7967   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
7968     return 1;
7969   if (a->rela->r_offset < b->rela->r_offset)
7970     return -1;
7971   if (a->rela->r_offset > b->rela->r_offset)
7972     return 1;
7973   return 0;
7974 }
7975
7976 static int
7977 elf_link_sort_cmp2 (const void *A, const void *B)
7978 {
7979   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
7980   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
7981   int copya, copyb;
7982
7983   if (a->u.offset < b->u.offset)
7984     return -1;
7985   if (a->u.offset > b->u.offset)
7986     return 1;
7987   copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
7988   copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
7989   if (copya < copyb)
7990     return -1;
7991   if (copya > copyb)
7992     return 1;
7993   if (a->rela->r_offset < b->rela->r_offset)
7994     return -1;
7995   if (a->rela->r_offset > b->rela->r_offset)
7996     return 1;
7997   return 0;
7998 }
7999
8000 static size_t
8001 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8002 {
8003   asection *dynamic_relocs;
8004   asection *rela_dyn;
8005   asection *rel_dyn;
8006   bfd_size_type count, size;
8007   size_t i, ret, sort_elt, ext_size;
8008   bfd_byte *sort, *s_non_relative, *p;
8009   struct elf_link_sort_rela *sq;
8010   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8011   int i2e = bed->s->int_rels_per_ext_rel;
8012   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8013   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8014   struct bfd_link_order *lo;
8015   bfd_vma r_sym_mask;
8016   bfd_boolean use_rela;
8017
8018   /* Find a dynamic reloc section.  */
8019   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8020   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8021   if (rela_dyn != NULL && rela_dyn->size > 0
8022       && rel_dyn != NULL && rel_dyn->size > 0)
8023     {
8024       bfd_boolean use_rela_initialised = FALSE;
8025
8026       /* This is just here to stop gcc from complaining.
8027          It's initialization checking code is not perfect.  */
8028       use_rela = TRUE;
8029
8030       /* Both sections are present.  Examine the sizes
8031          of the indirect sections to help us choose.  */
8032       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8033         if (lo->type == bfd_indirect_link_order)
8034           {
8035             asection *o = lo->u.indirect.section;
8036
8037             if ((o->size % bed->s->sizeof_rela) == 0)
8038               {
8039                 if ((o->size % bed->s->sizeof_rel) == 0)
8040                   /* Section size is divisible by both rel and rela sizes.
8041                      It is of no help to us.  */
8042                   ;
8043                 else
8044                   {
8045                     /* Section size is only divisible by rela.  */
8046                     if (use_rela_initialised && (use_rela == FALSE))
8047                       {
8048                         _bfd_error_handler
8049                           (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8050                         bfd_set_error (bfd_error_invalid_operation);
8051                         return 0;
8052                       }
8053                     else
8054                       {
8055                         use_rela = TRUE;
8056                         use_rela_initialised = TRUE;
8057                       }
8058                   }
8059               }
8060             else if ((o->size % bed->s->sizeof_rel) == 0)
8061               {
8062                 /* Section size is only divisible by rel.  */
8063                 if (use_rela_initialised && (use_rela == TRUE))
8064                   {
8065                     _bfd_error_handler
8066                       (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8067                     bfd_set_error (bfd_error_invalid_operation);
8068                     return 0;
8069                   }
8070                 else
8071                   {
8072                     use_rela = FALSE;
8073                     use_rela_initialised = TRUE;
8074                   }
8075               }
8076             else
8077               {
8078                 /* The section size is not divisible by either - something is wrong.  */
8079                 _bfd_error_handler
8080                   (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8081                 bfd_set_error (bfd_error_invalid_operation);
8082                 return 0;
8083               }
8084           }
8085
8086       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8087         if (lo->type == bfd_indirect_link_order)
8088           {
8089             asection *o = lo->u.indirect.section;
8090
8091             if ((o->size % bed->s->sizeof_rela) == 0)
8092               {
8093                 if ((o->size % bed->s->sizeof_rel) == 0)
8094                   /* Section size is divisible by both rel and rela sizes.
8095                      It is of no help to us.  */
8096                   ;
8097                 else
8098                   {
8099                     /* Section size is only divisible by rela.  */
8100                     if (use_rela_initialised && (use_rela == FALSE))
8101                       {
8102                         _bfd_error_handler
8103                           (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8104                         bfd_set_error (bfd_error_invalid_operation);
8105                         return 0;
8106                       }
8107                     else
8108                       {
8109                         use_rela = TRUE;
8110                         use_rela_initialised = TRUE;
8111                       }
8112                   }
8113               }
8114             else if ((o->size % bed->s->sizeof_rel) == 0)
8115               {
8116                 /* Section size is only divisible by rel.  */
8117                 if (use_rela_initialised && (use_rela == TRUE))
8118                   {
8119                     _bfd_error_handler
8120                       (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8121                     bfd_set_error (bfd_error_invalid_operation);
8122                     return 0;
8123                   }
8124                 else
8125                   {
8126                     use_rela = FALSE;
8127                     use_rela_initialised = TRUE;
8128                   }
8129               }
8130             else
8131               {
8132                 /* The section size is not divisible by either - something is wrong.  */
8133                 _bfd_error_handler
8134                   (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8135                 bfd_set_error (bfd_error_invalid_operation);
8136                 return 0;
8137               }
8138           }
8139
8140       if (! use_rela_initialised)
8141         /* Make a guess.  */
8142         use_rela = TRUE;
8143     }
8144   else if (rela_dyn != NULL && rela_dyn->size > 0)
8145     use_rela = TRUE;
8146   else if (rel_dyn != NULL && rel_dyn->size > 0)
8147     use_rela = FALSE;
8148   else
8149     return 0;
8150
8151   if (use_rela)
8152     {
8153       dynamic_relocs = rela_dyn;
8154       ext_size = bed->s->sizeof_rela;
8155       swap_in = bed->s->swap_reloca_in;
8156       swap_out = bed->s->swap_reloca_out;
8157     }
8158   else
8159     {
8160       dynamic_relocs = rel_dyn;
8161       ext_size = bed->s->sizeof_rel;
8162       swap_in = bed->s->swap_reloc_in;
8163       swap_out = bed->s->swap_reloc_out;
8164     }
8165
8166   size = 0;
8167   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8168     if (lo->type == bfd_indirect_link_order)
8169       size += lo->u.indirect.section->size;
8170
8171   if (size != dynamic_relocs->size)
8172     return 0;
8173
8174   sort_elt = (sizeof (struct elf_link_sort_rela)
8175               + (i2e - 1) * sizeof (Elf_Internal_Rela));
8176
8177   count = dynamic_relocs->size / ext_size;
8178   if (count == 0)
8179     return 0;
8180   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8181
8182   if (sort == NULL)
8183     {
8184       (*info->callbacks->warning)
8185         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8186       return 0;
8187     }
8188
8189   if (bed->s->arch_size == 32)
8190     r_sym_mask = ~(bfd_vma) 0xff;
8191   else
8192     r_sym_mask = ~(bfd_vma) 0xffffffff;
8193
8194   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8195     if (lo->type == bfd_indirect_link_order)
8196       {
8197         bfd_byte *erel, *erelend;
8198         asection *o = lo->u.indirect.section;
8199
8200         if (o->contents == NULL && o->size != 0)
8201           {
8202             /* This is a reloc section that is being handled as a normal
8203                section.  See bfd_section_from_shdr.  We can't combine
8204                relocs in this case.  */
8205             free (sort);
8206             return 0;
8207           }
8208         erel = o->contents;
8209         erelend = o->contents + o->size;
8210         /* FIXME: octets_per_byte.  */
8211         p = sort + o->output_offset / ext_size * sort_elt;
8212
8213         while (erel < erelend)
8214           {
8215             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8216
8217             (*swap_in) (abfd, erel, s->rela);
8218             s->type = (*bed->elf_backend_reloc_type_class) (s->rela);
8219             s->u.sym_mask = r_sym_mask;
8220             p += sort_elt;
8221             erel += ext_size;
8222           }
8223       }
8224
8225   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
8226
8227   for (i = 0, p = sort; i < count; i++, p += sort_elt)
8228     {
8229       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8230       if (s->type != reloc_class_relative)
8231         break;
8232     }
8233   ret = i;
8234   s_non_relative = p;
8235
8236   sq = (struct elf_link_sort_rela *) s_non_relative;
8237   for (; i < count; i++, p += sort_elt)
8238     {
8239       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
8240       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
8241         sq = sp;
8242       sp->u.offset = sq->rela->r_offset;
8243     }
8244
8245   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
8246
8247   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8248     if (lo->type == bfd_indirect_link_order)
8249       {
8250         bfd_byte *erel, *erelend;
8251         asection *o = lo->u.indirect.section;
8252
8253         erel = o->contents;
8254         erelend = o->contents + o->size;
8255         /* FIXME: octets_per_byte.  */
8256         p = sort + o->output_offset / ext_size * sort_elt;
8257         while (erel < erelend)
8258           {
8259             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8260             (*swap_out) (abfd, s->rela, erel);
8261             p += sort_elt;
8262             erel += ext_size;
8263           }
8264       }
8265
8266   free (sort);
8267   *psec = dynamic_relocs;
8268   return ret;
8269 }
8270
8271 /* Flush the output symbols to the file.  */
8272
8273 static bfd_boolean
8274 elf_link_flush_output_syms (struct elf_final_link_info *finfo,
8275                             const struct elf_backend_data *bed)
8276 {
8277   if (finfo->symbuf_count > 0)
8278     {
8279       Elf_Internal_Shdr *hdr;
8280       file_ptr pos;
8281       bfd_size_type amt;
8282
8283       hdr = &elf_tdata (finfo->output_bfd)->symtab_hdr;
8284       pos = hdr->sh_offset + hdr->sh_size;
8285       amt = finfo->symbuf_count * bed->s->sizeof_sym;
8286       if (bfd_seek (finfo->output_bfd, pos, SEEK_SET) != 0
8287           || bfd_bwrite (finfo->symbuf, amt, finfo->output_bfd) != amt)
8288         return FALSE;
8289
8290       hdr->sh_size += amt;
8291       finfo->symbuf_count = 0;
8292     }
8293
8294   return TRUE;
8295 }
8296
8297 /* Add a symbol to the output symbol table.  */
8298
8299 static int
8300 elf_link_output_sym (struct elf_final_link_info *finfo,
8301                      const char *name,
8302                      Elf_Internal_Sym *elfsym,
8303                      asection *input_sec,
8304                      struct elf_link_hash_entry *h)
8305 {
8306   bfd_byte *dest;
8307   Elf_External_Sym_Shndx *destshndx;
8308   int (*output_symbol_hook)
8309     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
8310      struct elf_link_hash_entry *);
8311   const struct elf_backend_data *bed;
8312
8313   bed = get_elf_backend_data (finfo->output_bfd);
8314   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
8315   if (output_symbol_hook != NULL)
8316     {
8317       int ret = (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h);
8318       if (ret != 1)
8319         return ret;
8320     }
8321
8322   if (name == NULL || *name == '\0')
8323     elfsym->st_name = 0;
8324   else if (input_sec->flags & SEC_EXCLUDE)
8325     elfsym->st_name = 0;
8326   else
8327     {
8328       elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
8329                                                             name, TRUE, FALSE);
8330       if (elfsym->st_name == (unsigned long) -1)
8331         return 0;
8332     }
8333
8334   if (finfo->symbuf_count >= finfo->symbuf_size)
8335     {
8336       if (! elf_link_flush_output_syms (finfo, bed))
8337         return 0;
8338     }
8339
8340   dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym;
8341   destshndx = finfo->symshndxbuf;
8342   if (destshndx != NULL)
8343     {
8344       if (bfd_get_symcount (finfo->output_bfd) >= finfo->shndxbuf_size)
8345         {
8346           bfd_size_type amt;
8347
8348           amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
8349           destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx,
8350                                                               amt * 2);
8351           if (destshndx == NULL)
8352             return 0;
8353           finfo->symshndxbuf = destshndx;
8354           memset ((char *) destshndx + amt, 0, amt);
8355           finfo->shndxbuf_size *= 2;
8356         }
8357       destshndx += bfd_get_symcount (finfo->output_bfd);
8358     }
8359
8360   bed->s->swap_symbol_out (finfo->output_bfd, elfsym, dest, destshndx);
8361   finfo->symbuf_count += 1;
8362   bfd_get_symcount (finfo->output_bfd) += 1;
8363
8364   return 1;
8365 }
8366
8367 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
8368
8369 static bfd_boolean
8370 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
8371 {
8372   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
8373       && sym->st_shndx < SHN_LORESERVE)
8374     {
8375       /* The gABI doesn't support dynamic symbols in output sections
8376          beyond 64k.  */
8377       (*_bfd_error_handler)
8378         (_("%B: Too many sections: %d (>= %d)"),
8379          abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
8380       bfd_set_error (bfd_error_nonrepresentable_section);
8381       return FALSE;
8382     }
8383   return TRUE;
8384 }
8385
8386 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
8387    allowing an unsatisfied unversioned symbol in the DSO to match a
8388    versioned symbol that would normally require an explicit version.
8389    We also handle the case that a DSO references a hidden symbol
8390    which may be satisfied by a versioned symbol in another DSO.  */
8391
8392 static bfd_boolean
8393 elf_link_check_versioned_symbol (struct bfd_link_info *info,
8394                                  const struct elf_backend_data *bed,
8395                                  struct elf_link_hash_entry *h)
8396 {
8397   bfd *abfd;
8398   struct elf_link_loaded_list *loaded;
8399
8400   if (!is_elf_hash_table (info->hash))
8401     return FALSE;
8402
8403   switch (h->root.type)
8404     {
8405     default:
8406       abfd = NULL;
8407       break;
8408
8409     case bfd_link_hash_undefined:
8410     case bfd_link_hash_undefweak:
8411       abfd = h->root.u.undef.abfd;
8412       if ((abfd->flags & DYNAMIC) == 0
8413           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
8414         return FALSE;
8415       break;
8416
8417     case bfd_link_hash_defined:
8418     case bfd_link_hash_defweak:
8419       abfd = h->root.u.def.section->owner;
8420       break;
8421
8422     case bfd_link_hash_common:
8423       abfd = h->root.u.c.p->section->owner;
8424       break;
8425     }
8426   BFD_ASSERT (abfd != NULL);
8427
8428   for (loaded = elf_hash_table (info)->loaded;
8429        loaded != NULL;
8430        loaded = loaded->next)
8431     {
8432       bfd *input;
8433       Elf_Internal_Shdr *hdr;
8434       bfd_size_type symcount;
8435       bfd_size_type extsymcount;
8436       bfd_size_type extsymoff;
8437       Elf_Internal_Shdr *versymhdr;
8438       Elf_Internal_Sym *isym;
8439       Elf_Internal_Sym *isymend;
8440       Elf_Internal_Sym *isymbuf;
8441       Elf_External_Versym *ever;
8442       Elf_External_Versym *extversym;
8443
8444       input = loaded->abfd;
8445
8446       /* We check each DSO for a possible hidden versioned definition.  */
8447       if (input == abfd
8448           || (input->flags & DYNAMIC) == 0
8449           || elf_dynversym (input) == 0)
8450         continue;
8451
8452       hdr = &elf_tdata (input)->dynsymtab_hdr;
8453
8454       symcount = hdr->sh_size / bed->s->sizeof_sym;
8455       if (elf_bad_symtab (input))
8456         {
8457           extsymcount = symcount;
8458           extsymoff = 0;
8459         }
8460       else
8461         {
8462           extsymcount = symcount - hdr->sh_info;
8463           extsymoff = hdr->sh_info;
8464         }
8465
8466       if (extsymcount == 0)
8467         continue;
8468
8469       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
8470                                       NULL, NULL, NULL);
8471       if (isymbuf == NULL)
8472         return FALSE;
8473
8474       /* Read in any version definitions.  */
8475       versymhdr = &elf_tdata (input)->dynversym_hdr;
8476       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
8477       if (extversym == NULL)
8478         goto error_ret;
8479
8480       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
8481           || (bfd_bread (extversym, versymhdr->sh_size, input)
8482               != versymhdr->sh_size))
8483         {
8484           free (extversym);
8485         error_ret:
8486           free (isymbuf);
8487           return FALSE;
8488         }
8489
8490       ever = extversym + extsymoff;
8491       isymend = isymbuf + extsymcount;
8492       for (isym = isymbuf; isym < isymend; isym++, ever++)
8493         {
8494           const char *name;
8495           Elf_Internal_Versym iver;
8496           unsigned short version_index;
8497
8498           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
8499               || isym->st_shndx == SHN_UNDEF)
8500             continue;
8501
8502           name = bfd_elf_string_from_elf_section (input,
8503                                                   hdr->sh_link,
8504                                                   isym->st_name);
8505           if (strcmp (name, h->root.root.string) != 0)
8506             continue;
8507
8508           _bfd_elf_swap_versym_in (input, ever, &iver);
8509
8510           if ((iver.vs_vers & VERSYM_HIDDEN) == 0
8511               && !(h->def_regular
8512                    && h->forced_local))
8513             {
8514               /* If we have a non-hidden versioned sym, then it should
8515                  have provided a definition for the undefined sym unless
8516                  it is defined in a non-shared object and forced local.
8517                */
8518               abort ();
8519             }
8520
8521           version_index = iver.vs_vers & VERSYM_VERSION;
8522           if (version_index == 1 || version_index == 2)
8523             {
8524               /* This is the base or first version.  We can use it.  */
8525               free (extversym);
8526               free (isymbuf);
8527               return TRUE;
8528             }
8529         }
8530
8531       free (extversym);
8532       free (isymbuf);
8533     }
8534
8535   return FALSE;
8536 }
8537
8538 /* Add an external symbol to the symbol table.  This is called from
8539    the hash table traversal routine.  When generating a shared object,
8540    we go through the symbol table twice.  The first time we output
8541    anything that might have been forced to local scope in a version
8542    script.  The second time we output the symbols that are still
8543    global symbols.  */
8544
8545 static bfd_boolean
8546 elf_link_output_extsym (struct elf_link_hash_entry *h, void *data)
8547 {
8548   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
8549   struct elf_final_link_info *finfo = eoinfo->finfo;
8550   bfd_boolean strip;
8551   Elf_Internal_Sym sym;
8552   asection *input_sec;
8553   const struct elf_backend_data *bed;
8554   long indx;
8555   int ret;
8556
8557   if (h->root.type == bfd_link_hash_warning)
8558     {
8559       h = (struct elf_link_hash_entry *) h->root.u.i.link;
8560       if (h->root.type == bfd_link_hash_new)
8561         return TRUE;
8562     }
8563
8564   /* Decide whether to output this symbol in this pass.  */
8565   if (eoinfo->localsyms)
8566     {
8567       if (!h->forced_local)
8568         return TRUE;
8569     }
8570   else
8571     {
8572       if (h->forced_local)
8573         return TRUE;
8574     }
8575
8576   bed = get_elf_backend_data (finfo->output_bfd);
8577
8578   if (h->root.type == bfd_link_hash_undefined)
8579     {
8580       /* If we have an undefined symbol reference here then it must have
8581          come from a shared library that is being linked in.  (Undefined
8582          references in regular files have already been handled).  */
8583       bfd_boolean ignore_undef = FALSE;
8584
8585       /* Some symbols may be special in that the fact that they're
8586          undefined can be safely ignored - let backend determine that.  */
8587       if (bed->elf_backend_ignore_undef_symbol)
8588         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
8589
8590       /* If we are reporting errors for this situation then do so now.  */
8591       if (ignore_undef == FALSE
8592           && h->ref_dynamic
8593           && ! h->ref_regular
8594           && ! elf_link_check_versioned_symbol (finfo->info, bed, h)
8595           && finfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
8596         {
8597           if (! (finfo->info->callbacks->undefined_symbol
8598                  (finfo->info, h->root.root.string, h->root.u.undef.abfd,
8599                   NULL, 0, finfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)))
8600             {
8601               eoinfo->failed = TRUE;
8602               return FALSE;
8603             }
8604         }
8605     }
8606
8607   /* We should also warn if a forced local symbol is referenced from
8608      shared libraries.  */
8609   if (! finfo->info->relocatable
8610       && (! finfo->info->shared)
8611       && h->forced_local
8612       && h->ref_dynamic
8613       && !h->dynamic_def
8614       && !h->dynamic_weak
8615       && ! elf_link_check_versioned_symbol (finfo->info, bed, h))
8616     {
8617       (*_bfd_error_handler)
8618         (_("%B: %s symbol `%s' in %B is referenced by DSO"),
8619          finfo->output_bfd,
8620          h->root.u.def.section == bfd_abs_section_ptr
8621          ? finfo->output_bfd : h->root.u.def.section->owner,
8622          ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
8623          ? "internal"
8624          : ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
8625          ? "hidden" : "local",
8626          h->root.root.string);
8627       eoinfo->failed = TRUE;
8628       return FALSE;
8629     }
8630
8631   /* We don't want to output symbols that have never been mentioned by
8632      a regular file, or that we have been told to strip.  However, if
8633      h->indx is set to -2, the symbol is used by a reloc and we must
8634      output it.  */
8635   if (h->indx == -2)
8636     strip = FALSE;
8637   else if ((h->def_dynamic
8638             || h->ref_dynamic
8639             || h->root.type == bfd_link_hash_new)
8640            && !h->def_regular
8641            && !h->ref_regular)
8642     strip = TRUE;
8643   else if (finfo->info->strip == strip_all)
8644     strip = TRUE;
8645   else if (finfo->info->strip == strip_some
8646            && bfd_hash_lookup (finfo->info->keep_hash,
8647                                h->root.root.string, FALSE, FALSE) == NULL)
8648     strip = TRUE;
8649   else if (finfo->info->strip_discarded
8650            && (h->root.type == bfd_link_hash_defined
8651                || h->root.type == bfd_link_hash_defweak)
8652            && elf_discarded_section (h->root.u.def.section))
8653     strip = TRUE;
8654   else
8655     strip = FALSE;
8656
8657   /* If we're stripping it, and it's not a dynamic symbol, there's
8658      nothing else to do unless it is a forced local symbol or a
8659      STT_GNU_IFUNC symbol.  */
8660   if (strip
8661       && h->dynindx == -1
8662       && h->type != STT_GNU_IFUNC
8663       && !h->forced_local)
8664     return TRUE;
8665
8666   sym.st_value = 0;
8667   sym.st_size = h->size;
8668   sym.st_other = h->other;
8669   if (h->forced_local)
8670     {
8671       sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
8672       /* Turn off visibility on local symbol.  */
8673       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
8674     }
8675   else if (h->unique_global)
8676     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type);
8677   else if (h->root.type == bfd_link_hash_undefweak
8678            || h->root.type == bfd_link_hash_defweak)
8679     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
8680   else
8681     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
8682
8683   switch (h->root.type)
8684     {
8685     default:
8686     case bfd_link_hash_new:
8687     case bfd_link_hash_warning:
8688       abort ();
8689       return FALSE;
8690
8691     case bfd_link_hash_undefined:
8692     case bfd_link_hash_undefweak:
8693       input_sec = bfd_und_section_ptr;
8694       sym.st_shndx = SHN_UNDEF;
8695       break;
8696
8697     case bfd_link_hash_defined:
8698     case bfd_link_hash_defweak:
8699       {
8700         input_sec = h->root.u.def.section;
8701         if (input_sec->output_section != NULL)
8702           {
8703             sym.st_shndx =
8704               _bfd_elf_section_from_bfd_section (finfo->output_bfd,
8705                                                  input_sec->output_section);
8706             if (sym.st_shndx == SHN_BAD)
8707               {
8708                 (*_bfd_error_handler)
8709                   (_("%B: could not find output section %A for input section %A"),
8710                    finfo->output_bfd, input_sec->output_section, input_sec);
8711                 eoinfo->failed = TRUE;
8712                 return FALSE;
8713               }
8714
8715             /* ELF symbols in relocatable files are section relative,
8716                but in nonrelocatable files they are virtual
8717                addresses.  */
8718             sym.st_value = h->root.u.def.value + input_sec->output_offset;
8719             if (! finfo->info->relocatable)
8720               {
8721                 sym.st_value += input_sec->output_section->vma;
8722                 if (h->type == STT_TLS)
8723                   {
8724                     asection *tls_sec = elf_hash_table (finfo->info)->tls_sec;
8725                     if (tls_sec != NULL)
8726                       sym.st_value -= tls_sec->vma;
8727                     else
8728                       {
8729                         /* The TLS section may have been garbage collected.  */
8730                         BFD_ASSERT (finfo->info->gc_sections
8731                                     && !input_sec->gc_mark);
8732                       }
8733                   }
8734               }
8735           }
8736         else
8737           {
8738             BFD_ASSERT (input_sec->owner == NULL
8739                         || (input_sec->owner->flags & DYNAMIC) != 0);
8740             sym.st_shndx = SHN_UNDEF;
8741             input_sec = bfd_und_section_ptr;
8742           }
8743       }
8744       break;
8745
8746     case bfd_link_hash_common:
8747       input_sec = h->root.u.c.p->section;
8748       sym.st_shndx = bed->common_section_index (input_sec);
8749       sym.st_value = 1 << h->root.u.c.p->alignment_power;
8750       break;
8751
8752     case bfd_link_hash_indirect:
8753       /* These symbols are created by symbol versioning.  They point
8754          to the decorated version of the name.  For example, if the
8755          symbol foo@@GNU_1.2 is the default, which should be used when
8756          foo is used with no version, then we add an indirect symbol
8757          foo which points to foo@@GNU_1.2.  We ignore these symbols,
8758          since the indirected symbol is already in the hash table.  */
8759       return TRUE;
8760     }
8761
8762   /* Give the processor backend a chance to tweak the symbol value,
8763      and also to finish up anything that needs to be done for this
8764      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
8765      forced local syms when non-shared is due to a historical quirk.
8766      STT_GNU_IFUNC symbol must go through PLT.  */
8767   if ((h->type == STT_GNU_IFUNC
8768        && h->def_regular
8769        && !finfo->info->relocatable)
8770       || ((h->dynindx != -1
8771            || h->forced_local)
8772           && ((finfo->info->shared
8773                && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
8774                    || h->root.type != bfd_link_hash_undefweak))
8775               || !h->forced_local)
8776           && elf_hash_table (finfo->info)->dynamic_sections_created))
8777     {
8778       if (! ((*bed->elf_backend_finish_dynamic_symbol)
8779              (finfo->output_bfd, finfo->info, h, &sym)))
8780         {
8781           eoinfo->failed = TRUE;
8782           return FALSE;
8783         }
8784     }
8785
8786   /* If we are marking the symbol as undefined, and there are no
8787      non-weak references to this symbol from a regular object, then
8788      mark the symbol as weak undefined; if there are non-weak
8789      references, mark the symbol as strong.  We can't do this earlier,
8790      because it might not be marked as undefined until the
8791      finish_dynamic_symbol routine gets through with it.  */
8792   if (sym.st_shndx == SHN_UNDEF
8793       && h->ref_regular
8794       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
8795           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
8796     {
8797       int bindtype;
8798       unsigned int type = ELF_ST_TYPE (sym.st_info);
8799
8800       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
8801       if (type == STT_GNU_IFUNC)
8802         type = STT_FUNC;
8803
8804       if (h->ref_regular_nonweak)
8805         bindtype = STB_GLOBAL;
8806       else
8807         bindtype = STB_WEAK;
8808       sym.st_info = ELF_ST_INFO (bindtype, type);
8809     }
8810
8811   /* If this is a symbol defined in a dynamic library, don't use the
8812      symbol size from the dynamic library.  Relinking an executable
8813      against a new library may introduce gratuitous changes in the
8814      executable's symbols if we keep the size.  */
8815   if (sym.st_shndx == SHN_UNDEF
8816       && !h->def_regular
8817       && h->def_dynamic)
8818     sym.st_size = 0;
8819
8820   /* If a non-weak symbol with non-default visibility is not defined
8821      locally, it is a fatal error.  */
8822   if (! finfo->info->relocatable
8823       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
8824       && ELF_ST_BIND (sym.st_info) != STB_WEAK
8825       && h->root.type == bfd_link_hash_undefined
8826       && !h->def_regular)
8827     {
8828       (*_bfd_error_handler)
8829         (_("%B: %s symbol `%s' isn't defined"),
8830          finfo->output_bfd,
8831          ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED
8832          ? "protected"
8833          : ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL
8834          ? "internal" : "hidden",
8835          h->root.root.string);
8836       eoinfo->failed = TRUE;
8837       return FALSE;
8838     }
8839
8840   /* If this symbol should be put in the .dynsym section, then put it
8841      there now.  We already know the symbol index.  We also fill in
8842      the entry in the .hash section.  */
8843   if (h->dynindx != -1
8844       && elf_hash_table (finfo->info)->dynamic_sections_created)
8845     {
8846       bfd_byte *esym;
8847
8848       sym.st_name = h->dynstr_index;
8849       esym = finfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
8850       if (! check_dynsym (finfo->output_bfd, &sym))
8851         {
8852           eoinfo->failed = TRUE;
8853           return FALSE;
8854         }
8855       bed->s->swap_symbol_out (finfo->output_bfd, &sym, esym, 0);
8856
8857       if (finfo->hash_sec != NULL)
8858         {
8859           size_t hash_entry_size;
8860           bfd_byte *bucketpos;
8861           bfd_vma chain;
8862           size_t bucketcount;
8863           size_t bucket;
8864
8865           bucketcount = elf_hash_table (finfo->info)->bucketcount;
8866           bucket = h->u.elf_hash_value % bucketcount;
8867
8868           hash_entry_size
8869             = elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
8870           bucketpos = ((bfd_byte *) finfo->hash_sec->contents
8871                        + (bucket + 2) * hash_entry_size);
8872           chain = bfd_get (8 * hash_entry_size, finfo->output_bfd, bucketpos);
8873           bfd_put (8 * hash_entry_size, finfo->output_bfd, h->dynindx, bucketpos);
8874           bfd_put (8 * hash_entry_size, finfo->output_bfd, chain,
8875                    ((bfd_byte *) finfo->hash_sec->contents
8876                     + (bucketcount + 2 + h->dynindx) * hash_entry_size));
8877         }
8878
8879       if (finfo->symver_sec != NULL && finfo->symver_sec->contents != NULL)
8880         {
8881           Elf_Internal_Versym iversym;
8882           Elf_External_Versym *eversym;
8883
8884           if (!h->def_regular)
8885             {
8886               if (h->verinfo.verdef == NULL)
8887                 iversym.vs_vers = 0;
8888               else
8889                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
8890             }
8891           else
8892             {
8893               if (h->verinfo.vertree == NULL)
8894                 iversym.vs_vers = 1;
8895               else
8896                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
8897               if (finfo->info->create_default_symver)
8898                 iversym.vs_vers++;
8899             }
8900
8901           if (h->hidden)
8902             iversym.vs_vers |= VERSYM_HIDDEN;
8903
8904           eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
8905           eversym += h->dynindx;
8906           _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
8907         }
8908     }
8909
8910   /* If we're stripping it, then it was just a dynamic symbol, and
8911      there's nothing else to do.  */
8912   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
8913     return TRUE;
8914
8915   indx = bfd_get_symcount (finfo->output_bfd);
8916   ret = elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h);
8917   if (ret == 0)
8918     {
8919       eoinfo->failed = TRUE;
8920       return FALSE;
8921     }
8922   else if (ret == 1)
8923     h->indx = indx;
8924   else if (h->indx == -2)
8925     abort();
8926
8927   return TRUE;
8928 }
8929
8930 /* Return TRUE if special handling is done for relocs in SEC against
8931    symbols defined in discarded sections.  */
8932
8933 static bfd_boolean
8934 elf_section_ignore_discarded_relocs (asection *sec)
8935 {
8936   const struct elf_backend_data *bed;
8937
8938   switch (sec->sec_info_type)
8939     {
8940     case ELF_INFO_TYPE_STABS:
8941     case ELF_INFO_TYPE_EH_FRAME:
8942       return TRUE;
8943     default:
8944       break;
8945     }
8946
8947   bed = get_elf_backend_data (sec->owner);
8948   if (bed->elf_backend_ignore_discarded_relocs != NULL
8949       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
8950     return TRUE;
8951
8952   return FALSE;
8953 }
8954
8955 /* Return a mask saying how ld should treat relocations in SEC against
8956    symbols defined in discarded sections.  If this function returns
8957    COMPLAIN set, ld will issue a warning message.  If this function
8958    returns PRETEND set, and the discarded section was link-once and the
8959    same size as the kept link-once section, ld will pretend that the
8960    symbol was actually defined in the kept section.  Otherwise ld will
8961    zero the reloc (at least that is the intent, but some cooperation by
8962    the target dependent code is needed, particularly for REL targets).  */
8963
8964 unsigned int
8965 _bfd_elf_default_action_discarded (asection *sec)
8966 {
8967   if (sec->flags & SEC_DEBUGGING)
8968     return PRETEND;
8969
8970   if (strcmp (".eh_frame", sec->name) == 0)
8971     return 0;
8972
8973   if (strcmp (".gcc_except_table", sec->name) == 0)
8974     return 0;
8975
8976   return COMPLAIN | PRETEND;
8977 }
8978
8979 /* Find a match between a section and a member of a section group.  */
8980
8981 static asection *
8982 match_group_member (asection *sec, asection *group,
8983                     struct bfd_link_info *info)
8984 {
8985   asection *first = elf_next_in_group (group);
8986   asection *s = first;
8987
8988   while (s != NULL)
8989     {
8990       if (bfd_elf_match_symbols_in_sections (s, sec, info))
8991         return s;
8992
8993       s = elf_next_in_group (s);
8994       if (s == first)
8995         break;
8996     }
8997
8998   return NULL;
8999 }
9000
9001 /* Check if the kept section of a discarded section SEC can be used
9002    to replace it.  Return the replacement if it is OK.  Otherwise return
9003    NULL.  */
9004
9005 asection *
9006 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
9007 {
9008   asection *kept;
9009
9010   kept = sec->kept_section;
9011   if (kept != NULL)
9012     {
9013       if ((kept->flags & SEC_GROUP) != 0)
9014         kept = match_group_member (sec, kept, info);
9015       if (kept != NULL
9016           && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
9017               != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
9018         kept = NULL;
9019       sec->kept_section = kept;
9020     }
9021   return kept;
9022 }
9023
9024 /* Link an input file into the linker output file.  This function
9025    handles all the sections and relocations of the input file at once.
9026    This is so that we only have to read the local symbols once, and
9027    don't have to keep them in memory.  */
9028
9029 static bfd_boolean
9030 elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
9031 {
9032   int (*relocate_section)
9033     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
9034      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
9035   bfd *output_bfd;
9036   Elf_Internal_Shdr *symtab_hdr;
9037   size_t locsymcount;
9038   size_t extsymoff;
9039   Elf_Internal_Sym *isymbuf;
9040   Elf_Internal_Sym *isym;
9041   Elf_Internal_Sym *isymend;
9042   long *pindex;
9043   asection **ppsection;
9044   asection *o;
9045   const struct elf_backend_data *bed;
9046   struct elf_link_hash_entry **sym_hashes;
9047
9048   output_bfd = finfo->output_bfd;
9049   bed = get_elf_backend_data (output_bfd);
9050   relocate_section = bed->elf_backend_relocate_section;
9051
9052   /* If this is a dynamic object, we don't want to do anything here:
9053      we don't want the local symbols, and we don't want the section
9054      contents.  */
9055   if ((input_bfd->flags & DYNAMIC) != 0)
9056     return TRUE;
9057
9058   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9059   if (elf_bad_symtab (input_bfd))
9060     {
9061       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9062       extsymoff = 0;
9063     }
9064   else
9065     {
9066       locsymcount = symtab_hdr->sh_info;
9067       extsymoff = symtab_hdr->sh_info;
9068     }
9069
9070   /* Read the local symbols.  */
9071   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
9072   if (isymbuf == NULL && locsymcount != 0)
9073     {
9074       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
9075                                       finfo->internal_syms,
9076                                       finfo->external_syms,
9077                                       finfo->locsym_shndx);
9078       if (isymbuf == NULL)
9079         return FALSE;
9080     }
9081
9082   /* Find local symbol sections and adjust values of symbols in
9083      SEC_MERGE sections.  Write out those local symbols we know are
9084      going into the output file.  */
9085   isymend = isymbuf + locsymcount;
9086   for (isym = isymbuf, pindex = finfo->indices, ppsection = finfo->sections;
9087        isym < isymend;
9088        isym++, pindex++, ppsection++)
9089     {
9090       asection *isec;
9091       const char *name;
9092       Elf_Internal_Sym osym;
9093       long indx;
9094       int ret;
9095
9096       *pindex = -1;
9097
9098       if (elf_bad_symtab (input_bfd))
9099         {
9100           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
9101             {
9102               *ppsection = NULL;
9103               continue;
9104             }
9105         }
9106
9107       if (isym->st_shndx == SHN_UNDEF)
9108         isec = bfd_und_section_ptr;
9109       else if (isym->st_shndx == SHN_ABS)
9110         isec = bfd_abs_section_ptr;
9111       else if (isym->st_shndx == SHN_COMMON)
9112         isec = bfd_com_section_ptr;
9113       else
9114         {
9115           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
9116           if (isec == NULL)
9117             {
9118               /* Don't attempt to output symbols with st_shnx in the
9119                  reserved range other than SHN_ABS and SHN_COMMON.  */
9120               *ppsection = NULL;
9121               continue;
9122             }
9123           else if (isec->sec_info_type == ELF_INFO_TYPE_MERGE
9124                    && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
9125             isym->st_value =
9126               _bfd_merged_section_offset (output_bfd, &isec,
9127                                           elf_section_data (isec)->sec_info,
9128                                           isym->st_value);
9129         }
9130
9131       *ppsection = isec;
9132
9133       /* Don't output the first, undefined, symbol.  */
9134       if (ppsection == finfo->sections)
9135         continue;
9136
9137       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
9138         {
9139           /* We never output section symbols.  Instead, we use the
9140              section symbol of the corresponding section in the output
9141              file.  */
9142           continue;
9143         }
9144
9145       /* If we are stripping all symbols, we don't want to output this
9146          one.  */
9147       if (finfo->info->strip == strip_all)
9148         continue;
9149
9150       /* If we are discarding all local symbols, we don't want to
9151          output this one.  If we are generating a relocatable output
9152          file, then some of the local symbols may be required by
9153          relocs; we output them below as we discover that they are
9154          needed.  */
9155       if (finfo->info->discard == discard_all)
9156         continue;
9157
9158       /* If this symbol is defined in a section which we are
9159          discarding, we don't need to keep it.  */
9160       if (isym->st_shndx != SHN_UNDEF
9161           && isym->st_shndx < SHN_LORESERVE
9162           && bfd_section_removed_from_list (output_bfd,
9163                                             isec->output_section))
9164         continue;
9165
9166       /* Get the name of the symbol.  */
9167       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
9168                                               isym->st_name);
9169       if (name == NULL)
9170         return FALSE;
9171
9172       /* See if we are discarding symbols with this name.  */
9173       if ((finfo->info->strip == strip_some
9174            && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE)
9175                == NULL))
9176           || (((finfo->info->discard == discard_sec_merge
9177                 && (isec->flags & SEC_MERGE) && ! finfo->info->relocatable)
9178                || finfo->info->discard == discard_l)
9179               && bfd_is_local_label_name (input_bfd, name)))
9180         continue;
9181
9182       osym = *isym;
9183
9184       /* Adjust the section index for the output file.  */
9185       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9186                                                          isec->output_section);
9187       if (osym.st_shndx == SHN_BAD)
9188         return FALSE;
9189
9190       /* ELF symbols in relocatable files are section relative, but
9191          in executable files they are virtual addresses.  Note that
9192          this code assumes that all ELF sections have an associated
9193          BFD section with a reasonable value for output_offset; below
9194          we assume that they also have a reasonable value for
9195          output_section.  Any special sections must be set up to meet
9196          these requirements.  */
9197       osym.st_value += isec->output_offset;
9198       if (! finfo->info->relocatable)
9199         {
9200           osym.st_value += isec->output_section->vma;
9201           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
9202             {
9203               /* STT_TLS symbols are relative to PT_TLS segment base.  */
9204               BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL);
9205               osym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma;
9206             }
9207         }
9208
9209       indx = bfd_get_symcount (output_bfd);
9210       ret = elf_link_output_sym (finfo, name, &osym, isec, NULL);
9211       if (ret == 0)
9212         return FALSE;
9213       else if (ret == 1)
9214         *pindex = indx;
9215     }
9216
9217   /* Relocate the contents of each section.  */
9218   sym_hashes = elf_sym_hashes (input_bfd);
9219   for (o = input_bfd->sections; o != NULL; o = o->next)
9220     {
9221       bfd_byte *contents;
9222
9223       if (! o->linker_mark)
9224         {
9225           /* This section was omitted from the link.  */
9226           continue;
9227         }
9228
9229       if (finfo->info->relocatable
9230           && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
9231         {
9232           /* Deal with the group signature symbol.  */
9233           struct bfd_elf_section_data *sec_data = elf_section_data (o);
9234           unsigned long symndx = sec_data->this_hdr.sh_info;
9235           asection *osec = o->output_section;
9236
9237           if (symndx >= locsymcount
9238               || (elf_bad_symtab (input_bfd)
9239                   && finfo->sections[symndx] == NULL))
9240             {
9241               struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
9242               while (h->root.type == bfd_link_hash_indirect
9243                      || h->root.type == bfd_link_hash_warning)
9244                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
9245               /* Arrange for symbol to be output.  */
9246               h->indx = -2;
9247               elf_section_data (osec)->this_hdr.sh_info = -2;
9248             }
9249           else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
9250             {
9251               /* We'll use the output section target_index.  */
9252               asection *sec = finfo->sections[symndx]->output_section;
9253               elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
9254             }
9255           else
9256             {
9257               if (finfo->indices[symndx] == -1)
9258                 {
9259                   /* Otherwise output the local symbol now.  */
9260                   Elf_Internal_Sym sym = isymbuf[symndx];
9261                   asection *sec = finfo->sections[symndx]->output_section;
9262                   const char *name;
9263                   long indx;
9264                   int ret;
9265
9266                   name = bfd_elf_string_from_elf_section (input_bfd,
9267                                                           symtab_hdr->sh_link,
9268                                                           sym.st_name);
9269                   if (name == NULL)
9270                     return FALSE;
9271
9272                   sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9273                                                                     sec);
9274                   if (sym.st_shndx == SHN_BAD)
9275                     return FALSE;
9276
9277                   sym.st_value += o->output_offset;
9278
9279                   indx = bfd_get_symcount (output_bfd);
9280                   ret = elf_link_output_sym (finfo, name, &sym, o, NULL);
9281                   if (ret == 0)
9282                     return FALSE;
9283                   else if (ret == 1)
9284                     finfo->indices[symndx] = indx;
9285                   else
9286                     abort ();
9287                 }
9288               elf_section_data (osec)->this_hdr.sh_info
9289                 = finfo->indices[symndx];
9290             }
9291         }
9292
9293       if ((o->flags & SEC_HAS_CONTENTS) == 0
9294           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
9295         continue;
9296
9297       if ((o->flags & SEC_LINKER_CREATED) != 0)
9298         {
9299           /* Section was created by _bfd_elf_link_create_dynamic_sections
9300              or somesuch.  */
9301           continue;
9302         }
9303
9304       /* Get the contents of the section.  They have been cached by a
9305          relaxation routine.  Note that o is a section in an input
9306          file, so the contents field will not have been set by any of
9307          the routines which work on output files.  */
9308       if (elf_section_data (o)->this_hdr.contents != NULL)
9309         contents = elf_section_data (o)->this_hdr.contents;
9310       else
9311         {
9312           bfd_size_type amt = o->rawsize ? o->rawsize : o->size;
9313
9314           contents = finfo->contents;
9315           if (! bfd_get_section_contents (input_bfd, o, contents, 0, amt))
9316             return FALSE;
9317         }
9318
9319       if ((o->flags & SEC_RELOC) != 0)
9320         {
9321           Elf_Internal_Rela *internal_relocs;
9322           Elf_Internal_Rela *rel, *relend;
9323           bfd_vma r_type_mask;
9324           int r_sym_shift;
9325           int action_discarded;
9326           int ret;
9327
9328           /* Get the swapped relocs.  */
9329           internal_relocs
9330             = _bfd_elf_link_read_relocs (input_bfd, o, finfo->external_relocs,
9331                                          finfo->internal_relocs, FALSE);
9332           if (internal_relocs == NULL
9333               && o->reloc_count > 0)
9334             return FALSE;
9335
9336           if (bed->s->arch_size == 32)
9337             {
9338               r_type_mask = 0xff;
9339               r_sym_shift = 8;
9340             }
9341           else
9342             {
9343               r_type_mask = 0xffffffff;
9344               r_sym_shift = 32;
9345             }
9346
9347           action_discarded = -1;
9348           if (!elf_section_ignore_discarded_relocs (o))
9349             action_discarded = (*bed->action_discarded) (o);
9350
9351           /* Run through the relocs evaluating complex reloc symbols and
9352              looking for relocs against symbols from discarded sections
9353              or section symbols from removed link-once sections.
9354              Complain about relocs against discarded sections.  Zero
9355              relocs against removed link-once sections.  */
9356
9357           rel = internal_relocs;
9358           relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
9359           for ( ; rel < relend; rel++)
9360             {
9361               unsigned long r_symndx = rel->r_info >> r_sym_shift;
9362               unsigned int s_type;
9363               asection **ps, *sec;
9364               struct elf_link_hash_entry *h = NULL;
9365               const char *sym_name;
9366
9367               if (r_symndx == STN_UNDEF)
9368                 continue;
9369
9370               if (r_symndx >= locsymcount
9371                   || (elf_bad_symtab (input_bfd)
9372                       && finfo->sections[r_symndx] == NULL))
9373                 {
9374                   h = sym_hashes[r_symndx - extsymoff];
9375
9376                   /* Badly formatted input files can contain relocs that
9377                      reference non-existant symbols.  Check here so that
9378                      we do not seg fault.  */
9379                   if (h == NULL)
9380                     {
9381                       char buffer [32];
9382
9383                       sprintf_vma (buffer, rel->r_info);
9384                       (*_bfd_error_handler)
9385                         (_("error: %B contains a reloc (0x%s) for section %A "
9386                            "that references a non-existent global symbol"),
9387                          input_bfd, o, buffer);
9388                       bfd_set_error (bfd_error_bad_value);
9389                       return FALSE;
9390                     }
9391
9392                   while (h->root.type == bfd_link_hash_indirect
9393                          || h->root.type == bfd_link_hash_warning)
9394                     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9395
9396                   s_type = h->type;
9397
9398                   ps = NULL;
9399                   if (h->root.type == bfd_link_hash_defined
9400                       || h->root.type == bfd_link_hash_defweak)
9401                     ps = &h->root.u.def.section;
9402
9403                   sym_name = h->root.root.string;
9404                 }
9405               else
9406                 {
9407                   Elf_Internal_Sym *sym = isymbuf + r_symndx;
9408
9409                   s_type = ELF_ST_TYPE (sym->st_info);
9410                   ps = &finfo->sections[r_symndx];
9411                   sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9412                                                sym, *ps);
9413                 }
9414
9415               if ((s_type == STT_RELC || s_type == STT_SRELC)
9416                   && !finfo->info->relocatable)
9417                 {
9418                   bfd_vma val;
9419                   bfd_vma dot = (rel->r_offset
9420                                  + o->output_offset + o->output_section->vma);
9421 #ifdef DEBUG
9422                   printf ("Encountered a complex symbol!");
9423                   printf (" (input_bfd %s, section %s, reloc %ld\n",
9424                           input_bfd->filename, o->name, rel - internal_relocs);
9425                   printf (" symbol: idx  %8.8lx, name %s\n",
9426                           r_symndx, sym_name);
9427                   printf (" reloc : info %8.8lx, addr %8.8lx\n",
9428                           (unsigned long) rel->r_info,
9429                           (unsigned long) rel->r_offset);
9430 #endif
9431                   if (!eval_symbol (&val, &sym_name, input_bfd, finfo, dot,
9432                                     isymbuf, locsymcount, s_type == STT_SRELC))
9433                     return FALSE;
9434
9435                   /* Symbol evaluated OK.  Update to absolute value.  */
9436                   set_symbol_value (input_bfd, isymbuf, locsymcount,
9437                                     r_symndx, val);
9438                   continue;
9439                 }
9440
9441               if (action_discarded != -1 && ps != NULL)
9442                 {
9443                   /* Complain if the definition comes from a
9444                      discarded section.  */
9445                   if ((sec = *ps) != NULL && elf_discarded_section (sec))
9446                     {
9447                       BFD_ASSERT (r_symndx != 0);
9448                       if (action_discarded & COMPLAIN)
9449                         (*finfo->info->callbacks->einfo)
9450                           (_("%X`%s' referenced in section `%A' of %B: "
9451                              "defined in discarded section `%A' of %B\n"),
9452                            sym_name, o, input_bfd, sec, sec->owner);
9453
9454                       /* Try to do the best we can to support buggy old
9455                          versions of gcc.  Pretend that the symbol is
9456                          really defined in the kept linkonce section.
9457                          FIXME: This is quite broken.  Modifying the
9458                          symbol here means we will be changing all later
9459                          uses of the symbol, not just in this section.  */
9460                       if (action_discarded & PRETEND)
9461                         {
9462                           asection *kept;
9463
9464                           kept = _bfd_elf_check_kept_section (sec,
9465                                                               finfo->info);
9466                           if (kept != NULL)
9467                             {
9468                               *ps = kept;
9469                               continue;
9470                             }
9471                         }
9472                     }
9473                 }
9474             }
9475
9476           /* Relocate the section by invoking a back end routine.
9477
9478              The back end routine is responsible for adjusting the
9479              section contents as necessary, and (if using Rela relocs
9480              and generating a relocatable output file) adjusting the
9481              reloc addend as necessary.
9482
9483              The back end routine does not have to worry about setting
9484              the reloc address or the reloc symbol index.
9485
9486              The back end routine is given a pointer to the swapped in
9487              internal symbols, and can access the hash table entries
9488              for the external symbols via elf_sym_hashes (input_bfd).
9489
9490              When generating relocatable output, the back end routine
9491              must handle STB_LOCAL/STT_SECTION symbols specially.  The
9492              output symbol is going to be a section symbol
9493              corresponding to the output section, which will require
9494              the addend to be adjusted.  */
9495
9496           ret = (*relocate_section) (output_bfd, finfo->info,
9497                                      input_bfd, o, contents,
9498                                      internal_relocs,
9499                                      isymbuf,
9500                                      finfo->sections);
9501           if (!ret)
9502             return FALSE;
9503
9504           if (ret == 2
9505               || finfo->info->relocatable
9506               || finfo->info->emitrelocations)
9507             {
9508               Elf_Internal_Rela *irela;
9509               Elf_Internal_Rela *irelaend;
9510               bfd_vma last_offset;
9511               struct elf_link_hash_entry **rel_hash;
9512               struct elf_link_hash_entry **rel_hash_list;
9513               Elf_Internal_Shdr *input_rel_hdr, *input_rel_hdr2;
9514               unsigned int next_erel;
9515               bfd_boolean rela_normal;
9516
9517               input_rel_hdr = &elf_section_data (o)->rel_hdr;
9518               rela_normal = (bed->rela_normal
9519                              && (input_rel_hdr->sh_entsize
9520                                  == bed->s->sizeof_rela));
9521
9522               /* Adjust the reloc addresses and symbol indices.  */
9523
9524               irela = internal_relocs;
9525               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
9526               rel_hash = (elf_section_data (o->output_section)->rel_hashes
9527                           + elf_section_data (o->output_section)->rel_count
9528                           + elf_section_data (o->output_section)->rel_count2);
9529               rel_hash_list = rel_hash;
9530               last_offset = o->output_offset;
9531               if (!finfo->info->relocatable)
9532                 last_offset += o->output_section->vma;
9533               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
9534                 {
9535                   unsigned long r_symndx;
9536                   asection *sec;
9537                   Elf_Internal_Sym sym;
9538
9539                   if (next_erel == bed->s->int_rels_per_ext_rel)
9540                     {
9541                       rel_hash++;
9542                       next_erel = 0;
9543                     }
9544
9545                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
9546                                                              finfo->info, o,
9547                                                              irela->r_offset);
9548                   if (irela->r_offset >= (bfd_vma) -2)
9549                     {
9550                       /* This is a reloc for a deleted entry or somesuch.
9551                          Turn it into an R_*_NONE reloc, at the same
9552                          offset as the last reloc.  elf_eh_frame.c and
9553                          bfd_elf_discard_info rely on reloc offsets
9554                          being ordered.  */
9555                       irela->r_offset = last_offset;
9556                       irela->r_info = 0;
9557                       irela->r_addend = 0;
9558                       continue;
9559                     }
9560
9561                   irela->r_offset += o->output_offset;
9562
9563                   /* Relocs in an executable have to be virtual addresses.  */
9564                   if (!finfo->info->relocatable)
9565                     irela->r_offset += o->output_section->vma;
9566
9567                   last_offset = irela->r_offset;
9568
9569                   r_symndx = irela->r_info >> r_sym_shift;
9570                   if (r_symndx == STN_UNDEF)
9571                     continue;
9572
9573                   if (r_symndx >= locsymcount
9574                       || (elf_bad_symtab (input_bfd)
9575                           && finfo->sections[r_symndx] == NULL))
9576                     {
9577                       struct elf_link_hash_entry *rh;
9578                       unsigned long indx;
9579
9580                       /* This is a reloc against a global symbol.  We
9581                          have not yet output all the local symbols, so
9582                          we do not know the symbol index of any global
9583                          symbol.  We set the rel_hash entry for this
9584                          reloc to point to the global hash table entry
9585                          for this symbol.  The symbol index is then
9586                          set at the end of bfd_elf_final_link.  */
9587                       indx = r_symndx - extsymoff;
9588                       rh = elf_sym_hashes (input_bfd)[indx];
9589                       while (rh->root.type == bfd_link_hash_indirect
9590                              || rh->root.type == bfd_link_hash_warning)
9591                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
9592
9593                       /* Setting the index to -2 tells
9594                          elf_link_output_extsym that this symbol is
9595                          used by a reloc.  */
9596                       BFD_ASSERT (rh->indx < 0);
9597                       rh->indx = -2;
9598
9599                       *rel_hash = rh;
9600
9601                       continue;
9602                     }
9603
9604                   /* This is a reloc against a local symbol.  */
9605
9606                   *rel_hash = NULL;
9607                   sym = isymbuf[r_symndx];
9608                   sec = finfo->sections[r_symndx];
9609                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
9610                     {
9611                       /* I suppose the backend ought to fill in the
9612                          section of any STT_SECTION symbol against a
9613                          processor specific section.  */
9614                       r_symndx = 0;
9615                       if (bfd_is_abs_section (sec))
9616                         ;
9617                       else if (sec == NULL || sec->owner == NULL)
9618                         {
9619                           bfd_set_error (bfd_error_bad_value);
9620                           return FALSE;
9621                         }
9622                       else
9623                         {
9624                           asection *osec = sec->output_section;
9625
9626                           /* If we have discarded a section, the output
9627                              section will be the absolute section.  In
9628                              case of discarded SEC_MERGE sections, use
9629                              the kept section.  relocate_section should
9630                              have already handled discarded linkonce
9631                              sections.  */
9632                           if (bfd_is_abs_section (osec)
9633                               && sec->kept_section != NULL
9634                               && sec->kept_section->output_section != NULL)
9635                             {
9636                               osec = sec->kept_section->output_section;
9637                               irela->r_addend -= osec->vma;
9638                             }
9639
9640                           if (!bfd_is_abs_section (osec))
9641                             {
9642                               r_symndx = osec->target_index;
9643                               if (r_symndx == 0)
9644                                 {
9645                                   struct elf_link_hash_table *htab;
9646                                   asection *oi;
9647
9648                                   htab = elf_hash_table (finfo->info);
9649                                   oi = htab->text_index_section;
9650                                   if ((osec->flags & SEC_READONLY) == 0
9651                                       && htab->data_index_section != NULL)
9652                                     oi = htab->data_index_section;
9653
9654                                   if (oi != NULL)
9655                                     {
9656                                       irela->r_addend += osec->vma - oi->vma;
9657                                       r_symndx = oi->target_index;
9658                                     }
9659                                 }
9660
9661                               BFD_ASSERT (r_symndx != 0);
9662                             }
9663                         }
9664
9665                       /* Adjust the addend according to where the
9666                          section winds up in the output section.  */
9667                       if (rela_normal)
9668                         irela->r_addend += sec->output_offset;
9669                     }
9670                   else
9671                     {
9672                       if (finfo->indices[r_symndx] == -1)
9673                         {
9674                           unsigned long shlink;
9675                           const char *name;
9676                           asection *osec;
9677                           long indx;
9678
9679                           if (finfo->info->strip == strip_all)
9680                             {
9681                               /* You can't do ld -r -s.  */
9682                               bfd_set_error (bfd_error_invalid_operation);
9683                               return FALSE;
9684                             }
9685
9686                           /* This symbol was skipped earlier, but
9687                              since it is needed by a reloc, we
9688                              must output it now.  */
9689                           shlink = symtab_hdr->sh_link;
9690                           name = (bfd_elf_string_from_elf_section
9691                                   (input_bfd, shlink, sym.st_name));
9692                           if (name == NULL)
9693                             return FALSE;
9694
9695                           osec = sec->output_section;
9696                           sym.st_shndx =
9697                             _bfd_elf_section_from_bfd_section (output_bfd,
9698                                                                osec);
9699                           if (sym.st_shndx == SHN_BAD)
9700                             return FALSE;
9701
9702                           sym.st_value += sec->output_offset;
9703                           if (! finfo->info->relocatable)
9704                             {
9705                               sym.st_value += osec->vma;
9706                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
9707                                 {
9708                                   /* STT_TLS symbols are relative to PT_TLS
9709                                      segment base.  */
9710                                   BFD_ASSERT (elf_hash_table (finfo->info)
9711                                               ->tls_sec != NULL);
9712                                   sym.st_value -= (elf_hash_table (finfo->info)
9713                                                    ->tls_sec->vma);
9714                                 }
9715                             }
9716
9717                           indx = bfd_get_symcount (output_bfd);
9718                           ret = elf_link_output_sym (finfo, name, &sym, sec,
9719                                                      NULL);
9720                           if (ret == 0)
9721                             return FALSE;
9722                           else if (ret == 1)
9723                             finfo->indices[r_symndx] = indx;
9724                           else
9725                             abort ();
9726                         }
9727
9728                       r_symndx = finfo->indices[r_symndx];
9729                     }
9730
9731                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
9732                                    | (irela->r_info & r_type_mask));
9733                 }
9734
9735               /* Swap out the relocs.  */
9736               if (input_rel_hdr->sh_size != 0
9737                   && !bed->elf_backend_emit_relocs (output_bfd, o,
9738                                                     input_rel_hdr,
9739                                                     internal_relocs,
9740                                                     rel_hash_list))
9741                 return FALSE;
9742
9743               input_rel_hdr2 = elf_section_data (o)->rel_hdr2;
9744               if (input_rel_hdr2 && input_rel_hdr2->sh_size != 0)
9745                 {
9746                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
9747                                       * bed->s->int_rels_per_ext_rel);
9748                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
9749                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
9750                                                      input_rel_hdr2,
9751                                                      internal_relocs,
9752                                                      rel_hash_list))
9753                     return FALSE;
9754                 }
9755             }
9756         }
9757
9758       /* Write out the modified section contents.  */
9759       if (bed->elf_backend_write_section
9760           && (*bed->elf_backend_write_section) (output_bfd, finfo->info, o,
9761                                                 contents))
9762         {
9763           /* Section written out.  */
9764         }
9765       else switch (o->sec_info_type)
9766         {
9767         case ELF_INFO_TYPE_STABS:
9768           if (! (_bfd_write_section_stabs
9769                  (output_bfd,
9770                   &elf_hash_table (finfo->info)->stab_info,
9771                   o, &elf_section_data (o)->sec_info, contents)))
9772             return FALSE;
9773           break;
9774         case ELF_INFO_TYPE_MERGE:
9775           if (! _bfd_write_merged_section (output_bfd, o,
9776                                            elf_section_data (o)->sec_info))
9777             return FALSE;
9778           break;
9779         case ELF_INFO_TYPE_EH_FRAME:
9780           {
9781             if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
9782                                                    o, contents))
9783               return FALSE;
9784           }
9785           break;
9786         default:
9787           {
9788             /* FIXME: octets_per_byte.  */
9789             if (! (o->flags & SEC_EXCLUDE)
9790                 && ! (o->output_section->flags & SEC_NEVER_LOAD)
9791                 && ! bfd_set_section_contents (output_bfd, o->output_section,
9792                                                contents,
9793                                                (file_ptr) o->output_offset,
9794                                                o->size))
9795               return FALSE;
9796           }
9797           break;
9798         }
9799     }
9800
9801   return TRUE;
9802 }
9803
9804 /* Generate a reloc when linking an ELF file.  This is a reloc
9805    requested by the linker, and does not come from any input file.  This
9806    is used to build constructor and destructor tables when linking
9807    with -Ur.  */
9808
9809 static bfd_boolean
9810 elf_reloc_link_order (bfd *output_bfd,
9811                       struct bfd_link_info *info,
9812                       asection *output_section,
9813                       struct bfd_link_order *link_order)
9814 {
9815   reloc_howto_type *howto;
9816   long indx;
9817   bfd_vma offset;
9818   bfd_vma addend;
9819   struct elf_link_hash_entry **rel_hash_ptr;
9820   Elf_Internal_Shdr *rel_hdr;
9821   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9822   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
9823   bfd_byte *erel;
9824   unsigned int i;
9825
9826   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
9827   if (howto == NULL)
9828     {
9829       bfd_set_error (bfd_error_bad_value);
9830       return FALSE;
9831     }
9832
9833   addend = link_order->u.reloc.p->addend;
9834
9835   /* Figure out the symbol index.  */
9836   rel_hash_ptr = (elf_section_data (output_section)->rel_hashes
9837                   + elf_section_data (output_section)->rel_count
9838                   + elf_section_data (output_section)->rel_count2);
9839   if (link_order->type == bfd_section_reloc_link_order)
9840     {
9841       indx = link_order->u.reloc.p->u.section->target_index;
9842       BFD_ASSERT (indx != 0);
9843       *rel_hash_ptr = NULL;
9844     }
9845   else
9846     {
9847       struct elf_link_hash_entry *h;
9848
9849       /* Treat a reloc against a defined symbol as though it were
9850          actually against the section.  */
9851       h = ((struct elf_link_hash_entry *)
9852            bfd_wrapped_link_hash_lookup (output_bfd, info,
9853                                          link_order->u.reloc.p->u.name,
9854                                          FALSE, FALSE, TRUE));
9855       if (h != NULL
9856           && (h->root.type == bfd_link_hash_defined
9857               || h->root.type == bfd_link_hash_defweak))
9858         {
9859           asection *section;
9860
9861           section = h->root.u.def.section;
9862           indx = section->output_section->target_index;
9863           *rel_hash_ptr = NULL;
9864           /* It seems that we ought to add the symbol value to the
9865              addend here, but in practice it has already been added
9866              because it was passed to constructor_callback.  */
9867           addend += section->output_section->vma + section->output_offset;
9868         }
9869       else if (h != NULL)
9870         {
9871           /* Setting the index to -2 tells elf_link_output_extsym that
9872              this symbol is used by a reloc.  */
9873           h->indx = -2;
9874           *rel_hash_ptr = h;
9875           indx = 0;
9876         }
9877       else
9878         {
9879           if (! ((*info->callbacks->unattached_reloc)
9880                  (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
9881             return FALSE;
9882           indx = 0;
9883         }
9884     }
9885
9886   /* If this is an inplace reloc, we must write the addend into the
9887      object file.  */
9888   if (howto->partial_inplace && addend != 0)
9889     {
9890       bfd_size_type size;
9891       bfd_reloc_status_type rstat;
9892       bfd_byte *buf;
9893       bfd_boolean ok;
9894       const char *sym_name;
9895
9896       size = (bfd_size_type) bfd_get_reloc_size (howto);
9897       buf = (bfd_byte *) bfd_zmalloc (size);
9898       if (buf == NULL)
9899         return FALSE;
9900       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
9901       switch (rstat)
9902         {
9903         case bfd_reloc_ok:
9904           break;
9905
9906         default:
9907         case bfd_reloc_outofrange:
9908           abort ();
9909
9910         case bfd_reloc_overflow:
9911           if (link_order->type == bfd_section_reloc_link_order)
9912             sym_name = bfd_section_name (output_bfd,
9913                                          link_order->u.reloc.p->u.section);
9914           else
9915             sym_name = link_order->u.reloc.p->u.name;
9916           if (! ((*info->callbacks->reloc_overflow)
9917                  (info, NULL, sym_name, howto->name, addend, NULL,
9918                   NULL, (bfd_vma) 0)))
9919             {
9920               free (buf);
9921               return FALSE;
9922             }
9923           break;
9924         }
9925       ok = bfd_set_section_contents (output_bfd, output_section, buf,
9926                                      link_order->offset, size);
9927       free (buf);
9928       if (! ok)
9929         return FALSE;
9930     }
9931
9932   /* The address of a reloc is relative to the section in a
9933      relocatable file, and is a virtual address in an executable
9934      file.  */
9935   offset = link_order->offset;
9936   if (! info->relocatable)
9937     offset += output_section->vma;
9938
9939   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
9940     {
9941       irel[i].r_offset = offset;
9942       irel[i].r_info = 0;
9943       irel[i].r_addend = 0;
9944     }
9945   if (bed->s->arch_size == 32)
9946     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
9947   else
9948     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
9949
9950   rel_hdr = &elf_section_data (output_section)->rel_hdr;
9951   erel = rel_hdr->contents;
9952   if (rel_hdr->sh_type == SHT_REL)
9953     {
9954       erel += (elf_section_data (output_section)->rel_count
9955                * bed->s->sizeof_rel);
9956       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
9957     }
9958   else
9959     {
9960       irel[0].r_addend = addend;
9961       erel += (elf_section_data (output_section)->rel_count
9962                * bed->s->sizeof_rela);
9963       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
9964     }
9965
9966   ++elf_section_data (output_section)->rel_count;
9967
9968   return TRUE;
9969 }
9970
9971
9972 /* Get the output vma of the section pointed to by the sh_link field.  */
9973
9974 static bfd_vma
9975 elf_get_linked_section_vma (struct bfd_link_order *p)
9976 {
9977   Elf_Internal_Shdr **elf_shdrp;
9978   asection *s;
9979   int elfsec;
9980
9981   s = p->u.indirect.section;
9982   elf_shdrp = elf_elfsections (s->owner);
9983   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
9984   elfsec = elf_shdrp[elfsec]->sh_link;
9985   /* PR 290:
9986      The Intel C compiler generates SHT_IA_64_UNWIND with
9987      SHF_LINK_ORDER.  But it doesn't set the sh_link or
9988      sh_info fields.  Hence we could get the situation
9989      where elfsec is 0.  */
9990   if (elfsec == 0)
9991     {
9992       const struct elf_backend_data *bed
9993         = get_elf_backend_data (s->owner);
9994       if (bed->link_order_error_handler)
9995         bed->link_order_error_handler
9996           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
9997       return 0;
9998     }
9999   else
10000     {
10001       s = elf_shdrp[elfsec]->bfd_section;
10002       return s->output_section->vma + s->output_offset;
10003     }
10004 }
10005
10006
10007 /* Compare two sections based on the locations of the sections they are
10008    linked to.  Used by elf_fixup_link_order.  */
10009
10010 static int
10011 compare_link_order (const void * a, const void * b)
10012 {
10013   bfd_vma apos;
10014   bfd_vma bpos;
10015
10016   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
10017   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
10018   if (apos < bpos)
10019     return -1;
10020   return apos > bpos;
10021 }
10022
10023
10024 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
10025    order as their linked sections.  Returns false if this could not be done
10026    because an output section includes both ordered and unordered
10027    sections.  Ideally we'd do this in the linker proper.  */
10028
10029 static bfd_boolean
10030 elf_fixup_link_order (bfd *abfd, asection *o)
10031 {
10032   int seen_linkorder;
10033   int seen_other;
10034   int n;
10035   struct bfd_link_order *p;
10036   bfd *sub;
10037   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10038   unsigned elfsec;
10039   struct bfd_link_order **sections;
10040   asection *s, *other_sec, *linkorder_sec;
10041   bfd_vma offset;
10042
10043   other_sec = NULL;
10044   linkorder_sec = NULL;
10045   seen_other = 0;
10046   seen_linkorder = 0;
10047   for (p = o->map_head.link_order; p != NULL; p = p->next)
10048     {
10049       if (p->type == bfd_indirect_link_order)
10050         {
10051           s = p->u.indirect.section;
10052           sub = s->owner;
10053           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10054               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
10055               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
10056               && elfsec < elf_numsections (sub)
10057               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
10058               && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
10059             {
10060               seen_linkorder++;
10061               linkorder_sec = s;
10062             }
10063           else
10064             {
10065               seen_other++;
10066               other_sec = s;
10067             }
10068         }
10069       else
10070         seen_other++;
10071
10072       if (seen_other && seen_linkorder)
10073         {
10074           if (other_sec && linkorder_sec)
10075             (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
10076                                    o, linkorder_sec,
10077                                    linkorder_sec->owner, other_sec,
10078                                    other_sec->owner);
10079           else
10080             (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
10081                                    o);
10082           bfd_set_error (bfd_error_bad_value);
10083           return FALSE;
10084         }
10085     }
10086
10087   if (!seen_linkorder)
10088     return TRUE;
10089
10090   sections = (struct bfd_link_order **)
10091     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
10092   if (sections == NULL)
10093     return FALSE;
10094   seen_linkorder = 0;
10095
10096   for (p = o->map_head.link_order; p != NULL; p = p->next)
10097     {
10098       sections[seen_linkorder++] = p;
10099     }
10100   /* Sort the input sections in the order of their linked section.  */
10101   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
10102          compare_link_order);
10103
10104   /* Change the offsets of the sections.  */
10105   offset = 0;
10106   for (n = 0; n < seen_linkorder; n++)
10107     {
10108       s = sections[n]->u.indirect.section;
10109       offset &= ~(bfd_vma) 0 << s->alignment_power;
10110       s->output_offset = offset;
10111       sections[n]->offset = offset;
10112       /* FIXME: octets_per_byte.  */
10113       offset += sections[n]->size;
10114     }
10115
10116   free (sections);
10117   return TRUE;
10118 }
10119
10120
10121 /* Do the final step of an ELF link.  */
10122
10123 bfd_boolean
10124 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10125 {
10126   bfd_boolean dynamic;
10127   bfd_boolean emit_relocs;
10128   bfd *dynobj;
10129   struct elf_final_link_info finfo;
10130   asection *o;
10131   struct bfd_link_order *p;
10132   bfd *sub;
10133   bfd_size_type max_contents_size;
10134   bfd_size_type max_external_reloc_size;
10135   bfd_size_type max_internal_reloc_count;
10136   bfd_size_type max_sym_count;
10137   bfd_size_type max_sym_shndx_count;
10138   file_ptr off;
10139   Elf_Internal_Sym elfsym;
10140   unsigned int i;
10141   Elf_Internal_Shdr *symtab_hdr;
10142   Elf_Internal_Shdr *symtab_shndx_hdr;
10143   Elf_Internal_Shdr *symstrtab_hdr;
10144   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10145   struct elf_outext_info eoinfo;
10146   bfd_boolean merged;
10147   size_t relativecount = 0;
10148   asection *reldyn = 0;
10149   bfd_size_type amt;
10150   asection *attr_section = NULL;
10151   bfd_vma attr_size = 0;
10152   const char *std_attrs_section;
10153
10154   if (! is_elf_hash_table (info->hash))
10155     return FALSE;
10156
10157   if (info->shared)
10158     abfd->flags |= DYNAMIC;
10159
10160   dynamic = elf_hash_table (info)->dynamic_sections_created;
10161   dynobj = elf_hash_table (info)->dynobj;
10162
10163   emit_relocs = (info->relocatable
10164                  || info->emitrelocations);
10165
10166   finfo.info = info;
10167   finfo.output_bfd = abfd;
10168   finfo.symstrtab = _bfd_elf_stringtab_init ();
10169   if (finfo.symstrtab == NULL)
10170     return FALSE;
10171
10172   if (! dynamic)
10173     {
10174       finfo.dynsym_sec = NULL;
10175       finfo.hash_sec = NULL;
10176       finfo.symver_sec = NULL;
10177     }
10178   else
10179     {
10180       finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
10181       finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
10182       BFD_ASSERT (finfo.dynsym_sec != NULL);
10183       finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");
10184       /* Note that it is OK if symver_sec is NULL.  */
10185     }
10186
10187   finfo.contents = NULL;
10188   finfo.external_relocs = NULL;
10189   finfo.internal_relocs = NULL;
10190   finfo.external_syms = NULL;
10191   finfo.locsym_shndx = NULL;
10192   finfo.internal_syms = NULL;
10193   finfo.indices = NULL;
10194   finfo.sections = NULL;
10195   finfo.symbuf = NULL;
10196   finfo.symshndxbuf = NULL;
10197   finfo.symbuf_count = 0;
10198   finfo.shndxbuf_size = 0;
10199
10200   /* The object attributes have been merged.  Remove the input
10201      sections from the link, and set the contents of the output
10202      secton.  */
10203   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
10204   for (o = abfd->sections; o != NULL; o = o->next)
10205     {
10206       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
10207           || strcmp (o->name, ".gnu.attributes") == 0)
10208         {
10209           for (p = o->map_head.link_order; p != NULL; p = p->next)
10210             {
10211               asection *input_section;
10212
10213               if (p->type != bfd_indirect_link_order)
10214                 continue;
10215               input_section = p->u.indirect.section;
10216               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10217                  elf_link_input_bfd ignores this section.  */
10218               input_section->flags &= ~SEC_HAS_CONTENTS;
10219             }
10220
10221           attr_size = bfd_elf_obj_attr_size (abfd);
10222           if (attr_size)
10223             {
10224               bfd_set_section_size (abfd, o, attr_size);
10225               attr_section = o;
10226               /* Skip this section later on.  */
10227               o->map_head.link_order = NULL;
10228             }
10229           else
10230             o->flags |= SEC_EXCLUDE;
10231         }
10232     }
10233
10234   /* Count up the number of relocations we will output for each output
10235      section, so that we know the sizes of the reloc sections.  We
10236      also figure out some maximum sizes.  */
10237   max_contents_size = 0;
10238   max_external_reloc_size = 0;
10239   max_internal_reloc_count = 0;
10240   max_sym_count = 0;
10241   max_sym_shndx_count = 0;
10242   merged = FALSE;
10243   for (o = abfd->sections; o != NULL; o = o->next)
10244     {
10245       struct bfd_elf_section_data *esdo = elf_section_data (o);
10246       o->reloc_count = 0;
10247
10248       for (p = o->map_head.link_order; p != NULL; p = p->next)
10249         {
10250           unsigned int reloc_count = 0;
10251           struct bfd_elf_section_data *esdi = NULL;
10252           unsigned int *rel_count1;
10253
10254           if (p->type == bfd_section_reloc_link_order
10255               || p->type == bfd_symbol_reloc_link_order)
10256             reloc_count = 1;
10257           else if (p->type == bfd_indirect_link_order)
10258             {
10259               asection *sec;
10260
10261               sec = p->u.indirect.section;
10262               esdi = elf_section_data (sec);
10263
10264               /* Mark all sections which are to be included in the
10265                  link.  This will normally be every section.  We need
10266                  to do this so that we can identify any sections which
10267                  the linker has decided to not include.  */
10268               sec->linker_mark = TRUE;
10269
10270               if (sec->flags & SEC_MERGE)
10271                 merged = TRUE;
10272
10273               if (info->relocatable || info->emitrelocations)
10274                 reloc_count = sec->reloc_count;
10275               else if (bed->elf_backend_count_relocs)
10276                 reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
10277
10278               if (sec->rawsize > max_contents_size)
10279                 max_contents_size = sec->rawsize;
10280               if (sec->size > max_contents_size)
10281                 max_contents_size = sec->size;
10282
10283               /* We are interested in just local symbols, not all
10284                  symbols.  */
10285               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
10286                   && (sec->owner->flags & DYNAMIC) == 0)
10287                 {
10288                   size_t sym_count;
10289
10290                   if (elf_bad_symtab (sec->owner))
10291                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
10292                                  / bed->s->sizeof_sym);
10293                   else
10294                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
10295
10296                   if (sym_count > max_sym_count)
10297                     max_sym_count = sym_count;
10298
10299                   if (sym_count > max_sym_shndx_count
10300                       && elf_symtab_shndx (sec->owner) != 0)
10301                     max_sym_shndx_count = sym_count;
10302
10303                   if ((sec->flags & SEC_RELOC) != 0)
10304                     {
10305                       size_t ext_size;
10306
10307                       ext_size = elf_section_data (sec)->rel_hdr.sh_size;
10308                       if (ext_size > max_external_reloc_size)
10309                         max_external_reloc_size = ext_size;
10310                       if (sec->reloc_count > max_internal_reloc_count)
10311                         max_internal_reloc_count = sec->reloc_count;
10312                     }
10313                 }
10314             }
10315
10316           if (reloc_count == 0)
10317             continue;
10318
10319           o->reloc_count += reloc_count;
10320
10321           /* MIPS may have a mix of REL and RELA relocs on sections.
10322              To support this curious ABI we keep reloc counts in
10323              elf_section_data too.  We must be careful to add the
10324              relocations from the input section to the right output
10325              count.  FIXME: Get rid of one count.  We have
10326              o->reloc_count == esdo->rel_count + esdo->rel_count2.  */
10327           rel_count1 = &esdo->rel_count;
10328           if (esdi != NULL)
10329             {
10330               bfd_boolean same_size;
10331               bfd_size_type entsize1;
10332
10333               entsize1 = esdi->rel_hdr.sh_entsize;
10334               /* PR 9827: If the header size has not been set yet then
10335                  assume that it will match the output section's reloc type.  */
10336               if (entsize1 == 0)
10337                 entsize1 = o->use_rela_p ? bed->s->sizeof_rela : bed->s->sizeof_rel;
10338               else
10339                 BFD_ASSERT (entsize1 == bed->s->sizeof_rel
10340                             || entsize1 == bed->s->sizeof_rela);
10341               same_size = !o->use_rela_p == (entsize1 == bed->s->sizeof_rel);
10342
10343               if (!same_size)
10344                 rel_count1 = &esdo->rel_count2;
10345
10346               if (esdi->rel_hdr2 != NULL)
10347                 {
10348                   bfd_size_type entsize2 = esdi->rel_hdr2->sh_entsize;
10349                   unsigned int alt_count;
10350                   unsigned int *rel_count2;
10351
10352                   BFD_ASSERT (entsize2 != entsize1
10353                               && (entsize2 == bed->s->sizeof_rel
10354                                   || entsize2 == bed->s->sizeof_rela));
10355
10356                   rel_count2 = &esdo->rel_count2;
10357                   if (!same_size)
10358                     rel_count2 = &esdo->rel_count;
10359
10360                   /* The following is probably too simplistic if the
10361                      backend counts output relocs unusually.  */
10362                   BFD_ASSERT (bed->elf_backend_count_relocs == NULL);
10363                   alt_count = NUM_SHDR_ENTRIES (esdi->rel_hdr2);
10364                   *rel_count2 += alt_count;
10365                   reloc_count -= alt_count;
10366                 }
10367             }
10368           *rel_count1 += reloc_count;
10369         }
10370
10371       if (o->reloc_count > 0)
10372         o->flags |= SEC_RELOC;
10373       else
10374         {
10375           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
10376              set it (this is probably a bug) and if it is set
10377              assign_section_numbers will create a reloc section.  */
10378           o->flags &=~ SEC_RELOC;
10379         }
10380
10381       /* If the SEC_ALLOC flag is not set, force the section VMA to
10382          zero.  This is done in elf_fake_sections as well, but forcing
10383          the VMA to 0 here will ensure that relocs against these
10384          sections are handled correctly.  */
10385       if ((o->flags & SEC_ALLOC) == 0
10386           && ! o->user_set_vma)
10387         o->vma = 0;
10388     }
10389
10390   if (! info->relocatable && merged)
10391     elf_link_hash_traverse (elf_hash_table (info),
10392                             _bfd_elf_link_sec_merge_syms, abfd);
10393
10394   /* Figure out the file positions for everything but the symbol table
10395      and the relocs.  We set symcount to force assign_section_numbers
10396      to create a symbol table.  */
10397   bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
10398   BFD_ASSERT (! abfd->output_has_begun);
10399   if (! _bfd_elf_compute_section_file_positions (abfd, info))
10400     goto error_return;
10401
10402   /* Set sizes, and assign file positions for reloc sections.  */
10403   for (o = abfd->sections; o != NULL; o = o->next)
10404     {
10405       if ((o->flags & SEC_RELOC) != 0)
10406         {
10407           if (!(_bfd_elf_link_size_reloc_section
10408                 (abfd, &elf_section_data (o)->rel_hdr, o)))
10409             goto error_return;
10410
10411           if (elf_section_data (o)->rel_hdr2
10412               && !(_bfd_elf_link_size_reloc_section
10413                    (abfd, elf_section_data (o)->rel_hdr2, o)))
10414             goto error_return;
10415         }
10416
10417       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
10418          to count upwards while actually outputting the relocations.  */
10419       elf_section_data (o)->rel_count = 0;
10420       elf_section_data (o)->rel_count2 = 0;
10421     }
10422
10423   _bfd_elf_assign_file_positions_for_relocs (abfd);
10424
10425   /* We have now assigned file positions for all the sections except
10426      .symtab and .strtab.  We start the .symtab section at the current
10427      file position, and write directly to it.  We build the .strtab
10428      section in memory.  */
10429   bfd_get_symcount (abfd) = 0;
10430   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
10431   /* sh_name is set in prep_headers.  */
10432   symtab_hdr->sh_type = SHT_SYMTAB;
10433   /* sh_flags, sh_addr and sh_size all start off zero.  */
10434   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
10435   /* sh_link is set in assign_section_numbers.  */
10436   /* sh_info is set below.  */
10437   /* sh_offset is set just below.  */
10438   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
10439
10440   off = elf_tdata (abfd)->next_file_pos;
10441   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
10442
10443   /* Note that at this point elf_tdata (abfd)->next_file_pos is
10444      incorrect.  We do not yet know the size of the .symtab section.
10445      We correct next_file_pos below, after we do know the size.  */
10446
10447   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
10448      continuously seeking to the right position in the file.  */
10449   if (! info->keep_memory || max_sym_count < 20)
10450     finfo.symbuf_size = 20;
10451   else
10452     finfo.symbuf_size = max_sym_count;
10453   amt = finfo.symbuf_size;
10454   amt *= bed->s->sizeof_sym;
10455   finfo.symbuf = (bfd_byte *) bfd_malloc (amt);
10456   if (finfo.symbuf == NULL)
10457     goto error_return;
10458   if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
10459     {
10460       /* Wild guess at number of output symbols.  realloc'd as needed.  */
10461       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
10462       finfo.shndxbuf_size = amt;
10463       amt *= sizeof (Elf_External_Sym_Shndx);
10464       finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
10465       if (finfo.symshndxbuf == NULL)
10466         goto error_return;
10467     }
10468
10469   /* Start writing out the symbol table.  The first symbol is always a
10470      dummy symbol.  */
10471   if (info->strip != strip_all
10472       || emit_relocs)
10473     {
10474       elfsym.st_value = 0;
10475       elfsym.st_size = 0;
10476       elfsym.st_info = 0;
10477       elfsym.st_other = 0;
10478       elfsym.st_shndx = SHN_UNDEF;
10479       if (elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr,
10480                                NULL) != 1)
10481         goto error_return;
10482     }
10483
10484   /* Output a symbol for each section.  We output these even if we are
10485      discarding local symbols, since they are used for relocs.  These
10486      symbols have no names.  We store the index of each one in the
10487      index field of the section, so that we can find it again when
10488      outputting relocs.  */
10489   if (info->strip != strip_all
10490       || emit_relocs)
10491     {
10492       elfsym.st_size = 0;
10493       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10494       elfsym.st_other = 0;
10495       elfsym.st_value = 0;
10496       for (i = 1; i < elf_numsections (abfd); i++)
10497         {
10498           o = bfd_section_from_elf_index (abfd, i);
10499           if (o != NULL)
10500             {
10501               o->target_index = bfd_get_symcount (abfd);
10502               elfsym.st_shndx = i;
10503               if (!info->relocatable)
10504                 elfsym.st_value = o->vma;
10505               if (elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL) != 1)
10506                 goto error_return;
10507             }
10508         }
10509     }
10510
10511   /* Allocate some memory to hold information read in from the input
10512      files.  */
10513   if (max_contents_size != 0)
10514     {
10515       finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
10516       if (finfo.contents == NULL)
10517         goto error_return;
10518     }
10519
10520   if (max_external_reloc_size != 0)
10521     {
10522       finfo.external_relocs = bfd_malloc (max_external_reloc_size);
10523       if (finfo.external_relocs == NULL)
10524         goto error_return;
10525     }
10526
10527   if (max_internal_reloc_count != 0)
10528     {
10529       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
10530       amt *= sizeof (Elf_Internal_Rela);
10531       finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
10532       if (finfo.internal_relocs == NULL)
10533         goto error_return;
10534     }
10535
10536   if (max_sym_count != 0)
10537     {
10538       amt = max_sym_count * bed->s->sizeof_sym;
10539       finfo.external_syms = (bfd_byte *) bfd_malloc (amt);
10540       if (finfo.external_syms == NULL)
10541         goto error_return;
10542
10543       amt = max_sym_count * sizeof (Elf_Internal_Sym);
10544       finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
10545       if (finfo.internal_syms == NULL)
10546         goto error_return;
10547
10548       amt = max_sym_count * sizeof (long);
10549       finfo.indices = (long int *) bfd_malloc (amt);
10550       if (finfo.indices == NULL)
10551         goto error_return;
10552
10553       amt = max_sym_count * sizeof (asection *);
10554       finfo.sections = (asection **) bfd_malloc (amt);
10555       if (finfo.sections == NULL)
10556         goto error_return;
10557     }
10558
10559   if (max_sym_shndx_count != 0)
10560     {
10561       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
10562       finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
10563       if (finfo.locsym_shndx == NULL)
10564         goto error_return;
10565     }
10566
10567   if (elf_hash_table (info)->tls_sec)
10568     {
10569       bfd_vma base, end = 0;
10570       asection *sec;
10571
10572       for (sec = elf_hash_table (info)->tls_sec;
10573            sec && (sec->flags & SEC_THREAD_LOCAL);
10574            sec = sec->next)
10575         {
10576           bfd_size_type size = sec->size;
10577
10578           if (size == 0
10579               && (sec->flags & SEC_HAS_CONTENTS) == 0)
10580             {
10581               struct bfd_link_order *ord = sec->map_tail.link_order;
10582
10583               if (ord != NULL)
10584                 size = ord->offset + ord->size;
10585             }
10586           end = sec->vma + size;
10587         }
10588       base = elf_hash_table (info)->tls_sec->vma;
10589       end = align_power (end, elf_hash_table (info)->tls_sec->alignment_power);
10590       elf_hash_table (info)->tls_size = end - base;
10591     }
10592
10593   /* Reorder SHF_LINK_ORDER sections.  */
10594   for (o = abfd->sections; o != NULL; o = o->next)
10595     {
10596       if (!elf_fixup_link_order (abfd, o))
10597         return FALSE;
10598     }
10599
10600   /* Since ELF permits relocations to be against local symbols, we
10601      must have the local symbols available when we do the relocations.
10602      Since we would rather only read the local symbols once, and we
10603      would rather not keep them in memory, we handle all the
10604      relocations for a single input file at the same time.
10605
10606      Unfortunately, there is no way to know the total number of local
10607      symbols until we have seen all of them, and the local symbol
10608      indices precede the global symbol indices.  This means that when
10609      we are generating relocatable output, and we see a reloc against
10610      a global symbol, we can not know the symbol index until we have
10611      finished examining all the local symbols to see which ones we are
10612      going to output.  To deal with this, we keep the relocations in
10613      memory, and don't output them until the end of the link.  This is
10614      an unfortunate waste of memory, but I don't see a good way around
10615      it.  Fortunately, it only happens when performing a relocatable
10616      link, which is not the common case.  FIXME: If keep_memory is set
10617      we could write the relocs out and then read them again; I don't
10618      know how bad the memory loss will be.  */
10619
10620   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
10621     sub->output_has_begun = FALSE;
10622   for (o = abfd->sections; o != NULL; o = o->next)
10623     {
10624       for (p = o->map_head.link_order; p != NULL; p = p->next)
10625         {
10626           if (p->type == bfd_indirect_link_order
10627               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
10628                   == bfd_target_elf_flavour)
10629               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
10630             {
10631               if (! sub->output_has_begun)
10632                 {
10633                   if (! elf_link_input_bfd (&finfo, sub))
10634                     goto error_return;
10635                   sub->output_has_begun = TRUE;
10636                 }
10637             }
10638           else if (p->type == bfd_section_reloc_link_order
10639                    || p->type == bfd_symbol_reloc_link_order)
10640             {
10641               if (! elf_reloc_link_order (abfd, info, o, p))
10642                 goto error_return;
10643             }
10644           else
10645             {
10646               if (! _bfd_default_link_order (abfd, info, o, p))
10647                 goto error_return;
10648             }
10649         }
10650     }
10651
10652   /* Free symbol buffer if needed.  */
10653   if (!info->reduce_memory_overheads)
10654     {
10655       for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
10656         if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10657             && elf_tdata (sub)->symbuf)
10658           {
10659             free (elf_tdata (sub)->symbuf);
10660             elf_tdata (sub)->symbuf = NULL;
10661           }
10662     }
10663
10664   /* Output any global symbols that got converted to local in a
10665      version script or due to symbol visibility.  We do this in a
10666      separate step since ELF requires all local symbols to appear
10667      prior to any global symbols.  FIXME: We should only do this if
10668      some global symbols were, in fact, converted to become local.
10669      FIXME: Will this work correctly with the Irix 5 linker?  */
10670   eoinfo.failed = FALSE;
10671   eoinfo.finfo = &finfo;
10672   eoinfo.localsyms = TRUE;
10673   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
10674                           &eoinfo);
10675   if (eoinfo.failed)
10676     return FALSE;
10677
10678   /* If backend needs to output some local symbols not present in the hash
10679      table, do it now.  */
10680   if (bed->elf_backend_output_arch_local_syms)
10681     {
10682       typedef int (*out_sym_func)
10683         (void *, const char *, Elf_Internal_Sym *, asection *,
10684          struct elf_link_hash_entry *);
10685
10686       if (! ((*bed->elf_backend_output_arch_local_syms)
10687              (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
10688         return FALSE;
10689     }
10690
10691   /* That wrote out all the local symbols.  Finish up the symbol table
10692      with the global symbols. Even if we want to strip everything we
10693      can, we still need to deal with those global symbols that got
10694      converted to local in a version script.  */
10695
10696   /* The sh_info field records the index of the first non local symbol.  */
10697   symtab_hdr->sh_info = bfd_get_symcount (abfd);
10698
10699   if (dynamic
10700       && finfo.dynsym_sec->output_section != bfd_abs_section_ptr)
10701     {
10702       Elf_Internal_Sym sym;
10703       bfd_byte *dynsym = finfo.dynsym_sec->contents;
10704       long last_local = 0;
10705
10706       /* Write out the section symbols for the output sections.  */
10707       if (info->shared || elf_hash_table (info)->is_relocatable_executable)
10708         {
10709           asection *s;
10710
10711           sym.st_size = 0;
10712           sym.st_name = 0;
10713           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10714           sym.st_other = 0;
10715
10716           for (s = abfd->sections; s != NULL; s = s->next)
10717             {
10718               int indx;
10719               bfd_byte *dest;
10720               long dynindx;
10721
10722               dynindx = elf_section_data (s)->dynindx;
10723               if (dynindx <= 0)
10724                 continue;
10725               indx = elf_section_data (s)->this_idx;
10726               BFD_ASSERT (indx > 0);
10727               sym.st_shndx = indx;
10728               if (! check_dynsym (abfd, &sym))
10729                 return FALSE;
10730               sym.st_value = s->vma;
10731               dest = dynsym + dynindx * bed->s->sizeof_sym;
10732               if (last_local < dynindx)
10733                 last_local = dynindx;
10734               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
10735             }
10736         }
10737
10738       /* Write out the local dynsyms.  */
10739       if (elf_hash_table (info)->dynlocal)
10740         {
10741           struct elf_link_local_dynamic_entry *e;
10742           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
10743             {
10744               asection *s;
10745               bfd_byte *dest;
10746
10747               /* Copy the internal symbol and turn off visibility.
10748                  Note that we saved a word of storage and overwrote
10749                  the original st_name with the dynstr_index.  */
10750               sym = e->isym;
10751               sym.st_other &= ~ELF_ST_VISIBILITY (-1);
10752
10753               s = bfd_section_from_elf_index (e->input_bfd,
10754                                               e->isym.st_shndx);
10755               if (s != NULL)
10756                 {
10757                   sym.st_shndx =
10758                     elf_section_data (s->output_section)->this_idx;
10759                   if (! check_dynsym (abfd, &sym))
10760                     return FALSE;
10761                   sym.st_value = (s->output_section->vma
10762                                   + s->output_offset
10763                                   + e->isym.st_value);
10764                 }
10765
10766               if (last_local < e->dynindx)
10767                 last_local = e->dynindx;
10768
10769               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
10770               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
10771             }
10772         }
10773
10774       elf_section_data (finfo.dynsym_sec->output_section)->this_hdr.sh_info =
10775         last_local + 1;
10776     }
10777
10778   /* We get the global symbols from the hash table.  */
10779   eoinfo.failed = FALSE;
10780   eoinfo.localsyms = FALSE;
10781   eoinfo.finfo = &finfo;
10782   elf_link_hash_traverse (elf_hash_table (info), elf_link_output_extsym,
10783                           &eoinfo);
10784   if (eoinfo.failed)
10785     return FALSE;
10786
10787   /* If backend needs to output some symbols not present in the hash
10788      table, do it now.  */
10789   if (bed->elf_backend_output_arch_syms)
10790     {
10791       typedef int (*out_sym_func)
10792         (void *, const char *, Elf_Internal_Sym *, asection *,
10793          struct elf_link_hash_entry *);
10794
10795       if (! ((*bed->elf_backend_output_arch_syms)
10796              (abfd, info, &finfo, (out_sym_func) elf_link_output_sym)))
10797         return FALSE;
10798     }
10799
10800   /* Flush all symbols to the file.  */
10801   if (! elf_link_flush_output_syms (&finfo, bed))
10802     return FALSE;
10803
10804   /* Now we know the size of the symtab section.  */
10805   off += symtab_hdr->sh_size;
10806
10807   symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
10808   if (symtab_shndx_hdr->sh_name != 0)
10809     {
10810       symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
10811       symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
10812       symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
10813       amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
10814       symtab_shndx_hdr->sh_size = amt;
10815
10816       off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
10817                                                        off, TRUE);
10818
10819       if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
10820           || (bfd_bwrite (finfo.symshndxbuf, amt, abfd) != amt))
10821         return FALSE;
10822     }
10823
10824
10825   /* Finish up and write out the symbol string table (.strtab)
10826      section.  */
10827   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
10828   /* sh_name was set in prep_headers.  */
10829   symstrtab_hdr->sh_type = SHT_STRTAB;
10830   symstrtab_hdr->sh_flags = 0;
10831   symstrtab_hdr->sh_addr = 0;
10832   symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
10833   symstrtab_hdr->sh_entsize = 0;
10834   symstrtab_hdr->sh_link = 0;
10835   symstrtab_hdr->sh_info = 0;
10836   /* sh_offset is set just below.  */
10837   symstrtab_hdr->sh_addralign = 1;
10838
10839   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
10840   elf_tdata (abfd)->next_file_pos = off;
10841
10842   if (bfd_get_symcount (abfd) > 0)
10843     {
10844       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
10845           || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
10846         return FALSE;
10847     }
10848
10849   /* Adjust the relocs to have the correct symbol indices.  */
10850   for (o = abfd->sections; o != NULL; o = o->next)
10851     {
10852       if ((o->flags & SEC_RELOC) == 0)
10853         continue;
10854
10855       elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
10856                               elf_section_data (o)->rel_count,
10857                               elf_section_data (o)->rel_hashes);
10858       if (elf_section_data (o)->rel_hdr2 != NULL)
10859         elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
10860                                 elf_section_data (o)->rel_count2,
10861                                 (elf_section_data (o)->rel_hashes
10862                                  + elf_section_data (o)->rel_count));
10863
10864       /* Set the reloc_count field to 0 to prevent write_relocs from
10865          trying to swap the relocs out itself.  */
10866       o->reloc_count = 0;
10867     }
10868
10869   if (dynamic && info->combreloc && dynobj != NULL)
10870     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
10871
10872   /* If we are linking against a dynamic object, or generating a
10873      shared library, finish up the dynamic linking information.  */
10874   if (dynamic)
10875     {
10876       bfd_byte *dyncon, *dynconend;
10877
10878       /* Fix up .dynamic entries.  */
10879       o = bfd_get_section_by_name (dynobj, ".dynamic");
10880       BFD_ASSERT (o != NULL);
10881
10882       dyncon = o->contents;
10883       dynconend = o->contents + o->size;
10884       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
10885         {
10886           Elf_Internal_Dyn dyn;
10887           const char *name;
10888           unsigned int type;
10889
10890           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
10891
10892           switch (dyn.d_tag)
10893             {
10894             default:
10895               continue;
10896             case DT_NULL:
10897               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
10898                 {
10899                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
10900                     {
10901                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
10902                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
10903                     default: continue;
10904                     }
10905                   dyn.d_un.d_val = relativecount;
10906                   relativecount = 0;
10907                   break;
10908                 }
10909               continue;
10910
10911             case DT_INIT:
10912               name = info->init_function;
10913               goto get_sym;
10914             case DT_FINI:
10915               name = info->fini_function;
10916             get_sym:
10917               {
10918                 struct elf_link_hash_entry *h;
10919
10920                 h = elf_link_hash_lookup (elf_hash_table (info), name,
10921                                           FALSE, FALSE, TRUE);
10922                 if (h != NULL
10923                     && (h->root.type == bfd_link_hash_defined
10924                         || h->root.type == bfd_link_hash_defweak))
10925                   {
10926                     dyn.d_un.d_ptr = h->root.u.def.value;
10927                     o = h->root.u.def.section;
10928                     if (o->output_section != NULL)
10929                       dyn.d_un.d_ptr += (o->output_section->vma
10930                                          + o->output_offset);
10931                     else
10932                       {
10933                         /* The symbol is imported from another shared
10934                            library and does not apply to this one.  */
10935                         dyn.d_un.d_ptr = 0;
10936                       }
10937                     break;
10938                   }
10939               }
10940               continue;
10941
10942             case DT_PREINIT_ARRAYSZ:
10943               name = ".preinit_array";
10944               goto get_size;
10945             case DT_INIT_ARRAYSZ:
10946               name = ".init_array";
10947               goto get_size;
10948             case DT_FINI_ARRAYSZ:
10949               name = ".fini_array";
10950             get_size:
10951               o = bfd_get_section_by_name (abfd, name);
10952               if (o == NULL)
10953                 {
10954                   (*_bfd_error_handler)
10955                     (_("%B: could not find output section %s"), abfd, name);
10956                   goto error_return;
10957                 }
10958               if (o->size == 0)
10959                 (*_bfd_error_handler)
10960                   (_("warning: %s section has zero size"), name);
10961               dyn.d_un.d_val = o->size;
10962               break;
10963
10964             case DT_PREINIT_ARRAY:
10965               name = ".preinit_array";
10966               goto get_vma;
10967             case DT_INIT_ARRAY:
10968               name = ".init_array";
10969               goto get_vma;
10970             case DT_FINI_ARRAY:
10971               name = ".fini_array";
10972               goto get_vma;
10973
10974             case DT_HASH:
10975               name = ".hash";
10976               goto get_vma;
10977             case DT_GNU_HASH:
10978               name = ".gnu.hash";
10979               goto get_vma;
10980             case DT_STRTAB:
10981               name = ".dynstr";
10982               goto get_vma;
10983             case DT_SYMTAB:
10984               name = ".dynsym";
10985               goto get_vma;
10986             case DT_VERDEF:
10987               name = ".gnu.version_d";
10988               goto get_vma;
10989             case DT_VERNEED:
10990               name = ".gnu.version_r";
10991               goto get_vma;
10992             case DT_VERSYM:
10993               name = ".gnu.version";
10994             get_vma:
10995               o = bfd_get_section_by_name (abfd, name);
10996               if (o == NULL)
10997                 {
10998                   (*_bfd_error_handler)
10999                     (_("%B: could not find output section %s"), abfd, name);
11000                   goto error_return;
11001                 }
11002               dyn.d_un.d_ptr = o->vma;
11003               break;
11004
11005             case DT_REL:
11006             case DT_RELA:
11007             case DT_RELSZ:
11008             case DT_RELASZ:
11009               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
11010                 type = SHT_REL;
11011               else
11012                 type = SHT_RELA;
11013               dyn.d_un.d_val = 0;
11014               dyn.d_un.d_ptr = 0;
11015               for (i = 1; i < elf_numsections (abfd); i++)
11016                 {
11017                   Elf_Internal_Shdr *hdr;
11018
11019                   hdr = elf_elfsections (abfd)[i];
11020                   if (hdr->sh_type == type
11021                       && (hdr->sh_flags & SHF_ALLOC) != 0)
11022                     {
11023                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
11024                         dyn.d_un.d_val += hdr->sh_size;
11025                       else
11026                         {
11027                           if (dyn.d_un.d_ptr == 0
11028                               || hdr->sh_addr < dyn.d_un.d_ptr)
11029                             dyn.d_un.d_ptr = hdr->sh_addr;
11030                         }
11031                     }
11032                 }
11033               break;
11034             }
11035           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
11036         }
11037     }
11038
11039   /* If we have created any dynamic sections, then output them.  */
11040   if (dynobj != NULL)
11041     {
11042       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
11043         goto error_return;
11044
11045       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
11046       if (info->warn_shared_textrel && info->shared)
11047         {
11048           bfd_byte *dyncon, *dynconend;
11049
11050           /* Fix up .dynamic entries.  */
11051           o = bfd_get_section_by_name (dynobj, ".dynamic");
11052           BFD_ASSERT (o != NULL);
11053
11054           dyncon = o->contents;
11055           dynconend = o->contents + o->size;
11056           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11057             {
11058               Elf_Internal_Dyn dyn;
11059
11060               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11061
11062               if (dyn.d_tag == DT_TEXTREL)
11063                 {
11064                  info->callbacks->einfo
11065                     (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
11066                   break;
11067                 }
11068             }
11069         }
11070
11071       for (o = dynobj->sections; o != NULL; o = o->next)
11072         {
11073           if ((o->flags & SEC_HAS_CONTENTS) == 0
11074               || o->size == 0
11075               || o->output_section == bfd_abs_section_ptr)
11076             continue;
11077           if ((o->flags & SEC_LINKER_CREATED) == 0)
11078             {
11079               /* At this point, we are only interested in sections
11080                  created by _bfd_elf_link_create_dynamic_sections.  */
11081               continue;
11082             }
11083           if (elf_hash_table (info)->stab_info.stabstr == o)
11084             continue;
11085           if (elf_hash_table (info)->eh_info.hdr_sec == o)
11086             continue;
11087           if ((elf_section_data (o->output_section)->this_hdr.sh_type
11088                != SHT_STRTAB)
11089               || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0)
11090             {
11091               /* FIXME: octets_per_byte.  */
11092               if (! bfd_set_section_contents (abfd, o->output_section,
11093                                               o->contents,
11094                                               (file_ptr) o->output_offset,
11095                                               o->size))
11096                 goto error_return;
11097             }
11098           else
11099             {
11100               /* The contents of the .dynstr section are actually in a
11101                  stringtab.  */
11102               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
11103               if (bfd_seek (abfd, off, SEEK_SET) != 0
11104                   || ! _bfd_elf_strtab_emit (abfd,
11105                                              elf_hash_table (info)->dynstr))
11106                 goto error_return;
11107             }
11108         }
11109     }
11110
11111   if (info->relocatable)
11112     {
11113       bfd_boolean failed = FALSE;
11114
11115       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
11116       if (failed)
11117         goto error_return;
11118     }
11119
11120   /* If we have optimized stabs strings, output them.  */
11121   if (elf_hash_table (info)->stab_info.stabstr != NULL)
11122     {
11123       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
11124         goto error_return;
11125     }
11126
11127   if (info->eh_frame_hdr)
11128     {
11129       if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
11130         goto error_return;
11131     }
11132
11133   if (finfo.symstrtab != NULL)
11134     _bfd_stringtab_free (finfo.symstrtab);
11135   if (finfo.contents != NULL)
11136     free (finfo.contents);
11137   if (finfo.external_relocs != NULL)
11138     free (finfo.external_relocs);
11139   if (finfo.internal_relocs != NULL)
11140     free (finfo.internal_relocs);
11141   if (finfo.external_syms != NULL)
11142     free (finfo.external_syms);
11143   if (finfo.locsym_shndx != NULL)
11144     free (finfo.locsym_shndx);
11145   if (finfo.internal_syms != NULL)
11146     free (finfo.internal_syms);
11147   if (finfo.indices != NULL)
11148     free (finfo.indices);
11149   if (finfo.sections != NULL)
11150     free (finfo.sections);
11151   if (finfo.symbuf != NULL)
11152     free (finfo.symbuf);
11153   if (finfo.symshndxbuf != NULL)
11154     free (finfo.symshndxbuf);
11155   for (o = abfd->sections; o != NULL; o = o->next)
11156     {
11157       if ((o->flags & SEC_RELOC) != 0
11158           && elf_section_data (o)->rel_hashes != NULL)
11159         free (elf_section_data (o)->rel_hashes);
11160     }
11161
11162   elf_tdata (abfd)->linker = TRUE;
11163
11164   if (attr_section)
11165     {
11166       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
11167       if (contents == NULL)
11168         return FALSE;   /* Bail out and fail.  */
11169       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
11170       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
11171       free (contents);
11172     }
11173
11174   return TRUE;
11175
11176  error_return:
11177   if (finfo.symstrtab != NULL)
11178     _bfd_stringtab_free (finfo.symstrtab);
11179   if (finfo.contents != NULL)
11180     free (finfo.contents);
11181   if (finfo.external_relocs != NULL)
11182     free (finfo.external_relocs);
11183   if (finfo.internal_relocs != NULL)
11184     free (finfo.internal_relocs);
11185   if (finfo.external_syms != NULL)
11186     free (finfo.external_syms);
11187   if (finfo.locsym_shndx != NULL)
11188     free (finfo.locsym_shndx);
11189   if (finfo.internal_syms != NULL)
11190     free (finfo.internal_syms);
11191   if (finfo.indices != NULL)
11192     free (finfo.indices);
11193   if (finfo.sections != NULL)
11194     free (finfo.sections);
11195   if (finfo.symbuf != NULL)
11196     free (finfo.symbuf);
11197   if (finfo.symshndxbuf != NULL)
11198     free (finfo.symshndxbuf);
11199   for (o = abfd->sections; o != NULL; o = o->next)
11200     {
11201       if ((o->flags & SEC_RELOC) != 0
11202           && elf_section_data (o)->rel_hashes != NULL)
11203         free (elf_section_data (o)->rel_hashes);
11204     }
11205
11206   return FALSE;
11207 }
11208 \f
11209 /* Initialize COOKIE for input bfd ABFD.  */
11210
11211 static bfd_boolean
11212 init_reloc_cookie (struct elf_reloc_cookie *cookie,
11213                    struct bfd_link_info *info, bfd *abfd)
11214 {
11215   Elf_Internal_Shdr *symtab_hdr;
11216   const struct elf_backend_data *bed;
11217
11218   bed = get_elf_backend_data (abfd);
11219   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11220
11221   cookie->abfd = abfd;
11222   cookie->sym_hashes = elf_sym_hashes (abfd);
11223   cookie->bad_symtab = elf_bad_symtab (abfd);
11224   if (cookie->bad_symtab)
11225     {
11226       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
11227       cookie->extsymoff = 0;
11228     }
11229   else
11230     {
11231       cookie->locsymcount = symtab_hdr->sh_info;
11232       cookie->extsymoff = symtab_hdr->sh_info;
11233     }
11234
11235   if (bed->s->arch_size == 32)
11236     cookie->r_sym_shift = 8;
11237   else
11238     cookie->r_sym_shift = 32;
11239
11240   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
11241   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
11242     {
11243       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
11244                                               cookie->locsymcount, 0,
11245                                               NULL, NULL, NULL);
11246       if (cookie->locsyms == NULL)
11247         {
11248           info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
11249           return FALSE;
11250         }
11251       if (info->keep_memory)
11252         symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
11253     }
11254   return TRUE;
11255 }
11256
11257 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
11258
11259 static void
11260 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
11261 {
11262   Elf_Internal_Shdr *symtab_hdr;
11263
11264   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11265   if (cookie->locsyms != NULL
11266       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
11267     free (cookie->locsyms);
11268 }
11269
11270 /* Initialize the relocation information in COOKIE for input section SEC
11271    of input bfd ABFD.  */
11272
11273 static bfd_boolean
11274 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11275                         struct bfd_link_info *info, bfd *abfd,
11276                         asection *sec)
11277 {
11278   const struct elf_backend_data *bed;
11279
11280   if (sec->reloc_count == 0)
11281     {
11282       cookie->rels = NULL;
11283       cookie->relend = NULL;
11284     }
11285   else
11286     {
11287       bed = get_elf_backend_data (abfd);
11288
11289       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
11290                                                 info->keep_memory);
11291       if (cookie->rels == NULL)
11292         return FALSE;
11293       cookie->rel = cookie->rels;
11294       cookie->relend = (cookie->rels
11295                         + sec->reloc_count * bed->s->int_rels_per_ext_rel);
11296     }
11297   cookie->rel = cookie->rels;
11298   return TRUE;
11299 }
11300
11301 /* Free the memory allocated by init_reloc_cookie_rels,
11302    if appropriate.  */
11303
11304 static void
11305 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11306                         asection *sec)
11307 {
11308   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
11309     free (cookie->rels);
11310 }
11311
11312 /* Initialize the whole of COOKIE for input section SEC.  */
11313
11314 static bfd_boolean
11315 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11316                                struct bfd_link_info *info,
11317                                asection *sec)
11318 {
11319   if (!init_reloc_cookie (cookie, info, sec->owner))
11320     goto error1;
11321   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
11322     goto error2;
11323   return TRUE;
11324
11325  error2:
11326   fini_reloc_cookie (cookie, sec->owner);
11327  error1:
11328   return FALSE;
11329 }
11330
11331 /* Free the memory allocated by init_reloc_cookie_for_section,
11332    if appropriate.  */
11333
11334 static void
11335 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11336                                asection *sec)
11337 {
11338   fini_reloc_cookie_rels (cookie, sec);
11339   fini_reloc_cookie (cookie, sec->owner);
11340 }
11341 \f
11342 /* Garbage collect unused sections.  */
11343
11344 /* Default gc_mark_hook.  */
11345
11346 asection *
11347 _bfd_elf_gc_mark_hook (asection *sec,
11348                        struct bfd_link_info *info ATTRIBUTE_UNUSED,
11349                        Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
11350                        struct elf_link_hash_entry *h,
11351                        Elf_Internal_Sym *sym)
11352 {
11353   const char *sec_name;
11354
11355   if (h != NULL)
11356     {
11357       switch (h->root.type)
11358         {
11359         case bfd_link_hash_defined:
11360         case bfd_link_hash_defweak:
11361           return h->root.u.def.section;
11362
11363         case bfd_link_hash_common:
11364           return h->root.u.c.p->section;
11365
11366         case bfd_link_hash_undefined:
11367         case bfd_link_hash_undefweak:
11368           /* To work around a glibc bug, keep all XXX input sections
11369              when there is an as yet undefined reference to __start_XXX
11370              or __stop_XXX symbols.  The linker will later define such
11371              symbols for orphan input sections that have a name
11372              representable as a C identifier.  */
11373           if (strncmp (h->root.root.string, "__start_", 8) == 0)
11374             sec_name = h->root.root.string + 8;
11375           else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
11376             sec_name = h->root.root.string + 7;
11377           else
11378             sec_name = NULL;
11379
11380           if (sec_name && *sec_name != '\0')
11381             {
11382               bfd *i;
11383               
11384               for (i = info->input_bfds; i; i = i->link_next)
11385                 {
11386                   sec = bfd_get_section_by_name (i, sec_name);
11387                   if (sec)
11388                     sec->flags |= SEC_KEEP;
11389                 }
11390             }
11391           break;
11392
11393         default:
11394           break;
11395         }
11396     }
11397   else
11398     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
11399
11400   return NULL;
11401 }
11402
11403 /* COOKIE->rel describes a relocation against section SEC, which is
11404    a section we've decided to keep.  Return the section that contains
11405    the relocation symbol, or NULL if no section contains it.  */
11406
11407 asection *
11408 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
11409                        elf_gc_mark_hook_fn gc_mark_hook,
11410                        struct elf_reloc_cookie *cookie)
11411 {
11412   unsigned long r_symndx;
11413   struct elf_link_hash_entry *h;
11414
11415   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
11416   if (r_symndx == 0)
11417     return NULL;
11418
11419   if (r_symndx >= cookie->locsymcount
11420       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
11421     {
11422       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
11423       while (h->root.type == bfd_link_hash_indirect
11424              || h->root.type == bfd_link_hash_warning)
11425         h = (struct elf_link_hash_entry *) h->root.u.i.link;
11426       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
11427     }
11428
11429   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
11430                           &cookie->locsyms[r_symndx]);
11431 }
11432
11433 /* COOKIE->rel describes a relocation against section SEC, which is
11434    a section we've decided to keep.  Mark the section that contains
11435    the relocation symbol.  */
11436
11437 bfd_boolean
11438 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
11439                         asection *sec,
11440                         elf_gc_mark_hook_fn gc_mark_hook,
11441                         struct elf_reloc_cookie *cookie)
11442 {
11443   asection *rsec;
11444
11445   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
11446   if (rsec && !rsec->gc_mark)
11447     {
11448       if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
11449         rsec->gc_mark = 1;
11450       else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
11451         return FALSE;
11452     }
11453   return TRUE;
11454 }
11455
11456 /* The mark phase of garbage collection.  For a given section, mark
11457    it and any sections in this section's group, and all the sections
11458    which define symbols to which it refers.  */
11459
11460 bfd_boolean
11461 _bfd_elf_gc_mark (struct bfd_link_info *info,
11462                   asection *sec,
11463                   elf_gc_mark_hook_fn gc_mark_hook)
11464 {
11465   bfd_boolean ret;
11466   asection *group_sec, *eh_frame;
11467
11468   sec->gc_mark = 1;
11469
11470   /* Mark all the sections in the group.  */
11471   group_sec = elf_section_data (sec)->next_in_group;
11472   if (group_sec && !group_sec->gc_mark)
11473     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
11474       return FALSE;
11475
11476   /* Look through the section relocs.  */
11477   ret = TRUE;
11478   eh_frame = elf_eh_frame_section (sec->owner);
11479   if ((sec->flags & SEC_RELOC) != 0
11480       && sec->reloc_count > 0
11481       && sec != eh_frame)
11482     {
11483       struct elf_reloc_cookie cookie;
11484
11485       if (!init_reloc_cookie_for_section (&cookie, info, sec))
11486         ret = FALSE;
11487       else
11488         {
11489           for (; cookie.rel < cookie.relend; cookie.rel++)
11490             if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
11491               {
11492                 ret = FALSE;
11493                 break;
11494               }
11495           fini_reloc_cookie_for_section (&cookie, sec);
11496         }
11497     }
11498
11499   if (ret && eh_frame && elf_fde_list (sec))
11500     {
11501       struct elf_reloc_cookie cookie;
11502
11503       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
11504         ret = FALSE;
11505       else
11506         {
11507           if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
11508                                       gc_mark_hook, &cookie))
11509             ret = FALSE;
11510           fini_reloc_cookie_for_section (&cookie, eh_frame);
11511         }
11512     }
11513
11514   return ret;
11515 }
11516
11517 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
11518
11519 struct elf_gc_sweep_symbol_info
11520 {
11521   struct bfd_link_info *info;
11522   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
11523                        bfd_boolean);
11524 };
11525
11526 static bfd_boolean
11527 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
11528 {
11529   if (h->root.type == bfd_link_hash_warning)
11530     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11531
11532   if ((h->root.type == bfd_link_hash_defined
11533        || h->root.type == bfd_link_hash_defweak)
11534       && !h->root.u.def.section->gc_mark
11535       && !(h->root.u.def.section->owner->flags & DYNAMIC))
11536     {
11537       struct elf_gc_sweep_symbol_info *inf =
11538           (struct elf_gc_sweep_symbol_info *) data;
11539       (*inf->hide_symbol) (inf->info, h, TRUE);
11540     }
11541
11542   return TRUE;
11543 }
11544
11545 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
11546
11547 typedef bfd_boolean (*gc_sweep_hook_fn)
11548   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
11549
11550 static bfd_boolean
11551 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
11552 {
11553   bfd *sub;
11554   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11555   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
11556   unsigned long section_sym_count;
11557   struct elf_gc_sweep_symbol_info sweep_info;
11558
11559   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11560     {
11561       asection *o;
11562
11563       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
11564         continue;
11565
11566       for (o = sub->sections; o != NULL; o = o->next)
11567         {
11568           /* When any section in a section group is kept, we keep all
11569              sections in the section group.  If the first member of
11570              the section group is excluded, we will also exclude the
11571              group section.  */
11572           if (o->flags & SEC_GROUP)
11573             {
11574               asection *first = elf_next_in_group (o);
11575               o->gc_mark = first->gc_mark;
11576             }
11577           else if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0
11578                    || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0
11579                    || elf_section_data (o)->this_hdr.sh_type == SHT_NOTE)
11580             {
11581               /* Keep debug, special and SHT_NOTE sections.  */
11582               o->gc_mark = 1;
11583             }
11584
11585           if (o->gc_mark)
11586             continue;
11587
11588           /* Skip sweeping sections already excluded.  */
11589           if (o->flags & SEC_EXCLUDE)
11590             continue;
11591
11592           /* Since this is early in the link process, it is simple
11593              to remove a section from the output.  */
11594           o->flags |= SEC_EXCLUDE;
11595
11596           if (info->print_gc_sections && o->size != 0)
11597             _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
11598
11599           /* But we also have to update some of the relocation
11600              info we collected before.  */
11601           if (gc_sweep_hook
11602               && (o->flags & SEC_RELOC) != 0
11603               && o->reloc_count > 0
11604               && !bfd_is_abs_section (o->output_section))
11605             {
11606               Elf_Internal_Rela *internal_relocs;
11607               bfd_boolean r;
11608
11609               internal_relocs
11610                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
11611                                              info->keep_memory);
11612               if (internal_relocs == NULL)
11613                 return FALSE;
11614
11615               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
11616
11617               if (elf_section_data (o)->relocs != internal_relocs)
11618                 free (internal_relocs);
11619
11620               if (!r)
11621                 return FALSE;
11622             }
11623         }
11624     }
11625
11626   /* Remove the symbols that were in the swept sections from the dynamic
11627      symbol table.  GCFIXME: Anyone know how to get them out of the
11628      static symbol table as well?  */
11629   sweep_info.info = info;
11630   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
11631   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
11632                           &sweep_info);
11633
11634   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
11635   return TRUE;
11636 }
11637
11638 /* Propagate collected vtable information.  This is called through
11639    elf_link_hash_traverse.  */
11640
11641 static bfd_boolean
11642 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
11643 {
11644   if (h->root.type == bfd_link_hash_warning)
11645     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11646
11647   /* Those that are not vtables.  */
11648   if (h->vtable == NULL || h->vtable->parent == NULL)
11649     return TRUE;
11650
11651   /* Those vtables that do not have parents, we cannot merge.  */
11652   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
11653     return TRUE;
11654
11655   /* If we've already been done, exit.  */
11656   if (h->vtable->used && h->vtable->used[-1])
11657     return TRUE;
11658
11659   /* Make sure the parent's table is up to date.  */
11660   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
11661
11662   if (h->vtable->used == NULL)
11663     {
11664       /* None of this table's entries were referenced.  Re-use the
11665          parent's table.  */
11666       h->vtable->used = h->vtable->parent->vtable->used;
11667       h->vtable->size = h->vtable->parent->vtable->size;
11668     }
11669   else
11670     {
11671       size_t n;
11672       bfd_boolean *cu, *pu;
11673
11674       /* Or the parent's entries into ours.  */
11675       cu = h->vtable->used;
11676       cu[-1] = TRUE;
11677       pu = h->vtable->parent->vtable->used;
11678       if (pu != NULL)
11679         {
11680           const struct elf_backend_data *bed;
11681           unsigned int log_file_align;
11682
11683           bed = get_elf_backend_data (h->root.u.def.section->owner);
11684           log_file_align = bed->s->log_file_align;
11685           n = h->vtable->parent->vtable->size >> log_file_align;
11686           while (n--)
11687             {
11688               if (*pu)
11689                 *cu = TRUE;
11690               pu++;
11691               cu++;
11692             }
11693         }
11694     }
11695
11696   return TRUE;
11697 }
11698
11699 static bfd_boolean
11700 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
11701 {
11702   asection *sec;
11703   bfd_vma hstart, hend;
11704   Elf_Internal_Rela *relstart, *relend, *rel;
11705   const struct elf_backend_data *bed;
11706   unsigned int log_file_align;
11707
11708   if (h->root.type == bfd_link_hash_warning)
11709     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11710
11711   /* Take care of both those symbols that do not describe vtables as
11712      well as those that are not loaded.  */
11713   if (h->vtable == NULL || h->vtable->parent == NULL)
11714     return TRUE;
11715
11716   BFD_ASSERT (h->root.type == bfd_link_hash_defined
11717               || h->root.type == bfd_link_hash_defweak);
11718
11719   sec = h->root.u.def.section;
11720   hstart = h->root.u.def.value;
11721   hend = hstart + h->size;
11722
11723   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
11724   if (!relstart)
11725     return *(bfd_boolean *) okp = FALSE;
11726   bed = get_elf_backend_data (sec->owner);
11727   log_file_align = bed->s->log_file_align;
11728
11729   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
11730
11731   for (rel = relstart; rel < relend; ++rel)
11732     if (rel->r_offset >= hstart && rel->r_offset < hend)
11733       {
11734         /* If the entry is in use, do nothing.  */
11735         if (h->vtable->used
11736             && (rel->r_offset - hstart) < h->vtable->size)
11737           {
11738             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
11739             if (h->vtable->used[entry])
11740               continue;
11741           }
11742         /* Otherwise, kill it.  */
11743         rel->r_offset = rel->r_info = rel->r_addend = 0;
11744       }
11745
11746   return TRUE;
11747 }
11748
11749 /* Mark sections containing dynamically referenced symbols.  When
11750    building shared libraries, we must assume that any visible symbol is
11751    referenced.  */
11752
11753 bfd_boolean
11754 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
11755 {
11756   struct bfd_link_info *info = (struct bfd_link_info *) inf;
11757
11758   if (h->root.type == bfd_link_hash_warning)
11759     h = (struct elf_link_hash_entry *) h->root.u.i.link;
11760
11761   if ((h->root.type == bfd_link_hash_defined
11762        || h->root.type == bfd_link_hash_defweak)
11763       && (h->ref_dynamic
11764           || (!info->executable
11765               && h->def_regular
11766               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
11767               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN)))
11768     h->root.u.def.section->flags |= SEC_KEEP;
11769
11770   return TRUE;
11771 }
11772
11773 /* Keep all sections containing symbols undefined on the command-line,
11774    and the section containing the entry symbol.  */
11775
11776 void
11777 _bfd_elf_gc_keep (struct bfd_link_info *info)
11778 {
11779   struct bfd_sym_chain *sym;
11780
11781   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
11782     {
11783       struct elf_link_hash_entry *h;
11784
11785       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
11786                                 FALSE, FALSE, FALSE);
11787
11788       if (h != NULL
11789           && (h->root.type == bfd_link_hash_defined
11790               || h->root.type == bfd_link_hash_defweak)
11791           && !bfd_is_abs_section (h->root.u.def.section))
11792         h->root.u.def.section->flags |= SEC_KEEP;
11793     }
11794 }
11795
11796 /* Do mark and sweep of unused sections.  */
11797
11798 bfd_boolean
11799 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
11800 {
11801   bfd_boolean ok = TRUE;
11802   bfd *sub;
11803   elf_gc_mark_hook_fn gc_mark_hook;
11804   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11805
11806   if (!bed->can_gc_sections
11807       || !is_elf_hash_table (info->hash))
11808     {
11809       (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
11810       return TRUE;
11811     }
11812
11813   bed->gc_keep (info);
11814
11815   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
11816      at the .eh_frame section if we can mark the FDEs individually.  */
11817   _bfd_elf_begin_eh_frame_parsing (info);
11818   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11819     {
11820       asection *sec;
11821       struct elf_reloc_cookie cookie;
11822
11823       sec = bfd_get_section_by_name (sub, ".eh_frame");
11824       if (sec && init_reloc_cookie_for_section (&cookie, info, sec))
11825         {
11826           _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
11827           if (elf_section_data (sec)->sec_info)
11828             elf_eh_frame_section (sub) = sec;
11829           fini_reloc_cookie_for_section (&cookie, sec);
11830         }
11831     }
11832   _bfd_elf_end_eh_frame_parsing (info);
11833
11834   /* Apply transitive closure to the vtable entry usage info.  */
11835   elf_link_hash_traverse (elf_hash_table (info),
11836                           elf_gc_propagate_vtable_entries_used,
11837                           &ok);
11838   if (!ok)
11839     return FALSE;
11840
11841   /* Kill the vtable relocations that were not used.  */
11842   elf_link_hash_traverse (elf_hash_table (info),
11843                           elf_gc_smash_unused_vtentry_relocs,
11844                           &ok);
11845   if (!ok)
11846     return FALSE;
11847
11848   /* Mark dynamically referenced symbols.  */
11849   if (elf_hash_table (info)->dynamic_sections_created)
11850     elf_link_hash_traverse (elf_hash_table (info),
11851                             bed->gc_mark_dynamic_ref,
11852                             info);
11853
11854   /* Grovel through relocs to find out who stays ...  */
11855   gc_mark_hook = bed->gc_mark_hook;
11856   for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
11857     {
11858       asection *o;
11859
11860       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
11861         continue;
11862
11863       for (o = sub->sections; o != NULL; o = o->next)
11864         if ((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP && !o->gc_mark)
11865           if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
11866             return FALSE;
11867     }
11868
11869   /* Allow the backend to mark additional target specific sections.  */
11870   if (bed->gc_mark_extra_sections)
11871     bed->gc_mark_extra_sections (info, gc_mark_hook);
11872
11873   /* ... and mark SEC_EXCLUDE for those that go.  */
11874   return elf_gc_sweep (abfd, info);
11875 }
11876 \f
11877 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
11878
11879 bfd_boolean
11880 bfd_elf_gc_record_vtinherit (bfd *abfd,
11881                              asection *sec,
11882                              struct elf_link_hash_entry *h,
11883                              bfd_vma offset)
11884 {
11885   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
11886   struct elf_link_hash_entry **search, *child;
11887   bfd_size_type extsymcount;
11888   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11889
11890   /* The sh_info field of the symtab header tells us where the
11891      external symbols start.  We don't care about the local symbols at
11892      this point.  */
11893   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
11894   if (!elf_bad_symtab (abfd))
11895     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
11896
11897   sym_hashes = elf_sym_hashes (abfd);
11898   sym_hashes_end = sym_hashes + extsymcount;
11899
11900   /* Hunt down the child symbol, which is in this section at the same
11901      offset as the relocation.  */
11902   for (search = sym_hashes; search != sym_hashes_end; ++search)
11903     {
11904       if ((child = *search) != NULL
11905           && (child->root.type == bfd_link_hash_defined
11906               || child->root.type == bfd_link_hash_defweak)
11907           && child->root.u.def.section == sec
11908           && child->root.u.def.value == offset)
11909         goto win;
11910     }
11911
11912   (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
11913                          abfd, sec, (unsigned long) offset);
11914   bfd_set_error (bfd_error_invalid_operation);
11915   return FALSE;
11916
11917  win:
11918   if (!child->vtable)
11919     {
11920       child->vtable = (struct elf_link_virtual_table_entry *)
11921           bfd_zalloc (abfd, sizeof (*child->vtable));
11922       if (!child->vtable)
11923         return FALSE;
11924     }
11925   if (!h)
11926     {
11927       /* This *should* only be the absolute section.  It could potentially
11928          be that someone has defined a non-global vtable though, which
11929          would be bad.  It isn't worth paging in the local symbols to be
11930          sure though; that case should simply be handled by the assembler.  */
11931
11932       child->vtable->parent = (struct elf_link_hash_entry *) -1;
11933     }
11934   else
11935     child->vtable->parent = h;
11936
11937   return TRUE;
11938 }
11939
11940 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
11941
11942 bfd_boolean
11943 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
11944                            asection *sec ATTRIBUTE_UNUSED,
11945                            struct elf_link_hash_entry *h,
11946                            bfd_vma addend)
11947 {
11948   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11949   unsigned int log_file_align = bed->s->log_file_align;
11950
11951   if (!h->vtable)
11952     {
11953       h->vtable = (struct elf_link_virtual_table_entry *)
11954           bfd_zalloc (abfd, sizeof (*h->vtable));
11955       if (!h->vtable)
11956         return FALSE;
11957     }
11958
11959   if (addend >= h->vtable->size)
11960     {
11961       size_t size, bytes, file_align;
11962       bfd_boolean *ptr = h->vtable->used;
11963
11964       /* While the symbol is undefined, we have to be prepared to handle
11965          a zero size.  */
11966       file_align = 1 << log_file_align;
11967       if (h->root.type == bfd_link_hash_undefined)
11968         size = addend + file_align;
11969       else
11970         {
11971           size = h->size;
11972           if (addend >= size)
11973             {
11974               /* Oops!  We've got a reference past the defined end of
11975                  the table.  This is probably a bug -- shall we warn?  */
11976               size = addend + file_align;
11977             }
11978         }
11979       size = (size + file_align - 1) & -file_align;
11980
11981       /* Allocate one extra entry for use as a "done" flag for the
11982          consolidation pass.  */
11983       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
11984
11985       if (ptr)
11986         {
11987           ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
11988
11989           if (ptr != NULL)
11990             {
11991               size_t oldbytes;
11992
11993               oldbytes = (((h->vtable->size >> log_file_align) + 1)
11994                           * sizeof (bfd_boolean));
11995               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
11996             }
11997         }
11998       else
11999         ptr = (bfd_boolean *) bfd_zmalloc (bytes);
12000
12001       if (ptr == NULL)
12002         return FALSE;
12003
12004       /* And arrange for that done flag to be at index -1.  */
12005       h->vtable->used = ptr + 1;
12006       h->vtable->size = size;
12007     }
12008
12009   h->vtable->used[addend >> log_file_align] = TRUE;
12010
12011   return TRUE;
12012 }
12013
12014 struct alloc_got_off_arg {
12015   bfd_vma gotoff;
12016   struct bfd_link_info *info;
12017 };
12018
12019 /* We need a special top-level link routine to convert got reference counts
12020    to real got offsets.  */
12021
12022 static bfd_boolean
12023 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
12024 {
12025   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
12026   bfd *obfd = gofarg->info->output_bfd;
12027   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12028
12029   if (h->root.type == bfd_link_hash_warning)
12030     h = (struct elf_link_hash_entry *) h->root.u.i.link;
12031
12032   if (h->got.refcount > 0)
12033     {
12034       h->got.offset = gofarg->gotoff;
12035       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
12036     }
12037   else
12038     h->got.offset = (bfd_vma) -1;
12039
12040   return TRUE;
12041 }
12042
12043 /* And an accompanying bit to work out final got entry offsets once
12044    we're done.  Should be called from final_link.  */
12045
12046 bfd_boolean
12047 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
12048                                         struct bfd_link_info *info)
12049 {
12050   bfd *i;
12051   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12052   bfd_vma gotoff;
12053   struct alloc_got_off_arg gofarg;
12054
12055   BFD_ASSERT (abfd == info->output_bfd);
12056
12057   if (! is_elf_hash_table (info->hash))
12058     return FALSE;
12059
12060   /* The GOT offset is relative to the .got section, but the GOT header is
12061      put into the .got.plt section, if the backend uses it.  */
12062   if (bed->want_got_plt)
12063     gotoff = 0;
12064   else
12065     gotoff = bed->got_header_size;
12066
12067   /* Do the local .got entries first.  */
12068   for (i = info->input_bfds; i; i = i->link_next)
12069     {
12070       bfd_signed_vma *local_got;
12071       bfd_size_type j, locsymcount;
12072       Elf_Internal_Shdr *symtab_hdr;
12073
12074       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
12075         continue;
12076
12077       local_got = elf_local_got_refcounts (i);
12078       if (!local_got)
12079         continue;
12080
12081       symtab_hdr = &elf_tdata (i)->symtab_hdr;
12082       if (elf_bad_symtab (i))
12083         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12084       else
12085         locsymcount = symtab_hdr->sh_info;
12086
12087       for (j = 0; j < locsymcount; ++j)
12088         {
12089           if (local_got[j] > 0)
12090             {
12091               local_got[j] = gotoff;
12092               gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
12093             }
12094           else
12095             local_got[j] = (bfd_vma) -1;
12096         }
12097     }
12098
12099   /* Then the global .got entries.  .plt refcounts are handled by
12100      adjust_dynamic_symbol  */
12101   gofarg.gotoff = gotoff;
12102   gofarg.info = info;
12103   elf_link_hash_traverse (elf_hash_table (info),
12104                           elf_gc_allocate_got_offsets,
12105                           &gofarg);
12106   return TRUE;
12107 }
12108
12109 /* Many folk need no more in the way of final link than this, once
12110    got entry reference counting is enabled.  */
12111
12112 bfd_boolean
12113 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
12114 {
12115   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
12116     return FALSE;
12117
12118   /* Invoke the regular ELF backend linker to do all the work.  */
12119   return bfd_elf_final_link (abfd, info);
12120 }
12121
12122 bfd_boolean
12123 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
12124 {
12125   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
12126
12127   if (rcookie->bad_symtab)
12128     rcookie->rel = rcookie->rels;
12129
12130   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
12131     {
12132       unsigned long r_symndx;
12133
12134       if (! rcookie->bad_symtab)
12135         if (rcookie->rel->r_offset > offset)
12136           return FALSE;
12137       if (rcookie->rel->r_offset != offset)
12138         continue;
12139
12140       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
12141       if (r_symndx == SHN_UNDEF)
12142         return TRUE;
12143
12144       if (r_symndx >= rcookie->locsymcount
12145           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12146         {
12147           struct elf_link_hash_entry *h;
12148
12149           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
12150
12151           while (h->root.type == bfd_link_hash_indirect
12152                  || h->root.type == bfd_link_hash_warning)
12153             h = (struct elf_link_hash_entry *) h->root.u.i.link;
12154
12155           if ((h->root.type == bfd_link_hash_defined
12156                || h->root.type == bfd_link_hash_defweak)
12157               && elf_discarded_section (h->root.u.def.section))
12158             return TRUE;
12159           else
12160             return FALSE;
12161         }
12162       else
12163         {
12164           /* It's not a relocation against a global symbol,
12165              but it could be a relocation against a local
12166              symbol for a discarded section.  */
12167           asection *isec;
12168           Elf_Internal_Sym *isym;
12169
12170           /* Need to: get the symbol; get the section.  */
12171           isym = &rcookie->locsyms[r_symndx];
12172           isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
12173           if (isec != NULL && elf_discarded_section (isec))
12174             return TRUE;
12175         }
12176       return FALSE;
12177     }
12178   return FALSE;
12179 }
12180
12181 /* Discard unneeded references to discarded sections.
12182    Returns TRUE if any section's size was changed.  */
12183 /* This function assumes that the relocations are in sorted order,
12184    which is true for all known assemblers.  */
12185
12186 bfd_boolean
12187 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
12188 {
12189   struct elf_reloc_cookie cookie;
12190   asection *stab, *eh;
12191   const struct elf_backend_data *bed;
12192   bfd *abfd;
12193   bfd_boolean ret = FALSE;
12194
12195   if (info->traditional_format
12196       || !is_elf_hash_table (info->hash))
12197     return FALSE;
12198
12199   _bfd_elf_begin_eh_frame_parsing (info);
12200   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next)
12201     {
12202       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12203         continue;
12204
12205       bed = get_elf_backend_data (abfd);
12206
12207       if ((abfd->flags & DYNAMIC) != 0)
12208         continue;
12209
12210       eh = NULL;
12211       if (!info->relocatable)
12212         {
12213           eh = bfd_get_section_by_name (abfd, ".eh_frame");
12214           if (eh != NULL
12215               && (eh->size == 0
12216                   || bfd_is_abs_section (eh->output_section)))
12217             eh = NULL;
12218         }
12219
12220       stab = bfd_get_section_by_name (abfd, ".stab");
12221       if (stab != NULL
12222           && (stab->size == 0
12223               || bfd_is_abs_section (stab->output_section)
12224               || stab->sec_info_type != ELF_INFO_TYPE_STABS))
12225         stab = NULL;
12226
12227       if (stab == NULL
12228           && eh == NULL
12229           && bed->elf_backend_discard_info == NULL)
12230         continue;
12231
12232       if (!init_reloc_cookie (&cookie, info, abfd))
12233         return FALSE;
12234
12235       if (stab != NULL
12236           && stab->reloc_count > 0
12237           && init_reloc_cookie_rels (&cookie, info, abfd, stab))
12238         {
12239           if (_bfd_discard_section_stabs (abfd, stab,
12240                                           elf_section_data (stab)->sec_info,
12241                                           bfd_elf_reloc_symbol_deleted_p,
12242                                           &cookie))
12243             ret = TRUE;
12244           fini_reloc_cookie_rels (&cookie, stab);
12245         }
12246
12247       if (eh != NULL
12248           && init_reloc_cookie_rels (&cookie, info, abfd, eh))
12249         {
12250           _bfd_elf_parse_eh_frame (abfd, info, eh, &cookie);
12251           if (_bfd_elf_discard_section_eh_frame (abfd, info, eh,
12252                                                  bfd_elf_reloc_symbol_deleted_p,
12253                                                  &cookie))
12254             ret = TRUE;
12255           fini_reloc_cookie_rels (&cookie, eh);
12256         }
12257
12258       if (bed->elf_backend_discard_info != NULL
12259           && (*bed->elf_backend_discard_info) (abfd, &cookie, info))
12260         ret = TRUE;
12261
12262       fini_reloc_cookie (&cookie, abfd);
12263     }
12264   _bfd_elf_end_eh_frame_parsing (info);
12265
12266   if (info->eh_frame_hdr
12267       && !info->relocatable
12268       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
12269     ret = TRUE;
12270
12271   return ret;
12272 }
12273
12274 /* For a SHT_GROUP section, return the group signature.  For other
12275    sections, return the normal section name.  */
12276
12277 static const char *
12278 section_signature (asection *sec)
12279 {
12280   if ((sec->flags & SEC_GROUP) != 0
12281       && elf_next_in_group (sec) != NULL
12282       && elf_group_name (elf_next_in_group (sec)) != NULL)
12283     return elf_group_name (elf_next_in_group (sec));
12284   return sec->name;
12285 }
12286
12287 void
12288 _bfd_elf_section_already_linked (bfd *abfd, asection *sec,
12289                                  struct bfd_link_info *info)
12290 {
12291   flagword flags;
12292   const char *name, *p;
12293   struct bfd_section_already_linked *l;
12294   struct bfd_section_already_linked_hash_entry *already_linked_list;
12295
12296   if (sec->output_section == bfd_abs_section_ptr)
12297     return;
12298
12299   flags = sec->flags;
12300
12301   /* Return if it isn't a linkonce section.  A comdat group section
12302      also has SEC_LINK_ONCE set.  */
12303   if ((flags & SEC_LINK_ONCE) == 0)
12304     return;
12305
12306   /* Don't put group member sections on our list of already linked
12307      sections.  They are handled as a group via their group section.  */
12308   if (elf_sec_group (sec) != NULL)
12309     return;
12310
12311   /* FIXME: When doing a relocatable link, we may have trouble
12312      copying relocations in other sections that refer to local symbols
12313      in the section being discarded.  Those relocations will have to
12314      be converted somehow; as of this writing I'm not sure that any of
12315      the backends handle that correctly.
12316
12317      It is tempting to instead not discard link once sections when
12318      doing a relocatable link (technically, they should be discarded
12319      whenever we are building constructors).  However, that fails,
12320      because the linker winds up combining all the link once sections
12321      into a single large link once section, which defeats the purpose
12322      of having link once sections in the first place.
12323
12324      Also, not merging link once sections in a relocatable link
12325      causes trouble for MIPS ELF, which relies on link once semantics
12326      to handle the .reginfo section correctly.  */
12327
12328   name = section_signature (sec);
12329
12330   if (CONST_STRNEQ (name, ".gnu.linkonce.")
12331       && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
12332     p++;
12333   else
12334     p = name;
12335
12336   already_linked_list = bfd_section_already_linked_table_lookup (p);
12337
12338   for (l = already_linked_list->entry; l != NULL; l = l->next)
12339     {
12340       /* We may have 2 different types of sections on the list: group
12341          sections and linkonce sections.  Match like sections.  */
12342       if ((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
12343           && strcmp (name, section_signature (l->sec)) == 0
12344           && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL)
12345         {
12346           /* The section has already been linked.  See if we should
12347              issue a warning.  */
12348           switch (flags & SEC_LINK_DUPLICATES)
12349             {
12350             default:
12351               abort ();
12352
12353             case SEC_LINK_DUPLICATES_DISCARD:
12354               break;
12355
12356             case SEC_LINK_DUPLICATES_ONE_ONLY:
12357               (*_bfd_error_handler)
12358                 (_("%B: ignoring duplicate section `%A'"),
12359                  abfd, sec);
12360               break;
12361
12362             case SEC_LINK_DUPLICATES_SAME_SIZE:
12363               if (sec->size != l->sec->size)
12364                 (*_bfd_error_handler)
12365                   (_("%B: duplicate section `%A' has different size"),
12366                    abfd, sec);
12367               break;
12368
12369             case SEC_LINK_DUPLICATES_SAME_CONTENTS:
12370               if (sec->size != l->sec->size)
12371                 (*_bfd_error_handler)
12372                   (_("%B: duplicate section `%A' has different size"),
12373                    abfd, sec);
12374               else if (sec->size != 0)
12375                 {
12376                   bfd_byte *sec_contents, *l_sec_contents;
12377
12378                   if (!bfd_malloc_and_get_section (abfd, sec, &sec_contents))
12379                     (*_bfd_error_handler)
12380                       (_("%B: warning: could not read contents of section `%A'"),
12381                        abfd, sec);
12382                   else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
12383                                                         &l_sec_contents))
12384                     (*_bfd_error_handler)
12385                       (_("%B: warning: could not read contents of section `%A'"),
12386                        l->sec->owner, l->sec);
12387                   else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
12388                     (*_bfd_error_handler)
12389                       (_("%B: warning: duplicate section `%A' has different contents"),
12390                        abfd, sec);
12391
12392                   if (sec_contents)
12393                     free (sec_contents);
12394                   if (l_sec_contents)
12395                     free (l_sec_contents);
12396                 }
12397               break;
12398             }
12399
12400           /* Set the output_section field so that lang_add_section
12401              does not create a lang_input_section structure for this
12402              section.  Since there might be a symbol in the section
12403              being discarded, we must retain a pointer to the section
12404              which we are really going to use.  */
12405           sec->output_section = bfd_abs_section_ptr;
12406           sec->kept_section = l->sec;
12407
12408           if (flags & SEC_GROUP)
12409             {
12410               asection *first = elf_next_in_group (sec);
12411               asection *s = first;
12412
12413               while (s != NULL)
12414                 {
12415                   s->output_section = bfd_abs_section_ptr;
12416                   /* Record which group discards it.  */
12417                   s->kept_section = l->sec;
12418                   s = elf_next_in_group (s);
12419                   /* These lists are circular.  */
12420                   if (s == first)
12421                     break;
12422                 }
12423             }
12424
12425           return;
12426         }
12427     }
12428
12429   /* A single member comdat group section may be discarded by a
12430      linkonce section and vice versa.  */
12431
12432   if ((flags & SEC_GROUP) != 0)
12433     {
12434       asection *first = elf_next_in_group (sec);
12435
12436       if (first != NULL && elf_next_in_group (first) == first)
12437         /* Check this single member group against linkonce sections.  */
12438         for (l = already_linked_list->entry; l != NULL; l = l->next)
12439           if ((l->sec->flags & SEC_GROUP) == 0
12440               && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL
12441               && bfd_elf_match_symbols_in_sections (l->sec, first, info))
12442             {
12443               first->output_section = bfd_abs_section_ptr;
12444               first->kept_section = l->sec;
12445               sec->output_section = bfd_abs_section_ptr;
12446               break;
12447             }
12448     }
12449   else
12450     /* Check this linkonce section against single member groups.  */
12451     for (l = already_linked_list->entry; l != NULL; l = l->next)
12452       if (l->sec->flags & SEC_GROUP)
12453         {
12454           asection *first = elf_next_in_group (l->sec);
12455
12456           if (first != NULL
12457               && elf_next_in_group (first) == first
12458               && bfd_elf_match_symbols_in_sections (first, sec, info))
12459             {
12460               sec->output_section = bfd_abs_section_ptr;
12461               sec->kept_section = first;
12462               break;
12463             }
12464         }
12465
12466   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
12467      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
12468      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
12469      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
12470      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
12471      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
12472      `.gnu.linkonce.t.F' section from a different bfd not requiring any
12473      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
12474      The reverse order cannot happen as there is never a bfd with only the
12475      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
12476      matter as here were are looking only for cross-bfd sections.  */
12477
12478   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
12479     for (l = already_linked_list->entry; l != NULL; l = l->next)
12480       if ((l->sec->flags & SEC_GROUP) == 0
12481           && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
12482         {
12483           if (abfd != l->sec->owner)
12484             sec->output_section = bfd_abs_section_ptr;
12485           break;
12486         }
12487
12488   /* This is the first section with this name.  Record it.  */
12489   if (! bfd_section_already_linked_table_insert (already_linked_list, sec))
12490     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
12491 }
12492
12493 bfd_boolean
12494 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
12495 {
12496   return sym->st_shndx == SHN_COMMON;
12497 }
12498
12499 unsigned int
12500 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
12501 {
12502   return SHN_COMMON;
12503 }
12504
12505 asection *
12506 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
12507 {
12508   return bfd_com_section_ptr;
12509 }
12510
12511 bfd_vma
12512 _bfd_elf_default_got_elt_size (bfd *abfd,
12513                                struct bfd_link_info *info ATTRIBUTE_UNUSED,
12514                                struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
12515                                bfd *ibfd ATTRIBUTE_UNUSED,
12516                                unsigned long symndx ATTRIBUTE_UNUSED)
12517 {
12518   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12519   return bed->s->arch_size / 8;
12520 }
12521
12522 /* Routines to support the creation of dynamic relocs.  */
12523
12524 /* Return true if NAME is a name of a relocation
12525    section associated with section S.  */
12526
12527 static bfd_boolean
12528 is_reloc_section (bfd_boolean rela, const char * name, asection * s)
12529 {
12530   if (rela)
12531     return CONST_STRNEQ (name, ".rela")
12532       && strcmp (bfd_get_section_name (NULL, s), name + 5) == 0;
12533
12534   return CONST_STRNEQ (name, ".rel")
12535     && strcmp (bfd_get_section_name (NULL, s), name + 4) == 0;
12536 }
12537
12538 /* Returns the name of the dynamic reloc section associated with SEC.  */
12539
12540 static const char *
12541 get_dynamic_reloc_section_name (bfd *       abfd,
12542                                 asection *  sec,
12543                                 bfd_boolean is_rela)
12544 {
12545   const char * name;
12546   unsigned int strndx = elf_elfheader (abfd)->e_shstrndx;
12547   unsigned int shnam = elf_section_data (sec)->rel_hdr.sh_name;
12548
12549   name = bfd_elf_string_from_elf_section (abfd, strndx, shnam);
12550   if (name == NULL)
12551     return NULL;
12552
12553   if (! is_reloc_section (is_rela, name, sec))
12554     {
12555       static bfd_boolean complained = FALSE;
12556
12557       if (! complained)
12558         {
12559           (*_bfd_error_handler)
12560             (_("%B: bad relocation section name `%s\'"),  abfd, name);
12561           complained = TRUE;
12562         }
12563       name = NULL;
12564     }
12565
12566   return name;
12567 }
12568
12569 /* Returns the dynamic reloc section associated with SEC.
12570    If necessary compute the name of the dynamic reloc section based
12571    on SEC's name (looked up in ABFD's string table) and the setting
12572    of IS_RELA.  */
12573
12574 asection *
12575 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
12576                                     asection *  sec,
12577                                     bfd_boolean is_rela)
12578 {
12579   asection * reloc_sec = elf_section_data (sec)->sreloc;
12580
12581   if (reloc_sec == NULL)
12582     {
12583       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
12584
12585       if (name != NULL)
12586         {
12587           reloc_sec = bfd_get_section_by_name (abfd, name);
12588
12589           if (reloc_sec != NULL)
12590             elf_section_data (sec)->sreloc = reloc_sec;
12591         }
12592     }
12593
12594   return reloc_sec;
12595 }
12596
12597 /* Returns the dynamic reloc section associated with SEC.  If the
12598    section does not exist it is created and attached to the DYNOBJ
12599    bfd and stored in the SRELOC field of SEC's elf_section_data
12600    structure.
12601
12602    ALIGNMENT is the alignment for the newly created section and
12603    IS_RELA defines whether the name should be .rela.<SEC's name>
12604    or .rel.<SEC's name>.  The section name is looked up in the
12605    string table associated with ABFD.  */
12606
12607 asection *
12608 _bfd_elf_make_dynamic_reloc_section (asection *         sec,
12609                                      bfd *              dynobj,
12610                                      unsigned int       alignment,
12611                                      bfd *              abfd,
12612                                      bfd_boolean        is_rela)
12613 {
12614   asection * reloc_sec = elf_section_data (sec)->sreloc;
12615
12616   if (reloc_sec == NULL)
12617     {
12618       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
12619
12620       if (name == NULL)
12621         return NULL;
12622
12623       reloc_sec = bfd_get_section_by_name (dynobj, name);
12624
12625       if (reloc_sec == NULL)
12626         {
12627           flagword flags;
12628
12629           flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_IN_MEMORY | SEC_LINKER_CREATED);
12630           if ((sec->flags & SEC_ALLOC) != 0)
12631             flags |= SEC_ALLOC | SEC_LOAD;
12632
12633           reloc_sec = bfd_make_section_with_flags (dynobj, name, flags);
12634           if (reloc_sec != NULL)
12635             {
12636               if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
12637                 reloc_sec = NULL;
12638             }
12639         }
12640
12641       elf_section_data (sec)->sreloc = reloc_sec;
12642     }
12643
12644   return reloc_sec;
12645 }
12646
12647 /* Copy the ELF symbol type associated with a linker hash entry.  */
12648 void
12649 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
12650     struct bfd_link_hash_entry * hdest,
12651     struct bfd_link_hash_entry * hsrc)
12652 {
12653   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *)hdest;
12654   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *)hsrc;
12655
12656   ehdest->type = ehsrc->type;
12657 }