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