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