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