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