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