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