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