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