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