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