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