Mark the plugin symbol undefined
[external/binutils.git] / bfd / elflink.c
1 /* ELF linking support for BFD.
2    Copyright (C) 1995-2015 Free Software Foundation, Inc.
3
4    This file is part of BFD, the Binary File Descriptor library.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20
21 #include "sysdep.h"
22 #include "bfd.h"
23 #include "bfd_stdint.h"
24 #include "bfdlink.h"
25 #include "libbfd.h"
26 #define ARCH_SIZE 0
27 #include "elf-bfd.h"
28 #include "safe-ctype.h"
29 #include "libiberty.h"
30 #include "objalloc.h"
31
32 /* This struct is used to pass information to routines called via
33    elf_link_hash_traverse which must return failure.  */
34
35 struct elf_info_failed
36 {
37   struct bfd_link_info *info;
38   bfd_boolean failed;
39 };
40
41 /* This structure is used to pass information to
42    _bfd_elf_link_find_version_dependencies.  */
43
44 struct elf_find_verdep_info
45 {
46   /* General link information.  */
47   struct bfd_link_info *info;
48   /* The number of dependencies.  */
49   unsigned int vers;
50   /* Whether we had a failure.  */
51   bfd_boolean failed;
52 };
53
54 static bfd_boolean _bfd_elf_fix_symbol_flags
55   (struct elf_link_hash_entry *, struct elf_info_failed *);
56
57 /* Define a symbol in a dynamic linkage section.  */
58
59 struct elf_link_hash_entry *
60 _bfd_elf_define_linkage_sym (bfd *abfd,
61                              struct bfd_link_info *info,
62                              asection *sec,
63                              const char *name)
64 {
65   struct elf_link_hash_entry *h;
66   struct bfd_link_hash_entry *bh;
67   const struct elf_backend_data *bed;
68
69   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
70   if (h != NULL)
71     {
72       /* Zap symbol defined in an as-needed lib that wasn't linked.
73          This is a symptom of a larger problem:  Absolute symbols
74          defined in shared libraries can't be overridden, because we
75          lose the link to the bfd which is via the symbol section.  */
76       h->root.type = bfd_link_hash_new;
77     }
78
79   bh = &h->root;
80   if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
81                                          sec, 0, NULL, FALSE,
82                                          get_elf_backend_data (abfd)->collect,
83                                          &bh))
84     return NULL;
85   h = (struct elf_link_hash_entry *) bh;
86   h->def_regular = 1;
87   h->non_elf = 0;
88   h->root.linker_def = 1;
89   h->type = STT_OBJECT;
90   if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
91     h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
92
93   bed = get_elf_backend_data (abfd);
94   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
95   return h;
96 }
97
98 bfd_boolean
99 _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
100 {
101   flagword flags;
102   asection *s;
103   struct elf_link_hash_entry *h;
104   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
105   struct elf_link_hash_table *htab = elf_hash_table (info);
106
107   /* This function may be called more than once.  */
108   s = bfd_get_linker_section (abfd, ".got");
109   if (s != NULL)
110     return TRUE;
111
112   flags = bed->dynamic_sec_flags;
113
114   s = bfd_make_section_anyway_with_flags (abfd,
115                                           (bed->rela_plts_and_copies_p
116                                            ? ".rela.got" : ".rel.got"),
117                                           (bed->dynamic_sec_flags
118                                            | SEC_READONLY));
119   if (s == NULL
120       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
121     return FALSE;
122   htab->srelgot = s;
123
124   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
125   if (s == NULL
126       || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
127     return FALSE;
128   htab->sgot = s;
129
130   if (bed->want_got_plt)
131     {
132       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
133       if (s == NULL
134           || !bfd_set_section_alignment (abfd, s,
135                                          bed->s->log_file_align))
136         return FALSE;
137       htab->sgotplt = s;
138     }
139
140   /* The first bit of the global offset table is the header.  */
141   s->size += bed->got_header_size;
142
143   if (bed->want_got_sym)
144     {
145       /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
146          (or .got.plt) section.  We don't do this in the linker script
147          because we don't want to define the symbol if we are not creating
148          a global offset table.  */
149       h = _bfd_elf_define_linkage_sym (abfd, info, s,
150                                        "_GLOBAL_OFFSET_TABLE_");
151       elf_hash_table (info)->hgot = h;
152       if (h == NULL)
153         return FALSE;
154     }
155
156   return TRUE;
157 }
158 \f
159 /* Create a strtab to hold the dynamic symbol names.  */
160 static bfd_boolean
161 _bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
162 {
163   struct elf_link_hash_table *hash_table;
164
165   hash_table = elf_hash_table (info);
166   if (hash_table->dynobj == NULL)
167     hash_table->dynobj = abfd;
168
169   if (hash_table->dynstr == NULL)
170     {
171       hash_table->dynstr = _bfd_elf_strtab_init ();
172       if (hash_table->dynstr == NULL)
173         return FALSE;
174     }
175   return TRUE;
176 }
177
178 /* Create some sections which will be filled in with dynamic linking
179    information.  ABFD is an input file which requires dynamic sections
180    to be created.  The dynamic sections take up virtual memory space
181    when the final executable is run, so we need to create them before
182    addresses are assigned to the output sections.  We work out the
183    actual contents and size of these sections later.  */
184
185 bfd_boolean
186 _bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
187 {
188   flagword flags;
189   asection *s;
190   const struct elf_backend_data *bed;
191   struct elf_link_hash_entry *h;
192
193   if (! is_elf_hash_table (info->hash))
194     return FALSE;
195
196   if (elf_hash_table (info)->dynamic_sections_created)
197     return TRUE;
198
199   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
200     return FALSE;
201
202   abfd = elf_hash_table (info)->dynobj;
203   bed = get_elf_backend_data (abfd);
204
205   flags = bed->dynamic_sec_flags;
206
207   /* A dynamically linked executable has a .interp section, but a
208      shared library does not.  */
209   if (info->executable)
210     {
211       s = bfd_make_section_anyway_with_flags (abfd, ".interp",
212                                               flags | SEC_READONLY);
213       if (s == NULL)
214         return FALSE;
215     }
216
217   /* Create sections to hold version informations.  These are removed
218      if they are not needed.  */
219   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_d",
220                                           flags | SEC_READONLY);
221   if (s == NULL
222       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
223     return FALSE;
224
225   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version",
226                                           flags | SEC_READONLY);
227   if (s == NULL
228       || ! bfd_set_section_alignment (abfd, s, 1))
229     return FALSE;
230
231   s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r",
232                                           flags | SEC_READONLY);
233   if (s == NULL
234       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
235     return FALSE;
236
237   s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
238                                           flags | SEC_READONLY);
239   if (s == NULL
240       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
241     return FALSE;
242
243   s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
244                                           flags | SEC_READONLY);
245   if (s == NULL)
246     return FALSE;
247
248   s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
249   if (s == NULL
250       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
251     return FALSE;
252
253   /* The special symbol _DYNAMIC is always set to the start of the
254      .dynamic section.  We could set _DYNAMIC in a linker script, but we
255      only want to define it if we are, in fact, creating a .dynamic
256      section.  We don't want to define it if there is no .dynamic
257      section, since on some ELF platforms the start up code examines it
258      to decide how to initialize the process.  */
259   h = _bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC");
260   elf_hash_table (info)->hdynamic = h;
261   if (h == NULL)
262     return FALSE;
263
264   if (info->emit_hash)
265     {
266       s = bfd_make_section_anyway_with_flags (abfd, ".hash",
267                                               flags | SEC_READONLY);
268       if (s == NULL
269           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
270         return FALSE;
271       elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
272     }
273
274   if (info->emit_gnu_hash)
275     {
276       s = bfd_make_section_anyway_with_flags (abfd, ".gnu.hash",
277                                               flags | SEC_READONLY);
278       if (s == NULL
279           || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
280         return FALSE;
281       /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
282          4 32-bit words followed by variable count of 64-bit words, then
283          variable count of 32-bit words.  */
284       if (bed->s->arch_size == 64)
285         elf_section_data (s)->this_hdr.sh_entsize = 0;
286       else
287         elf_section_data (s)->this_hdr.sh_entsize = 4;
288     }
289
290   /* Let the backend create the rest of the sections.  This lets the
291      backend set the right flags.  The backend will normally create
292      the .got and .plt sections.  */
293   if (bed->elf_backend_create_dynamic_sections == NULL
294       || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
295     return FALSE;
296
297   elf_hash_table (info)->dynamic_sections_created = TRUE;
298
299   return TRUE;
300 }
301
302 /* Create dynamic sections when linking against a dynamic object.  */
303
304 bfd_boolean
305 _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
306 {
307   flagword flags, pltflags;
308   struct elf_link_hash_entry *h;
309   asection *s;
310   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
311   struct elf_link_hash_table *htab = elf_hash_table (info);
312
313   /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
314      .rel[a].bss sections.  */
315   flags = bed->dynamic_sec_flags;
316
317   pltflags = flags;
318   if (bed->plt_not_loaded)
319     /* We do not clear SEC_ALLOC here because we still want the OS to
320        allocate space for the section; it's just that there's nothing
321        to read in from the object file.  */
322     pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
323   else
324     pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
325   if (bed->plt_readonly)
326     pltflags |= SEC_READONLY;
327
328   s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
329   if (s == NULL
330       || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
331     return FALSE;
332   htab->splt = s;
333
334   /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
335      .plt section.  */
336   if (bed->want_plt_sym)
337     {
338       h = _bfd_elf_define_linkage_sym (abfd, info, s,
339                                        "_PROCEDURE_LINKAGE_TABLE_");
340       elf_hash_table (info)->hplt = h;
341       if (h == NULL)
342         return FALSE;
343     }
344
345   s = bfd_make_section_anyway_with_flags (abfd,
346                                           (bed->rela_plts_and_copies_p
347                                            ? ".rela.plt" : ".rel.plt"),
348                                           flags | SEC_READONLY);
349   if (s == NULL
350       || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
351     return FALSE;
352   htab->srelplt = s;
353
354   if (! _bfd_elf_create_got_section (abfd, info))
355     return FALSE;
356
357   if (bed->want_dynbss)
358     {
359       /* The .dynbss section is a place to put symbols which are defined
360          by dynamic objects, are referenced by regular objects, and are
361          not functions.  We must allocate space for them in the process
362          image and use a R_*_COPY reloc to tell the dynamic linker to
363          initialize them at run time.  The linker script puts the .dynbss
364          section into the .bss section of the final image.  */
365       s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
366                                               (SEC_ALLOC | SEC_LINKER_CREATED));
367       if (s == NULL)
368         return FALSE;
369
370       /* The .rel[a].bss section holds copy relocs.  This section is not
371          normally needed.  We need to create it here, though, so that the
372          linker will map it to an output section.  We can't just create it
373          only if we need it, because we will not know whether we need it
374          until we have seen all the input files, and the first time the
375          main linker code calls BFD after examining all the input files
376          (size_dynamic_sections) the input sections have already been
377          mapped to the output sections.  If the section turns out not to
378          be needed, we can discard it later.  We will never need this
379          section when generating a shared object, since they do not use
380          copy relocs.  */
381       if (! info->shared)
382         {
383           s = bfd_make_section_anyway_with_flags (abfd,
384                                                   (bed->rela_plts_and_copies_p
385                                                    ? ".rela.bss" : ".rel.bss"),
386                                                   flags | SEC_READONLY);
387           if (s == NULL
388               || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
389             return FALSE;
390         }
391     }
392
393   return TRUE;
394 }
395 \f
396 /* Record a new dynamic symbol.  We record the dynamic symbols as we
397    read the input files, since we need to have a list of all of them
398    before we can determine the final sizes of the output sections.
399    Note that we may actually call this function even though we are not
400    going to output any dynamic symbols; in some cases we know that a
401    symbol should be in the dynamic symbol table, but only if there is
402    one.  */
403
404 bfd_boolean
405 bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
406                                     struct elf_link_hash_entry *h)
407 {
408   if (h->dynindx == -1)
409     {
410       struct elf_strtab_hash *dynstr;
411       char *p;
412       const char *name;
413       bfd_size_type indx;
414
415       /* XXX: The ABI draft says the linker must turn hidden and
416          internal symbols into STB_LOCAL symbols when producing the
417          DSO. However, if ld.so honors st_other in the dynamic table,
418          this would not be necessary.  */
419       switch (ELF_ST_VISIBILITY (h->other))
420         {
421         case STV_INTERNAL:
422         case STV_HIDDEN:
423           if (h->root.type != bfd_link_hash_undefined
424               && h->root.type != bfd_link_hash_undefweak)
425             {
426               h->forced_local = 1;
427               if (!elf_hash_table (info)->is_relocatable_executable)
428                 return TRUE;
429             }
430
431         default:
432           break;
433         }
434
435       h->dynindx = elf_hash_table (info)->dynsymcount;
436       ++elf_hash_table (info)->dynsymcount;
437
438       dynstr = elf_hash_table (info)->dynstr;
439       if (dynstr == NULL)
440         {
441           /* Create a strtab to hold the dynamic symbol names.  */
442           elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
443           if (dynstr == NULL)
444             return FALSE;
445         }
446
447       /* We don't put any version information in the dynamic string
448          table.  */
449       name = h->root.root.string;
450       p = strchr (name, ELF_VER_CHR);
451       if (p != NULL)
452         /* We know that the p points into writable memory.  In fact,
453            there are only a few symbols that have read-only names, being
454            those like _GLOBAL_OFFSET_TABLE_ that are created specially
455            by the backends.  Most symbols will have names pointing into
456            an ELF string table read from a file, or to objalloc memory.  */
457         *p = 0;
458
459       indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
460
461       if (p != NULL)
462         *p = ELF_VER_CHR;
463
464       if (indx == (bfd_size_type) -1)
465         return FALSE;
466       h->dynstr_index = indx;
467     }
468
469   return TRUE;
470 }
471 \f
472 /* Mark a symbol dynamic.  */
473
474 static void
475 bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
476                                   struct elf_link_hash_entry *h,
477                                   Elf_Internal_Sym *sym)
478 {
479   struct bfd_elf_dynamic_list *d = info->dynamic_list;
480
481   /* It may be called more than once on the same H.  */
482   if(h->dynamic || info->relocatable)
483     return;
484
485   if ((info->dynamic_data
486        && (h->type == STT_OBJECT
487            || (sym != NULL
488                && ELF_ST_TYPE (sym->st_info) == STT_OBJECT)))
489       || (d != NULL
490           && h->root.type == bfd_link_hash_new
491           && (*d->match) (&d->head, NULL, h->root.root.string)))
492     h->dynamic = 1;
493 }
494
495 /* Record an assignment to a symbol made by a linker script.  We need
496    this in case some dynamic object refers to this symbol.  */
497
498 bfd_boolean
499 bfd_elf_record_link_assignment (bfd *output_bfd,
500                                 struct bfd_link_info *info,
501                                 const char *name,
502                                 bfd_boolean provide,
503                                 bfd_boolean hidden)
504 {
505   struct elf_link_hash_entry *h, *hv;
506   struct elf_link_hash_table *htab;
507   const struct elf_backend_data *bed;
508
509   if (!is_elf_hash_table (info->hash))
510     return TRUE;
511
512   htab = elf_hash_table (info);
513   h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
514   if (h == NULL)
515     return provide;
516
517   switch (h->root.type)
518     {
519     case bfd_link_hash_defined:
520     case bfd_link_hash_defweak:
521     case bfd_link_hash_common:
522       break;
523     case bfd_link_hash_undefweak:
524     case bfd_link_hash_undefined:
525       /* Since we're defining the symbol, don't let it seem to have not
526          been defined.  record_dynamic_symbol and size_dynamic_sections
527          may depend on this.  */
528       h->root.type = bfd_link_hash_new;
529       if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
530         bfd_link_repair_undef_list (&htab->root);
531       break;
532     case bfd_link_hash_new:
533       bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
534       h->non_elf = 0;
535       break;
536     case bfd_link_hash_indirect:
537       /* We had a versioned symbol in a dynamic library.  We make the
538          the versioned symbol point to this one.  */
539       bed = get_elf_backend_data (output_bfd);
540       hv = h;
541       while (hv->root.type == bfd_link_hash_indirect
542              || hv->root.type == bfd_link_hash_warning)
543         hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
544       /* We don't need to update h->root.u since linker will set them
545          later.  */
546       h->root.type = bfd_link_hash_undefined;
547       hv->root.type = bfd_link_hash_indirect;
548       hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
549       (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
550       break;
551     case bfd_link_hash_warning:
552       abort ();
553       break;
554     }
555
556   /* If this symbol is being provided by the linker script, and it is
557      currently defined by a dynamic object, but not by a regular
558      object, then mark it as undefined so that the generic linker will
559      force the correct value.  */
560   if (provide
561       && h->def_dynamic
562       && !h->def_regular)
563     h->root.type = bfd_link_hash_undefined;
564
565   /* If this symbol is not being provided by the linker script, and it is
566      currently defined by a dynamic object, but not by a regular object,
567      then clear out any version information because the symbol will not be
568      associated with the dynamic object any more.  */
569   if (!provide
570       && h->def_dynamic
571       && !h->def_regular)
572     h->verinfo.verdef = NULL;
573
574   h->def_regular = 1;
575
576   if (hidden)
577     {
578       bed = get_elf_backend_data (output_bfd);
579       if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
580         h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
581       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
582     }
583
584   /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
585      and executables.  */
586   if (!info->relocatable
587       && h->dynindx != -1
588       && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
589           || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
590     h->forced_local = 1;
591
592   if ((h->def_dynamic
593        || h->ref_dynamic
594        || info->shared
595        || (info->executable && elf_hash_table (info)->is_relocatable_executable))
596       && h->dynindx == -1)
597     {
598       if (! bfd_elf_link_record_dynamic_symbol (info, h))
599         return FALSE;
600
601       /* If this is a weak defined symbol, and we know a corresponding
602          real symbol from the same dynamic object, make sure the real
603          symbol is also made into a dynamic symbol.  */
604       if (h->u.weakdef != NULL
605           && h->u.weakdef->dynindx == -1)
606         {
607           if (! bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
608             return FALSE;
609         }
610     }
611
612   return TRUE;
613 }
614
615 /* Record a new local dynamic symbol.  Returns 0 on failure, 1 on
616    success, and 2 on a failure caused by attempting to record a symbol
617    in a discarded section, eg. a discarded link-once section symbol.  */
618
619 int
620 bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
621                                           bfd *input_bfd,
622                                           long input_indx)
623 {
624   bfd_size_type amt;
625   struct elf_link_local_dynamic_entry *entry;
626   struct elf_link_hash_table *eht;
627   struct elf_strtab_hash *dynstr;
628   unsigned long dynstr_index;
629   char *name;
630   Elf_External_Sym_Shndx eshndx;
631   char esym[sizeof (Elf64_External_Sym)];
632
633   if (! is_elf_hash_table (info->hash))
634     return 0;
635
636   /* See if the entry exists already.  */
637   for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
638     if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
639       return 1;
640
641   amt = sizeof (*entry);
642   entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
643   if (entry == NULL)
644     return 0;
645
646   /* Go find the symbol, so that we can find it's name.  */
647   if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
648                              1, input_indx, &entry->isym, esym, &eshndx))
649     {
650       bfd_release (input_bfd, entry);
651       return 0;
652     }
653
654   if (entry->isym.st_shndx != SHN_UNDEF
655       && entry->isym.st_shndx < SHN_LORESERVE)
656     {
657       asection *s;
658
659       s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
660       if (s == NULL || bfd_is_abs_section (s->output_section))
661         {
662           /* We can still bfd_release here as nothing has done another
663              bfd_alloc.  We can't do this later in this function.  */
664           bfd_release (input_bfd, entry);
665           return 2;
666         }
667     }
668
669   name = (bfd_elf_string_from_elf_section
670           (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
671            entry->isym.st_name));
672
673   dynstr = elf_hash_table (info)->dynstr;
674   if (dynstr == NULL)
675     {
676       /* Create a strtab to hold the dynamic symbol names.  */
677       elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
678       if (dynstr == NULL)
679         return 0;
680     }
681
682   dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
683   if (dynstr_index == (unsigned long) -1)
684     return 0;
685   entry->isym.st_name = dynstr_index;
686
687   eht = elf_hash_table (info);
688
689   entry->next = eht->dynlocal;
690   eht->dynlocal = entry;
691   entry->input_bfd = input_bfd;
692   entry->input_indx = input_indx;
693   eht->dynsymcount++;
694
695   /* Whatever binding the symbol had before, it's now local.  */
696   entry->isym.st_info
697     = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
698
699   /* The dynindx will be set at the end of size_dynamic_sections.  */
700
701   return 1;
702 }
703
704 /* Return the dynindex of a local dynamic symbol.  */
705
706 long
707 _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
708                                     bfd *input_bfd,
709                                     long input_indx)
710 {
711   struct elf_link_local_dynamic_entry *e;
712
713   for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
714     if (e->input_bfd == input_bfd && e->input_indx == input_indx)
715       return e->dynindx;
716   return -1;
717 }
718
719 /* This function is used to renumber the dynamic symbols, if some of
720    them are removed because they are marked as local.  This is called
721    via elf_link_hash_traverse.  */
722
723 static bfd_boolean
724 elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
725                                       void *data)
726 {
727   size_t *count = (size_t *) data;
728
729   if (h->forced_local)
730     return TRUE;
731
732   if (h->dynindx != -1)
733     h->dynindx = ++(*count);
734
735   return TRUE;
736 }
737
738
739 /* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
740    STB_LOCAL binding.  */
741
742 static bfd_boolean
743 elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
744                                             void *data)
745 {
746   size_t *count = (size_t *) data;
747
748   if (!h->forced_local)
749     return TRUE;
750
751   if (h->dynindx != -1)
752     h->dynindx = ++(*count);
753
754   return TRUE;
755 }
756
757 /* Return true if the dynamic symbol for a given section should be
758    omitted when creating a shared library.  */
759 bfd_boolean
760 _bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
761                                    struct bfd_link_info *info,
762                                    asection *p)
763 {
764   struct elf_link_hash_table *htab;
765   asection *ip;
766
767   switch (elf_section_data (p)->this_hdr.sh_type)
768     {
769     case SHT_PROGBITS:
770     case SHT_NOBITS:
771       /* If sh_type is yet undecided, assume it could be
772          SHT_PROGBITS/SHT_NOBITS.  */
773     case SHT_NULL:
774       htab = elf_hash_table (info);
775       if (p == htab->tls_sec)
776         return FALSE;
777
778       if (htab->text_index_section != NULL)
779         return p != htab->text_index_section && p != htab->data_index_section;
780
781       return (htab->dynobj != NULL
782               && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL
783               && ip->output_section == p);
784
785       /* There shouldn't be section relative relocations
786          against any other section.  */
787     default:
788       return TRUE;
789     }
790 }
791
792 /* Assign dynsym indices.  In a shared library we generate a section
793    symbol for each output section, which come first.  Next come symbols
794    which have been forced to local binding.  Then all of the back-end
795    allocated local dynamic syms, followed by the rest of the global
796    symbols.  */
797
798 static unsigned long
799 _bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
800                                 struct bfd_link_info *info,
801                                 unsigned long *section_sym_count)
802 {
803   unsigned long dynsymcount = 0;
804
805   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
806     {
807       const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
808       asection *p;
809       for (p = output_bfd->sections; p ; p = p->next)
810         if ((p->flags & SEC_EXCLUDE) == 0
811             && (p->flags & SEC_ALLOC) != 0
812             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
813           elf_section_data (p)->dynindx = ++dynsymcount;
814         else
815           elf_section_data (p)->dynindx = 0;
816     }
817   *section_sym_count = dynsymcount;
818
819   elf_link_hash_traverse (elf_hash_table (info),
820                           elf_link_renumber_local_hash_table_dynsyms,
821                           &dynsymcount);
822
823   if (elf_hash_table (info)->dynlocal)
824     {
825       struct elf_link_local_dynamic_entry *p;
826       for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
827         p->dynindx = ++dynsymcount;
828     }
829
830   elf_link_hash_traverse (elf_hash_table (info),
831                           elf_link_renumber_hash_table_dynsyms,
832                           &dynsymcount);
833
834   /* There is an unused NULL entry at the head of the table which
835      we must account for in our count.  Unless there weren't any
836      symbols, which means we'll have no table at all.  */
837   if (dynsymcount != 0)
838     ++dynsymcount;
839
840   elf_hash_table (info)->dynsymcount = dynsymcount;
841   return dynsymcount;
842 }
843
844 /* Merge st_other field.  */
845
846 static void
847 elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
848                     const Elf_Internal_Sym *isym,
849                     bfd_boolean definition, bfd_boolean dynamic)
850 {
851   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
852
853   /* If st_other has a processor-specific meaning, specific
854      code might be needed here.  */
855   if (bed->elf_backend_merge_symbol_attribute)
856     (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
857                                                 dynamic);
858
859   if (!dynamic)
860     {
861       unsigned symvis = ELF_ST_VISIBILITY (isym->st_other);
862       unsigned hvis = ELF_ST_VISIBILITY (h->other);
863
864       /* Keep the most constraining visibility.  Leave the remainder
865          of the st_other field to elf_backend_merge_symbol_attribute.  */
866       if (symvis - 1 < hvis - 1)
867         h->other = symvis | (h->other & ~ELF_ST_VISIBILITY (-1));
868     }
869   else if (definition && ELF_ST_VISIBILITY (isym->st_other) != STV_DEFAULT)
870     h->protected_def = 1;
871 }
872
873 /* This function is called when we want to merge a new symbol with an
874    existing symbol.  It handles the various cases which arise when we
875    find a definition in a dynamic object, or when there is already a
876    definition in a dynamic object.  The new symbol is described by
877    NAME, SYM, PSEC, and PVALUE.  We set SYM_HASH to the hash table
878    entry.  We set POLDBFD to the old symbol's BFD.  We set POLD_WEAK
879    if the old symbol was weak.  We set POLD_ALIGNMENT to the alignment
880    of an old common symbol.  We set OVERRIDE if the old symbol is
881    overriding a new definition.  We set TYPE_CHANGE_OK if it is OK for
882    the type to change.  We set SIZE_CHANGE_OK if it is OK for the size
883    to change.  By OK to change, we mean that we shouldn't warn if the
884    type or size does change.  */
885
886 static bfd_boolean
887 _bfd_elf_merge_symbol (bfd *abfd,
888                        struct bfd_link_info *info,
889                        const char *name,
890                        Elf_Internal_Sym *sym,
891                        asection **psec,
892                        bfd_vma *pvalue,
893                        struct elf_link_hash_entry **sym_hash,
894                        bfd **poldbfd,
895                        bfd_boolean *pold_weak,
896                        unsigned int *pold_alignment,
897                        bfd_boolean *skip,
898                        bfd_boolean *override,
899                        bfd_boolean *type_change_ok,
900                        bfd_boolean *size_change_ok)
901 {
902   asection *sec, *oldsec;
903   struct elf_link_hash_entry *h;
904   struct elf_link_hash_entry *hi;
905   struct elf_link_hash_entry *flip;
906   int bind;
907   bfd *oldbfd;
908   bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
909   bfd_boolean newweak, oldweak, newfunc, oldfunc;
910   const struct elf_backend_data *bed;
911
912   *skip = FALSE;
913   *override = FALSE;
914
915   sec = *psec;
916   bind = ELF_ST_BIND (sym->st_info);
917
918   if (! bfd_is_und_section (sec))
919     h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
920   else
921     h = ((struct elf_link_hash_entry *)
922          bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
923   if (h == NULL)
924     return FALSE;
925   *sym_hash = h;
926
927   bed = get_elf_backend_data (abfd);
928
929   /* For merging, we only care about real symbols.  But we need to make
930      sure that indirect symbol dynamic flags are updated.  */
931   hi = h;
932   while (h->root.type == bfd_link_hash_indirect
933          || h->root.type == bfd_link_hash_warning)
934     h = (struct elf_link_hash_entry *) h->root.u.i.link;
935
936   /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
937      existing symbol.  */
938
939   oldbfd = NULL;
940   oldsec = NULL;
941   switch (h->root.type)
942     {
943     default:
944       break;
945
946     case bfd_link_hash_undefined:
947     case bfd_link_hash_undefweak:
948       oldbfd = h->root.u.undef.abfd;
949       break;
950
951     case bfd_link_hash_defined:
952     case bfd_link_hash_defweak:
953       oldbfd = h->root.u.def.section->owner;
954       oldsec = h->root.u.def.section;
955       break;
956
957     case bfd_link_hash_common:
958       oldbfd = h->root.u.c.p->section->owner;
959       oldsec = h->root.u.c.p->section;
960       if (pold_alignment)
961         *pold_alignment = h->root.u.c.p->alignment_power;
962       break;
963     }
964   if (poldbfd && *poldbfd == NULL)
965     *poldbfd = oldbfd;
966
967   /* Differentiate strong and weak symbols.  */
968   newweak = bind == STB_WEAK;
969   oldweak = (h->root.type == bfd_link_hash_defweak
970              || h->root.type == bfd_link_hash_undefweak);
971   if (pold_weak)
972     *pold_weak = oldweak;
973
974   /* This code is for coping with dynamic objects, and is only useful
975      if we are doing an ELF link.  */
976   if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
977     return TRUE;
978
979   /* We have to check it for every instance since the first few may be
980      references and not all compilers emit symbol type for undefined
981      symbols.  */
982   bfd_elf_link_mark_dynamic_symbol (info, h, sym);
983
984   /* NEWDYN and OLDDYN indicate whether the new or old symbol,
985      respectively, is from a dynamic object.  */
986
987   newdyn = (abfd->flags & DYNAMIC) != 0;
988
989   /* ref_dynamic_nonweak and dynamic_def flags track actual undefined
990      syms and defined syms in dynamic libraries respectively.
991      ref_dynamic on the other hand can be set for a symbol defined in
992      a dynamic library, and def_dynamic may not be set;  When the
993      definition in a dynamic lib is overridden by a definition in the
994      executable use of the symbol in the dynamic lib becomes a
995      reference to the executable symbol.  */
996   if (newdyn)
997     {
998       if (bfd_is_und_section (sec))
999         {
1000           if (bind != STB_WEAK)
1001             {
1002               h->ref_dynamic_nonweak = 1;
1003               hi->ref_dynamic_nonweak = 1;
1004             }
1005         }
1006       else
1007         {
1008           h->dynamic_def = 1;
1009           hi->dynamic_def = 1;
1010         }
1011     }
1012
1013   /* If we just created the symbol, mark it as being an ELF symbol.
1014      Other than that, there is nothing to do--there is no merge issue
1015      with a newly defined symbol--so we just return.  */
1016
1017   if (h->root.type == bfd_link_hash_new)
1018     {
1019       h->non_elf = 0;
1020       return TRUE;
1021     }
1022
1023   /* In cases involving weak versioned symbols, we may wind up trying
1024      to merge a symbol with itself.  Catch that here, to avoid the
1025      confusion that results if we try to override a symbol with
1026      itself.  The additional tests catch cases like
1027      _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1028      dynamic object, which we do want to handle here.  */
1029   if (abfd == oldbfd
1030       && (newweak || oldweak)
1031       && ((abfd->flags & DYNAMIC) == 0
1032           || !h->def_regular))
1033     return TRUE;
1034
1035   olddyn = FALSE;
1036   if (oldbfd != NULL)
1037     olddyn = (oldbfd->flags & DYNAMIC) != 0;
1038   else if (oldsec != NULL)
1039     {
1040       /* This handles the special SHN_MIPS_{TEXT,DATA} section
1041          indices used by MIPS ELF.  */
1042       olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
1043     }
1044
1045   /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1046      respectively, appear to be a definition rather than reference.  */
1047
1048   newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
1049
1050   olddef = (h->root.type != bfd_link_hash_undefined
1051             && h->root.type != bfd_link_hash_undefweak
1052             && h->root.type != bfd_link_hash_common);
1053
1054   /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1055      respectively, appear to be a function.  */
1056
1057   newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1058              && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1059
1060   oldfunc = (h->type != STT_NOTYPE
1061              && bed->is_function_type (h->type));
1062
1063   /* When we try to create a default indirect symbol from the dynamic
1064      definition with the default version, we skip it if its type and
1065      the type of existing regular definition mismatch.  */
1066   if (pold_alignment == NULL
1067       && newdyn
1068       && newdef
1069       && !olddyn
1070       && (((olddef || h->root.type == bfd_link_hash_common)
1071            && ELF_ST_TYPE (sym->st_info) != h->type
1072            && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1073            && h->type != STT_NOTYPE
1074            && !(newfunc && oldfunc))
1075           || (olddef
1076               && ((h->type == STT_GNU_IFUNC)
1077                   != (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)))))
1078     {
1079       *skip = TRUE;
1080       return TRUE;
1081     }
1082
1083   /* Check TLS symbols.  We don't check undefined symbols introduced
1084      by "ld -u" which have no type (and oldbfd NULL), and we don't
1085      check symbols from plugins because they also have no type.  */
1086   if (oldbfd != NULL
1087       && (oldbfd->flags & BFD_PLUGIN) == 0
1088       && (abfd->flags & BFD_PLUGIN) == 0
1089       && ELF_ST_TYPE (sym->st_info) != h->type
1090       && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
1091     {
1092       bfd *ntbfd, *tbfd;
1093       bfd_boolean ntdef, tdef;
1094       asection *ntsec, *tsec;
1095
1096       if (h->type == STT_TLS)
1097         {
1098           ntbfd = abfd;
1099           ntsec = sec;
1100           ntdef = newdef;
1101           tbfd = oldbfd;
1102           tsec = oldsec;
1103           tdef = olddef;
1104         }
1105       else
1106         {
1107           ntbfd = oldbfd;
1108           ntsec = oldsec;
1109           ntdef = olddef;
1110           tbfd = abfd;
1111           tsec = sec;
1112           tdef = newdef;
1113         }
1114
1115       if (tdef && ntdef)
1116         (*_bfd_error_handler)
1117           (_("%s: TLS definition in %B section %A "
1118              "mismatches non-TLS definition in %B section %A"),
1119            tbfd, tsec, ntbfd, ntsec, h->root.root.string);
1120       else if (!tdef && !ntdef)
1121         (*_bfd_error_handler)
1122           (_("%s: TLS reference in %B "
1123              "mismatches non-TLS reference in %B"),
1124            tbfd, ntbfd, h->root.root.string);
1125       else if (tdef)
1126         (*_bfd_error_handler)
1127           (_("%s: TLS definition in %B section %A "
1128              "mismatches non-TLS reference in %B"),
1129            tbfd, tsec, ntbfd, h->root.root.string);
1130       else
1131         (*_bfd_error_handler)
1132           (_("%s: TLS reference in %B "
1133              "mismatches non-TLS definition in %B section %A"),
1134            tbfd, ntbfd, ntsec, h->root.root.string);
1135
1136       bfd_set_error (bfd_error_bad_value);
1137       return FALSE;
1138     }
1139
1140   /* If the old symbol has non-default visibility, we ignore the new
1141      definition from a dynamic object.  */
1142   if (newdyn
1143       && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1144       && !bfd_is_und_section (sec))
1145     {
1146       *skip = TRUE;
1147       /* Make sure this symbol is dynamic.  */
1148       h->ref_dynamic = 1;
1149       hi->ref_dynamic = 1;
1150       /* A protected symbol has external availability. Make sure it is
1151          recorded as dynamic.
1152
1153          FIXME: Should we check type and size for protected symbol?  */
1154       if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
1155         return bfd_elf_link_record_dynamic_symbol (info, h);
1156       else
1157         return TRUE;
1158     }
1159   else if (!newdyn
1160            && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
1161            && h->def_dynamic)
1162     {
1163       /* If the new symbol with non-default visibility comes from a
1164          relocatable file and the old definition comes from a dynamic
1165          object, we remove the old definition.  */
1166       if (hi->root.type == bfd_link_hash_indirect)
1167         {
1168           /* Handle the case where the old dynamic definition is
1169              default versioned.  We need to copy the symbol info from
1170              the symbol with default version to the normal one if it
1171              was referenced before.  */
1172           if (h->ref_regular)
1173             {
1174               hi->root.type = h->root.type;
1175               h->root.type = bfd_link_hash_indirect;
1176               (*bed->elf_backend_copy_indirect_symbol) (info, hi, h);
1177
1178               h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1179               if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1180                 {
1181                   /* If the new symbol is hidden or internal, completely undo
1182                      any dynamic link state.  */
1183                   (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1184                   h->forced_local = 0;
1185                   h->ref_dynamic = 0;
1186                 }
1187               else
1188                 h->ref_dynamic = 1;
1189
1190               h->def_dynamic = 0;
1191               /* FIXME: Should we check type and size for protected symbol?  */
1192               h->size = 0;
1193               h->type = 0;
1194
1195               h = hi;
1196             }
1197           else
1198             h = hi;
1199         }
1200
1201       /* If the old symbol was undefined before, then it will still be
1202          on the undefs list.  If the new symbol is undefined or
1203          common, we can't make it bfd_link_hash_new here, because new
1204          undefined or common symbols will be added to the undefs list
1205          by _bfd_generic_link_add_one_symbol.  Symbols may not be
1206          added twice to the undefs list.  Also, if the new symbol is
1207          undefweak then we don't want to lose the strong undef.  */
1208       if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1209         {
1210           h->root.type = bfd_link_hash_undefined;
1211           h->root.u.undef.abfd = abfd;
1212         }
1213       else
1214         {
1215           h->root.type = bfd_link_hash_new;
1216           h->root.u.undef.abfd = NULL;
1217         }
1218
1219       if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
1220         {
1221           /* If the new symbol is hidden or internal, completely undo
1222              any dynamic link state.  */
1223           (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1224           h->forced_local = 0;
1225           h->ref_dynamic = 0;
1226         }
1227       else
1228         h->ref_dynamic = 1;
1229       h->def_dynamic = 0;
1230       /* FIXME: Should we check type and size for protected symbol?  */
1231       h->size = 0;
1232       h->type = 0;
1233       return TRUE;
1234     }
1235
1236   /* If a new weak symbol definition comes from a regular file and the
1237      old symbol comes from a dynamic library, we treat the new one as
1238      strong.  Similarly, an old weak symbol definition from a regular
1239      file is treated as strong when the new symbol comes from a dynamic
1240      library.  Further, an old weak symbol from a dynamic library is
1241      treated as strong if the new symbol is from a dynamic library.
1242      This reflects the way glibc's ld.so works.
1243
1244      Do this before setting *type_change_ok or *size_change_ok so that
1245      we warn properly when dynamic library symbols are overridden.  */
1246
1247   if (newdef && !newdyn && olddyn)
1248     newweak = FALSE;
1249   if (olddef && newdyn)
1250     oldweak = FALSE;
1251
1252   /* Allow changes between different types of function symbol.  */
1253   if (newfunc && oldfunc)
1254     *type_change_ok = TRUE;
1255
1256   /* It's OK to change the type if either the existing symbol or the
1257      new symbol is weak.  A type change is also OK if the old symbol
1258      is undefined and the new symbol is defined.  */
1259
1260   if (oldweak
1261       || newweak
1262       || (newdef
1263           && h->root.type == bfd_link_hash_undefined))
1264     *type_change_ok = TRUE;
1265
1266   /* It's OK to change the size if either the existing symbol or the
1267      new symbol is weak, or if the old symbol is undefined.  */
1268
1269   if (*type_change_ok
1270       || h->root.type == bfd_link_hash_undefined)
1271     *size_change_ok = TRUE;
1272
1273   /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1274      symbol, respectively, appears to be a common symbol in a dynamic
1275      object.  If a symbol appears in an uninitialized section, and is
1276      not weak, and is not a function, then it may be a common symbol
1277      which was resolved when the dynamic object was created.  We want
1278      to treat such symbols specially, because they raise special
1279      considerations when setting the symbol size: if the symbol
1280      appears as a common symbol in a regular object, and the size in
1281      the regular object is larger, we must make sure that we use the
1282      larger size.  This problematic case can always be avoided in C,
1283      but it must be handled correctly when using Fortran shared
1284      libraries.
1285
1286      Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1287      likewise for OLDDYNCOMMON and OLDDEF.
1288
1289      Note that this test is just a heuristic, and that it is quite
1290      possible to have an uninitialized symbol in a shared object which
1291      is really a definition, rather than a common symbol.  This could
1292      lead to some minor confusion when the symbol really is a common
1293      symbol in some regular object.  However, I think it will be
1294      harmless.  */
1295
1296   if (newdyn
1297       && newdef
1298       && !newweak
1299       && (sec->flags & SEC_ALLOC) != 0
1300       && (sec->flags & SEC_LOAD) == 0
1301       && sym->st_size > 0
1302       && !newfunc)
1303     newdyncommon = TRUE;
1304   else
1305     newdyncommon = FALSE;
1306
1307   if (olddyn
1308       && olddef
1309       && h->root.type == bfd_link_hash_defined
1310       && h->def_dynamic
1311       && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1312       && (h->root.u.def.section->flags & SEC_LOAD) == 0
1313       && h->size > 0
1314       && !oldfunc)
1315     olddyncommon = TRUE;
1316   else
1317     olddyncommon = FALSE;
1318
1319   /* We now know everything about the old and new symbols.  We ask the
1320      backend to check if we can merge them.  */
1321   if (bed->merge_symbol != NULL)
1322     {
1323       if (!bed->merge_symbol (h, sym, psec, newdef, olddef, oldbfd, oldsec))
1324         return FALSE;
1325       sec = *psec;
1326     }
1327
1328   /* If both the old and the new symbols look like common symbols in a
1329      dynamic object, set the size of the symbol to the larger of the
1330      two.  */
1331
1332   if (olddyncommon
1333       && newdyncommon
1334       && sym->st_size != h->size)
1335     {
1336       /* Since we think we have two common symbols, issue a multiple
1337          common warning if desired.  Note that we only warn if the
1338          size is different.  If the size is the same, we simply let
1339          the old symbol override the new one as normally happens with
1340          symbols defined in dynamic objects.  */
1341
1342       if (! ((*info->callbacks->multiple_common)
1343              (info, &h->root, abfd, bfd_link_hash_common, sym->st_size)))
1344         return FALSE;
1345
1346       if (sym->st_size > h->size)
1347         h->size = sym->st_size;
1348
1349       *size_change_ok = TRUE;
1350     }
1351
1352   /* If we are looking at a dynamic object, and we have found a
1353      definition, we need to see if the symbol was already defined by
1354      some other object.  If so, we want to use the existing
1355      definition, and we do not want to report a multiple symbol
1356      definition error; we do this by clobbering *PSEC to be
1357      bfd_und_section_ptr.
1358
1359      We treat a common symbol as a definition if the symbol in the
1360      shared library is a function, since common symbols always
1361      represent variables; this can cause confusion in principle, but
1362      any such confusion would seem to indicate an erroneous program or
1363      shared library.  We also permit a common symbol in a regular
1364      object to override a weak symbol in a shared object.  */
1365
1366   if (newdyn
1367       && newdef
1368       && (olddef
1369           || (h->root.type == bfd_link_hash_common
1370               && (newweak || newfunc))))
1371     {
1372       *override = TRUE;
1373       newdef = FALSE;
1374       newdyncommon = FALSE;
1375
1376       *psec = sec = bfd_und_section_ptr;
1377       *size_change_ok = TRUE;
1378
1379       /* If we get here when the old symbol is a common symbol, then
1380          we are explicitly letting it override a weak symbol or
1381          function in a dynamic object, and we don't want to warn about
1382          a type change.  If the old symbol is a defined symbol, a type
1383          change warning may still be appropriate.  */
1384
1385       if (h->root.type == bfd_link_hash_common)
1386         *type_change_ok = TRUE;
1387     }
1388
1389   /* Handle the special case of an old common symbol merging with a
1390      new symbol which looks like a common symbol in a shared object.
1391      We change *PSEC and *PVALUE to make the new symbol look like a
1392      common symbol, and let _bfd_generic_link_add_one_symbol do the
1393      right thing.  */
1394
1395   if (newdyncommon
1396       && h->root.type == bfd_link_hash_common)
1397     {
1398       *override = TRUE;
1399       newdef = FALSE;
1400       newdyncommon = FALSE;
1401       *pvalue = sym->st_size;
1402       *psec = sec = bed->common_section (oldsec);
1403       *size_change_ok = TRUE;
1404     }
1405
1406   /* Skip weak definitions of symbols that are already defined.  */
1407   if (newdef && olddef && newweak)
1408     {
1409       /* Don't skip new non-IR weak syms.  */
1410       if (!(oldbfd != NULL
1411             && (oldbfd->flags & BFD_PLUGIN) != 0
1412             && (abfd->flags & BFD_PLUGIN) == 0))
1413         {
1414           newdef = FALSE;
1415           *skip = TRUE;
1416         }
1417
1418       /* Merge st_other.  If the symbol already has a dynamic index,
1419          but visibility says it should not be visible, turn it into a
1420          local symbol.  */
1421       elf_merge_st_other (abfd, h, sym, newdef, newdyn);
1422       if (h->dynindx != -1)
1423         switch (ELF_ST_VISIBILITY (h->other))
1424           {
1425           case STV_INTERNAL:
1426           case STV_HIDDEN:
1427             (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1428             break;
1429           }
1430     }
1431
1432   /* If the old symbol is from a dynamic object, and the new symbol is
1433      a definition which is not from a dynamic object, then the new
1434      symbol overrides the old symbol.  Symbols from regular files
1435      always take precedence over symbols from dynamic objects, even if
1436      they are defined after the dynamic object in the link.
1437
1438      As above, we again permit a common symbol in a regular object to
1439      override a definition in a shared object if the shared object
1440      symbol is a function or is weak.  */
1441
1442   flip = NULL;
1443   if (!newdyn
1444       && (newdef
1445           || (bfd_is_com_section (sec)
1446               && (oldweak || oldfunc)))
1447       && olddyn
1448       && olddef
1449       && h->def_dynamic)
1450     {
1451       /* Change the hash table entry to undefined, and let
1452          _bfd_generic_link_add_one_symbol do the right thing with the
1453          new definition.  */
1454
1455       h->root.type = bfd_link_hash_undefined;
1456       h->root.u.undef.abfd = h->root.u.def.section->owner;
1457       *size_change_ok = TRUE;
1458
1459       olddef = FALSE;
1460       olddyncommon = FALSE;
1461
1462       /* We again permit a type change when a common symbol may be
1463          overriding a function.  */
1464
1465       if (bfd_is_com_section (sec))
1466         {
1467           if (oldfunc)
1468             {
1469               /* If a common symbol overrides a function, make sure
1470                  that it isn't defined dynamically nor has type
1471                  function.  */
1472               h->def_dynamic = 0;
1473               h->type = STT_NOTYPE;
1474             }
1475           *type_change_ok = TRUE;
1476         }
1477
1478       if (hi->root.type == bfd_link_hash_indirect)
1479         flip = hi;
1480       else
1481         /* This union may have been set to be non-NULL when this symbol
1482            was seen in a dynamic object.  We must force the union to be
1483            NULL, so that it is correct for a regular symbol.  */
1484         h->verinfo.vertree = NULL;
1485     }
1486
1487   /* Handle the special case of a new common symbol merging with an
1488      old symbol that looks like it might be a common symbol defined in
1489      a shared object.  Note that we have already handled the case in
1490      which a new common symbol should simply override the definition
1491      in the shared library.  */
1492
1493   if (! newdyn
1494       && bfd_is_com_section (sec)
1495       && olddyncommon)
1496     {
1497       /* It would be best if we could set the hash table entry to a
1498          common symbol, but we don't know what to use for the section
1499          or the alignment.  */
1500       if (! ((*info->callbacks->multiple_common)
1501              (info, &h->root, abfd, bfd_link_hash_common, sym->st_size)))
1502         return FALSE;
1503
1504       /* If the presumed common symbol in the dynamic object is
1505          larger, pretend that the new symbol has its size.  */
1506
1507       if (h->size > *pvalue)
1508         *pvalue = h->size;
1509
1510       /* We need to remember the alignment required by the symbol
1511          in the dynamic object.  */
1512       BFD_ASSERT (pold_alignment);
1513       *pold_alignment = h->root.u.def.section->alignment_power;
1514
1515       olddef = FALSE;
1516       olddyncommon = FALSE;
1517
1518       h->root.type = bfd_link_hash_undefined;
1519       h->root.u.undef.abfd = h->root.u.def.section->owner;
1520
1521       *size_change_ok = TRUE;
1522       *type_change_ok = TRUE;
1523
1524       if (hi->root.type == bfd_link_hash_indirect)
1525         flip = hi;
1526       else
1527         h->verinfo.vertree = NULL;
1528     }
1529
1530   if (flip != NULL)
1531     {
1532       /* Handle the case where we had a versioned symbol in a dynamic
1533          library and now find a definition in a normal object.  In this
1534          case, we make the versioned symbol point to the normal one.  */
1535       flip->root.type = h->root.type;
1536       flip->root.u.undef.abfd = h->root.u.undef.abfd;
1537       h->root.type = bfd_link_hash_indirect;
1538       h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
1539       (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
1540       if (h->def_dynamic)
1541         {
1542           h->def_dynamic = 0;
1543           flip->ref_dynamic = 1;
1544         }
1545     }
1546
1547   return TRUE;
1548 }
1549
1550 /* This function is called to create an indirect symbol from the
1551    default for the symbol with the default version if needed. The
1552    symbol is described by H, NAME, SYM, SEC, and VALUE.  We
1553    set DYNSYM if the new indirect symbol is dynamic.  */
1554
1555 static bfd_boolean
1556 _bfd_elf_add_default_symbol (bfd *abfd,
1557                              struct bfd_link_info *info,
1558                              struct elf_link_hash_entry *h,
1559                              const char *name,
1560                              Elf_Internal_Sym *sym,
1561                              asection *sec,
1562                              bfd_vma value,
1563                              bfd **poldbfd,
1564                              bfd_boolean *dynsym)
1565 {
1566   bfd_boolean type_change_ok;
1567   bfd_boolean size_change_ok;
1568   bfd_boolean skip;
1569   char *shortname;
1570   struct elf_link_hash_entry *hi;
1571   struct bfd_link_hash_entry *bh;
1572   const struct elf_backend_data *bed;
1573   bfd_boolean collect;
1574   bfd_boolean dynamic;
1575   bfd_boolean override;
1576   char *p;
1577   size_t len, shortlen;
1578   asection *tmp_sec;
1579
1580   /* If this symbol has a version, and it is the default version, we
1581      create an indirect symbol from the default name to the fully
1582      decorated name.  This will cause external references which do not
1583      specify a version to be bound to this version of the symbol.  */
1584   p = strchr (name, ELF_VER_CHR);
1585   if (p == NULL || p[1] != ELF_VER_CHR)
1586     return TRUE;
1587
1588   bed = get_elf_backend_data (abfd);
1589   collect = bed->collect;
1590   dynamic = (abfd->flags & DYNAMIC) != 0;
1591
1592   shortlen = p - name;
1593   shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
1594   if (shortname == NULL)
1595     return FALSE;
1596   memcpy (shortname, name, shortlen);
1597   shortname[shortlen] = '\0';
1598
1599   /* We are going to create a new symbol.  Merge it with any existing
1600      symbol with this name.  For the purposes of the merge, act as
1601      though we were defining the symbol we just defined, although we
1602      actually going to define an indirect symbol.  */
1603   type_change_ok = FALSE;
1604   size_change_ok = FALSE;
1605   tmp_sec = sec;
1606   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1607                               &hi, poldbfd, NULL, NULL, &skip, &override,
1608                               &type_change_ok, &size_change_ok))
1609     return FALSE;
1610
1611   if (skip)
1612     goto nondefault;
1613
1614   if (! override)
1615     {
1616       bh = &hi->root;
1617       if (! (_bfd_generic_link_add_one_symbol
1618              (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
1619               0, name, FALSE, collect, &bh)))
1620         return FALSE;
1621       hi = (struct elf_link_hash_entry *) bh;
1622     }
1623   else
1624     {
1625       /* In this case the symbol named SHORTNAME is overriding the
1626          indirect symbol we want to add.  We were planning on making
1627          SHORTNAME an indirect symbol referring to NAME.  SHORTNAME
1628          is the name without a version.  NAME is the fully versioned
1629          name, and it is the default version.
1630
1631          Overriding means that we already saw a definition for the
1632          symbol SHORTNAME in a regular object, and it is overriding
1633          the symbol defined in the dynamic object.
1634
1635          When this happens, we actually want to change NAME, the
1636          symbol we just added, to refer to SHORTNAME.  This will cause
1637          references to NAME in the shared object to become references
1638          to SHORTNAME in the regular object.  This is what we expect
1639          when we override a function in a shared object: that the
1640          references in the shared object will be mapped to the
1641          definition in the regular object.  */
1642
1643       while (hi->root.type == bfd_link_hash_indirect
1644              || hi->root.type == bfd_link_hash_warning)
1645         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1646
1647       h->root.type = bfd_link_hash_indirect;
1648       h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
1649       if (h->def_dynamic)
1650         {
1651           h->def_dynamic = 0;
1652           hi->ref_dynamic = 1;
1653           if (hi->ref_regular
1654               || hi->def_regular)
1655             {
1656               if (! bfd_elf_link_record_dynamic_symbol (info, hi))
1657                 return FALSE;
1658             }
1659         }
1660
1661       /* Now set HI to H, so that the following code will set the
1662          other fields correctly.  */
1663       hi = h;
1664     }
1665
1666   /* Check if HI is a warning symbol.  */
1667   if (hi->root.type == bfd_link_hash_warning)
1668     hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1669
1670   /* If there is a duplicate definition somewhere, then HI may not
1671      point to an indirect symbol.  We will have reported an error to
1672      the user in that case.  */
1673
1674   if (hi->root.type == bfd_link_hash_indirect)
1675     {
1676       struct elf_link_hash_entry *ht;
1677
1678       ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
1679       (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
1680
1681       /* A reference to the SHORTNAME symbol from a dynamic library
1682          will be satisfied by the versioned symbol at runtime.  In
1683          effect, we have a reference to the versioned symbol.  */
1684       ht->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
1685       hi->dynamic_def |= ht->dynamic_def;
1686
1687       /* See if the new flags lead us to realize that the symbol must
1688          be dynamic.  */
1689       if (! *dynsym)
1690         {
1691           if (! dynamic)
1692             {
1693               if (! info->executable
1694                   || hi->def_dynamic
1695                   || hi->ref_dynamic)
1696                 *dynsym = TRUE;
1697             }
1698           else
1699             {
1700               if (hi->ref_regular)
1701                 *dynsym = TRUE;
1702             }
1703         }
1704     }
1705
1706   /* We also need to define an indirection from the nondefault version
1707      of the symbol.  */
1708
1709 nondefault:
1710   len = strlen (name);
1711   shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
1712   if (shortname == NULL)
1713     return FALSE;
1714   memcpy (shortname, name, shortlen);
1715   memcpy (shortname + shortlen, p + 1, len - shortlen);
1716
1717   /* Once again, merge with any existing symbol.  */
1718   type_change_ok = FALSE;
1719   size_change_ok = FALSE;
1720   tmp_sec = sec;
1721   if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
1722                               &hi, poldbfd, NULL, NULL, &skip, &override,
1723                               &type_change_ok, &size_change_ok))
1724     return FALSE;
1725
1726   if (skip)
1727     return TRUE;
1728
1729   if (override)
1730     {
1731       /* Here SHORTNAME is a versioned name, so we don't expect to see
1732          the type of override we do in the case above unless it is
1733          overridden by a versioned definition.  */
1734       if (hi->root.type != bfd_link_hash_defined
1735           && hi->root.type != bfd_link_hash_defweak)
1736         (*_bfd_error_handler)
1737           (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
1738            abfd, shortname);
1739     }
1740   else
1741     {
1742       bh = &hi->root;
1743       if (! (_bfd_generic_link_add_one_symbol
1744              (info, abfd, shortname, BSF_INDIRECT,
1745               bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
1746         return FALSE;
1747       hi = (struct elf_link_hash_entry *) bh;
1748
1749       /* If there is a duplicate definition somewhere, then HI may not
1750          point to an indirect symbol.  We will have reported an error
1751          to the user in that case.  */
1752
1753       if (hi->root.type == bfd_link_hash_indirect)
1754         {
1755           (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
1756           h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
1757           hi->dynamic_def |= h->dynamic_def;
1758
1759           /* See if the new flags lead us to realize that the symbol
1760              must be dynamic.  */
1761           if (! *dynsym)
1762             {
1763               if (! dynamic)
1764                 {
1765                   if (! info->executable
1766                       || hi->ref_dynamic)
1767                     *dynsym = TRUE;
1768                 }
1769               else
1770                 {
1771                   if (hi->ref_regular)
1772                     *dynsym = TRUE;
1773                 }
1774             }
1775         }
1776     }
1777
1778   return TRUE;
1779 }
1780 \f
1781 /* This routine is used to export all defined symbols into the dynamic
1782    symbol table.  It is called via elf_link_hash_traverse.  */
1783
1784 static bfd_boolean
1785 _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
1786 {
1787   struct elf_info_failed *eif = (struct elf_info_failed *) data;
1788
1789   /* Ignore indirect symbols.  These are added by the versioning code.  */
1790   if (h->root.type == bfd_link_hash_indirect)
1791     return TRUE;
1792
1793   /* Ignore this if we won't export it.  */
1794   if (!eif->info->export_dynamic && !h->dynamic)
1795     return TRUE;
1796
1797   if (h->dynindx == -1
1798       && (h->def_regular || h->ref_regular)
1799       && ! bfd_hide_sym_by_version (eif->info->version_info,
1800                                     h->root.root.string))
1801     {
1802       if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
1803         {
1804           eif->failed = TRUE;
1805           return FALSE;
1806         }
1807     }
1808
1809   return TRUE;
1810 }
1811 \f
1812 /* Look through the symbols which are defined in other shared
1813    libraries and referenced here.  Update the list of version
1814    dependencies.  This will be put into the .gnu.version_r section.
1815    This function is called via elf_link_hash_traverse.  */
1816
1817 static bfd_boolean
1818 _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
1819                                          void *data)
1820 {
1821   struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
1822   Elf_Internal_Verneed *t;
1823   Elf_Internal_Vernaux *a;
1824   bfd_size_type amt;
1825
1826   /* We only care about symbols defined in shared objects with version
1827      information.  */
1828   if (!h->def_dynamic
1829       || h->def_regular
1830       || h->dynindx == -1
1831       || h->verinfo.verdef == NULL
1832       || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
1833           & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
1834     return TRUE;
1835
1836   /* See if we already know about this version.  */
1837   for (t = elf_tdata (rinfo->info->output_bfd)->verref;
1838        t != NULL;
1839        t = t->vn_nextref)
1840     {
1841       if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
1842         continue;
1843
1844       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1845         if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
1846           return TRUE;
1847
1848       break;
1849     }
1850
1851   /* This is a new version.  Add it to tree we are building.  */
1852
1853   if (t == NULL)
1854     {
1855       amt = sizeof *t;
1856       t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
1857       if (t == NULL)
1858         {
1859           rinfo->failed = TRUE;
1860           return FALSE;
1861         }
1862
1863       t->vn_bfd = h->verinfo.verdef->vd_bfd;
1864       t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
1865       elf_tdata (rinfo->info->output_bfd)->verref = t;
1866     }
1867
1868   amt = sizeof *a;
1869   a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
1870   if (a == NULL)
1871     {
1872       rinfo->failed = TRUE;
1873       return FALSE;
1874     }
1875
1876   /* Note that we are copying a string pointer here, and testing it
1877      above.  If bfd_elf_string_from_elf_section is ever changed to
1878      discard the string data when low in memory, this will have to be
1879      fixed.  */
1880   a->vna_nodename = h->verinfo.verdef->vd_nodename;
1881
1882   a->vna_flags = h->verinfo.verdef->vd_flags;
1883   a->vna_nextptr = t->vn_auxptr;
1884
1885   h->verinfo.verdef->vd_exp_refno = rinfo->vers;
1886   ++rinfo->vers;
1887
1888   a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
1889
1890   t->vn_auxptr = a;
1891
1892   return TRUE;
1893 }
1894
1895 /* Figure out appropriate versions for all the symbols.  We may not
1896    have the version number script until we have read all of the input
1897    files, so until that point we don't know which symbols should be
1898    local.  This function is called via elf_link_hash_traverse.  */
1899
1900 static bfd_boolean
1901 _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
1902 {
1903   struct elf_info_failed *sinfo;
1904   struct bfd_link_info *info;
1905   const struct elf_backend_data *bed;
1906   struct elf_info_failed eif;
1907   char *p;
1908   bfd_size_type amt;
1909
1910   sinfo = (struct elf_info_failed *) data;
1911   info = sinfo->info;
1912
1913   /* Fix the symbol flags.  */
1914   eif.failed = FALSE;
1915   eif.info = info;
1916   if (! _bfd_elf_fix_symbol_flags (h, &eif))
1917     {
1918       if (eif.failed)
1919         sinfo->failed = TRUE;
1920       return FALSE;
1921     }
1922
1923   /* We only need version numbers for symbols defined in regular
1924      objects.  */
1925   if (!h->def_regular)
1926     return TRUE;
1927
1928   bed = get_elf_backend_data (info->output_bfd);
1929   p = strchr (h->root.root.string, ELF_VER_CHR);
1930   if (p != NULL && h->verinfo.vertree == NULL)
1931     {
1932       struct bfd_elf_version_tree *t;
1933       bfd_boolean hidden;
1934
1935       hidden = TRUE;
1936
1937       /* There are two consecutive ELF_VER_CHR characters if this is
1938          not a hidden symbol.  */
1939       ++p;
1940       if (*p == ELF_VER_CHR)
1941         {
1942           hidden = FALSE;
1943           ++p;
1944         }
1945
1946       /* If there is no version string, we can just return out.  */
1947       if (*p == '\0')
1948         {
1949           if (hidden)
1950             h->hidden = 1;
1951           return TRUE;
1952         }
1953
1954       /* Look for the version.  If we find it, it is no longer weak.  */
1955       for (t = sinfo->info->version_info; t != NULL; t = t->next)
1956         {
1957           if (strcmp (t->name, p) == 0)
1958             {
1959               size_t len;
1960               char *alc;
1961               struct bfd_elf_version_expr *d;
1962
1963               len = p - h->root.root.string;
1964               alc = (char *) bfd_malloc (len);
1965               if (alc == NULL)
1966                 {
1967                   sinfo->failed = TRUE;
1968                   return FALSE;
1969                 }
1970               memcpy (alc, h->root.root.string, len - 1);
1971               alc[len - 1] = '\0';
1972               if (alc[len - 2] == ELF_VER_CHR)
1973                 alc[len - 2] = '\0';
1974
1975               h->verinfo.vertree = t;
1976               t->used = TRUE;
1977               d = NULL;
1978
1979               if (t->globals.list != NULL)
1980                 d = (*t->match) (&t->globals, NULL, alc);
1981
1982               /* See if there is anything to force this symbol to
1983                  local scope.  */
1984               if (d == NULL && t->locals.list != NULL)
1985                 {
1986                   d = (*t->match) (&t->locals, NULL, alc);
1987                   if (d != NULL
1988                       && h->dynindx != -1
1989                       && ! info->export_dynamic)
1990                     (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1991                 }
1992
1993               free (alc);
1994               break;
1995             }
1996         }
1997
1998       /* If we are building an application, we need to create a
1999          version node for this version.  */
2000       if (t == NULL && info->executable)
2001         {
2002           struct bfd_elf_version_tree **pp;
2003           int version_index;
2004
2005           /* If we aren't going to export this symbol, we don't need
2006              to worry about it.  */
2007           if (h->dynindx == -1)
2008             return TRUE;
2009
2010           amt = sizeof *t;
2011           t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, amt);
2012           if (t == NULL)
2013             {
2014               sinfo->failed = TRUE;
2015               return FALSE;
2016             }
2017
2018           t->name = p;
2019           t->name_indx = (unsigned int) -1;
2020           t->used = TRUE;
2021
2022           version_index = 1;
2023           /* Don't count anonymous version tag.  */
2024           if (sinfo->info->version_info != NULL
2025               && sinfo->info->version_info->vernum == 0)
2026             version_index = 0;
2027           for (pp = &sinfo->info->version_info;
2028                *pp != NULL;
2029                pp = &(*pp)->next)
2030             ++version_index;
2031           t->vernum = version_index;
2032
2033           *pp = t;
2034
2035           h->verinfo.vertree = t;
2036         }
2037       else if (t == NULL)
2038         {
2039           /* We could not find the version for a symbol when
2040              generating a shared archive.  Return an error.  */
2041           (*_bfd_error_handler)
2042             (_("%B: version node not found for symbol %s"),
2043              info->output_bfd, h->root.root.string);
2044           bfd_set_error (bfd_error_bad_value);
2045           sinfo->failed = TRUE;
2046           return FALSE;
2047         }
2048
2049       if (hidden)
2050         h->hidden = 1;
2051     }
2052
2053   /* If we don't have a version for this symbol, see if we can find
2054      something.  */
2055   if (h->verinfo.vertree == NULL && sinfo->info->version_info != NULL)
2056     {
2057       bfd_boolean hide;
2058
2059       h->verinfo.vertree
2060         = bfd_find_version_for_sym (sinfo->info->version_info,
2061                                     h->root.root.string, &hide);
2062       if (h->verinfo.vertree != NULL && hide)
2063         (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2064     }
2065
2066   return TRUE;
2067 }
2068 \f
2069 /* Read and swap the relocs from the section indicated by SHDR.  This
2070    may be either a REL or a RELA section.  The relocations are
2071    translated into RELA relocations and stored in INTERNAL_RELOCS,
2072    which should have already been allocated to contain enough space.
2073    The EXTERNAL_RELOCS are a buffer where the external form of the
2074    relocations should be stored.
2075
2076    Returns FALSE if something goes wrong.  */
2077
2078 static bfd_boolean
2079 elf_link_read_relocs_from_section (bfd *abfd,
2080                                    asection *sec,
2081                                    Elf_Internal_Shdr *shdr,
2082                                    void *external_relocs,
2083                                    Elf_Internal_Rela *internal_relocs)
2084 {
2085   const struct elf_backend_data *bed;
2086   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
2087   const bfd_byte *erela;
2088   const bfd_byte *erelaend;
2089   Elf_Internal_Rela *irela;
2090   Elf_Internal_Shdr *symtab_hdr;
2091   size_t nsyms;
2092
2093   /* Position ourselves at the start of the section.  */
2094   if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2095     return FALSE;
2096
2097   /* Read the relocations.  */
2098   if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2099     return FALSE;
2100
2101   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2102   nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
2103
2104   bed = get_elf_backend_data (abfd);
2105
2106   /* Convert the external relocations to the internal format.  */
2107   if (shdr->sh_entsize == bed->s->sizeof_rel)
2108     swap_in = bed->s->swap_reloc_in;
2109   else if (shdr->sh_entsize == bed->s->sizeof_rela)
2110     swap_in = bed->s->swap_reloca_in;
2111   else
2112     {
2113       bfd_set_error (bfd_error_wrong_format);
2114       return FALSE;
2115     }
2116
2117   erela = (const bfd_byte *) external_relocs;
2118   erelaend = erela + shdr->sh_size;
2119   irela = internal_relocs;
2120   while (erela < erelaend)
2121     {
2122       bfd_vma r_symndx;
2123
2124       (*swap_in) (abfd, erela, irela);
2125       r_symndx = ELF32_R_SYM (irela->r_info);
2126       if (bed->s->arch_size == 64)
2127         r_symndx >>= 24;
2128       if (nsyms > 0)
2129         {
2130           if ((size_t) r_symndx >= nsyms)
2131             {
2132               (*_bfd_error_handler)
2133                 (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)"
2134                    " for offset 0x%lx in section `%A'"),
2135                  abfd, sec,
2136                  (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2137               bfd_set_error (bfd_error_bad_value);
2138               return FALSE;
2139             }
2140         }
2141       else if (r_symndx != STN_UNDEF)
2142         {
2143           (*_bfd_error_handler)
2144             (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'"
2145                " when the object file has no symbol table"),
2146              abfd, sec,
2147              (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset);
2148           bfd_set_error (bfd_error_bad_value);
2149           return FALSE;
2150         }
2151       irela += bed->s->int_rels_per_ext_rel;
2152       erela += shdr->sh_entsize;
2153     }
2154
2155   return TRUE;
2156 }
2157
2158 /* Read and swap the relocs for a section O.  They may have been
2159    cached.  If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2160    not NULL, they are used as buffers to read into.  They are known to
2161    be large enough.  If the INTERNAL_RELOCS relocs argument is NULL,
2162    the return value is allocated using either malloc or bfd_alloc,
2163    according to the KEEP_MEMORY argument.  If O has two relocation
2164    sections (both REL and RELA relocations), then the REL_HDR
2165    relocations will appear first in INTERNAL_RELOCS, followed by the
2166    RELA_HDR relocations.  */
2167
2168 Elf_Internal_Rela *
2169 _bfd_elf_link_read_relocs (bfd *abfd,
2170                            asection *o,
2171                            void *external_relocs,
2172                            Elf_Internal_Rela *internal_relocs,
2173                            bfd_boolean keep_memory)
2174 {
2175   void *alloc1 = NULL;
2176   Elf_Internal_Rela *alloc2 = NULL;
2177   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2178   struct bfd_elf_section_data *esdo = elf_section_data (o);
2179   Elf_Internal_Rela *internal_rela_relocs;
2180
2181   if (esdo->relocs != NULL)
2182     return esdo->relocs;
2183
2184   if (o->reloc_count == 0)
2185     return NULL;
2186
2187   if (internal_relocs == NULL)
2188     {
2189       bfd_size_type size;
2190
2191       size = o->reloc_count;
2192       size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
2193       if (keep_memory)
2194         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
2195       else
2196         internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
2197       if (internal_relocs == NULL)
2198         goto error_return;
2199     }
2200
2201   if (external_relocs == NULL)
2202     {
2203       bfd_size_type size = 0;
2204
2205       if (esdo->rel.hdr)
2206         size += esdo->rel.hdr->sh_size;
2207       if (esdo->rela.hdr)
2208         size += esdo->rela.hdr->sh_size;
2209
2210       alloc1 = bfd_malloc (size);
2211       if (alloc1 == NULL)
2212         goto error_return;
2213       external_relocs = alloc1;
2214     }
2215
2216   internal_rela_relocs = internal_relocs;
2217   if (esdo->rel.hdr)
2218     {
2219       if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr,
2220                                               external_relocs,
2221                                               internal_relocs))
2222         goto error_return;
2223       external_relocs = (((bfd_byte *) external_relocs)
2224                          + esdo->rel.hdr->sh_size);
2225       internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr)
2226                                * bed->s->int_rels_per_ext_rel);
2227     }
2228
2229   if (esdo->rela.hdr
2230       && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr,
2231                                               external_relocs,
2232                                               internal_rela_relocs)))
2233     goto error_return;
2234
2235   /* Cache the results for next time, if we can.  */
2236   if (keep_memory)
2237     esdo->relocs = internal_relocs;
2238
2239   if (alloc1 != NULL)
2240     free (alloc1);
2241
2242   /* Don't free alloc2, since if it was allocated we are passing it
2243      back (under the name of internal_relocs).  */
2244
2245   return internal_relocs;
2246
2247  error_return:
2248   if (alloc1 != NULL)
2249     free (alloc1);
2250   if (alloc2 != NULL)
2251     {
2252       if (keep_memory)
2253         bfd_release (abfd, alloc2);
2254       else
2255         free (alloc2);
2256     }
2257   return NULL;
2258 }
2259
2260 /* Compute the size of, and allocate space for, REL_HDR which is the
2261    section header for a section containing relocations for O.  */
2262
2263 static bfd_boolean
2264 _bfd_elf_link_size_reloc_section (bfd *abfd,
2265                                   struct bfd_elf_section_reloc_data *reldata)
2266 {
2267   Elf_Internal_Shdr *rel_hdr = reldata->hdr;
2268
2269   /* That allows us to calculate the size of the section.  */
2270   rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count;
2271
2272   /* The contents field must last into write_object_contents, so we
2273      allocate it with bfd_alloc rather than malloc.  Also since we
2274      cannot be sure that the contents will actually be filled in,
2275      we zero the allocated space.  */
2276   rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
2277   if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2278     return FALSE;
2279
2280   if (reldata->hashes == NULL && reldata->count)
2281     {
2282       struct elf_link_hash_entry **p;
2283
2284       p = (struct elf_link_hash_entry **)
2285           bfd_zmalloc (reldata->count * sizeof (struct elf_link_hash_entry *));
2286       if (p == NULL)
2287         return FALSE;
2288
2289       reldata->hashes = p;
2290     }
2291
2292   return TRUE;
2293 }
2294
2295 /* Copy the relocations indicated by the INTERNAL_RELOCS (which
2296    originated from the section given by INPUT_REL_HDR) to the
2297    OUTPUT_BFD.  */
2298
2299 bfd_boolean
2300 _bfd_elf_link_output_relocs (bfd *output_bfd,
2301                              asection *input_section,
2302                              Elf_Internal_Shdr *input_rel_hdr,
2303                              Elf_Internal_Rela *internal_relocs,
2304                              struct elf_link_hash_entry **rel_hash
2305                                ATTRIBUTE_UNUSED)
2306 {
2307   Elf_Internal_Rela *irela;
2308   Elf_Internal_Rela *irelaend;
2309   bfd_byte *erel;
2310   struct bfd_elf_section_reloc_data *output_reldata;
2311   asection *output_section;
2312   const struct elf_backend_data *bed;
2313   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
2314   struct bfd_elf_section_data *esdo;
2315
2316   output_section = input_section->output_section;
2317
2318   bed = get_elf_backend_data (output_bfd);
2319   esdo = elf_section_data (output_section);
2320   if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2321     {
2322       output_reldata = &esdo->rel;
2323       swap_out = bed->s->swap_reloc_out;
2324     }
2325   else if (esdo->rela.hdr
2326            && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize)
2327     {
2328       output_reldata = &esdo->rela;
2329       swap_out = bed->s->swap_reloca_out;
2330     }
2331   else
2332     {
2333       (*_bfd_error_handler)
2334         (_("%B: relocation size mismatch in %B section %A"),
2335          output_bfd, input_section->owner, input_section);
2336       bfd_set_error (bfd_error_wrong_format);
2337       return FALSE;
2338     }
2339
2340   erel = output_reldata->hdr->contents;
2341   erel += output_reldata->count * input_rel_hdr->sh_entsize;
2342   irela = internal_relocs;
2343   irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2344                       * bed->s->int_rels_per_ext_rel);
2345   while (irela < irelaend)
2346     {
2347       (*swap_out) (output_bfd, irela, erel);
2348       irela += bed->s->int_rels_per_ext_rel;
2349       erel += input_rel_hdr->sh_entsize;
2350     }
2351
2352   /* Bump the counter, so that we know where to add the next set of
2353      relocations.  */
2354   output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
2355
2356   return TRUE;
2357 }
2358 \f
2359 /* Make weak undefined symbols in PIE dynamic.  */
2360
2361 bfd_boolean
2362 _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2363                                  struct elf_link_hash_entry *h)
2364 {
2365   if (info->pie
2366       && h->dynindx == -1
2367       && h->root.type == bfd_link_hash_undefweak)
2368     return bfd_elf_link_record_dynamic_symbol (info, h);
2369
2370   return TRUE;
2371 }
2372
2373 /* Fix up the flags for a symbol.  This handles various cases which
2374    can only be fixed after all the input files are seen.  This is
2375    currently called by both adjust_dynamic_symbol and
2376    assign_sym_version, which is unnecessary but perhaps more robust in
2377    the face of future changes.  */
2378
2379 static bfd_boolean
2380 _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2381                            struct elf_info_failed *eif)
2382 {
2383   const struct elf_backend_data *bed;
2384
2385   /* If this symbol was mentioned in a non-ELF file, try to set
2386      DEF_REGULAR and REF_REGULAR correctly.  This is the only way to
2387      permit a non-ELF file to correctly refer to a symbol defined in
2388      an ELF dynamic object.  */
2389   if (h->non_elf)
2390     {
2391       while (h->root.type == bfd_link_hash_indirect)
2392         h = (struct elf_link_hash_entry *) h->root.u.i.link;
2393
2394       if (h->root.type != bfd_link_hash_defined
2395           && h->root.type != bfd_link_hash_defweak)
2396         {
2397           h->ref_regular = 1;
2398           h->ref_regular_nonweak = 1;
2399         }
2400       else
2401         {
2402           if (h->root.u.def.section->owner != NULL
2403               && (bfd_get_flavour (h->root.u.def.section->owner)
2404                   == bfd_target_elf_flavour))
2405             {
2406               h->ref_regular = 1;
2407               h->ref_regular_nonweak = 1;
2408             }
2409           else
2410             h->def_regular = 1;
2411         }
2412
2413       if (h->dynindx == -1
2414           && (h->def_dynamic
2415               || h->ref_dynamic))
2416         {
2417           if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
2418             {
2419               eif->failed = TRUE;
2420               return FALSE;
2421             }
2422         }
2423     }
2424   else
2425     {
2426       /* If a plugin symbol is referenced from a non-IR file, mark
2427          the symbol as undefined, except for symbol for linker
2428          created section.  */
2429       if (h->root.non_ir_ref
2430           && (h->root.type == bfd_link_hash_defined
2431               || h->root.type == bfd_link_hash_defweak)
2432           && (h->root.u.def.section->flags & SEC_LINKER_CREATED) == 0
2433           && h->root.u.def.section->owner != NULL
2434           && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)
2435         {
2436           h->root.type = bfd_link_hash_undefined;
2437           h->root.u.undef.abfd = h->root.u.def.section->owner;
2438         }
2439
2440       /* Unfortunately, NON_ELF is only correct if the symbol
2441          was first seen in a non-ELF file.  Fortunately, if the symbol
2442          was first seen in an ELF file, we're probably OK unless the
2443          symbol was defined in a non-ELF file.  Catch that case here.
2444          FIXME: We're still in trouble if the symbol was first seen in
2445          a dynamic object, and then later in a non-ELF regular object.  */
2446       if ((h->root.type == bfd_link_hash_defined
2447            || h->root.type == bfd_link_hash_defweak)
2448           && !h->def_regular
2449           && (h->root.u.def.section->owner != NULL
2450               ? (bfd_get_flavour (h->root.u.def.section->owner)
2451                  != bfd_target_elf_flavour)
2452               : (bfd_is_abs_section (h->root.u.def.section)
2453                  && !h->def_dynamic)))
2454         h->def_regular = 1;
2455     }
2456
2457   /* Backend specific symbol fixup.  */
2458   bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2459   if (bed->elf_backend_fixup_symbol
2460       && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2461     return FALSE;
2462
2463   /* If this is a final link, and the symbol was defined as a common
2464      symbol in a regular object file, and there was no definition in
2465      any dynamic object, then the linker will have allocated space for
2466      the symbol in a common section but the DEF_REGULAR
2467      flag will not have been set.  */
2468   if (h->root.type == bfd_link_hash_defined
2469       && !h->def_regular
2470       && h->ref_regular
2471       && !h->def_dynamic
2472       && (h->root.u.def.section->owner->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
2473     h->def_regular = 1;
2474
2475   /* If -Bsymbolic was used (which means to bind references to global
2476      symbols to the definition within the shared object), and this
2477      symbol was defined in a regular object, then it actually doesn't
2478      need a PLT entry.  Likewise, if the symbol has non-default
2479      visibility.  If the symbol has hidden or internal visibility, we
2480      will force it local.  */
2481   if (h->needs_plt
2482       && eif->info->shared
2483       && is_elf_hash_table (eif->info->hash)
2484       && (SYMBOLIC_BIND (eif->info, h)
2485           || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2486       && h->def_regular)
2487     {
2488       bfd_boolean force_local;
2489
2490       force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2491                      || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2492       (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2493     }
2494
2495   /* If a weak undefined symbol has non-default visibility, we also
2496      hide it from the dynamic linker.  */
2497   if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2498       && h->root.type == bfd_link_hash_undefweak)
2499     (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2500
2501   /* If this is a weak defined symbol in a dynamic object, and we know
2502      the real definition in the dynamic object, copy interesting flags
2503      over to the real definition.  */
2504   if (h->u.weakdef != NULL)
2505     {
2506       /* If the real definition is defined by a regular object file,
2507          don't do anything special.  See the longer description in
2508          _bfd_elf_adjust_dynamic_symbol, below.  */
2509       if (h->u.weakdef->def_regular)
2510         h->u.weakdef = NULL;
2511       else
2512         {
2513           struct elf_link_hash_entry *weakdef = h->u.weakdef;
2514
2515           while (h->root.type == bfd_link_hash_indirect)
2516             h = (struct elf_link_hash_entry *) h->root.u.i.link;
2517
2518           BFD_ASSERT (h->root.type == bfd_link_hash_defined
2519                       || h->root.type == bfd_link_hash_defweak);
2520           BFD_ASSERT (weakdef->def_dynamic);
2521           BFD_ASSERT (weakdef->root.type == bfd_link_hash_defined
2522                       || weakdef->root.type == bfd_link_hash_defweak);
2523           (*bed->elf_backend_copy_indirect_symbol) (eif->info, weakdef, h);
2524         }
2525     }
2526
2527   return TRUE;
2528 }
2529
2530 /* Make the backend pick a good value for a dynamic symbol.  This is
2531    called via elf_link_hash_traverse, and also calls itself
2532    recursively.  */
2533
2534 static bfd_boolean
2535 _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
2536 {
2537   struct elf_info_failed *eif = (struct elf_info_failed *) data;
2538   bfd *dynobj;
2539   const struct elf_backend_data *bed;
2540
2541   if (! is_elf_hash_table (eif->info->hash))
2542     return FALSE;
2543
2544   /* Ignore indirect symbols.  These are added by the versioning code.  */
2545   if (h->root.type == bfd_link_hash_indirect)
2546     return TRUE;
2547
2548   /* Fix the symbol flags.  */
2549   if (! _bfd_elf_fix_symbol_flags (h, eif))
2550     return FALSE;
2551
2552   /* If this symbol does not require a PLT entry, and it is not
2553      defined by a dynamic object, or is not referenced by a regular
2554      object, ignore it.  We do have to handle a weak defined symbol,
2555      even if no regular object refers to it, if we decided to add it
2556      to the dynamic symbol table.  FIXME: Do we normally need to worry
2557      about symbols which are defined by one dynamic object and
2558      referenced by another one?  */
2559   if (!h->needs_plt
2560       && h->type != STT_GNU_IFUNC
2561       && (h->def_regular
2562           || !h->def_dynamic
2563           || (!h->ref_regular
2564               && (h->u.weakdef == NULL || h->u.weakdef->dynindx == -1))))
2565     {
2566       h->plt = elf_hash_table (eif->info)->init_plt_offset;
2567       return TRUE;
2568     }
2569
2570   /* If we've already adjusted this symbol, don't do it again.  This
2571      can happen via a recursive call.  */
2572   if (h->dynamic_adjusted)
2573     return TRUE;
2574
2575   /* Don't look at this symbol again.  Note that we must set this
2576      after checking the above conditions, because we may look at a
2577      symbol once, decide not to do anything, and then get called
2578      recursively later after REF_REGULAR is set below.  */
2579   h->dynamic_adjusted = 1;
2580
2581   /* If this is a weak definition, and we know a real definition, and
2582      the real symbol is not itself defined by a regular object file,
2583      then get a good value for the real definition.  We handle the
2584      real symbol first, for the convenience of the backend routine.
2585
2586      Note that there is a confusing case here.  If the real definition
2587      is defined by a regular object file, we don't get the real symbol
2588      from the dynamic object, but we do get the weak symbol.  If the
2589      processor backend uses a COPY reloc, then if some routine in the
2590      dynamic object changes the real symbol, we will not see that
2591      change in the corresponding weak symbol.  This is the way other
2592      ELF linkers work as well, and seems to be a result of the shared
2593      library model.
2594
2595      I will clarify this issue.  Most SVR4 shared libraries define the
2596      variable _timezone and define timezone as a weak synonym.  The
2597      tzset call changes _timezone.  If you write
2598        extern int timezone;
2599        int _timezone = 5;
2600        int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
2601      you might expect that, since timezone is a synonym for _timezone,
2602      the same number will print both times.  However, if the processor
2603      backend uses a COPY reloc, then actually timezone will be copied
2604      into your process image, and, since you define _timezone
2605      yourself, _timezone will not.  Thus timezone and _timezone will
2606      wind up at different memory locations.  The tzset call will set
2607      _timezone, leaving timezone unchanged.  */
2608
2609   if (h->u.weakdef != NULL)
2610     {
2611       /* If we get to this point, there is an implicit reference to
2612          H->U.WEAKDEF by a regular object file via the weak symbol H.  */
2613       h->u.weakdef->ref_regular = 1;
2614
2615       /* Ensure that the backend adjust_dynamic_symbol function sees
2616          H->U.WEAKDEF before H by recursively calling ourselves.  */
2617       if (! _bfd_elf_adjust_dynamic_symbol (h->u.weakdef, eif))
2618         return FALSE;
2619     }
2620
2621   /* If a symbol has no type and no size and does not require a PLT
2622      entry, then we are probably about to do the wrong thing here: we
2623      are probably going to create a COPY reloc for an empty object.
2624      This case can arise when a shared object is built with assembly
2625      code, and the assembly code fails to set the symbol type.  */
2626   if (h->size == 0
2627       && h->type == STT_NOTYPE
2628       && !h->needs_plt)
2629     (*_bfd_error_handler)
2630       (_("warning: type and size of dynamic symbol `%s' are not defined"),
2631        h->root.root.string);
2632
2633   dynobj = elf_hash_table (eif->info)->dynobj;
2634   bed = get_elf_backend_data (dynobj);
2635
2636   if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
2637     {
2638       eif->failed = TRUE;
2639       return FALSE;
2640     }
2641
2642   return TRUE;
2643 }
2644
2645 /* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
2646    DYNBSS.  */
2647
2648 bfd_boolean
2649 _bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info,
2650                               struct elf_link_hash_entry *h,
2651                               asection *dynbss)
2652 {
2653   unsigned int power_of_two;
2654   bfd_vma mask;
2655   asection *sec = h->root.u.def.section;
2656
2657   /* The section aligment of definition is the maximum alignment
2658      requirement of symbols defined in the section.  Since we don't
2659      know the symbol alignment requirement, we start with the
2660      maximum alignment and check low bits of the symbol address
2661      for the minimum alignment.  */
2662   power_of_two = bfd_get_section_alignment (sec->owner, sec);
2663   mask = ((bfd_vma) 1 << power_of_two) - 1;
2664   while ((h->root.u.def.value & mask) != 0)
2665     {
2666        mask >>= 1;
2667        --power_of_two;
2668     }
2669
2670   if (power_of_two > bfd_get_section_alignment (dynbss->owner,
2671                                                 dynbss))
2672     {
2673       /* Adjust the section alignment if needed.  */
2674       if (! bfd_set_section_alignment (dynbss->owner, dynbss,
2675                                        power_of_two))
2676         return FALSE;
2677     }
2678
2679   /* We make sure that the symbol will be aligned properly.  */
2680   dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
2681
2682   /* Define the symbol as being at this point in DYNBSS.  */
2683   h->root.u.def.section = dynbss;
2684   h->root.u.def.value = dynbss->size;
2685
2686   /* Increment the size of DYNBSS to make room for the symbol.  */
2687   dynbss->size += h->size;
2688
2689   if (h->protected_def)
2690     {
2691       info->callbacks->einfo
2692         (_("%P: copy reloc against protected `%T' is invalid\n"),
2693          h->root.root.string);
2694       bfd_set_error (bfd_error_bad_value);
2695       return FALSE;
2696     }
2697
2698   return TRUE;
2699 }
2700
2701 /* Adjust all external symbols pointing into SEC_MERGE sections
2702    to reflect the object merging within the sections.  */
2703
2704 static bfd_boolean
2705 _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
2706 {
2707   asection *sec;
2708
2709   if ((h->root.type == bfd_link_hash_defined
2710        || h->root.type == bfd_link_hash_defweak)
2711       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
2712       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
2713     {
2714       bfd *output_bfd = (bfd *) data;
2715
2716       h->root.u.def.value =
2717         _bfd_merged_section_offset (output_bfd,
2718                                     &h->root.u.def.section,
2719                                     elf_section_data (sec)->sec_info,
2720                                     h->root.u.def.value);
2721     }
2722
2723   return TRUE;
2724 }
2725
2726 /* Returns false if the symbol referred to by H should be considered
2727    to resolve local to the current module, and true if it should be
2728    considered to bind dynamically.  */
2729
2730 bfd_boolean
2731 _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
2732                            struct bfd_link_info *info,
2733                            bfd_boolean not_local_protected)
2734 {
2735   bfd_boolean binding_stays_local_p;
2736   const struct elf_backend_data *bed;
2737   struct elf_link_hash_table *hash_table;
2738
2739   if (h == NULL)
2740     return FALSE;
2741
2742   while (h->root.type == bfd_link_hash_indirect
2743          || h->root.type == bfd_link_hash_warning)
2744     h = (struct elf_link_hash_entry *) h->root.u.i.link;
2745
2746   /* If it was forced local, then clearly it's not dynamic.  */
2747   if (h->dynindx == -1)
2748     return FALSE;
2749   if (h->forced_local)
2750     return FALSE;
2751
2752   /* Identify the cases where name binding rules say that a
2753      visible symbol resolves locally.  */
2754   binding_stays_local_p = info->executable || SYMBOLIC_BIND (info, h);
2755
2756   switch (ELF_ST_VISIBILITY (h->other))
2757     {
2758     case STV_INTERNAL:
2759     case STV_HIDDEN:
2760       return FALSE;
2761
2762     case STV_PROTECTED:
2763       hash_table = elf_hash_table (info);
2764       if (!is_elf_hash_table (hash_table))
2765         return FALSE;
2766
2767       bed = get_elf_backend_data (hash_table->dynobj);
2768
2769       /* Proper resolution for function pointer equality may require
2770          that these symbols perhaps be resolved dynamically, even though
2771          we should be resolving them to the current module.  */
2772       if (!not_local_protected || !bed->is_function_type (h->type))
2773         binding_stays_local_p = TRUE;
2774       break;
2775
2776     default:
2777       break;
2778     }
2779
2780   /* If it isn't defined locally, then clearly it's dynamic.  */
2781   if (!h->def_regular && !ELF_COMMON_DEF_P (h))
2782     return TRUE;
2783
2784   /* Otherwise, the symbol is dynamic if binding rules don't tell
2785      us that it remains local.  */
2786   return !binding_stays_local_p;
2787 }
2788
2789 /* Return true if the symbol referred to by H should be considered
2790    to resolve local to the current module, and false otherwise.  Differs
2791    from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
2792    undefined symbols.  The two functions are virtually identical except
2793    for the place where forced_local and dynindx == -1 are tested.  If
2794    either of those tests are true, _bfd_elf_dynamic_symbol_p will say
2795    the symbol is local, while _bfd_elf_symbol_refs_local_p will say
2796    the symbol is local only for defined symbols.
2797    It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
2798    !_bfd_elf_symbol_refs_local_p, except that targets differ in their
2799    treatment of undefined weak symbols.  For those that do not make
2800    undefined weak symbols dynamic, both functions may return false.  */
2801
2802 bfd_boolean
2803 _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
2804                               struct bfd_link_info *info,
2805                               bfd_boolean local_protected)
2806 {
2807   const struct elf_backend_data *bed;
2808   struct elf_link_hash_table *hash_table;
2809
2810   /* If it's a local sym, of course we resolve locally.  */
2811   if (h == NULL)
2812     return TRUE;
2813
2814   /* STV_HIDDEN or STV_INTERNAL ones must be local.  */
2815   if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
2816       || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
2817     return TRUE;
2818
2819   /* Common symbols that become definitions don't get the DEF_REGULAR
2820      flag set, so test it first, and don't bail out.  */
2821   if (ELF_COMMON_DEF_P (h))
2822     /* Do nothing.  */;
2823   /* If we don't have a definition in a regular file, then we can't
2824      resolve locally.  The sym is either undefined or dynamic.  */
2825   else if (!h->def_regular)
2826     return FALSE;
2827
2828   /* Forced local symbols resolve locally.  */
2829   if (h->forced_local)
2830     return TRUE;
2831
2832   /* As do non-dynamic symbols.  */
2833   if (h->dynindx == -1)
2834     return TRUE;
2835
2836   /* At this point, we know the symbol is defined and dynamic.  In an
2837      executable it must resolve locally, likewise when building symbolic
2838      shared libraries.  */
2839   if (info->executable || SYMBOLIC_BIND (info, h))
2840     return TRUE;
2841
2842   /* Now deal with defined dynamic symbols in shared libraries.  Ones
2843      with default visibility might not resolve locally.  */
2844   if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
2845     return FALSE;
2846
2847   hash_table = elf_hash_table (info);
2848   if (!is_elf_hash_table (hash_table))
2849     return TRUE;
2850
2851   bed = get_elf_backend_data (hash_table->dynobj);
2852
2853   /* STV_PROTECTED non-function symbols are local.  */
2854   if (!bed->is_function_type (h->type))
2855     return TRUE;
2856
2857   /* Function pointer equality tests may require that STV_PROTECTED
2858      symbols be treated as dynamic symbols.  If the address of a
2859      function not defined in an executable is set to that function's
2860      plt entry in the executable, then the address of the function in
2861      a shared library must also be the plt entry in the executable.  */
2862   return local_protected;
2863 }
2864
2865 /* Caches some TLS segment info, and ensures that the TLS segment vma is
2866    aligned.  Returns the first TLS output section.  */
2867
2868 struct bfd_section *
2869 _bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
2870 {
2871   struct bfd_section *sec, *tls;
2872   unsigned int align = 0;
2873
2874   for (sec = obfd->sections; sec != NULL; sec = sec->next)
2875     if ((sec->flags & SEC_THREAD_LOCAL) != 0)
2876       break;
2877   tls = sec;
2878
2879   for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
2880     if (sec->alignment_power > align)
2881       align = sec->alignment_power;
2882
2883   elf_hash_table (info)->tls_sec = tls;
2884
2885   /* Ensure the alignment of the first section is the largest alignment,
2886      so that the tls segment starts aligned.  */
2887   if (tls != NULL)
2888     tls->alignment_power = align;
2889
2890   return tls;
2891 }
2892
2893 /* Return TRUE iff this is a non-common, definition of a non-function symbol.  */
2894 static bfd_boolean
2895 is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
2896                                   Elf_Internal_Sym *sym)
2897 {
2898   const struct elf_backend_data *bed;
2899
2900   /* Local symbols do not count, but target specific ones might.  */
2901   if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
2902       && ELF_ST_BIND (sym->st_info) < STB_LOOS)
2903     return FALSE;
2904
2905   bed = get_elf_backend_data (abfd);
2906   /* Function symbols do not count.  */
2907   if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
2908     return FALSE;
2909
2910   /* If the section is undefined, then so is the symbol.  */
2911   if (sym->st_shndx == SHN_UNDEF)
2912     return FALSE;
2913
2914   /* If the symbol is defined in the common section, then
2915      it is a common definition and so does not count.  */
2916   if (bed->common_definition (sym))
2917     return FALSE;
2918
2919   /* If the symbol is in a target specific section then we
2920      must rely upon the backend to tell us what it is.  */
2921   if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
2922     /* FIXME - this function is not coded yet:
2923
2924        return _bfd_is_global_symbol_definition (abfd, sym);
2925
2926        Instead for now assume that the definition is not global,
2927        Even if this is wrong, at least the linker will behave
2928        in the same way that it used to do.  */
2929     return FALSE;
2930
2931   return TRUE;
2932 }
2933
2934 /* Search the symbol table of the archive element of the archive ABFD
2935    whose archive map contains a mention of SYMDEF, and determine if
2936    the symbol is defined in this element.  */
2937 static bfd_boolean
2938 elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
2939 {
2940   Elf_Internal_Shdr * hdr;
2941   bfd_size_type symcount;
2942   bfd_size_type extsymcount;
2943   bfd_size_type extsymoff;
2944   Elf_Internal_Sym *isymbuf;
2945   Elf_Internal_Sym *isym;
2946   Elf_Internal_Sym *isymend;
2947   bfd_boolean result;
2948
2949   abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
2950   if (abfd == NULL)
2951     return FALSE;
2952
2953   if (! bfd_check_format (abfd, bfd_object))
2954     return FALSE;
2955
2956   /* Select the appropriate symbol table.  */
2957   if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
2958     hdr = &elf_tdata (abfd)->symtab_hdr;
2959   else
2960     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2961
2962   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
2963
2964   /* The sh_info field of the symtab header tells us where the
2965      external symbols start.  We don't care about the local symbols.  */
2966   if (elf_bad_symtab (abfd))
2967     {
2968       extsymcount = symcount;
2969       extsymoff = 0;
2970     }
2971   else
2972     {
2973       extsymcount = symcount - hdr->sh_info;
2974       extsymoff = hdr->sh_info;
2975     }
2976
2977   if (extsymcount == 0)
2978     return FALSE;
2979
2980   /* Read in the symbol table.  */
2981   isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
2982                                   NULL, NULL, NULL);
2983   if (isymbuf == NULL)
2984     return FALSE;
2985
2986   /* Scan the symbol table looking for SYMDEF.  */
2987   result = FALSE;
2988   for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
2989     {
2990       const char *name;
2991
2992       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
2993                                               isym->st_name);
2994       if (name == NULL)
2995         break;
2996
2997       if (strcmp (name, symdef->name) == 0)
2998         {
2999           result = is_global_data_symbol_definition (abfd, isym);
3000           break;
3001         }
3002     }
3003
3004   free (isymbuf);
3005
3006   return result;
3007 }
3008 \f
3009 /* Add an entry to the .dynamic table.  */
3010
3011 bfd_boolean
3012 _bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3013                             bfd_vma tag,
3014                             bfd_vma val)
3015 {
3016   struct elf_link_hash_table *hash_table;
3017   const struct elf_backend_data *bed;
3018   asection *s;
3019   bfd_size_type newsize;
3020   bfd_byte *newcontents;
3021   Elf_Internal_Dyn dyn;
3022
3023   hash_table = elf_hash_table (info);
3024   if (! is_elf_hash_table (hash_table))
3025     return FALSE;
3026
3027   bed = get_elf_backend_data (hash_table->dynobj);
3028   s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3029   BFD_ASSERT (s != NULL);
3030
3031   newsize = s->size + bed->s->sizeof_dyn;
3032   newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
3033   if (newcontents == NULL)
3034     return FALSE;
3035
3036   dyn.d_tag = tag;
3037   dyn.d_un.d_val = val;
3038   bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
3039
3040   s->size = newsize;
3041   s->contents = newcontents;
3042
3043   return TRUE;
3044 }
3045
3046 /* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3047    otherwise just check whether one already exists.  Returns -1 on error,
3048    1 if a DT_NEEDED tag already exists, and 0 on success.  */
3049
3050 static int
3051 elf_add_dt_needed_tag (bfd *abfd,
3052                        struct bfd_link_info *info,
3053                        const char *soname,
3054                        bfd_boolean do_it)
3055 {
3056   struct elf_link_hash_table *hash_table;
3057   bfd_size_type strindex;
3058
3059   if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3060     return -1;
3061
3062   hash_table = elf_hash_table (info);
3063   strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
3064   if (strindex == (bfd_size_type) -1)
3065     return -1;
3066
3067   if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1)
3068     {
3069       asection *sdyn;
3070       const struct elf_backend_data *bed;
3071       bfd_byte *extdyn;
3072
3073       bed = get_elf_backend_data (hash_table->dynobj);
3074       sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
3075       if (sdyn != NULL)
3076         for (extdyn = sdyn->contents;
3077              extdyn < sdyn->contents + sdyn->size;
3078              extdyn += bed->s->sizeof_dyn)
3079           {
3080             Elf_Internal_Dyn dyn;
3081
3082             bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3083             if (dyn.d_tag == DT_NEEDED
3084                 && dyn.d_un.d_val == strindex)
3085               {
3086                 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3087                 return 1;
3088               }
3089           }
3090     }
3091
3092   if (do_it)
3093     {
3094       if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3095         return -1;
3096
3097       if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3098         return -1;
3099     }
3100   else
3101     /* We were just checking for existence of the tag.  */
3102     _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3103
3104   return 0;
3105 }
3106
3107 static bfd_boolean
3108 on_needed_list (const char *soname, struct bfd_link_needed_list *needed)
3109 {
3110   for (; needed != NULL; needed = needed->next)
3111     if ((elf_dyn_lib_class (needed->by) & DYN_AS_NEEDED) == 0
3112         && strcmp (soname, needed->name) == 0)
3113       return TRUE;
3114
3115   return FALSE;
3116 }
3117
3118 /* Sort symbol by value, section, and size.  */
3119 static int
3120 elf_sort_symbol (const void *arg1, const void *arg2)
3121 {
3122   const struct elf_link_hash_entry *h1;
3123   const struct elf_link_hash_entry *h2;
3124   bfd_signed_vma vdiff;
3125
3126   h1 = *(const struct elf_link_hash_entry **) arg1;
3127   h2 = *(const struct elf_link_hash_entry **) arg2;
3128   vdiff = h1->root.u.def.value - h2->root.u.def.value;
3129   if (vdiff != 0)
3130     return vdiff > 0 ? 1 : -1;
3131   else
3132     {
3133       long sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
3134       if (sdiff != 0)
3135         return sdiff > 0 ? 1 : -1;
3136     }
3137   vdiff = h1->size - h2->size;
3138   return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1;
3139 }
3140
3141 /* This function is used to adjust offsets into .dynstr for
3142    dynamic symbols.  This is called via elf_link_hash_traverse.  */
3143
3144 static bfd_boolean
3145 elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3146 {
3147   struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
3148
3149   if (h->dynindx != -1)
3150     h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3151   return TRUE;
3152 }
3153
3154 /* Assign string offsets in .dynstr, update all structures referencing
3155    them.  */
3156
3157 static bfd_boolean
3158 elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
3159 {
3160   struct elf_link_hash_table *hash_table = elf_hash_table (info);
3161   struct elf_link_local_dynamic_entry *entry;
3162   struct elf_strtab_hash *dynstr = hash_table->dynstr;
3163   bfd *dynobj = hash_table->dynobj;
3164   asection *sdyn;
3165   bfd_size_type size;
3166   const struct elf_backend_data *bed;
3167   bfd_byte *extdyn;
3168
3169   _bfd_elf_strtab_finalize (dynstr);
3170   size = _bfd_elf_strtab_size (dynstr);
3171
3172   bed = get_elf_backend_data (dynobj);
3173   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
3174   BFD_ASSERT (sdyn != NULL);
3175
3176   /* Update all .dynamic entries referencing .dynstr strings.  */
3177   for (extdyn = sdyn->contents;
3178        extdyn < sdyn->contents + sdyn->size;
3179        extdyn += bed->s->sizeof_dyn)
3180     {
3181       Elf_Internal_Dyn dyn;
3182
3183       bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3184       switch (dyn.d_tag)
3185         {
3186         case DT_STRSZ:
3187           dyn.d_un.d_val = size;
3188           break;
3189         case DT_NEEDED:
3190         case DT_SONAME:
3191         case DT_RPATH:
3192         case DT_RUNPATH:
3193         case DT_FILTER:
3194         case DT_AUXILIARY:
3195         case DT_AUDIT:
3196         case DT_DEPAUDIT:
3197           dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3198           break;
3199         default:
3200           continue;
3201         }
3202       bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3203     }
3204
3205   /* Now update local dynamic symbols.  */
3206   for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3207     entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3208                                                   entry->isym.st_name);
3209
3210   /* And the rest of dynamic symbols.  */
3211   elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3212
3213   /* Adjust version definitions.  */
3214   if (elf_tdata (output_bfd)->cverdefs)
3215     {
3216       asection *s;
3217       bfd_byte *p;
3218       bfd_size_type i;
3219       Elf_Internal_Verdef def;
3220       Elf_Internal_Verdaux defaux;
3221
3222       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
3223       p = s->contents;
3224       do
3225         {
3226           _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3227                                    &def);
3228           p += sizeof (Elf_External_Verdef);
3229           if (def.vd_aux != sizeof (Elf_External_Verdef))
3230             continue;
3231           for (i = 0; i < def.vd_cnt; ++i)
3232             {
3233               _bfd_elf_swap_verdaux_in (output_bfd,
3234                                         (Elf_External_Verdaux *) p, &defaux);
3235               defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3236                                                         defaux.vda_name);
3237               _bfd_elf_swap_verdaux_out (output_bfd,
3238                                          &defaux, (Elf_External_Verdaux *) p);
3239               p += sizeof (Elf_External_Verdaux);
3240             }
3241         }
3242       while (def.vd_next);
3243     }
3244
3245   /* Adjust version references.  */
3246   if (elf_tdata (output_bfd)->verref)
3247     {
3248       asection *s;
3249       bfd_byte *p;
3250       bfd_size_type i;
3251       Elf_Internal_Verneed need;
3252       Elf_Internal_Vernaux needaux;
3253
3254       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
3255       p = s->contents;
3256       do
3257         {
3258           _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3259                                     &need);
3260           need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3261           _bfd_elf_swap_verneed_out (output_bfd, &need,
3262                                      (Elf_External_Verneed *) p);
3263           p += sizeof (Elf_External_Verneed);
3264           for (i = 0; i < need.vn_cnt; ++i)
3265             {
3266               _bfd_elf_swap_vernaux_in (output_bfd,
3267                                         (Elf_External_Vernaux *) p, &needaux);
3268               needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3269                                                          needaux.vna_name);
3270               _bfd_elf_swap_vernaux_out (output_bfd,
3271                                          &needaux,
3272                                          (Elf_External_Vernaux *) p);
3273               p += sizeof (Elf_External_Vernaux);
3274             }
3275         }
3276       while (need.vn_next);
3277     }
3278
3279   return TRUE;
3280 }
3281 \f
3282 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3283    The default is to only match when the INPUT and OUTPUT are exactly
3284    the same target.  */
3285
3286 bfd_boolean
3287 _bfd_elf_default_relocs_compatible (const bfd_target *input,
3288                                     const bfd_target *output)
3289 {
3290   return input == output;
3291 }
3292
3293 /* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3294    This version is used when different targets for the same architecture
3295    are virtually identical.  */
3296
3297 bfd_boolean
3298 _bfd_elf_relocs_compatible (const bfd_target *input,
3299                             const bfd_target *output)
3300 {
3301   const struct elf_backend_data *obed, *ibed;
3302
3303   if (input == output)
3304     return TRUE;
3305
3306   ibed = xvec_get_elf_backend_data (input);
3307   obed = xvec_get_elf_backend_data (output);
3308
3309   if (ibed->arch != obed->arch)
3310     return FALSE;
3311
3312   /* If both backends are using this function, deem them compatible.  */
3313   return ibed->relocs_compatible == obed->relocs_compatible;
3314 }
3315
3316 /* Make a special call to the linker "notice" function to tell it that
3317    we are about to handle an as-needed lib, or have finished
3318    processing the lib.  */ 
3319
3320 bfd_boolean
3321 _bfd_elf_notice_as_needed (bfd *ibfd,
3322                            struct bfd_link_info *info,
3323                            enum notice_asneeded_action act)
3324 {
3325   return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0);
3326 }
3327
3328 /* Add symbols from an ELF object file to the linker hash table.  */
3329
3330 static bfd_boolean
3331 elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3332 {
3333   Elf_Internal_Ehdr *ehdr;
3334   Elf_Internal_Shdr *hdr;
3335   bfd_size_type symcount;
3336   bfd_size_type extsymcount;
3337   bfd_size_type extsymoff;
3338   struct elf_link_hash_entry **sym_hash;
3339   bfd_boolean dynamic;
3340   Elf_External_Versym *extversym = NULL;
3341   Elf_External_Versym *ever;
3342   struct elf_link_hash_entry *weaks;
3343   struct elf_link_hash_entry **nondeflt_vers = NULL;
3344   bfd_size_type nondeflt_vers_cnt = 0;
3345   Elf_Internal_Sym *isymbuf = NULL;
3346   Elf_Internal_Sym *isym;
3347   Elf_Internal_Sym *isymend;
3348   const struct elf_backend_data *bed;
3349   bfd_boolean add_needed;
3350   struct elf_link_hash_table *htab;
3351   bfd_size_type amt;
3352   void *alloc_mark = NULL;
3353   struct bfd_hash_entry **old_table = NULL;
3354   unsigned int old_size = 0;
3355   unsigned int old_count = 0;
3356   void *old_tab = NULL;
3357   void *old_ent;
3358   struct bfd_link_hash_entry *old_undefs = NULL;
3359   struct bfd_link_hash_entry *old_undefs_tail = NULL;
3360   long old_dynsymcount = 0;
3361   bfd_size_type old_dynstr_size = 0;
3362   size_t tabsize = 0;
3363   asection *s;
3364   bfd_boolean just_syms;
3365
3366   htab = elf_hash_table (info);
3367   bed = get_elf_backend_data (abfd);
3368
3369   if ((abfd->flags & DYNAMIC) == 0)
3370     dynamic = FALSE;
3371   else
3372     {
3373       dynamic = TRUE;
3374
3375       /* You can't use -r against a dynamic object.  Also, there's no
3376          hope of using a dynamic object which does not exactly match
3377          the format of the output file.  */
3378       if (info->relocatable
3379           || !is_elf_hash_table (htab)
3380           || info->output_bfd->xvec != abfd->xvec)
3381         {
3382           if (info->relocatable)
3383             bfd_set_error (bfd_error_invalid_operation);
3384           else
3385             bfd_set_error (bfd_error_wrong_format);
3386           goto error_return;
3387         }
3388     }
3389
3390   ehdr = elf_elfheader (abfd);
3391   if (info->warn_alternate_em
3392       && bed->elf_machine_code != ehdr->e_machine
3393       && ((bed->elf_machine_alt1 != 0
3394            && ehdr->e_machine == bed->elf_machine_alt1)
3395           || (bed->elf_machine_alt2 != 0
3396               && ehdr->e_machine == bed->elf_machine_alt2)))
3397     info->callbacks->einfo
3398       (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"),
3399        ehdr->e_machine, abfd, bed->elf_machine_code);
3400
3401   /* As a GNU extension, any input sections which are named
3402      .gnu.warning.SYMBOL are treated as warning symbols for the given
3403      symbol.  This differs from .gnu.warning sections, which generate
3404      warnings when they are included in an output file.  */
3405   /* PR 12761: Also generate this warning when building shared libraries.  */
3406   for (s = abfd->sections; s != NULL; s = s->next)
3407     {
3408       const char *name;
3409
3410       name = bfd_get_section_name (abfd, s);
3411       if (CONST_STRNEQ (name, ".gnu.warning."))
3412         {
3413           char *msg;
3414           bfd_size_type sz;
3415
3416           name += sizeof ".gnu.warning." - 1;
3417
3418           /* If this is a shared object, then look up the symbol
3419              in the hash table.  If it is there, and it is already
3420              been defined, then we will not be using the entry
3421              from this shared object, so we don't need to warn.
3422              FIXME: If we see the definition in a regular object
3423              later on, we will warn, but we shouldn't.  The only
3424              fix is to keep track of what warnings we are supposed
3425              to emit, and then handle them all at the end of the
3426              link.  */
3427           if (dynamic)
3428             {
3429               struct elf_link_hash_entry *h;
3430
3431               h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3432
3433               /* FIXME: What about bfd_link_hash_common?  */
3434               if (h != NULL
3435                   && (h->root.type == bfd_link_hash_defined
3436                       || h->root.type == bfd_link_hash_defweak))
3437                 continue;
3438             }
3439
3440           sz = s->size;
3441           msg = (char *) bfd_alloc (abfd, sz + 1);
3442           if (msg == NULL)
3443             goto error_return;
3444
3445           if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3446             goto error_return;
3447
3448           msg[sz] = '\0';
3449
3450           if (! (_bfd_generic_link_add_one_symbol
3451                  (info, abfd, name, BSF_WARNING, s, 0, msg,
3452                   FALSE, bed->collect, NULL)))
3453             goto error_return;
3454
3455           if (!info->relocatable && info->executable)
3456             {
3457               /* Clobber the section size so that the warning does
3458                  not get copied into the output file.  */
3459               s->size = 0;
3460
3461               /* Also set SEC_EXCLUDE, so that symbols defined in
3462                  the warning section don't get copied to the output.  */
3463               s->flags |= SEC_EXCLUDE;
3464             }
3465         }
3466     }
3467
3468   just_syms = ((s = abfd->sections) != NULL
3469                && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
3470
3471   add_needed = TRUE;
3472   if (! dynamic)
3473     {
3474       /* If we are creating a shared library, create all the dynamic
3475          sections immediately.  We need to attach them to something,
3476          so we attach them to this BFD, provided it is the right
3477          format and is not from ld --just-symbols.  FIXME: If there
3478          are no input BFD's of the same format as the output, we can't
3479          make a shared library.  */
3480       if (!just_syms
3481           && info->shared
3482           && is_elf_hash_table (htab)
3483           && info->output_bfd->xvec == abfd->xvec
3484           && !htab->dynamic_sections_created)
3485         {
3486           if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
3487             goto error_return;
3488         }
3489     }
3490   else if (!is_elf_hash_table (htab))
3491     goto error_return;
3492   else
3493     {
3494       const char *soname = NULL;
3495       char *audit = NULL;
3496       struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
3497       int ret;
3498
3499       /* ld --just-symbols and dynamic objects don't mix very well.
3500          ld shouldn't allow it.  */
3501       if (just_syms)
3502         abort ();
3503
3504       /* If this dynamic lib was specified on the command line with
3505          --as-needed in effect, then we don't want to add a DT_NEEDED
3506          tag unless the lib is actually used.  Similary for libs brought
3507          in by another lib's DT_NEEDED.  When --no-add-needed is used
3508          on a dynamic lib, we don't want to add a DT_NEEDED entry for
3509          any dynamic library in DT_NEEDED tags in the dynamic lib at
3510          all.  */
3511       add_needed = (elf_dyn_lib_class (abfd)
3512                     & (DYN_AS_NEEDED | DYN_DT_NEEDED
3513                        | DYN_NO_NEEDED)) == 0;
3514
3515       s = bfd_get_section_by_name (abfd, ".dynamic");
3516       if (s != NULL)
3517         {
3518           bfd_byte *dynbuf;
3519           bfd_byte *extdyn;
3520           unsigned int elfsec;
3521           unsigned long shlink;
3522
3523           if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
3524             {
3525 error_free_dyn:
3526               free (dynbuf);
3527               goto error_return;
3528             }
3529
3530           elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
3531           if (elfsec == SHN_BAD)
3532             goto error_free_dyn;
3533           shlink = elf_elfsections (abfd)[elfsec]->sh_link;
3534
3535           for (extdyn = dynbuf;
3536                extdyn < dynbuf + s->size;
3537                extdyn += bed->s->sizeof_dyn)
3538             {
3539               Elf_Internal_Dyn dyn;
3540
3541               bed->s->swap_dyn_in (abfd, extdyn, &dyn);
3542               if (dyn.d_tag == DT_SONAME)
3543                 {
3544                   unsigned int tagv = dyn.d_un.d_val;
3545                   soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3546                   if (soname == NULL)
3547                     goto error_free_dyn;
3548                 }
3549               if (dyn.d_tag == DT_NEEDED)
3550                 {
3551                   struct bfd_link_needed_list *n, **pn;
3552                   char *fnm, *anm;
3553                   unsigned int tagv = dyn.d_un.d_val;
3554
3555                   amt = sizeof (struct bfd_link_needed_list);
3556                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3557                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3558                   if (n == NULL || fnm == NULL)
3559                     goto error_free_dyn;
3560                   amt = strlen (fnm) + 1;
3561                   anm = (char *) bfd_alloc (abfd, amt);
3562                   if (anm == NULL)
3563                     goto error_free_dyn;
3564                   memcpy (anm, fnm, amt);
3565                   n->name = anm;
3566                   n->by = abfd;
3567                   n->next = NULL;
3568                   for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
3569                     ;
3570                   *pn = n;
3571                 }
3572               if (dyn.d_tag == DT_RUNPATH)
3573                 {
3574                   struct bfd_link_needed_list *n, **pn;
3575                   char *fnm, *anm;
3576                   unsigned int tagv = dyn.d_un.d_val;
3577
3578                   amt = sizeof (struct bfd_link_needed_list);
3579                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3580                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3581                   if (n == NULL || fnm == NULL)
3582                     goto error_free_dyn;
3583                   amt = strlen (fnm) + 1;
3584                   anm = (char *) bfd_alloc (abfd, amt);
3585                   if (anm == NULL)
3586                     goto error_free_dyn;
3587                   memcpy (anm, fnm, amt);
3588                   n->name = anm;
3589                   n->by = abfd;
3590                   n->next = NULL;
3591                   for (pn = & runpath;
3592                        *pn != NULL;
3593                        pn = &(*pn)->next)
3594                     ;
3595                   *pn = n;
3596                 }
3597               /* Ignore DT_RPATH if we have seen DT_RUNPATH.  */
3598               if (!runpath && dyn.d_tag == DT_RPATH)
3599                 {
3600                   struct bfd_link_needed_list *n, **pn;
3601                   char *fnm, *anm;
3602                   unsigned int tagv = dyn.d_un.d_val;
3603
3604                   amt = sizeof (struct bfd_link_needed_list);
3605                   n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
3606                   fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3607                   if (n == NULL || fnm == NULL)
3608                     goto error_free_dyn;
3609                   amt = strlen (fnm) + 1;
3610                   anm = (char *) bfd_alloc (abfd, amt);
3611                   if (anm == NULL)
3612                     goto error_free_dyn;
3613                   memcpy (anm, fnm, amt);
3614                   n->name = anm;
3615                   n->by = abfd;
3616                   n->next = NULL;
3617                   for (pn = & rpath;
3618                        *pn != NULL;
3619                        pn = &(*pn)->next)
3620                     ;
3621                   *pn = n;
3622                 }
3623               if (dyn.d_tag == DT_AUDIT)
3624                 {
3625                   unsigned int tagv = dyn.d_un.d_val;
3626                   audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
3627                 }
3628             }
3629
3630           free (dynbuf);
3631         }
3632
3633       /* DT_RUNPATH overrides DT_RPATH.  Do _NOT_ bfd_release, as that
3634          frees all more recently bfd_alloc'd blocks as well.  */
3635       if (runpath)
3636         rpath = runpath;
3637
3638       if (rpath)
3639         {
3640           struct bfd_link_needed_list **pn;
3641           for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
3642             ;
3643           *pn = rpath;
3644         }
3645
3646       /* We do not want to include any of the sections in a dynamic
3647          object in the output file.  We hack by simply clobbering the
3648          list of sections in the BFD.  This could be handled more
3649          cleanly by, say, a new section flag; the existing
3650          SEC_NEVER_LOAD flag is not the one we want, because that one
3651          still implies that the section takes up space in the output
3652          file.  */
3653       bfd_section_list_clear (abfd);
3654
3655       /* Find the name to use in a DT_NEEDED entry that refers to this
3656          object.  If the object has a DT_SONAME entry, we use it.
3657          Otherwise, if the generic linker stuck something in
3658          elf_dt_name, we use that.  Otherwise, we just use the file
3659          name.  */
3660       if (soname == NULL || *soname == '\0')
3661         {
3662           soname = elf_dt_name (abfd);
3663           if (soname == NULL || *soname == '\0')
3664             soname = bfd_get_filename (abfd);
3665         }
3666
3667       /* Save the SONAME because sometimes the linker emulation code
3668          will need to know it.  */
3669       elf_dt_name (abfd) = soname;
3670
3671       ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
3672       if (ret < 0)
3673         goto error_return;
3674
3675       /* If we have already included this dynamic object in the
3676          link, just ignore it.  There is no reason to include a
3677          particular dynamic object more than once.  */
3678       if (ret > 0)
3679         return TRUE;
3680
3681       /* Save the DT_AUDIT entry for the linker emulation code. */
3682       elf_dt_audit (abfd) = audit;
3683     }
3684
3685   /* If this is a dynamic object, we always link against the .dynsym
3686      symbol table, not the .symtab symbol table.  The dynamic linker
3687      will only see the .dynsym symbol table, so there is no reason to
3688      look at .symtab for a dynamic object.  */
3689
3690   if (! dynamic || elf_dynsymtab (abfd) == 0)
3691     hdr = &elf_tdata (abfd)->symtab_hdr;
3692   else
3693     hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3694
3695   symcount = hdr->sh_size / bed->s->sizeof_sym;
3696
3697   /* The sh_info field of the symtab header tells us where the
3698      external symbols start.  We don't care about the local symbols at
3699      this point.  */
3700   if (elf_bad_symtab (abfd))
3701     {
3702       extsymcount = symcount;
3703       extsymoff = 0;
3704     }
3705   else
3706     {
3707       extsymcount = symcount - hdr->sh_info;
3708       extsymoff = hdr->sh_info;
3709     }
3710
3711   sym_hash = elf_sym_hashes (abfd);
3712   if (extsymcount != 0)
3713     {
3714       isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3715                                       NULL, NULL, NULL);
3716       if (isymbuf == NULL)
3717         goto error_return;
3718
3719       if (sym_hash == NULL)
3720         {
3721           /* We store a pointer to the hash table entry for each
3722              external symbol.  */
3723           amt = extsymcount * sizeof (struct elf_link_hash_entry *);
3724           sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt);
3725           if (sym_hash == NULL)
3726             goto error_free_sym;
3727           elf_sym_hashes (abfd) = sym_hash;
3728         }
3729     }
3730
3731   if (dynamic)
3732     {
3733       /* Read in any version definitions.  */
3734       if (!_bfd_elf_slurp_version_tables (abfd,
3735                                           info->default_imported_symver))
3736         goto error_free_sym;
3737
3738       /* Read in the symbol versions, but don't bother to convert them
3739          to internal format.  */
3740       if (elf_dynversym (abfd) != 0)
3741         {
3742           Elf_Internal_Shdr *versymhdr;
3743
3744           versymhdr = &elf_tdata (abfd)->dynversym_hdr;
3745           extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
3746           if (extversym == NULL)
3747             goto error_free_sym;
3748           amt = versymhdr->sh_size;
3749           if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
3750               || bfd_bread (extversym, amt, abfd) != amt)
3751             goto error_free_vers;
3752         }
3753     }
3754
3755   /* If we are loading an as-needed shared lib, save the symbol table
3756      state before we start adding symbols.  If the lib turns out
3757      to be unneeded, restore the state.  */
3758   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
3759     {
3760       unsigned int i;
3761       size_t entsize;
3762
3763       for (entsize = 0, i = 0; i < htab->root.table.size; i++)
3764         {
3765           struct bfd_hash_entry *p;
3766           struct elf_link_hash_entry *h;
3767
3768           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3769             {
3770               h = (struct elf_link_hash_entry *) p;
3771               entsize += htab->root.table.entsize;
3772               if (h->root.type == bfd_link_hash_warning)
3773                 entsize += htab->root.table.entsize;
3774             }
3775         }
3776
3777       tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
3778       old_tab = bfd_malloc (tabsize + entsize);
3779       if (old_tab == NULL)
3780         goto error_free_vers;
3781
3782       /* Remember the current objalloc pointer, so that all mem for
3783          symbols added can later be reclaimed.  */
3784       alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
3785       if (alloc_mark == NULL)
3786         goto error_free_vers;
3787
3788       /* Make a special call to the linker "notice" function to
3789          tell it that we are about to handle an as-needed lib.  */
3790       if (!(*bed->notice_as_needed) (abfd, info, notice_as_needed))
3791         goto error_free_vers;
3792
3793       /* Clone the symbol table.  Remember some pointers into the
3794          symbol table, and dynamic symbol count.  */
3795       old_ent = (char *) old_tab + tabsize;
3796       memcpy (old_tab, htab->root.table.table, tabsize);
3797       old_undefs = htab->root.undefs;
3798       old_undefs_tail = htab->root.undefs_tail;
3799       old_table = htab->root.table.table;
3800       old_size = htab->root.table.size;
3801       old_count = htab->root.table.count;
3802       old_dynsymcount = htab->dynsymcount;
3803       old_dynstr_size = _bfd_elf_strtab_size (htab->dynstr);
3804
3805       for (i = 0; i < htab->root.table.size; i++)
3806         {
3807           struct bfd_hash_entry *p;
3808           struct elf_link_hash_entry *h;
3809
3810           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
3811             {
3812               memcpy (old_ent, p, htab->root.table.entsize);
3813               old_ent = (char *) old_ent + htab->root.table.entsize;
3814               h = (struct elf_link_hash_entry *) p;
3815               if (h->root.type == bfd_link_hash_warning)
3816                 {
3817                   memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
3818                   old_ent = (char *) old_ent + htab->root.table.entsize;
3819                 }
3820             }
3821         }
3822     }
3823
3824   weaks = NULL;
3825   ever = extversym != NULL ? extversym + extsymoff : NULL;
3826   for (isym = isymbuf, isymend = isymbuf + extsymcount;
3827        isym < isymend;
3828        isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
3829     {
3830       int bind;
3831       bfd_vma value;
3832       asection *sec, *new_sec;
3833       flagword flags;
3834       const char *name;
3835       struct elf_link_hash_entry *h;
3836       struct elf_link_hash_entry *hi;
3837       bfd_boolean definition;
3838       bfd_boolean size_change_ok;
3839       bfd_boolean type_change_ok;
3840       bfd_boolean new_weakdef;
3841       bfd_boolean new_weak;
3842       bfd_boolean old_weak;
3843       bfd_boolean override;
3844       bfd_boolean common;
3845       unsigned int old_alignment;
3846       bfd *old_bfd;
3847
3848       override = FALSE;
3849
3850       flags = BSF_NO_FLAGS;
3851       sec = NULL;
3852       value = isym->st_value;
3853       common = bed->common_definition (isym);
3854
3855       bind = ELF_ST_BIND (isym->st_info);
3856       switch (bind)
3857         {
3858         case STB_LOCAL:
3859           /* This should be impossible, since ELF requires that all
3860              global symbols follow all local symbols, and that sh_info
3861              point to the first global symbol.  Unfortunately, Irix 5
3862              screws this up.  */
3863           continue;
3864
3865         case STB_GLOBAL:
3866           if (isym->st_shndx != SHN_UNDEF && !common)
3867             flags = BSF_GLOBAL;
3868           break;
3869
3870         case STB_WEAK:
3871           flags = BSF_WEAK;
3872           break;
3873
3874         case STB_GNU_UNIQUE:
3875           flags = BSF_GNU_UNIQUE;
3876           break;
3877
3878         default:
3879           /* Leave it up to the processor backend.  */
3880           break;
3881         }
3882
3883       if (isym->st_shndx == SHN_UNDEF)
3884         sec = bfd_und_section_ptr;
3885       else if (isym->st_shndx == SHN_ABS)
3886         sec = bfd_abs_section_ptr;
3887       else if (isym->st_shndx == SHN_COMMON)
3888         {
3889           sec = bfd_com_section_ptr;
3890           /* What ELF calls the size we call the value.  What ELF
3891              calls the value we call the alignment.  */
3892           value = isym->st_size;
3893         }
3894       else
3895         {
3896           sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
3897           if (sec == NULL)
3898             sec = bfd_abs_section_ptr;
3899           else if (discarded_section (sec))
3900             {
3901               /* Symbols from discarded section are undefined.  We keep
3902                  its visibility.  */
3903               sec = bfd_und_section_ptr;
3904               isym->st_shndx = SHN_UNDEF;
3905             }
3906           else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
3907             value -= sec->vma;
3908         }
3909
3910       name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3911                                               isym->st_name);
3912       if (name == NULL)
3913         goto error_free_vers;
3914
3915       if (isym->st_shndx == SHN_COMMON
3916           && (abfd->flags & BFD_PLUGIN) != 0)
3917         {
3918           asection *xc = bfd_get_section_by_name (abfd, "COMMON");
3919
3920           if (xc == NULL)
3921             {
3922               flagword sflags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP
3923                                  | SEC_EXCLUDE);
3924               xc = bfd_make_section_with_flags (abfd, "COMMON", sflags);
3925               if (xc == NULL)
3926                 goto error_free_vers;
3927             }
3928           sec = xc;
3929         }
3930       else if (isym->st_shndx == SHN_COMMON
3931                && ELF_ST_TYPE (isym->st_info) == STT_TLS
3932                && !info->relocatable)
3933         {
3934           asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
3935
3936           if (tcomm == NULL)
3937             {
3938               flagword sflags = (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_IS_COMMON
3939                                  | SEC_LINKER_CREATED);
3940               tcomm = bfd_make_section_with_flags (abfd, ".tcommon", sflags);
3941               if (tcomm == NULL)
3942                 goto error_free_vers;
3943             }
3944           sec = tcomm;
3945         }
3946       else if (bed->elf_add_symbol_hook)
3947         {
3948           if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
3949                                              &sec, &value))
3950             goto error_free_vers;
3951
3952           /* The hook function sets the name to NULL if this symbol
3953              should be skipped for some reason.  */
3954           if (name == NULL)
3955             continue;
3956         }
3957
3958       /* Sanity check that all possibilities were handled.  */
3959       if (sec == NULL)
3960         {
3961           bfd_set_error (bfd_error_bad_value);
3962           goto error_free_vers;
3963         }
3964
3965       /* Silently discard TLS symbols from --just-syms.  There's
3966          no way to combine a static TLS block with a new TLS block
3967          for this executable.  */
3968       if (ELF_ST_TYPE (isym->st_info) == STT_TLS
3969           && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
3970         continue;
3971
3972       if (bfd_is_und_section (sec)
3973           || bfd_is_com_section (sec))
3974         definition = FALSE;
3975       else
3976         definition = TRUE;
3977
3978       size_change_ok = FALSE;
3979       type_change_ok = bed->type_change_ok;
3980       old_weak = FALSE;
3981       old_alignment = 0;
3982       old_bfd = NULL;
3983       new_sec = sec;
3984
3985       if (is_elf_hash_table (htab))
3986         {
3987           Elf_Internal_Versym iver;
3988           unsigned int vernum = 0;
3989           bfd_boolean skip;
3990
3991           if (ever == NULL)
3992             {
3993               if (info->default_imported_symver)
3994                 /* Use the default symbol version created earlier.  */
3995                 iver.vs_vers = elf_tdata (abfd)->cverdefs;
3996               else
3997                 iver.vs_vers = 0;
3998             }
3999           else
4000             _bfd_elf_swap_versym_in (abfd, ever, &iver);
4001
4002           vernum = iver.vs_vers & VERSYM_VERSION;
4003
4004           /* If this is a hidden symbol, or if it is not version
4005              1, we append the version name to the symbol name.
4006              However, we do not modify a non-hidden absolute symbol
4007              if it is not a function, because it might be the version
4008              symbol itself.  FIXME: What if it isn't?  */
4009           if ((iver.vs_vers & VERSYM_HIDDEN) != 0
4010               || (vernum > 1
4011                   && (!bfd_is_abs_section (sec)
4012                       || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
4013             {
4014               const char *verstr;
4015               size_t namelen, verlen, newlen;
4016               char *newname, *p;
4017
4018               if (isym->st_shndx != SHN_UNDEF)
4019                 {
4020                   if (vernum > elf_tdata (abfd)->cverdefs)
4021                     verstr = NULL;
4022                   else if (vernum > 1)
4023                     verstr =
4024                       elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4025                   else
4026                     verstr = "";
4027
4028                   if (verstr == NULL)
4029                     {
4030                       (*_bfd_error_handler)
4031                         (_("%B: %s: invalid version %u (max %d)"),
4032                          abfd, name, vernum,
4033                          elf_tdata (abfd)->cverdefs);
4034                       bfd_set_error (bfd_error_bad_value);
4035                       goto error_free_vers;
4036                     }
4037                 }
4038               else
4039                 {
4040                   /* We cannot simply test for the number of
4041                      entries in the VERNEED section since the
4042                      numbers for the needed versions do not start
4043                      at 0.  */
4044                   Elf_Internal_Verneed *t;
4045
4046                   verstr = NULL;
4047                   for (t = elf_tdata (abfd)->verref;
4048                        t != NULL;
4049                        t = t->vn_nextref)
4050                     {
4051                       Elf_Internal_Vernaux *a;
4052
4053                       for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4054                         {
4055                           if (a->vna_other == vernum)
4056                             {
4057                               verstr = a->vna_nodename;
4058                               break;
4059                             }
4060                         }
4061                       if (a != NULL)
4062                         break;
4063                     }
4064                   if (verstr == NULL)
4065                     {
4066                       (*_bfd_error_handler)
4067                         (_("%B: %s: invalid needed version %d"),
4068                          abfd, name, vernum);
4069                       bfd_set_error (bfd_error_bad_value);
4070                       goto error_free_vers;
4071                     }
4072                 }
4073
4074               namelen = strlen (name);
4075               verlen = strlen (verstr);
4076               newlen = namelen + verlen + 2;
4077               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4078                   && isym->st_shndx != SHN_UNDEF)
4079                 ++newlen;
4080
4081               newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
4082               if (newname == NULL)
4083                 goto error_free_vers;
4084               memcpy (newname, name, namelen);
4085               p = newname + namelen;
4086               *p++ = ELF_VER_CHR;
4087               /* If this is a defined non-hidden version symbol,
4088                  we add another @ to the name.  This indicates the
4089                  default version of the symbol.  */
4090               if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4091                   && isym->st_shndx != SHN_UNDEF)
4092                 *p++ = ELF_VER_CHR;
4093               memcpy (p, verstr, verlen + 1);
4094
4095               name = newname;
4096             }
4097
4098           /* If this symbol has default visibility and the user has
4099              requested we not re-export it, then mark it as hidden.  */
4100           if (definition
4101               && !dynamic
4102               && (abfd->no_export
4103                   || (abfd->my_archive && abfd->my_archive->no_export))
4104               && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
4105             isym->st_other = (STV_HIDDEN
4106                               | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
4107
4108           if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value,
4109                                       sym_hash, &old_bfd, &old_weak,
4110                                       &old_alignment, &skip, &override,
4111                                       &type_change_ok, &size_change_ok))
4112             goto error_free_vers;
4113
4114           if (skip)
4115             continue;
4116
4117           if (override)
4118             definition = FALSE;
4119
4120           h = *sym_hash;
4121           while (h->root.type == bfd_link_hash_indirect
4122                  || h->root.type == bfd_link_hash_warning)
4123             h = (struct elf_link_hash_entry *) h->root.u.i.link;
4124
4125           if (elf_tdata (abfd)->verdef != NULL
4126               && vernum > 1
4127               && definition)
4128             h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4129         }
4130
4131       if (! (_bfd_generic_link_add_one_symbol
4132              (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4133               (struct bfd_link_hash_entry **) sym_hash)))
4134         goto error_free_vers;
4135
4136       h = *sym_hash;
4137       /* We need to make sure that indirect symbol dynamic flags are
4138          updated.  */
4139       hi = h;
4140       while (h->root.type == bfd_link_hash_indirect
4141              || h->root.type == bfd_link_hash_warning)
4142         h = (struct elf_link_hash_entry *) h->root.u.i.link;
4143
4144       *sym_hash = h;
4145
4146       new_weak = (flags & BSF_WEAK) != 0;
4147       new_weakdef = FALSE;
4148       if (dynamic
4149           && definition
4150           && new_weak
4151           && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
4152           && is_elf_hash_table (htab)
4153           && h->u.weakdef == NULL)
4154         {
4155           /* Keep a list of all weak defined non function symbols from
4156              a dynamic object, using the weakdef field.  Later in this
4157              function we will set the weakdef field to the correct
4158              value.  We only put non-function symbols from dynamic
4159              objects on this list, because that happens to be the only
4160              time we need to know the normal symbol corresponding to a
4161              weak symbol, and the information is time consuming to
4162              figure out.  If the weakdef field is not already NULL,
4163              then this symbol was already defined by some previous
4164              dynamic object, and we will be using that previous
4165              definition anyhow.  */
4166
4167           h->u.weakdef = weaks;
4168           weaks = h;
4169           new_weakdef = TRUE;
4170         }
4171
4172       /* Set the alignment of a common symbol.  */
4173       if ((common || bfd_is_com_section (sec))
4174           && h->root.type == bfd_link_hash_common)
4175         {
4176           unsigned int align;
4177
4178           if (common)
4179             align = bfd_log2 (isym->st_value);
4180           else
4181             {
4182               /* The new symbol is a common symbol in a shared object.
4183                  We need to get the alignment from the section.  */
4184               align = new_sec->alignment_power;
4185             }
4186           if (align > old_alignment)
4187             h->root.u.c.p->alignment_power = align;
4188           else
4189             h->root.u.c.p->alignment_power = old_alignment;
4190         }
4191
4192       if (is_elf_hash_table (htab))
4193         {
4194           /* Set a flag in the hash table entry indicating the type of
4195              reference or definition we just found.  A dynamic symbol
4196              is one which is referenced or defined by both a regular
4197              object and a shared object.  */
4198           bfd_boolean dynsym = FALSE;
4199
4200           /* Plugin symbols aren't normal.  Don't set def_regular or
4201              ref_regular for them, or make them dynamic.  */
4202           if ((abfd->flags & BFD_PLUGIN) != 0)
4203             ;
4204           else if (! dynamic)
4205             {
4206               if (! definition)
4207                 {
4208                   h->ref_regular = 1;
4209                   if (bind != STB_WEAK)
4210                     h->ref_regular_nonweak = 1;
4211                 }
4212               else
4213                 {
4214                   h->def_regular = 1;
4215                   if (h->def_dynamic)
4216                     {
4217                       h->def_dynamic = 0;
4218                       h->ref_dynamic = 1;
4219                     }
4220                 }
4221
4222               /* If the indirect symbol has been forced local, don't
4223                  make the real symbol dynamic.  */
4224               if ((h == hi || !hi->forced_local)
4225                   && (! info->executable
4226                       || h->def_dynamic
4227                       || h->ref_dynamic))
4228                 dynsym = TRUE;
4229             }
4230           else
4231             {
4232               if (! definition)
4233                 {
4234                   h->ref_dynamic = 1;
4235                   hi->ref_dynamic = 1;
4236                 }
4237               else
4238                 {
4239                   h->def_dynamic = 1;
4240                   hi->def_dynamic = 1;
4241                 }
4242
4243               /* If the indirect symbol has been forced local, don't
4244                  make the real symbol dynamic.  */
4245               if ((h == hi || !hi->forced_local)
4246                   && (h->def_regular
4247                       || h->ref_regular
4248                       || (h->u.weakdef != NULL
4249                           && ! new_weakdef
4250                           && h->u.weakdef->dynindx != -1)))
4251                 dynsym = TRUE;
4252             }
4253
4254           /* Check to see if we need to add an indirect symbol for
4255              the default name.  */
4256           if (definition
4257               || (!override && h->root.type == bfd_link_hash_common))
4258             if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4259                                               sec, value, &old_bfd, &dynsym))
4260               goto error_free_vers;
4261
4262           /* Check the alignment when a common symbol is involved. This
4263              can change when a common symbol is overridden by a normal
4264              definition or a common symbol is ignored due to the old
4265              normal definition. We need to make sure the maximum
4266              alignment is maintained.  */
4267           if ((old_alignment || common)
4268               && h->root.type != bfd_link_hash_common)
4269             {
4270               unsigned int common_align;
4271               unsigned int normal_align;
4272               unsigned int symbol_align;
4273               bfd *normal_bfd;
4274               bfd *common_bfd;
4275
4276               BFD_ASSERT (h->root.type == bfd_link_hash_defined
4277                           || h->root.type == bfd_link_hash_defweak);
4278
4279               symbol_align = ffs (h->root.u.def.value) - 1;
4280               if (h->root.u.def.section->owner != NULL
4281                   && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
4282                 {
4283                   normal_align = h->root.u.def.section->alignment_power;
4284                   if (normal_align > symbol_align)
4285                     normal_align = symbol_align;
4286                 }
4287               else
4288                 normal_align = symbol_align;
4289
4290               if (old_alignment)
4291                 {
4292                   common_align = old_alignment;
4293                   common_bfd = old_bfd;
4294                   normal_bfd = abfd;
4295                 }
4296               else
4297                 {
4298                   common_align = bfd_log2 (isym->st_value);
4299                   common_bfd = abfd;
4300                   normal_bfd = old_bfd;
4301                 }
4302
4303               if (normal_align < common_align)
4304                 {
4305                   /* PR binutils/2735 */
4306                   if (normal_bfd == NULL)
4307                     (*_bfd_error_handler)
4308                       (_("Warning: alignment %u of common symbol `%s' in %B is"
4309                          " greater than the alignment (%u) of its section %A"),
4310                        common_bfd, h->root.u.def.section,
4311                        1 << common_align, name, 1 << normal_align);
4312                   else
4313                     (*_bfd_error_handler)
4314                       (_("Warning: alignment %u of symbol `%s' in %B"
4315                          " is smaller than %u in %B"),
4316                        normal_bfd, common_bfd,
4317                        1 << normal_align, name, 1 << common_align);
4318                 }
4319             }
4320
4321           /* Remember the symbol size if it isn't undefined.  */
4322           if (isym->st_size != 0
4323               && isym->st_shndx != SHN_UNDEF
4324               && (definition || h->size == 0))
4325             {
4326               if (h->size != 0
4327                   && h->size != isym->st_size
4328                   && ! size_change_ok)
4329                 (*_bfd_error_handler)
4330                   (_("Warning: size of symbol `%s' changed"
4331                      " from %lu in %B to %lu in %B"),
4332                    old_bfd, abfd,
4333                    name, (unsigned long) h->size,
4334                    (unsigned long) isym->st_size);
4335
4336               h->size = isym->st_size;
4337             }
4338
4339           /* If this is a common symbol, then we always want H->SIZE
4340              to be the size of the common symbol.  The code just above
4341              won't fix the size if a common symbol becomes larger.  We
4342              don't warn about a size change here, because that is
4343              covered by --warn-common.  Allow changes between different
4344              function types.  */
4345           if (h->root.type == bfd_link_hash_common)
4346             h->size = h->root.u.c.size;
4347
4348           if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
4349               && ((definition && !new_weak)
4350                   || (old_weak && h->root.type == bfd_link_hash_common)
4351                   || h->type == STT_NOTYPE))
4352             {
4353               unsigned int type = ELF_ST_TYPE (isym->st_info);
4354
4355               /* Turn an IFUNC symbol from a DSO into a normal FUNC
4356                  symbol.  */
4357               if (type == STT_GNU_IFUNC
4358                   && (abfd->flags & DYNAMIC) != 0)
4359                 type = STT_FUNC;
4360
4361               if (h->type != type)
4362                 {
4363                   if (h->type != STT_NOTYPE && ! type_change_ok)
4364                     (*_bfd_error_handler)
4365                       (_("Warning: type of symbol `%s' changed"
4366                          " from %d to %d in %B"),
4367                        abfd, name, h->type, type);
4368
4369                   h->type = type;
4370                 }
4371             }
4372
4373           /* Merge st_other field.  */
4374           elf_merge_st_other (abfd, h, isym, definition, dynamic);
4375
4376           /* We don't want to make debug symbol dynamic.  */
4377           if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable)
4378             dynsym = FALSE;
4379
4380           /* Nor should we make plugin symbols dynamic.  */
4381           if ((abfd->flags & BFD_PLUGIN) != 0)
4382             dynsym = FALSE;
4383
4384           if (definition)
4385             {
4386               h->target_internal = isym->st_target_internal;
4387               h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
4388             }
4389
4390           if (definition && !dynamic)
4391             {
4392               char *p = strchr (name, ELF_VER_CHR);
4393               if (p != NULL && p[1] != ELF_VER_CHR)
4394                 {
4395                   /* Queue non-default versions so that .symver x, x@FOO
4396                      aliases can be checked.  */
4397                   if (!nondeflt_vers)
4398                     {
4399                       amt = ((isymend - isym + 1)
4400                              * sizeof (struct elf_link_hash_entry *));
4401                       nondeflt_vers =
4402                           (struct elf_link_hash_entry **) bfd_malloc (amt);
4403                       if (!nondeflt_vers)
4404                         goto error_free_vers;
4405                     }
4406                   nondeflt_vers[nondeflt_vers_cnt++] = h;
4407                 }
4408             }
4409
4410           if (dynsym && h->dynindx == -1)
4411             {
4412               if (! bfd_elf_link_record_dynamic_symbol (info, h))
4413                 goto error_free_vers;
4414               if (h->u.weakdef != NULL
4415                   && ! new_weakdef
4416                   && h->u.weakdef->dynindx == -1)
4417                 {
4418                   if (!bfd_elf_link_record_dynamic_symbol (info, h->u.weakdef))
4419                     goto error_free_vers;
4420                 }
4421             }
4422           else if (dynsym && h->dynindx != -1)
4423             /* If the symbol already has a dynamic index, but
4424                visibility says it should not be visible, turn it into
4425                a local symbol.  */
4426             switch (ELF_ST_VISIBILITY (h->other))
4427               {
4428               case STV_INTERNAL:
4429               case STV_HIDDEN:
4430                 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
4431                 dynsym = FALSE;
4432                 break;
4433               }
4434
4435           /* Don't add DT_NEEDED for references from the dummy bfd.  */
4436           if (!add_needed
4437               && definition
4438               && ((dynsym
4439                    && h->ref_regular_nonweak
4440                    && (old_bfd == NULL
4441                        || (old_bfd->flags & BFD_PLUGIN) == 0))
4442                   || (h->ref_dynamic_nonweak
4443                       && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
4444                       && !on_needed_list (elf_dt_name (abfd), htab->needed))))
4445             {
4446               int ret;
4447               const char *soname = elf_dt_name (abfd);
4448
4449               info->callbacks->minfo ("%!", soname, old_bfd,
4450                                       h->root.root.string);
4451
4452               /* A symbol from a library loaded via DT_NEEDED of some
4453                  other library is referenced by a regular object.
4454                  Add a DT_NEEDED entry for it.  Issue an error if
4455                  --no-add-needed is used and the reference was not
4456                  a weak one.  */
4457               if (old_bfd != NULL
4458                   && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
4459                 {
4460                   (*_bfd_error_handler)
4461                     (_("%B: undefined reference to symbol '%s'"),
4462                      old_bfd, name);
4463                   bfd_set_error (bfd_error_missing_dso);
4464                   goto error_free_vers;
4465                 }
4466
4467               elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
4468                   (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
4469
4470               add_needed = TRUE;
4471               ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4472               if (ret < 0)
4473                 goto error_free_vers;
4474
4475               BFD_ASSERT (ret == 0);
4476             }
4477         }
4478     }
4479
4480   if (extversym != NULL)
4481     {
4482       free (extversym);
4483       extversym = NULL;
4484     }
4485
4486   if (isymbuf != NULL)
4487     {
4488       free (isymbuf);
4489       isymbuf = NULL;
4490     }
4491
4492   if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4493     {
4494       unsigned int i;
4495
4496       /* Restore the symbol table.  */
4497       old_ent = (char *) old_tab + tabsize;
4498       memset (elf_sym_hashes (abfd), 0,
4499               extsymcount * sizeof (struct elf_link_hash_entry *));
4500       htab->root.table.table = old_table;
4501       htab->root.table.size = old_size;
4502       htab->root.table.count = old_count;
4503       memcpy (htab->root.table.table, old_tab, tabsize);
4504       htab->root.undefs = old_undefs;
4505       htab->root.undefs_tail = old_undefs_tail;
4506       _bfd_elf_strtab_restore_size (htab->dynstr, old_dynstr_size);
4507       for (i = 0; i < htab->root.table.size; i++)
4508         {
4509           struct bfd_hash_entry *p;
4510           struct elf_link_hash_entry *h;
4511           bfd_size_type size;
4512           unsigned int alignment_power;
4513
4514           for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4515             {
4516               h = (struct elf_link_hash_entry *) p;
4517               if (h->root.type == bfd_link_hash_warning)
4518                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4519               if (h->dynindx >= old_dynsymcount
4520                   && h->dynstr_index < old_dynstr_size)
4521                 _bfd_elf_strtab_delref (htab->dynstr, h->dynstr_index);
4522
4523               /* Preserve the maximum alignment and size for common
4524                  symbols even if this dynamic lib isn't on DT_NEEDED
4525                  since it can still be loaded at run time by another
4526                  dynamic lib.  */
4527               if (h->root.type == bfd_link_hash_common)
4528                 {
4529                   size = h->root.u.c.size;
4530                   alignment_power = h->root.u.c.p->alignment_power;
4531                 }
4532               else
4533                 {
4534                   size = 0;
4535                   alignment_power = 0;
4536                 }
4537               memcpy (p, old_ent, htab->root.table.entsize);
4538               old_ent = (char *) old_ent + htab->root.table.entsize;
4539               h = (struct elf_link_hash_entry *) p;
4540               if (h->root.type == bfd_link_hash_warning)
4541                 {
4542                   memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
4543                   old_ent = (char *) old_ent + htab->root.table.entsize;
4544                   h = (struct elf_link_hash_entry *) h->root.u.i.link;
4545                 }
4546               if (h->root.type == bfd_link_hash_common)
4547                 {
4548                   if (size > h->root.u.c.size)
4549                     h->root.u.c.size = size;
4550                   if (alignment_power > h->root.u.c.p->alignment_power)
4551                     h->root.u.c.p->alignment_power = alignment_power;
4552                 }
4553             }
4554         }
4555
4556       /* Make a special call to the linker "notice" function to
4557          tell it that symbols added for crefs may need to be removed.  */
4558       if (!(*bed->notice_as_needed) (abfd, info, notice_not_needed))
4559         goto error_free_vers;
4560
4561       free (old_tab);
4562       objalloc_free_block ((struct objalloc *) htab->root.table.memory,
4563                            alloc_mark);
4564       if (nondeflt_vers != NULL)
4565         free (nondeflt_vers);
4566       return TRUE;
4567     }
4568
4569   if (old_tab != NULL)
4570     {
4571       if (!(*bed->notice_as_needed) (abfd, info, notice_needed))
4572         goto error_free_vers;
4573       free (old_tab);
4574       old_tab = NULL;
4575     }
4576
4577   /* Now that all the symbols from this input file are created, handle
4578      .symver foo, foo@BAR such that any relocs against foo become foo@BAR.  */
4579   if (nondeflt_vers != NULL)
4580     {
4581       bfd_size_type cnt, symidx;
4582
4583       for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
4584         {
4585           struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
4586           char *shortname, *p;
4587
4588           p = strchr (h->root.root.string, ELF_VER_CHR);
4589           if (p == NULL
4590               || (h->root.type != bfd_link_hash_defined
4591                   && h->root.type != bfd_link_hash_defweak))
4592             continue;
4593
4594           amt = p - h->root.root.string;
4595           shortname = (char *) bfd_malloc (amt + 1);
4596           if (!shortname)
4597             goto error_free_vers;
4598           memcpy (shortname, h->root.root.string, amt);
4599           shortname[amt] = '\0';
4600
4601           hi = (struct elf_link_hash_entry *)
4602                bfd_link_hash_lookup (&htab->root, shortname,
4603                                      FALSE, FALSE, FALSE);
4604           if (hi != NULL
4605               && hi->root.type == h->root.type
4606               && hi->root.u.def.value == h->root.u.def.value
4607               && hi->root.u.def.section == h->root.u.def.section)
4608             {
4609               (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
4610               hi->root.type = bfd_link_hash_indirect;
4611               hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
4612               (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4613               sym_hash = elf_sym_hashes (abfd);
4614               if (sym_hash)
4615                 for (symidx = 0; symidx < extsymcount; ++symidx)
4616                   if (sym_hash[symidx] == hi)
4617                     {
4618                       sym_hash[symidx] = h;
4619                       break;
4620                     }
4621             }
4622           free (shortname);
4623         }
4624       free (nondeflt_vers);
4625       nondeflt_vers = NULL;
4626     }
4627
4628   /* Now set the weakdefs field correctly for all the weak defined
4629      symbols we found.  The only way to do this is to search all the
4630      symbols.  Since we only need the information for non functions in
4631      dynamic objects, that's the only time we actually put anything on
4632      the list WEAKS.  We need this information so that if a regular
4633      object refers to a symbol defined weakly in a dynamic object, the
4634      real symbol in the dynamic object is also put in the dynamic
4635      symbols; we also must arrange for both symbols to point to the
4636      same memory location.  We could handle the general case of symbol
4637      aliasing, but a general symbol alias can only be generated in
4638      assembler code, handling it correctly would be very time
4639      consuming, and other ELF linkers don't handle general aliasing
4640      either.  */
4641   if (weaks != NULL)
4642     {
4643       struct elf_link_hash_entry **hpp;
4644       struct elf_link_hash_entry **hppend;
4645       struct elf_link_hash_entry **sorted_sym_hash;
4646       struct elf_link_hash_entry *h;
4647       size_t sym_count;
4648
4649       /* Since we have to search the whole symbol list for each weak
4650          defined symbol, search time for N weak defined symbols will be
4651          O(N^2). Binary search will cut it down to O(NlogN).  */
4652       amt = extsymcount * sizeof (struct elf_link_hash_entry *);
4653       sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
4654       if (sorted_sym_hash == NULL)
4655         goto error_return;
4656       sym_hash = sorted_sym_hash;
4657       hpp = elf_sym_hashes (abfd);
4658       hppend = hpp + extsymcount;
4659       sym_count = 0;
4660       for (; hpp < hppend; hpp++)
4661         {
4662           h = *hpp;
4663           if (h != NULL
4664               && h->root.type == bfd_link_hash_defined
4665               && !bed->is_function_type (h->type))
4666             {
4667               *sym_hash = h;
4668               sym_hash++;
4669               sym_count++;
4670             }
4671         }
4672
4673       qsort (sorted_sym_hash, sym_count,
4674              sizeof (struct elf_link_hash_entry *),
4675              elf_sort_symbol);
4676
4677       while (weaks != NULL)
4678         {
4679           struct elf_link_hash_entry *hlook;
4680           asection *slook;
4681           bfd_vma vlook;
4682           size_t i, j, idx = 0;
4683
4684           hlook = weaks;
4685           weaks = hlook->u.weakdef;
4686           hlook->u.weakdef = NULL;
4687
4688           BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
4689                       || hlook->root.type == bfd_link_hash_defweak
4690                       || hlook->root.type == bfd_link_hash_common
4691                       || hlook->root.type == bfd_link_hash_indirect);
4692           slook = hlook->root.u.def.section;
4693           vlook = hlook->root.u.def.value;
4694
4695           i = 0;
4696           j = sym_count;
4697           while (i != j)
4698             {
4699               bfd_signed_vma vdiff;
4700               idx = (i + j) / 2;
4701               h = sorted_sym_hash[idx];
4702               vdiff = vlook - h->root.u.def.value;
4703               if (vdiff < 0)
4704                 j = idx;
4705               else if (vdiff > 0)
4706                 i = idx + 1;
4707               else
4708                 {
4709                   long sdiff = slook->id - h->root.u.def.section->id;
4710                   if (sdiff < 0)
4711                     j = idx;
4712                   else if (sdiff > 0)
4713                     i = idx + 1;
4714                   else
4715                     break;
4716                 }
4717             }
4718
4719           /* We didn't find a value/section match.  */
4720           if (i == j)
4721             continue;
4722
4723           /* With multiple aliases, or when the weak symbol is already
4724              strongly defined, we have multiple matching symbols and
4725              the binary search above may land on any of them.  Step
4726              one past the matching symbol(s).  */
4727           while (++idx != j)
4728             {
4729               h = sorted_sym_hash[idx];
4730               if (h->root.u.def.section != slook
4731                   || h->root.u.def.value != vlook)
4732                 break;
4733             }
4734
4735           /* Now look back over the aliases.  Since we sorted by size
4736              as well as value and section, we'll choose the one with
4737              the largest size.  */
4738           while (idx-- != i)
4739             {
4740               h = sorted_sym_hash[idx];
4741
4742               /* Stop if value or section doesn't match.  */
4743               if (h->root.u.def.section != slook
4744                   || h->root.u.def.value != vlook)
4745                 break;
4746               else if (h != hlook)
4747                 {
4748                   hlook->u.weakdef = h;
4749
4750                   /* If the weak definition is in the list of dynamic
4751                      symbols, make sure the real definition is put
4752                      there as well.  */
4753                   if (hlook->dynindx != -1 && h->dynindx == -1)
4754                     {
4755                       if (! bfd_elf_link_record_dynamic_symbol (info, h))
4756                         {
4757                         err_free_sym_hash:
4758                           free (sorted_sym_hash);
4759                           goto error_return;
4760                         }
4761                     }
4762
4763                   /* If the real definition is in the list of dynamic
4764                      symbols, make sure the weak definition is put
4765                      there as well.  If we don't do this, then the
4766                      dynamic loader might not merge the entries for the
4767                      real definition and the weak definition.  */
4768                   if (h->dynindx != -1 && hlook->dynindx == -1)
4769                     {
4770                       if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
4771                         goto err_free_sym_hash;
4772                     }
4773                   break;
4774                 }
4775             }
4776         }
4777
4778       free (sorted_sym_hash);
4779     }
4780
4781   if (bed->check_directives
4782       && !(*bed->check_directives) (abfd, info))
4783     return FALSE;
4784
4785   /* If this object is the same format as the output object, and it is
4786      not a shared library, then let the backend look through the
4787      relocs.
4788
4789      This is required to build global offset table entries and to
4790      arrange for dynamic relocs.  It is not required for the
4791      particular common case of linking non PIC code, even when linking
4792      against shared libraries, but unfortunately there is no way of
4793      knowing whether an object file has been compiled PIC or not.
4794      Looking through the relocs is not particularly time consuming.
4795      The problem is that we must either (1) keep the relocs in memory,
4796      which causes the linker to require additional runtime memory or
4797      (2) read the relocs twice from the input file, which wastes time.
4798      This would be a good case for using mmap.
4799
4800      I have no idea how to handle linking PIC code into a file of a
4801      different format.  It probably can't be done.  */
4802   if (! dynamic
4803       && is_elf_hash_table (htab)
4804       && bed->check_relocs != NULL
4805       && elf_object_id (abfd) == elf_hash_table_id (htab)
4806       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
4807     {
4808       asection *o;
4809
4810       for (o = abfd->sections; o != NULL; o = o->next)
4811         {
4812           Elf_Internal_Rela *internal_relocs;
4813           bfd_boolean ok;
4814
4815           if ((o->flags & SEC_RELOC) == 0
4816               || o->reloc_count == 0
4817               || ((info->strip == strip_all || info->strip == strip_debugger)
4818                   && (o->flags & SEC_DEBUGGING) != 0)
4819               || bfd_is_abs_section (o->output_section))
4820             continue;
4821
4822           internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
4823                                                        info->keep_memory);
4824           if (internal_relocs == NULL)
4825             goto error_return;
4826
4827           ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
4828
4829           if (elf_section_data (o)->relocs != internal_relocs)
4830             free (internal_relocs);
4831
4832           if (! ok)
4833             goto error_return;
4834         }
4835     }
4836
4837   /* If this is a non-traditional link, try to optimize the handling
4838      of the .stab/.stabstr sections.  */
4839   if (! dynamic
4840       && ! info->traditional_format
4841       && is_elf_hash_table (htab)
4842       && (info->strip != strip_all && info->strip != strip_debugger))
4843     {
4844       asection *stabstr;
4845
4846       stabstr = bfd_get_section_by_name (abfd, ".stabstr");
4847       if (stabstr != NULL)
4848         {
4849           bfd_size_type string_offset = 0;
4850           asection *stab;
4851
4852           for (stab = abfd->sections; stab; stab = stab->next)
4853             if (CONST_STRNEQ (stab->name, ".stab")
4854                 && (!stab->name[5] ||
4855                     (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
4856                 && (stab->flags & SEC_MERGE) == 0
4857                 && !bfd_is_abs_section (stab->output_section))
4858               {
4859                 struct bfd_elf_section_data *secdata;
4860
4861                 secdata = elf_section_data (stab);
4862                 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
4863                                                stabstr, &secdata->sec_info,
4864                                                &string_offset))
4865                   goto error_return;
4866                 if (secdata->sec_info)
4867                   stab->sec_info_type = SEC_INFO_TYPE_STABS;
4868             }
4869         }
4870     }
4871
4872   if (is_elf_hash_table (htab) && add_needed)
4873     {
4874       /* Add this bfd to the loaded list.  */
4875       struct elf_link_loaded_list *n;
4876
4877       n = (struct elf_link_loaded_list *)
4878           bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
4879       if (n == NULL)
4880         goto error_return;
4881       n->abfd = abfd;
4882       n->next = htab->loaded;
4883       htab->loaded = n;
4884     }
4885
4886   return TRUE;
4887
4888  error_free_vers:
4889   if (old_tab != NULL)
4890     free (old_tab);
4891   if (nondeflt_vers != NULL)
4892     free (nondeflt_vers);
4893   if (extversym != NULL)
4894     free (extversym);
4895  error_free_sym:
4896   if (isymbuf != NULL)
4897     free (isymbuf);
4898  error_return:
4899   return FALSE;
4900 }
4901
4902 /* Return the linker hash table entry of a symbol that might be
4903    satisfied by an archive symbol.  Return -1 on error.  */
4904
4905 struct elf_link_hash_entry *
4906 _bfd_elf_archive_symbol_lookup (bfd *abfd,
4907                                 struct bfd_link_info *info,
4908                                 const char *name)
4909 {
4910   struct elf_link_hash_entry *h;
4911   char *p, *copy;
4912   size_t len, first;
4913
4914   h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE);
4915   if (h != NULL)
4916     return h;
4917
4918   /* If this is a default version (the name contains @@), look up the
4919      symbol again with only one `@' as well as without the version.
4920      The effect is that references to the symbol with and without the
4921      version will be matched by the default symbol in the archive.  */
4922
4923   p = strchr (name, ELF_VER_CHR);
4924   if (p == NULL || p[1] != ELF_VER_CHR)
4925     return h;
4926
4927   /* First check with only one `@'.  */
4928   len = strlen (name);
4929   copy = (char *) bfd_alloc (abfd, len);
4930   if (copy == NULL)
4931     return (struct elf_link_hash_entry *) 0 - 1;
4932
4933   first = p - name + 1;
4934   memcpy (copy, name, first);
4935   memcpy (copy + first, name + first + 1, len - first);
4936
4937   h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE);
4938   if (h == NULL)
4939     {
4940       /* We also need to check references to the symbol without the
4941          version.  */
4942       copy[first - 1] = '\0';
4943       h = elf_link_hash_lookup (elf_hash_table (info), copy,
4944                                 FALSE, FALSE, TRUE);
4945     }
4946
4947   bfd_release (abfd, copy);
4948   return h;
4949 }
4950
4951 /* Add symbols from an ELF archive file to the linker hash table.  We
4952    don't use _bfd_generic_link_add_archive_symbols because we need to
4953    handle versioned symbols.
4954
4955    Fortunately, ELF archive handling is simpler than that done by
4956    _bfd_generic_link_add_archive_symbols, which has to allow for a.out
4957    oddities.  In ELF, if we find a symbol in the archive map, and the
4958    symbol is currently undefined, we know that we must pull in that
4959    object file.
4960
4961    Unfortunately, we do have to make multiple passes over the symbol
4962    table until nothing further is resolved.  */
4963
4964 static bfd_boolean
4965 elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
4966 {
4967   symindex c;
4968   unsigned char *included = NULL;
4969   carsym *symdefs;
4970   bfd_boolean loop;
4971   bfd_size_type amt;
4972   const struct elf_backend_data *bed;
4973   struct elf_link_hash_entry * (*archive_symbol_lookup)
4974     (bfd *, struct bfd_link_info *, const char *);
4975
4976   if (! bfd_has_map (abfd))
4977     {
4978       /* An empty archive is a special case.  */
4979       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
4980         return TRUE;
4981       bfd_set_error (bfd_error_no_armap);
4982       return FALSE;
4983     }
4984
4985   /* Keep track of all symbols we know to be already defined, and all
4986      files we know to be already included.  This is to speed up the
4987      second and subsequent passes.  */
4988   c = bfd_ardata (abfd)->symdef_count;
4989   if (c == 0)
4990     return TRUE;
4991   amt = c;
4992   amt *= sizeof (*included);
4993   included = (unsigned char *) bfd_zmalloc (amt);
4994   if (included == NULL)
4995     return FALSE;
4996
4997   symdefs = bfd_ardata (abfd)->symdefs;
4998   bed = get_elf_backend_data (abfd);
4999   archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
5000
5001   do
5002     {
5003       file_ptr last;
5004       symindex i;
5005       carsym *symdef;
5006       carsym *symdefend;
5007
5008       loop = FALSE;
5009       last = -1;
5010
5011       symdef = symdefs;
5012       symdefend = symdef + c;
5013       for (i = 0; symdef < symdefend; symdef++, i++)
5014         {
5015           struct elf_link_hash_entry *h;
5016           bfd *element;
5017           struct bfd_link_hash_entry *undefs_tail;
5018           symindex mark;
5019
5020           if (included[i])
5021             continue;
5022           if (symdef->file_offset == last)
5023             {
5024               included[i] = TRUE;
5025               continue;
5026             }
5027
5028           h = archive_symbol_lookup (abfd, info, symdef->name);
5029           if (h == (struct elf_link_hash_entry *) 0 - 1)
5030             goto error_return;
5031
5032           if (h == NULL)
5033             continue;
5034
5035           if (h->root.type == bfd_link_hash_common)
5036             {
5037               /* We currently have a common symbol.  The archive map contains
5038                  a reference to this symbol, so we may want to include it.  We
5039                  only want to include it however, if this archive element
5040                  contains a definition of the symbol, not just another common
5041                  declaration of it.
5042
5043                  Unfortunately some archivers (including GNU ar) will put
5044                  declarations of common symbols into their archive maps, as
5045                  well as real definitions, so we cannot just go by the archive
5046                  map alone.  Instead we must read in the element's symbol
5047                  table and check that to see what kind of symbol definition
5048                  this is.  */
5049               if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5050                 continue;
5051             }
5052           else if (h->root.type != bfd_link_hash_undefined)
5053             {
5054               if (h->root.type != bfd_link_hash_undefweak)
5055                 /* Symbol must be defined.  Don't check it again.  */
5056                 included[i] = TRUE;
5057               continue;
5058             }
5059
5060           /* We need to include this archive member.  */
5061           element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5062           if (element == NULL)
5063             goto error_return;
5064
5065           if (! bfd_check_format (element, bfd_object))
5066             goto error_return;
5067
5068           undefs_tail = info->hash->undefs_tail;
5069
5070           if (!(*info->callbacks
5071                 ->add_archive_element) (info, element, symdef->name, &element))
5072             goto error_return;
5073           if (!bfd_link_add_symbols (element, info))
5074             goto error_return;
5075
5076           /* If there are any new undefined symbols, we need to make
5077              another pass through the archive in order to see whether
5078              they can be defined.  FIXME: This isn't perfect, because
5079              common symbols wind up on undefs_tail and because an
5080              undefined symbol which is defined later on in this pass
5081              does not require another pass.  This isn't a bug, but it
5082              does make the code less efficient than it could be.  */
5083           if (undefs_tail != info->hash->undefs_tail)
5084             loop = TRUE;
5085
5086           /* Look backward to mark all symbols from this object file
5087              which we have already seen in this pass.  */
5088           mark = i;
5089           do
5090             {
5091               included[mark] = TRUE;
5092               if (mark == 0)
5093                 break;
5094               --mark;
5095             }
5096           while (symdefs[mark].file_offset == symdef->file_offset);
5097
5098           /* We mark subsequent symbols from this object file as we go
5099              on through the loop.  */
5100           last = symdef->file_offset;
5101         }
5102     }
5103   while (loop);
5104
5105   free (included);
5106
5107   return TRUE;
5108
5109  error_return:
5110   if (included != NULL)
5111     free (included);
5112   return FALSE;
5113 }
5114
5115 /* Given an ELF BFD, add symbols to the global hash table as
5116    appropriate.  */
5117
5118 bfd_boolean
5119 bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5120 {
5121   switch (bfd_get_format (abfd))
5122     {
5123     case bfd_object:
5124       return elf_link_add_object_symbols (abfd, info);
5125     case bfd_archive:
5126       return elf_link_add_archive_symbols (abfd, info);
5127     default:
5128       bfd_set_error (bfd_error_wrong_format);
5129       return FALSE;
5130     }
5131 }
5132 \f
5133 struct hash_codes_info
5134 {
5135   unsigned long *hashcodes;
5136   bfd_boolean error;
5137 };
5138
5139 /* This function will be called though elf_link_hash_traverse to store
5140    all hash value of the exported symbols in an array.  */
5141
5142 static bfd_boolean
5143 elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5144 {
5145   struct hash_codes_info *inf = (struct hash_codes_info *) data;
5146   const char *name;
5147   char *p;
5148   unsigned long ha;
5149   char *alc = NULL;
5150
5151   /* Ignore indirect symbols.  These are added by the versioning code.  */
5152   if (h->dynindx == -1)
5153     return TRUE;
5154
5155   name = h->root.root.string;
5156   p = strchr (name, ELF_VER_CHR);
5157   if (p != NULL)
5158     {
5159       alc = (char *) bfd_malloc (p - name + 1);
5160       if (alc == NULL)
5161         {
5162           inf->error = TRUE;
5163           return FALSE;
5164         }
5165       memcpy (alc, name, p - name);
5166       alc[p - name] = '\0';
5167       name = alc;
5168     }
5169
5170   /* Compute the hash value.  */
5171   ha = bfd_elf_hash (name);
5172
5173   /* Store the found hash value in the array given as the argument.  */
5174   *(inf->hashcodes)++ = ha;
5175
5176   /* And store it in the struct so that we can put it in the hash table
5177      later.  */
5178   h->u.elf_hash_value = ha;
5179
5180   if (alc != NULL)
5181     free (alc);
5182
5183   return TRUE;
5184 }
5185
5186 struct collect_gnu_hash_codes
5187 {
5188   bfd *output_bfd;
5189   const struct elf_backend_data *bed;
5190   unsigned long int nsyms;
5191   unsigned long int maskbits;
5192   unsigned long int *hashcodes;
5193   unsigned long int *hashval;
5194   unsigned long int *indx;
5195   unsigned long int *counts;
5196   bfd_vma *bitmask;
5197   bfd_byte *contents;
5198   long int min_dynindx;
5199   unsigned long int bucketcount;
5200   unsigned long int symindx;
5201   long int local_indx;
5202   long int shift1, shift2;
5203   unsigned long int mask;
5204   bfd_boolean error;
5205 };
5206
5207 /* This function will be called though elf_link_hash_traverse to store
5208    all hash value of the exported symbols in an array.  */
5209
5210 static bfd_boolean
5211 elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5212 {
5213   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5214   const char *name;
5215   char *p;
5216   unsigned long ha;
5217   char *alc = NULL;
5218
5219   /* Ignore indirect symbols.  These are added by the versioning code.  */
5220   if (h->dynindx == -1)
5221     return TRUE;
5222
5223   /* Ignore also local symbols and undefined symbols.  */
5224   if (! (*s->bed->elf_hash_symbol) (h))
5225     return TRUE;
5226
5227   name = h->root.root.string;
5228   p = strchr (name, ELF_VER_CHR);
5229   if (p != NULL)
5230     {
5231       alc = (char *) bfd_malloc (p - name + 1);
5232       if (alc == NULL)
5233         {
5234           s->error = TRUE;
5235           return FALSE;
5236         }
5237       memcpy (alc, name, p - name);
5238       alc[p - name] = '\0';
5239       name = alc;
5240     }
5241
5242   /* Compute the hash value.  */
5243   ha = bfd_elf_gnu_hash (name);
5244
5245   /* Store the found hash value in the array for compute_bucket_count,
5246      and also for .dynsym reordering purposes.  */
5247   s->hashcodes[s->nsyms] = ha;
5248   s->hashval[h->dynindx] = ha;
5249   ++s->nsyms;
5250   if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5251     s->min_dynindx = h->dynindx;
5252
5253   if (alc != NULL)
5254     free (alc);
5255
5256   return TRUE;
5257 }
5258
5259 /* This function will be called though elf_link_hash_traverse to do
5260    final dynaminc symbol renumbering.  */
5261
5262 static bfd_boolean
5263 elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5264 {
5265   struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
5266   unsigned long int bucket;
5267   unsigned long int val;
5268
5269   /* Ignore indirect symbols.  */
5270   if (h->dynindx == -1)
5271     return TRUE;
5272
5273   /* Ignore also local symbols and undefined symbols.  */
5274   if (! (*s->bed->elf_hash_symbol) (h))
5275     {
5276       if (h->dynindx >= s->min_dynindx)
5277         h->dynindx = s->local_indx++;
5278       return TRUE;
5279     }
5280
5281   bucket = s->hashval[h->dynindx] % s->bucketcount;
5282   val = (s->hashval[h->dynindx] >> s->shift1)
5283         & ((s->maskbits >> s->shift1) - 1);
5284   s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5285   s->bitmask[val]
5286     |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5287   val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5288   if (s->counts[bucket] == 1)
5289     /* Last element terminates the chain.  */
5290     val |= 1;
5291   bfd_put_32 (s->output_bfd, val,
5292               s->contents + (s->indx[bucket] - s->symindx) * 4);
5293   --s->counts[bucket];
5294   h->dynindx = s->indx[bucket]++;
5295   return TRUE;
5296 }
5297
5298 /* Return TRUE if symbol should be hashed in the `.gnu.hash' section.  */
5299
5300 bfd_boolean
5301 _bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5302 {
5303   return !(h->forced_local
5304            || h->root.type == bfd_link_hash_undefined
5305            || h->root.type == bfd_link_hash_undefweak
5306            || ((h->root.type == bfd_link_hash_defined
5307                 || h->root.type == bfd_link_hash_defweak)
5308                && h->root.u.def.section->output_section == NULL));
5309 }
5310
5311 /* Array used to determine the number of hash table buckets to use
5312    based on the number of symbols there are.  If there are fewer than
5313    3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5314    fewer than 37 we use 17 buckets, and so forth.  We never use more
5315    than 32771 buckets.  */
5316
5317 static const size_t elf_buckets[] =
5318 {
5319   1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5320   16411, 32771, 0
5321 };
5322
5323 /* Compute bucket count for hashing table.  We do not use a static set
5324    of possible tables sizes anymore.  Instead we determine for all
5325    possible reasonable sizes of the table the outcome (i.e., the
5326    number of collisions etc) and choose the best solution.  The
5327    weighting functions are not too simple to allow the table to grow
5328    without bounds.  Instead one of the weighting factors is the size.
5329    Therefore the result is always a good payoff between few collisions
5330    (= short chain lengths) and table size.  */
5331 static size_t
5332 compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED,
5333                       unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5334                       unsigned long int nsyms,
5335                       int gnu_hash)
5336 {
5337   size_t best_size = 0;
5338   unsigned long int i;
5339
5340   /* We have a problem here.  The following code to optimize the table
5341      size requires an integer type with more the 32 bits.  If
5342      BFD_HOST_U_64_BIT is set we know about such a type.  */
5343 #ifdef BFD_HOST_U_64_BIT
5344   if (info->optimize)
5345     {
5346       size_t minsize;
5347       size_t maxsize;
5348       BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5349       bfd *dynobj = elf_hash_table (info)->dynobj;
5350       size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5351       const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
5352       unsigned long int *counts;
5353       bfd_size_type amt;
5354       unsigned int no_improvement_count = 0;
5355
5356       /* Possible optimization parameters: if we have NSYMS symbols we say
5357          that the hashing table must at least have NSYMS/4 and at most
5358          2*NSYMS buckets.  */
5359       minsize = nsyms / 4;
5360       if (minsize == 0)
5361         minsize = 1;
5362       best_size = maxsize = nsyms * 2;
5363       if (gnu_hash)
5364         {
5365           if (minsize < 2)
5366             minsize = 2;
5367           if ((best_size & 31) == 0)
5368             ++best_size;
5369         }
5370
5371       /* Create array where we count the collisions in.  We must use bfd_malloc
5372          since the size could be large.  */
5373       amt = maxsize;
5374       amt *= sizeof (unsigned long int);
5375       counts = (unsigned long int *) bfd_malloc (amt);
5376       if (counts == NULL)
5377         return 0;
5378
5379       /* Compute the "optimal" size for the hash table.  The criteria is a
5380          minimal chain length.  The minor criteria is (of course) the size
5381          of the table.  */
5382       for (i = minsize; i < maxsize; ++i)
5383         {
5384           /* Walk through the array of hashcodes and count the collisions.  */
5385           BFD_HOST_U_64_BIT max;
5386           unsigned long int j;
5387           unsigned long int fact;
5388
5389           if (gnu_hash && (i & 31) == 0)
5390             continue;
5391
5392           memset (counts, '\0', i * sizeof (unsigned long int));
5393
5394           /* Determine how often each hash bucket is used.  */
5395           for (j = 0; j < nsyms; ++j)
5396             ++counts[hashcodes[j] % i];
5397
5398           /* For the weight function we need some information about the
5399              pagesize on the target.  This is information need not be 100%
5400              accurate.  Since this information is not available (so far) we
5401              define it here to a reasonable default value.  If it is crucial
5402              to have a better value some day simply define this value.  */
5403 # ifndef BFD_TARGET_PAGESIZE
5404 #  define BFD_TARGET_PAGESIZE   (4096)
5405 # endif
5406
5407           /* We in any case need 2 + DYNSYMCOUNT entries for the size values
5408              and the chains.  */
5409           max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
5410
5411 # if 1
5412           /* Variant 1: optimize for short chains.  We add the squares
5413              of all the chain lengths (which favors many small chain
5414              over a few long chains).  */
5415           for (j = 0; j < i; ++j)
5416             max += counts[j] * counts[j];
5417
5418           /* This adds penalties for the overall size of the table.  */
5419           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5420           max *= fact * fact;
5421 # else
5422           /* Variant 2: Optimize a lot more for small table.  Here we
5423              also add squares of the size but we also add penalties for
5424              empty slots (the +1 term).  */
5425           for (j = 0; j < i; ++j)
5426             max += (1 + counts[j]) * (1 + counts[j]);
5427
5428           /* The overall size of the table is considered, but not as
5429              strong as in variant 1, where it is squared.  */
5430           fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5431           max *= fact;
5432 # endif
5433
5434           /* Compare with current best results.  */
5435           if (max < best_chlen)
5436             {
5437               best_chlen = max;
5438               best_size = i;
5439               no_improvement_count = 0;
5440             }
5441           /* PR 11843: Avoid futile long searches for the best bucket size
5442              when there are a large number of symbols.  */
5443           else if (++no_improvement_count == 100)
5444             break;
5445         }
5446
5447       free (counts);
5448     }
5449   else
5450 #endif /* defined (BFD_HOST_U_64_BIT) */
5451     {
5452       /* This is the fallback solution if no 64bit type is available or if we
5453          are not supposed to spend much time on optimizations.  We select the
5454          bucket count using a fixed set of numbers.  */
5455       for (i = 0; elf_buckets[i] != 0; i++)
5456         {
5457           best_size = elf_buckets[i];
5458           if (nsyms < elf_buckets[i + 1])
5459             break;
5460         }
5461       if (gnu_hash && best_size < 2)
5462         best_size = 2;
5463     }
5464
5465   return best_size;
5466 }
5467
5468 /* Size any SHT_GROUP section for ld -r.  */
5469
5470 bfd_boolean
5471 _bfd_elf_size_group_sections (struct bfd_link_info *info)
5472 {
5473   bfd *ibfd;
5474
5475   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
5476     if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
5477         && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
5478       return FALSE;
5479   return TRUE;
5480 }
5481
5482 /* Set a default stack segment size.  The value in INFO wins.  If it
5483    is unset, LEGACY_SYMBOL's value is used, and if that symbol is
5484    undefined it is initialized.  */
5485
5486 bfd_boolean
5487 bfd_elf_stack_segment_size (bfd *output_bfd,
5488                             struct bfd_link_info *info,
5489                             const char *legacy_symbol,
5490                             bfd_vma default_size)
5491 {
5492   struct elf_link_hash_entry *h = NULL;
5493
5494   /* Look for legacy symbol.  */
5495   if (legacy_symbol)
5496     h = elf_link_hash_lookup (elf_hash_table (info), legacy_symbol,
5497                               FALSE, FALSE, FALSE);
5498   if (h && (h->root.type == bfd_link_hash_defined
5499             || h->root.type == bfd_link_hash_defweak)
5500       && h->def_regular
5501       && (h->type == STT_NOTYPE || h->type == STT_OBJECT))
5502     {
5503       /* The symbol has no type if specified on the command line.  */
5504       h->type = STT_OBJECT;
5505       if (info->stacksize)
5506         (*_bfd_error_handler) (_("%B: stack size specified and %s set"),
5507                                output_bfd, legacy_symbol);
5508       else if (h->root.u.def.section != bfd_abs_section_ptr)
5509         (*_bfd_error_handler) (_("%B: %s not absolute"),
5510                                output_bfd, legacy_symbol);
5511       else
5512         info->stacksize = h->root.u.def.value;
5513     }
5514
5515   if (!info->stacksize)
5516     /* If the user didn't set a size, or explicitly inhibit the
5517        size, set it now.  */
5518     info->stacksize = default_size;
5519
5520   /* Provide the legacy symbol, if it is referenced.  */
5521   if (h && (h->root.type == bfd_link_hash_undefined
5522             || h->root.type == bfd_link_hash_undefweak))
5523     {
5524       struct bfd_link_hash_entry *bh = NULL;
5525
5526       if (!(_bfd_generic_link_add_one_symbol
5527             (info, output_bfd, legacy_symbol,
5528              BSF_GLOBAL, bfd_abs_section_ptr,
5529              info->stacksize >= 0 ? info->stacksize : 0,
5530              NULL, FALSE, get_elf_backend_data (output_bfd)->collect, &bh)))
5531         return FALSE;
5532
5533       h = (struct elf_link_hash_entry *) bh;
5534       h->def_regular = 1;
5535       h->type = STT_OBJECT;
5536     }
5537
5538   return TRUE;
5539 }
5540
5541 /* Set up the sizes and contents of the ELF dynamic sections.  This is
5542    called by the ELF linker emulation before_allocation routine.  We
5543    must set the sizes of the sections before the linker sets the
5544    addresses of the various sections.  */
5545
5546 bfd_boolean
5547 bfd_elf_size_dynamic_sections (bfd *output_bfd,
5548                                const char *soname,
5549                                const char *rpath,
5550                                const char *filter_shlib,
5551                                const char *audit,
5552                                const char *depaudit,
5553                                const char * const *auxiliary_filters,
5554                                struct bfd_link_info *info,
5555                                asection **sinterpptr)
5556 {
5557   bfd_size_type soname_indx;
5558   bfd *dynobj;
5559   const struct elf_backend_data *bed;
5560   struct elf_info_failed asvinfo;
5561
5562   *sinterpptr = NULL;
5563
5564   soname_indx = (bfd_size_type) -1;
5565
5566   if (!is_elf_hash_table (info->hash))
5567     return TRUE;
5568
5569   bed = get_elf_backend_data (output_bfd);
5570
5571   /* Any syms created from now on start with -1 in
5572      got.refcount/offset and plt.refcount/offset.  */
5573   elf_hash_table (info)->init_got_refcount
5574     = elf_hash_table (info)->init_got_offset;
5575   elf_hash_table (info)->init_plt_refcount
5576     = elf_hash_table (info)->init_plt_offset;
5577
5578   if (info->relocatable
5579       && !_bfd_elf_size_group_sections (info))
5580     return FALSE;
5581
5582   /* The backend may have to create some sections regardless of whether
5583      we're dynamic or not.  */
5584   if (bed->elf_backend_always_size_sections
5585       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
5586     return FALSE;
5587
5588   /* Determine any GNU_STACK segment requirements, after the backend
5589      has had a chance to set a default segment size.  */
5590   if (info->execstack)
5591     elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
5592   else if (info->noexecstack)
5593     elf_stack_flags (output_bfd) = PF_R | PF_W;
5594   else
5595     {
5596       bfd *inputobj;
5597       asection *notesec = NULL;
5598       int exec = 0;
5599
5600       for (inputobj = info->input_bfds;
5601            inputobj;
5602            inputobj = inputobj->link.next)
5603         {
5604           asection *s;
5605
5606           if (inputobj->flags
5607               & (DYNAMIC | EXEC_P | BFD_PLUGIN | BFD_LINKER_CREATED))
5608             continue;
5609           s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
5610           if (s)
5611             {
5612               if (s->flags & SEC_CODE)
5613                 exec = PF_X;
5614               notesec = s;
5615             }
5616           else if (bed->default_execstack)
5617             exec = PF_X;
5618         }
5619       if (notesec || info->stacksize > 0)
5620         elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
5621       if (notesec && exec && info->relocatable
5622           && notesec->output_section != bfd_abs_section_ptr)
5623         notesec->output_section->flags |= SEC_CODE;
5624     }
5625
5626   dynobj = elf_hash_table (info)->dynobj;
5627
5628   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
5629     {
5630       struct elf_info_failed eif;
5631       struct elf_link_hash_entry *h;
5632       asection *dynstr;
5633       struct bfd_elf_version_tree *t;
5634       struct bfd_elf_version_expr *d;
5635       asection *s;
5636       bfd_boolean all_defined;
5637
5638       *sinterpptr = bfd_get_linker_section (dynobj, ".interp");
5639       BFD_ASSERT (*sinterpptr != NULL || !info->executable);
5640
5641       if (soname != NULL)
5642         {
5643           soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5644                                              soname, TRUE);
5645           if (soname_indx == (bfd_size_type) -1
5646               || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
5647             return FALSE;
5648         }
5649
5650       if (info->symbolic)
5651         {
5652           if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
5653             return FALSE;
5654           info->flags |= DF_SYMBOLIC;
5655         }
5656
5657       if (rpath != NULL)
5658         {
5659           bfd_size_type indx;
5660           bfd_vma tag;
5661
5662           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
5663                                       TRUE);
5664           if (indx == (bfd_size_type) -1)
5665             return FALSE;
5666
5667           tag = info->new_dtags ? DT_RUNPATH : DT_RPATH;
5668           if (!_bfd_elf_add_dynamic_entry (info, tag, indx))
5669             return FALSE;
5670         }
5671
5672       if (filter_shlib != NULL)
5673         {
5674           bfd_size_type indx;
5675
5676           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5677                                       filter_shlib, TRUE);
5678           if (indx == (bfd_size_type) -1
5679               || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
5680             return FALSE;
5681         }
5682
5683       if (auxiliary_filters != NULL)
5684         {
5685           const char * const *p;
5686
5687           for (p = auxiliary_filters; *p != NULL; p++)
5688             {
5689               bfd_size_type indx;
5690
5691               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
5692                                           *p, TRUE);
5693               if (indx == (bfd_size_type) -1
5694                   || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
5695                 return FALSE;
5696             }
5697         }
5698
5699       if (audit != NULL)
5700         {
5701           bfd_size_type indx;
5702
5703           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
5704                                       TRUE);
5705           if (indx == (bfd_size_type) -1
5706               || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
5707             return FALSE;
5708         }
5709
5710       if (depaudit != NULL)
5711         {
5712           bfd_size_type indx;
5713
5714           indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
5715                                       TRUE);
5716           if (indx == (bfd_size_type) -1
5717               || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
5718             return FALSE;
5719         }
5720
5721       eif.info = info;
5722       eif.failed = FALSE;
5723
5724       /* If we are supposed to export all symbols into the dynamic symbol
5725          table (this is not the normal case), then do so.  */
5726       if (info->export_dynamic
5727           || (info->executable && info->dynamic))
5728         {
5729           elf_link_hash_traverse (elf_hash_table (info),
5730                                   _bfd_elf_export_symbol,
5731                                   &eif);
5732           if (eif.failed)
5733             return FALSE;
5734         }
5735
5736       /* Make all global versions with definition.  */
5737       for (t = info->version_info; t != NULL; t = t->next)
5738         for (d = t->globals.list; d != NULL; d = d->next)
5739           if (!d->symver && d->literal)
5740             {
5741               const char *verstr, *name;
5742               size_t namelen, verlen, newlen;
5743               char *newname, *p, leading_char;
5744               struct elf_link_hash_entry *newh;
5745
5746               leading_char = bfd_get_symbol_leading_char (output_bfd);
5747               name = d->pattern;
5748               namelen = strlen (name) + (leading_char != '\0');
5749               verstr = t->name;
5750               verlen = strlen (verstr);
5751               newlen = namelen + verlen + 3;
5752
5753               newname = (char *) bfd_malloc (newlen);
5754               if (newname == NULL)
5755                 return FALSE;
5756               newname[0] = leading_char;
5757               memcpy (newname + (leading_char != '\0'), name, namelen);
5758
5759               /* Check the hidden versioned definition.  */
5760               p = newname + namelen;
5761               *p++ = ELF_VER_CHR;
5762               memcpy (p, verstr, verlen + 1);
5763               newh = elf_link_hash_lookup (elf_hash_table (info),
5764                                            newname, FALSE, FALSE,
5765                                            FALSE);
5766               if (newh == NULL
5767                   || (newh->root.type != bfd_link_hash_defined
5768                       && newh->root.type != bfd_link_hash_defweak))
5769                 {
5770                   /* Check the default versioned definition.  */
5771                   *p++ = ELF_VER_CHR;
5772                   memcpy (p, verstr, verlen + 1);
5773                   newh = elf_link_hash_lookup (elf_hash_table (info),
5774                                                newname, FALSE, FALSE,
5775                                                FALSE);
5776                 }
5777               free (newname);
5778
5779               /* Mark this version if there is a definition and it is
5780                  not defined in a shared object.  */
5781               if (newh != NULL
5782                   && !newh->def_dynamic
5783                   && (newh->root.type == bfd_link_hash_defined
5784                       || newh->root.type == bfd_link_hash_defweak))
5785                 d->symver = 1;
5786             }
5787
5788       /* Attach all the symbols to their version information.  */
5789       asvinfo.info = info;
5790       asvinfo.failed = FALSE;
5791
5792       elf_link_hash_traverse (elf_hash_table (info),
5793                               _bfd_elf_link_assign_sym_version,
5794                               &asvinfo);
5795       if (asvinfo.failed)
5796         return FALSE;
5797
5798       if (!info->allow_undefined_version)
5799         {
5800           /* Check if all global versions have a definition.  */
5801           all_defined = TRUE;
5802           for (t = info->version_info; t != NULL; t = t->next)
5803             for (d = t->globals.list; d != NULL; d = d->next)
5804               if (d->literal && !d->symver && !d->script)
5805                 {
5806                   (*_bfd_error_handler)
5807                     (_("%s: undefined version: %s"),
5808                      d->pattern, t->name);
5809                   all_defined = FALSE;
5810                 }
5811
5812           if (!all_defined)
5813             {
5814               bfd_set_error (bfd_error_bad_value);
5815               return FALSE;
5816             }
5817         }
5818
5819       /* Find all symbols which were defined in a dynamic object and make
5820          the backend pick a reasonable value for them.  */
5821       elf_link_hash_traverse (elf_hash_table (info),
5822                               _bfd_elf_adjust_dynamic_symbol,
5823                               &eif);
5824       if (eif.failed)
5825         return FALSE;
5826
5827       /* Add some entries to the .dynamic section.  We fill in some of the
5828          values later, in bfd_elf_final_link, but we must add the entries
5829          now so that we know the final size of the .dynamic section.  */
5830
5831       /* If there are initialization and/or finalization functions to
5832          call then add the corresponding DT_INIT/DT_FINI entries.  */
5833       h = (info->init_function
5834            ? elf_link_hash_lookup (elf_hash_table (info),
5835                                    info->init_function, FALSE,
5836                                    FALSE, FALSE)
5837            : NULL);
5838       if (h != NULL
5839           && (h->ref_regular
5840               || h->def_regular))
5841         {
5842           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
5843             return FALSE;
5844         }
5845       h = (info->fini_function
5846            ? elf_link_hash_lookup (elf_hash_table (info),
5847                                    info->fini_function, FALSE,
5848                                    FALSE, FALSE)
5849            : NULL);
5850       if (h != NULL
5851           && (h->ref_regular
5852               || h->def_regular))
5853         {
5854           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
5855             return FALSE;
5856         }
5857
5858       s = bfd_get_section_by_name (output_bfd, ".preinit_array");
5859       if (s != NULL && s->linker_has_input)
5860         {
5861           /* DT_PREINIT_ARRAY is not allowed in shared library.  */
5862           if (! info->executable)
5863             {
5864               bfd *sub;
5865               asection *o;
5866
5867               for (sub = info->input_bfds; sub != NULL;
5868                    sub = sub->link.next)
5869                 if (bfd_get_flavour (sub) == bfd_target_elf_flavour)
5870                   for (o = sub->sections; o != NULL; o = o->next)
5871                     if (elf_section_data (o)->this_hdr.sh_type
5872                         == SHT_PREINIT_ARRAY)
5873                       {
5874                         (*_bfd_error_handler)
5875                           (_("%B: .preinit_array section is not allowed in DSO"),
5876                            sub);
5877                         break;
5878                       }
5879
5880               bfd_set_error (bfd_error_nonrepresentable_section);
5881               return FALSE;
5882             }
5883
5884           if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
5885               || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
5886             return FALSE;
5887         }
5888       s = bfd_get_section_by_name (output_bfd, ".init_array");
5889       if (s != NULL && s->linker_has_input)
5890         {
5891           if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
5892               || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
5893             return FALSE;
5894         }
5895       s = bfd_get_section_by_name (output_bfd, ".fini_array");
5896       if (s != NULL && s->linker_has_input)
5897         {
5898           if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
5899               || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
5900             return FALSE;
5901         }
5902
5903       dynstr = bfd_get_linker_section (dynobj, ".dynstr");
5904       /* If .dynstr is excluded from the link, we don't want any of
5905          these tags.  Strictly, we should be checking each section
5906          individually;  This quick check covers for the case where
5907          someone does a /DISCARD/ : { *(*) }.  */
5908       if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
5909         {
5910           bfd_size_type strsize;
5911
5912           strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5913           if ((info->emit_hash
5914                && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
5915               || (info->emit_gnu_hash
5916                   && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
5917               || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
5918               || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
5919               || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
5920               || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
5921                                               bed->s->sizeof_sym))
5922             return FALSE;
5923         }
5924     }
5925
5926   /* The backend must work out the sizes of all the other dynamic
5927      sections.  */
5928   if (dynobj != NULL
5929       && bed->elf_backend_size_dynamic_sections != NULL
5930       && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
5931     return FALSE;
5932
5933   if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
5934     return FALSE;
5935
5936   if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
5937     {
5938       unsigned long section_sym_count;
5939       struct bfd_elf_version_tree *verdefs;
5940       asection *s;
5941
5942       /* Set up the version definition section.  */
5943       s = bfd_get_linker_section (dynobj, ".gnu.version_d");
5944       BFD_ASSERT (s != NULL);
5945
5946       /* We may have created additional version definitions if we are
5947          just linking a regular application.  */
5948       verdefs = info->version_info;
5949
5950       /* Skip anonymous version tag.  */
5951       if (verdefs != NULL && verdefs->vernum == 0)
5952         verdefs = verdefs->next;
5953
5954       if (verdefs == NULL && !info->create_default_symver)
5955         s->flags |= SEC_EXCLUDE;
5956       else
5957         {
5958           unsigned int cdefs;
5959           bfd_size_type size;
5960           struct bfd_elf_version_tree *t;
5961           bfd_byte *p;
5962           Elf_Internal_Verdef def;
5963           Elf_Internal_Verdaux defaux;
5964           struct bfd_link_hash_entry *bh;
5965           struct elf_link_hash_entry *h;
5966           const char *name;
5967
5968           cdefs = 0;
5969           size = 0;
5970
5971           /* Make space for the base version.  */
5972           size += sizeof (Elf_External_Verdef);
5973           size += sizeof (Elf_External_Verdaux);
5974           ++cdefs;
5975
5976           /* Make space for the default version.  */
5977           if (info->create_default_symver)
5978             {
5979               size += sizeof (Elf_External_Verdef);
5980               ++cdefs;
5981             }
5982
5983           for (t = verdefs; t != NULL; t = t->next)
5984             {
5985               struct bfd_elf_version_deps *n;
5986
5987               /* Don't emit base version twice.  */
5988               if (t->vernum == 0)
5989                 continue;
5990
5991               size += sizeof (Elf_External_Verdef);
5992               size += sizeof (Elf_External_Verdaux);
5993               ++cdefs;
5994
5995               for (n = t->deps; n != NULL; n = n->next)
5996                 size += sizeof (Elf_External_Verdaux);
5997             }
5998
5999           s->size = size;
6000           s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6001           if (s->contents == NULL && s->size != 0)
6002             return FALSE;
6003
6004           /* Fill in the version definition section.  */
6005
6006           p = s->contents;
6007
6008           def.vd_version = VER_DEF_CURRENT;
6009           def.vd_flags = VER_FLG_BASE;
6010           def.vd_ndx = 1;
6011           def.vd_cnt = 1;
6012           if (info->create_default_symver)
6013             {
6014               def.vd_aux = 2 * sizeof (Elf_External_Verdef);
6015               def.vd_next = sizeof (Elf_External_Verdef);
6016             }
6017           else
6018             {
6019               def.vd_aux = sizeof (Elf_External_Verdef);
6020               def.vd_next = (sizeof (Elf_External_Verdef)
6021                              + sizeof (Elf_External_Verdaux));
6022             }
6023
6024           if (soname_indx != (bfd_size_type) -1)
6025             {
6026               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6027                                       soname_indx);
6028               def.vd_hash = bfd_elf_hash (soname);
6029               defaux.vda_name = soname_indx;
6030               name = soname;
6031             }
6032           else
6033             {
6034               bfd_size_type indx;
6035
6036               name = lbasename (output_bfd->filename);
6037               def.vd_hash = bfd_elf_hash (name);
6038               indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6039                                           name, FALSE);
6040               if (indx == (bfd_size_type) -1)
6041                 return FALSE;
6042               defaux.vda_name = indx;
6043             }
6044           defaux.vda_next = 0;
6045
6046           _bfd_elf_swap_verdef_out (output_bfd, &def,
6047                                     (Elf_External_Verdef *) p);
6048           p += sizeof (Elf_External_Verdef);
6049           if (info->create_default_symver)
6050             {
6051               /* Add a symbol representing this version.  */
6052               bh = NULL;
6053               if (! (_bfd_generic_link_add_one_symbol
6054                      (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6055                       0, NULL, FALSE,
6056                       get_elf_backend_data (dynobj)->collect, &bh)))
6057                 return FALSE;
6058               h = (struct elf_link_hash_entry *) bh;
6059               h->non_elf = 0;
6060               h->def_regular = 1;
6061               h->type = STT_OBJECT;
6062               h->verinfo.vertree = NULL;
6063
6064               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6065                 return FALSE;
6066
6067               /* Create a duplicate of the base version with the same
6068                  aux block, but different flags.  */
6069               def.vd_flags = 0;
6070               def.vd_ndx = 2;
6071               def.vd_aux = sizeof (Elf_External_Verdef);
6072               if (verdefs)
6073                 def.vd_next = (sizeof (Elf_External_Verdef)
6074                                + sizeof (Elf_External_Verdaux));
6075               else
6076                 def.vd_next = 0;
6077               _bfd_elf_swap_verdef_out (output_bfd, &def,
6078                                         (Elf_External_Verdef *) p);
6079               p += sizeof (Elf_External_Verdef);
6080             }
6081           _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6082                                      (Elf_External_Verdaux *) p);
6083           p += sizeof (Elf_External_Verdaux);
6084
6085           for (t = verdefs; t != NULL; t = t->next)
6086             {
6087               unsigned int cdeps;
6088               struct bfd_elf_version_deps *n;
6089
6090               /* Don't emit the base version twice.  */
6091               if (t->vernum == 0)
6092                 continue;
6093
6094               cdeps = 0;
6095               for (n = t->deps; n != NULL; n = n->next)
6096                 ++cdeps;
6097
6098               /* Add a symbol representing this version.  */
6099               bh = NULL;
6100               if (! (_bfd_generic_link_add_one_symbol
6101                      (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6102                       0, NULL, FALSE,
6103                       get_elf_backend_data (dynobj)->collect, &bh)))
6104                 return FALSE;
6105               h = (struct elf_link_hash_entry *) bh;
6106               h->non_elf = 0;
6107               h->def_regular = 1;
6108               h->type = STT_OBJECT;
6109               h->verinfo.vertree = t;
6110
6111               if (! bfd_elf_link_record_dynamic_symbol (info, h))
6112                 return FALSE;
6113
6114               def.vd_version = VER_DEF_CURRENT;
6115               def.vd_flags = 0;
6116               if (t->globals.list == NULL
6117                   && t->locals.list == NULL
6118                   && ! t->used)
6119                 def.vd_flags |= VER_FLG_WEAK;
6120               def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
6121               def.vd_cnt = cdeps + 1;
6122               def.vd_hash = bfd_elf_hash (t->name);
6123               def.vd_aux = sizeof (Elf_External_Verdef);
6124               def.vd_next = 0;
6125
6126               /* If a basever node is next, it *must* be the last node in
6127                  the chain, otherwise Verdef construction breaks.  */
6128               if (t->next != NULL && t->next->vernum == 0)
6129                 BFD_ASSERT (t->next->next == NULL);
6130
6131               if (t->next != NULL && t->next->vernum != 0)
6132                 def.vd_next = (sizeof (Elf_External_Verdef)
6133                                + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6134
6135               _bfd_elf_swap_verdef_out (output_bfd, &def,
6136                                         (Elf_External_Verdef *) p);
6137               p += sizeof (Elf_External_Verdef);
6138
6139               defaux.vda_name = h->dynstr_index;
6140               _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6141                                       h->dynstr_index);
6142               defaux.vda_next = 0;
6143               if (t->deps != NULL)
6144                 defaux.vda_next = sizeof (Elf_External_Verdaux);
6145               t->name_indx = defaux.vda_name;
6146
6147               _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6148                                          (Elf_External_Verdaux *) p);
6149               p += sizeof (Elf_External_Verdaux);
6150
6151               for (n = t->deps; n != NULL; n = n->next)
6152                 {
6153                   if (n->version_needed == NULL)
6154                     {
6155                       /* This can happen if there was an error in the
6156                          version script.  */
6157                       defaux.vda_name = 0;
6158                     }
6159                   else
6160                     {
6161                       defaux.vda_name = n->version_needed->name_indx;
6162                       _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6163                                               defaux.vda_name);
6164                     }
6165                   if (n->next == NULL)
6166                     defaux.vda_next = 0;
6167                   else
6168                     defaux.vda_next = sizeof (Elf_External_Verdaux);
6169
6170                   _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6171                                              (Elf_External_Verdaux *) p);
6172                   p += sizeof (Elf_External_Verdaux);
6173                 }
6174             }
6175
6176           if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
6177               || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, cdefs))
6178             return FALSE;
6179
6180           elf_tdata (output_bfd)->cverdefs = cdefs;
6181         }
6182
6183       if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
6184         {
6185           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
6186             return FALSE;
6187         }
6188       else if (info->flags & DF_BIND_NOW)
6189         {
6190           if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
6191             return FALSE;
6192         }
6193
6194       if (info->flags_1)
6195         {
6196           if (info->executable)
6197             info->flags_1 &= ~ (DF_1_INITFIRST
6198                                 | DF_1_NODELETE
6199                                 | DF_1_NOOPEN);
6200           if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
6201             return FALSE;
6202         }
6203
6204       /* Work out the size of the version reference section.  */
6205
6206       s = bfd_get_linker_section (dynobj, ".gnu.version_r");
6207       BFD_ASSERT (s != NULL);
6208       {
6209         struct elf_find_verdep_info sinfo;
6210
6211         sinfo.info = info;
6212         sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6213         if (sinfo.vers == 0)
6214           sinfo.vers = 1;
6215         sinfo.failed = FALSE;
6216
6217         elf_link_hash_traverse (elf_hash_table (info),
6218                                 _bfd_elf_link_find_version_dependencies,
6219                                 &sinfo);
6220         if (sinfo.failed)
6221           return FALSE;
6222
6223         if (elf_tdata (output_bfd)->verref == NULL)
6224           s->flags |= SEC_EXCLUDE;
6225         else
6226           {
6227             Elf_Internal_Verneed *t;
6228             unsigned int size;
6229             unsigned int crefs;
6230             bfd_byte *p;
6231
6232             /* Build the version dependency section.  */
6233             size = 0;
6234             crefs = 0;
6235             for (t = elf_tdata (output_bfd)->verref;
6236                  t != NULL;
6237                  t = t->vn_nextref)
6238               {
6239                 Elf_Internal_Vernaux *a;
6240
6241                 size += sizeof (Elf_External_Verneed);
6242                 ++crefs;
6243                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6244                   size += sizeof (Elf_External_Vernaux);
6245               }
6246
6247             s->size = size;
6248             s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6249             if (s->contents == NULL)
6250               return FALSE;
6251
6252             p = s->contents;
6253             for (t = elf_tdata (output_bfd)->verref;
6254                  t != NULL;
6255                  t = t->vn_nextref)
6256               {
6257                 unsigned int caux;
6258                 Elf_Internal_Vernaux *a;
6259                 bfd_size_type indx;
6260
6261                 caux = 0;
6262                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6263                   ++caux;
6264
6265                 t->vn_version = VER_NEED_CURRENT;
6266                 t->vn_cnt = caux;
6267                 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6268                                             elf_dt_name (t->vn_bfd) != NULL
6269                                             ? elf_dt_name (t->vn_bfd)
6270                                             : lbasename (t->vn_bfd->filename),
6271                                             FALSE);
6272                 if (indx == (bfd_size_type) -1)
6273                   return FALSE;
6274                 t->vn_file = indx;
6275                 t->vn_aux = sizeof (Elf_External_Verneed);
6276                 if (t->vn_nextref == NULL)
6277                   t->vn_next = 0;
6278                 else
6279                   t->vn_next = (sizeof (Elf_External_Verneed)
6280                                 + caux * sizeof (Elf_External_Vernaux));
6281
6282                 _bfd_elf_swap_verneed_out (output_bfd, t,
6283                                            (Elf_External_Verneed *) p);
6284                 p += sizeof (Elf_External_Verneed);
6285
6286                 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
6287                   {
6288                     a->vna_hash = bfd_elf_hash (a->vna_nodename);
6289                     indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6290                                                 a->vna_nodename, FALSE);
6291                     if (indx == (bfd_size_type) -1)
6292                       return FALSE;
6293                     a->vna_name = indx;
6294                     if (a->vna_nextptr == NULL)
6295                       a->vna_next = 0;
6296                     else
6297                       a->vna_next = sizeof (Elf_External_Vernaux);
6298
6299                     _bfd_elf_swap_vernaux_out (output_bfd, a,
6300                                                (Elf_External_Vernaux *) p);
6301                     p += sizeof (Elf_External_Vernaux);
6302                   }
6303               }
6304
6305             if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
6306                 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
6307               return FALSE;
6308
6309             elf_tdata (output_bfd)->cverrefs = crefs;
6310           }
6311       }
6312
6313       if ((elf_tdata (output_bfd)->cverrefs == 0
6314            && elf_tdata (output_bfd)->cverdefs == 0)
6315           || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6316                                              &section_sym_count) == 0)
6317         {
6318           s = bfd_get_linker_section (dynobj, ".gnu.version");
6319           s->flags |= SEC_EXCLUDE;
6320         }
6321     }
6322   return TRUE;
6323 }
6324
6325 /* Find the first non-excluded output section.  We'll use its
6326    section symbol for some emitted relocs.  */
6327 void
6328 _bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
6329 {
6330   asection *s;
6331
6332   for (s = output_bfd->sections; s != NULL; s = s->next)
6333     if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
6334         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6335       {
6336         elf_hash_table (info)->text_index_section = s;
6337         break;
6338       }
6339 }
6340
6341 /* Find two non-excluded output sections, one for code, one for data.
6342    We'll use their section symbols for some emitted relocs.  */
6343 void
6344 _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
6345 {
6346   asection *s;
6347
6348   /* Data first, since setting text_index_section changes
6349      _bfd_elf_link_omit_section_dynsym.  */
6350   for (s = output_bfd->sections; s != NULL; s = s->next)
6351     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
6352         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6353       {
6354         elf_hash_table (info)->data_index_section = s;
6355         break;
6356       }
6357
6358   for (s = output_bfd->sections; s != NULL; s = s->next)
6359     if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
6360          == (SEC_ALLOC | SEC_READONLY))
6361         && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
6362       {
6363         elf_hash_table (info)->text_index_section = s;
6364         break;
6365       }
6366
6367   if (elf_hash_table (info)->text_index_section == NULL)
6368     elf_hash_table (info)->text_index_section
6369       = elf_hash_table (info)->data_index_section;
6370 }
6371
6372 bfd_boolean
6373 bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
6374 {
6375   const struct elf_backend_data *bed;
6376
6377   if (!is_elf_hash_table (info->hash))
6378     return TRUE;
6379
6380   bed = get_elf_backend_data (output_bfd);
6381   (*bed->elf_backend_init_index_section) (output_bfd, info);
6382
6383   if (elf_hash_table (info)->dynamic_sections_created)
6384     {
6385       bfd *dynobj;
6386       asection *s;
6387       bfd_size_type dynsymcount;
6388       unsigned long section_sym_count;
6389       unsigned int dtagcount;
6390
6391       dynobj = elf_hash_table (info)->dynobj;
6392
6393       /* Assign dynsym indicies.  In a shared library we generate a
6394          section symbol for each output section, which come first.
6395          Next come all of the back-end allocated local dynamic syms,
6396          followed by the rest of the global symbols.  */
6397
6398       dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
6399                                                     &section_sym_count);
6400
6401       /* Work out the size of the symbol version section.  */
6402       s = bfd_get_linker_section (dynobj, ".gnu.version");
6403       BFD_ASSERT (s != NULL);
6404       if (dynsymcount != 0
6405           && (s->flags & SEC_EXCLUDE) == 0)
6406         {
6407           s->size = dynsymcount * sizeof (Elf_External_Versym);
6408           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6409           if (s->contents == NULL)
6410             return FALSE;
6411
6412           if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
6413             return FALSE;
6414         }
6415
6416       /* Set the size of the .dynsym and .hash sections.  We counted
6417          the number of dynamic symbols in elf_link_add_object_symbols.
6418          We will build the contents of .dynsym and .hash when we build
6419          the final symbol table, because until then we do not know the
6420          correct value to give the symbols.  We built the .dynstr
6421          section as we went along in elf_link_add_object_symbols.  */
6422       s = bfd_get_linker_section (dynobj, ".dynsym");
6423       BFD_ASSERT (s != NULL);
6424       s->size = dynsymcount * bed->s->sizeof_sym;
6425
6426       if (dynsymcount != 0)
6427         {
6428           s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6429           if (s->contents == NULL)
6430             return FALSE;
6431
6432           /* The first entry in .dynsym is a dummy symbol.
6433              Clear all the section syms, in case we don't output them all.  */
6434           ++section_sym_count;
6435           memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
6436         }
6437
6438       elf_hash_table (info)->bucketcount = 0;
6439
6440       /* Compute the size of the hashing table.  As a side effect this
6441          computes the hash values for all the names we export.  */
6442       if (info->emit_hash)
6443         {
6444           unsigned long int *hashcodes;
6445           struct hash_codes_info hashinf;
6446           bfd_size_type amt;
6447           unsigned long int nsyms;
6448           size_t bucketcount;
6449           size_t hash_entry_size;
6450
6451           /* Compute the hash values for all exported symbols.  At the same
6452              time store the values in an array so that we could use them for
6453              optimizations.  */
6454           amt = dynsymcount * sizeof (unsigned long int);
6455           hashcodes = (unsigned long int *) bfd_malloc (amt);
6456           if (hashcodes == NULL)
6457             return FALSE;
6458           hashinf.hashcodes = hashcodes;
6459           hashinf.error = FALSE;
6460
6461           /* Put all hash values in HASHCODES.  */
6462           elf_link_hash_traverse (elf_hash_table (info),
6463                                   elf_collect_hash_codes, &hashinf);
6464           if (hashinf.error)
6465             {
6466               free (hashcodes);
6467               return FALSE;
6468             }
6469
6470           nsyms = hashinf.hashcodes - hashcodes;
6471           bucketcount
6472             = compute_bucket_count (info, hashcodes, nsyms, 0);
6473           free (hashcodes);
6474
6475           if (bucketcount == 0)
6476             return FALSE;
6477
6478           elf_hash_table (info)->bucketcount = bucketcount;
6479
6480           s = bfd_get_linker_section (dynobj, ".hash");
6481           BFD_ASSERT (s != NULL);
6482           hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
6483           s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
6484           s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6485           if (s->contents == NULL)
6486             return FALSE;
6487
6488           bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
6489           bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
6490                    s->contents + hash_entry_size);
6491         }
6492
6493       if (info->emit_gnu_hash)
6494         {
6495           size_t i, cnt;
6496           unsigned char *contents;
6497           struct collect_gnu_hash_codes cinfo;
6498           bfd_size_type amt;
6499           size_t bucketcount;
6500
6501           memset (&cinfo, 0, sizeof (cinfo));
6502
6503           /* Compute the hash values for all exported symbols.  At the same
6504              time store the values in an array so that we could use them for
6505              optimizations.  */
6506           amt = dynsymcount * 2 * sizeof (unsigned long int);
6507           cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
6508           if (cinfo.hashcodes == NULL)
6509             return FALSE;
6510
6511           cinfo.hashval = cinfo.hashcodes + dynsymcount;
6512           cinfo.min_dynindx = -1;
6513           cinfo.output_bfd = output_bfd;
6514           cinfo.bed = bed;
6515
6516           /* Put all hash values in HASHCODES.  */
6517           elf_link_hash_traverse (elf_hash_table (info),
6518                                   elf_collect_gnu_hash_codes, &cinfo);
6519           if (cinfo.error)
6520             {
6521               free (cinfo.hashcodes);
6522               return FALSE;
6523             }
6524
6525           bucketcount
6526             = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
6527
6528           if (bucketcount == 0)
6529             {
6530               free (cinfo.hashcodes);
6531               return FALSE;
6532             }
6533
6534           s = bfd_get_linker_section (dynobj, ".gnu.hash");
6535           BFD_ASSERT (s != NULL);
6536
6537           if (cinfo.nsyms == 0)
6538             {
6539               /* Empty .gnu.hash section is special.  */
6540               BFD_ASSERT (cinfo.min_dynindx == -1);
6541               free (cinfo.hashcodes);
6542               s->size = 5 * 4 + bed->s->arch_size / 8;
6543               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6544               if (contents == NULL)
6545                 return FALSE;
6546               s->contents = contents;
6547               /* 1 empty bucket.  */
6548               bfd_put_32 (output_bfd, 1, contents);
6549               /* SYMIDX above the special symbol 0.  */
6550               bfd_put_32 (output_bfd, 1, contents + 4);
6551               /* Just one word for bitmask.  */
6552               bfd_put_32 (output_bfd, 1, contents + 8);
6553               /* Only hash fn bloom filter.  */
6554               bfd_put_32 (output_bfd, 0, contents + 12);
6555               /* No hashes are valid - empty bitmask.  */
6556               bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
6557               /* No hashes in the only bucket.  */
6558               bfd_put_32 (output_bfd, 0,
6559                           contents + 16 + bed->s->arch_size / 8);
6560             }
6561           else
6562             {
6563               unsigned long int maskwords, maskbitslog2, x;
6564               BFD_ASSERT (cinfo.min_dynindx != -1);
6565
6566               x = cinfo.nsyms;
6567               maskbitslog2 = 1;
6568               while ((x >>= 1) != 0)
6569                 ++maskbitslog2;
6570               if (maskbitslog2 < 3)
6571                 maskbitslog2 = 5;
6572               else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
6573                 maskbitslog2 = maskbitslog2 + 3;
6574               else
6575                 maskbitslog2 = maskbitslog2 + 2;
6576               if (bed->s->arch_size == 64)
6577                 {
6578                   if (maskbitslog2 == 5)
6579                     maskbitslog2 = 6;
6580                   cinfo.shift1 = 6;
6581                 }
6582               else
6583                 cinfo.shift1 = 5;
6584               cinfo.mask = (1 << cinfo.shift1) - 1;
6585               cinfo.shift2 = maskbitslog2;
6586               cinfo.maskbits = 1 << maskbitslog2;
6587               maskwords = 1 << (maskbitslog2 - cinfo.shift1);
6588               amt = bucketcount * sizeof (unsigned long int) * 2;
6589               amt += maskwords * sizeof (bfd_vma);
6590               cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
6591               if (cinfo.bitmask == NULL)
6592                 {
6593                   free (cinfo.hashcodes);
6594                   return FALSE;
6595                 }
6596
6597               cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
6598               cinfo.indx = cinfo.counts + bucketcount;
6599               cinfo.symindx = dynsymcount - cinfo.nsyms;
6600               memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
6601
6602               /* Determine how often each hash bucket is used.  */
6603               memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
6604               for (i = 0; i < cinfo.nsyms; ++i)
6605                 ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
6606
6607               for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
6608                 if (cinfo.counts[i] != 0)
6609                   {
6610                     cinfo.indx[i] = cnt;
6611                     cnt += cinfo.counts[i];
6612                   }
6613               BFD_ASSERT (cnt == dynsymcount);
6614               cinfo.bucketcount = bucketcount;
6615               cinfo.local_indx = cinfo.min_dynindx;
6616
6617               s->size = (4 + bucketcount + cinfo.nsyms) * 4;
6618               s->size += cinfo.maskbits / 8;
6619               contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
6620               if (contents == NULL)
6621                 {
6622                   free (cinfo.bitmask);
6623                   free (cinfo.hashcodes);
6624                   return FALSE;
6625                 }
6626
6627               s->contents = contents;
6628               bfd_put_32 (output_bfd, bucketcount, contents);
6629               bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
6630               bfd_put_32 (output_bfd, maskwords, contents + 8);
6631               bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
6632               contents += 16 + cinfo.maskbits / 8;
6633
6634               for (i = 0; i < bucketcount; ++i)
6635                 {
6636                   if (cinfo.counts[i] == 0)
6637                     bfd_put_32 (output_bfd, 0, contents);
6638                   else
6639                     bfd_put_32 (output_bfd, cinfo.indx[i], contents);
6640                   contents += 4;
6641                 }
6642
6643               cinfo.contents = contents;
6644
6645               /* Renumber dynamic symbols, populate .gnu.hash section.  */
6646               elf_link_hash_traverse (elf_hash_table (info),
6647                                       elf_renumber_gnu_hash_syms, &cinfo);
6648
6649               contents = s->contents + 16;
6650               for (i = 0; i < maskwords; ++i)
6651                 {
6652                   bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
6653                            contents);
6654                   contents += bed->s->arch_size / 8;
6655                 }
6656
6657               free (cinfo.bitmask);
6658               free (cinfo.hashcodes);
6659             }
6660         }
6661
6662       s = bfd_get_linker_section (dynobj, ".dynstr");
6663       BFD_ASSERT (s != NULL);
6664
6665       elf_finalize_dynstr (output_bfd, info);
6666
6667       s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6668
6669       for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
6670         if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
6671           return FALSE;
6672     }
6673
6674   return TRUE;
6675 }
6676 \f
6677 /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
6678
6679 static void
6680 merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
6681                             asection *sec)
6682 {
6683   BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
6684   sec->sec_info_type = SEC_INFO_TYPE_NONE;
6685 }
6686
6687 /* Finish SHF_MERGE section merging.  */
6688
6689 bfd_boolean
6690 _bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info)
6691 {
6692   bfd *ibfd;
6693   asection *sec;
6694
6695   if (!is_elf_hash_table (info->hash))
6696     return FALSE;
6697
6698   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
6699     if ((ibfd->flags & DYNAMIC) == 0)
6700       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
6701         if ((sec->flags & SEC_MERGE) != 0
6702             && !bfd_is_abs_section (sec->output_section))
6703           {
6704             struct bfd_elf_section_data *secdata;
6705
6706             secdata = elf_section_data (sec);
6707             if (! _bfd_add_merge_section (abfd,
6708                                           &elf_hash_table (info)->merge_info,
6709                                           sec, &secdata->sec_info))
6710               return FALSE;
6711             else if (secdata->sec_info)
6712               sec->sec_info_type = SEC_INFO_TYPE_MERGE;
6713           }
6714
6715   if (elf_hash_table (info)->merge_info != NULL)
6716     _bfd_merge_sections (abfd, info, elf_hash_table (info)->merge_info,
6717                          merge_sections_remove_hook);
6718   return TRUE;
6719 }
6720
6721 /* Create an entry in an ELF linker hash table.  */
6722
6723 struct bfd_hash_entry *
6724 _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
6725                             struct bfd_hash_table *table,
6726                             const char *string)
6727 {
6728   /* Allocate the structure if it has not already been allocated by a
6729      subclass.  */
6730   if (entry == NULL)
6731     {
6732       entry = (struct bfd_hash_entry *)
6733           bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
6734       if (entry == NULL)
6735         return entry;
6736     }
6737
6738   /* Call the allocation method of the superclass.  */
6739   entry = _bfd_link_hash_newfunc (entry, table, string);
6740   if (entry != NULL)
6741     {
6742       struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
6743       struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
6744
6745       /* Set local fields.  */
6746       ret->indx = -1;
6747       ret->dynindx = -1;
6748       ret->got = htab->init_got_refcount;
6749       ret->plt = htab->init_plt_refcount;
6750       memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
6751                               - offsetof (struct elf_link_hash_entry, size)));
6752       /* Assume that we have been called by a non-ELF symbol reader.
6753          This flag is then reset by the code which reads an ELF input
6754          file.  This ensures that a symbol created by a non-ELF symbol
6755          reader will have the flag set correctly.  */
6756       ret->non_elf = 1;
6757     }
6758
6759   return entry;
6760 }
6761
6762 /* Copy data from an indirect symbol to its direct symbol, hiding the
6763    old indirect symbol.  Also used for copying flags to a weakdef.  */
6764
6765 void
6766 _bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
6767                                   struct elf_link_hash_entry *dir,
6768                                   struct elf_link_hash_entry *ind)
6769 {
6770   struct elf_link_hash_table *htab;
6771
6772   /* Copy down any references that we may have already seen to the
6773      symbol which just became indirect.  */
6774
6775   dir->ref_dynamic |= ind->ref_dynamic;
6776   dir->ref_regular |= ind->ref_regular;
6777   dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
6778   dir->non_got_ref |= ind->non_got_ref;
6779   dir->needs_plt |= ind->needs_plt;
6780   dir->pointer_equality_needed |= ind->pointer_equality_needed;
6781
6782   if (ind->root.type != bfd_link_hash_indirect)
6783     return;
6784
6785   /* Copy over the global and procedure linkage table refcount entries.
6786      These may have been already set up by a check_relocs routine.  */
6787   htab = elf_hash_table (info);
6788   if (ind->got.refcount > htab->init_got_refcount.refcount)
6789     {
6790       if (dir->got.refcount < 0)
6791         dir->got.refcount = 0;
6792       dir->got.refcount += ind->got.refcount;
6793       ind->got.refcount = htab->init_got_refcount.refcount;
6794     }
6795
6796   if (ind->plt.refcount > htab->init_plt_refcount.refcount)
6797     {
6798       if (dir->plt.refcount < 0)
6799         dir->plt.refcount = 0;
6800       dir->plt.refcount += ind->plt.refcount;
6801       ind->plt.refcount = htab->init_plt_refcount.refcount;
6802     }
6803
6804   if (ind->dynindx != -1)
6805     {
6806       if (dir->dynindx != -1)
6807         _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
6808       dir->dynindx = ind->dynindx;
6809       dir->dynstr_index = ind->dynstr_index;
6810       ind->dynindx = -1;
6811       ind->dynstr_index = 0;
6812     }
6813 }
6814
6815 void
6816 _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
6817                                 struct elf_link_hash_entry *h,
6818                                 bfd_boolean force_local)
6819 {
6820   /* STT_GNU_IFUNC symbol must go through PLT.  */
6821   if (h->type != STT_GNU_IFUNC)
6822     {
6823       h->plt = elf_hash_table (info)->init_plt_offset;
6824       h->needs_plt = 0;
6825     }
6826   if (force_local)
6827     {
6828       h->forced_local = 1;
6829       if (h->dynindx != -1)
6830         {
6831           h->dynindx = -1;
6832           _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
6833                                   h->dynstr_index);
6834         }
6835     }
6836 }
6837
6838 /* Initialize an ELF linker hash table.  *TABLE has been zeroed by our
6839    caller.  */
6840
6841 bfd_boolean
6842 _bfd_elf_link_hash_table_init
6843   (struct elf_link_hash_table *table,
6844    bfd *abfd,
6845    struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
6846                                       struct bfd_hash_table *,
6847                                       const char *),
6848    unsigned int entsize,
6849    enum elf_target_id target_id)
6850 {
6851   bfd_boolean ret;
6852   int can_refcount = get_elf_backend_data (abfd)->can_refcount;
6853
6854   table->init_got_refcount.refcount = can_refcount - 1;
6855   table->init_plt_refcount.refcount = can_refcount - 1;
6856   table->init_got_offset.offset = -(bfd_vma) 1;
6857   table->init_plt_offset.offset = -(bfd_vma) 1;
6858   /* The first dynamic symbol is a dummy.  */
6859   table->dynsymcount = 1;
6860
6861   ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
6862
6863   table->root.type = bfd_link_elf_hash_table;
6864   table->hash_table_id = target_id;
6865
6866   return ret;
6867 }
6868
6869 /* Create an ELF linker hash table.  */
6870
6871 struct bfd_link_hash_table *
6872 _bfd_elf_link_hash_table_create (bfd *abfd)
6873 {
6874   struct elf_link_hash_table *ret;
6875   bfd_size_type amt = sizeof (struct elf_link_hash_table);
6876
6877   ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
6878   if (ret == NULL)
6879     return NULL;
6880
6881   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
6882                                        sizeof (struct elf_link_hash_entry),
6883                                        GENERIC_ELF_DATA))
6884     {
6885       free (ret);
6886       return NULL;
6887     }
6888   ret->root.hash_table_free = _bfd_elf_link_hash_table_free;
6889
6890   return &ret->root;
6891 }
6892
6893 /* Destroy an ELF linker hash table.  */
6894
6895 void
6896 _bfd_elf_link_hash_table_free (bfd *obfd)
6897 {
6898   struct elf_link_hash_table *htab;
6899
6900   htab = (struct elf_link_hash_table *) obfd->link.hash;
6901   if (htab->dynstr != NULL)
6902     _bfd_elf_strtab_free (htab->dynstr);
6903   _bfd_merge_sections_free (htab->merge_info);
6904   _bfd_generic_link_hash_table_free (obfd);
6905 }
6906
6907 /* This is a hook for the ELF emulation code in the generic linker to
6908    tell the backend linker what file name to use for the DT_NEEDED
6909    entry for a dynamic object.  */
6910
6911 void
6912 bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
6913 {
6914   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6915       && bfd_get_format (abfd) == bfd_object)
6916     elf_dt_name (abfd) = name;
6917 }
6918
6919 int
6920 bfd_elf_get_dyn_lib_class (bfd *abfd)
6921 {
6922   int lib_class;
6923   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6924       && bfd_get_format (abfd) == bfd_object)
6925     lib_class = elf_dyn_lib_class (abfd);
6926   else
6927     lib_class = 0;
6928   return lib_class;
6929 }
6930
6931 void
6932 bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
6933 {
6934   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6935       && bfd_get_format (abfd) == bfd_object)
6936     elf_dyn_lib_class (abfd) = lib_class;
6937 }
6938
6939 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
6940    the linker ELF emulation code.  */
6941
6942 struct bfd_link_needed_list *
6943 bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
6944                          struct bfd_link_info *info)
6945 {
6946   if (! is_elf_hash_table (info->hash))
6947     return NULL;
6948   return elf_hash_table (info)->needed;
6949 }
6950
6951 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
6952    hook for the linker ELF emulation code.  */
6953
6954 struct bfd_link_needed_list *
6955 bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
6956                           struct bfd_link_info *info)
6957 {
6958   if (! is_elf_hash_table (info->hash))
6959     return NULL;
6960   return elf_hash_table (info)->runpath;
6961 }
6962
6963 /* Get the name actually used for a dynamic object for a link.  This
6964    is the SONAME entry if there is one.  Otherwise, it is the string
6965    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
6966
6967 const char *
6968 bfd_elf_get_dt_soname (bfd *abfd)
6969 {
6970   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
6971       && bfd_get_format (abfd) == bfd_object)
6972     return elf_dt_name (abfd);
6973   return NULL;
6974 }
6975
6976 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
6977    the ELF linker emulation code.  */
6978
6979 bfd_boolean
6980 bfd_elf_get_bfd_needed_list (bfd *abfd,
6981                              struct bfd_link_needed_list **pneeded)
6982 {
6983   asection *s;
6984   bfd_byte *dynbuf = NULL;
6985   unsigned int elfsec;
6986   unsigned long shlink;
6987   bfd_byte *extdyn, *extdynend;
6988   size_t extdynsize;
6989   void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
6990
6991   *pneeded = NULL;
6992
6993   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
6994       || bfd_get_format (abfd) != bfd_object)
6995     return TRUE;
6996
6997   s = bfd_get_section_by_name (abfd, ".dynamic");
6998   if (s == NULL || s->size == 0)
6999     return TRUE;
7000
7001   if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
7002     goto error_return;
7003
7004   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
7005   if (elfsec == SHN_BAD)
7006     goto error_return;
7007
7008   shlink = elf_elfsections (abfd)[elfsec]->sh_link;
7009
7010   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
7011   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
7012
7013   extdyn = dynbuf;
7014   extdynend = extdyn + s->size;
7015   for (; extdyn < extdynend; extdyn += extdynsize)
7016     {
7017       Elf_Internal_Dyn dyn;
7018
7019       (*swap_dyn_in) (abfd, extdyn, &dyn);
7020
7021       if (dyn.d_tag == DT_NULL)
7022         break;
7023
7024       if (dyn.d_tag == DT_NEEDED)
7025         {
7026           const char *string;
7027           struct bfd_link_needed_list *l;
7028           unsigned int tagv = dyn.d_un.d_val;
7029           bfd_size_type amt;
7030
7031           string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
7032           if (string == NULL)
7033             goto error_return;
7034
7035           amt = sizeof *l;
7036           l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
7037           if (l == NULL)
7038             goto error_return;
7039
7040           l->by = abfd;
7041           l->name = string;
7042           l->next = *pneeded;
7043           *pneeded = l;
7044         }
7045     }
7046
7047   free (dynbuf);
7048
7049   return TRUE;
7050
7051  error_return:
7052   if (dynbuf != NULL)
7053     free (dynbuf);
7054   return FALSE;
7055 }
7056
7057 struct elf_symbuf_symbol
7058 {
7059   unsigned long st_name;        /* Symbol name, index in string tbl */
7060   unsigned char st_info;        /* Type and binding attributes */
7061   unsigned char st_other;       /* Visibilty, and target specific */
7062 };
7063
7064 struct elf_symbuf_head
7065 {
7066   struct elf_symbuf_symbol *ssym;
7067   bfd_size_type count;
7068   unsigned int st_shndx;
7069 };
7070
7071 struct elf_symbol
7072 {
7073   union
7074     {
7075       Elf_Internal_Sym *isym;
7076       struct elf_symbuf_symbol *ssym;
7077     } u;
7078   const char *name;
7079 };
7080
7081 /* Sort references to symbols by ascending section number.  */
7082
7083 static int
7084 elf_sort_elf_symbol (const void *arg1, const void *arg2)
7085 {
7086   const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7087   const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7088
7089   return s1->st_shndx - s2->st_shndx;
7090 }
7091
7092 static int
7093 elf_sym_name_compare (const void *arg1, const void *arg2)
7094 {
7095   const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7096   const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7097   return strcmp (s1->name, s2->name);
7098 }
7099
7100 static struct elf_symbuf_head *
7101 elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf)
7102 {
7103   Elf_Internal_Sym **ind, **indbufend, **indbuf;
7104   struct elf_symbuf_symbol *ssym;
7105   struct elf_symbuf_head *ssymbuf, *ssymhead;
7106   bfd_size_type i, shndx_count, total_size;
7107
7108   indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
7109   if (indbuf == NULL)
7110     return NULL;
7111
7112   for (ind = indbuf, i = 0; i < symcount; i++)
7113     if (isymbuf[i].st_shndx != SHN_UNDEF)
7114       *ind++ = &isymbuf[i];
7115   indbufend = ind;
7116
7117   qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7118          elf_sort_elf_symbol);
7119
7120   shndx_count = 0;
7121   if (indbufend > indbuf)
7122     for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7123       if (ind[0]->st_shndx != ind[1]->st_shndx)
7124         shndx_count++;
7125
7126   total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7127                 + (indbufend - indbuf) * sizeof (*ssym));
7128   ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
7129   if (ssymbuf == NULL)
7130     {
7131       free (indbuf);
7132       return NULL;
7133     }
7134
7135   ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
7136   ssymbuf->ssym = NULL;
7137   ssymbuf->count = shndx_count;
7138   ssymbuf->st_shndx = 0;
7139   for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7140     {
7141       if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7142         {
7143           ssymhead++;
7144           ssymhead->ssym = ssym;
7145           ssymhead->count = 0;
7146           ssymhead->st_shndx = (*ind)->st_shndx;
7147         }
7148       ssym->st_name = (*ind)->st_name;
7149       ssym->st_info = (*ind)->st_info;
7150       ssym->st_other = (*ind)->st_other;
7151       ssymhead->count++;
7152     }
7153   BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count
7154               && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7155                   == total_size));
7156
7157   free (indbuf);
7158   return ssymbuf;
7159 }
7160
7161 /* Check if 2 sections define the same set of local and global
7162    symbols.  */
7163
7164 static bfd_boolean
7165 bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7166                                    struct bfd_link_info *info)
7167 {
7168   bfd *bfd1, *bfd2;
7169   const struct elf_backend_data *bed1, *bed2;
7170   Elf_Internal_Shdr *hdr1, *hdr2;
7171   bfd_size_type symcount1, symcount2;
7172   Elf_Internal_Sym *isymbuf1, *isymbuf2;
7173   struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7174   Elf_Internal_Sym *isym, *isymend;
7175   struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
7176   bfd_size_type count1, count2, i;
7177   unsigned int shndx1, shndx2;
7178   bfd_boolean result;
7179
7180   bfd1 = sec1->owner;
7181   bfd2 = sec2->owner;
7182
7183   /* Both sections have to be in ELF.  */
7184   if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7185       || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7186     return FALSE;
7187
7188   if (elf_section_type (sec1) != elf_section_type (sec2))
7189     return FALSE;
7190
7191   shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7192   shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
7193   if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
7194     return FALSE;
7195
7196   bed1 = get_elf_backend_data (bfd1);
7197   bed2 = get_elf_backend_data (bfd2);
7198   hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7199   symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7200   hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7201   symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7202
7203   if (symcount1 == 0 || symcount2 == 0)
7204     return FALSE;
7205
7206   result = FALSE;
7207   isymbuf1 = NULL;
7208   isymbuf2 = NULL;
7209   ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7210   ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
7211
7212   if (ssymbuf1 == NULL)
7213     {
7214       isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7215                                        NULL, NULL, NULL);
7216       if (isymbuf1 == NULL)
7217         goto done;
7218
7219       if (!info->reduce_memory_overheads)
7220         elf_tdata (bfd1)->symbuf = ssymbuf1
7221           = elf_create_symbuf (symcount1, isymbuf1);
7222     }
7223
7224   if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7225     {
7226       isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7227                                        NULL, NULL, NULL);
7228       if (isymbuf2 == NULL)
7229         goto done;
7230
7231       if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7232         elf_tdata (bfd2)->symbuf = ssymbuf2
7233           = elf_create_symbuf (symcount2, isymbuf2);
7234     }
7235
7236   if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7237     {
7238       /* Optimized faster version.  */
7239       bfd_size_type lo, hi, mid;
7240       struct elf_symbol *symp;
7241       struct elf_symbuf_symbol *ssym, *ssymend;
7242
7243       lo = 0;
7244       hi = ssymbuf1->count;
7245       ssymbuf1++;
7246       count1 = 0;
7247       while (lo < hi)
7248         {
7249           mid = (lo + hi) / 2;
7250           if (shndx1 < ssymbuf1[mid].st_shndx)
7251             hi = mid;
7252           else if (shndx1 > ssymbuf1[mid].st_shndx)
7253             lo = mid + 1;
7254           else
7255             {
7256               count1 = ssymbuf1[mid].count;
7257               ssymbuf1 += mid;
7258               break;
7259             }
7260         }
7261
7262       lo = 0;
7263       hi = ssymbuf2->count;
7264       ssymbuf2++;
7265       count2 = 0;
7266       while (lo < hi)
7267         {
7268           mid = (lo + hi) / 2;
7269           if (shndx2 < ssymbuf2[mid].st_shndx)
7270             hi = mid;
7271           else if (shndx2 > ssymbuf2[mid].st_shndx)
7272             lo = mid + 1;
7273           else
7274             {
7275               count2 = ssymbuf2[mid].count;
7276               ssymbuf2 += mid;
7277               break;
7278             }
7279         }
7280
7281       if (count1 == 0 || count2 == 0 || count1 != count2)
7282         goto done;
7283
7284       symtable1 = (struct elf_symbol *)
7285           bfd_malloc (count1 * sizeof (struct elf_symbol));
7286       symtable2 = (struct elf_symbol *)
7287           bfd_malloc (count2 * sizeof (struct elf_symbol));
7288       if (symtable1 == NULL || symtable2 == NULL)
7289         goto done;
7290
7291       symp = symtable1;
7292       for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
7293            ssym < ssymend; ssym++, symp++)
7294         {
7295           symp->u.ssym = ssym;
7296           symp->name = bfd_elf_string_from_elf_section (bfd1,
7297                                                         hdr1->sh_link,
7298                                                         ssym->st_name);
7299         }
7300
7301       symp = symtable2;
7302       for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
7303            ssym < ssymend; ssym++, symp++)
7304         {
7305           symp->u.ssym = ssym;
7306           symp->name = bfd_elf_string_from_elf_section (bfd2,
7307                                                         hdr2->sh_link,
7308                                                         ssym->st_name);
7309         }
7310
7311       /* Sort symbol by name.  */
7312       qsort (symtable1, count1, sizeof (struct elf_symbol),
7313              elf_sym_name_compare);
7314       qsort (symtable2, count1, sizeof (struct elf_symbol),
7315              elf_sym_name_compare);
7316
7317       for (i = 0; i < count1; i++)
7318         /* Two symbols must have the same binding, type and name.  */
7319         if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
7320             || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
7321             || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7322           goto done;
7323
7324       result = TRUE;
7325       goto done;
7326     }
7327
7328   symtable1 = (struct elf_symbol *)
7329       bfd_malloc (symcount1 * sizeof (struct elf_symbol));
7330   symtable2 = (struct elf_symbol *)
7331       bfd_malloc (symcount2 * sizeof (struct elf_symbol));
7332   if (symtable1 == NULL || symtable2 == NULL)
7333     goto done;
7334
7335   /* Count definitions in the section.  */
7336   count1 = 0;
7337   for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
7338     if (isym->st_shndx == shndx1)
7339       symtable1[count1++].u.isym = isym;
7340
7341   count2 = 0;
7342   for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
7343     if (isym->st_shndx == shndx2)
7344       symtable2[count2++].u.isym = isym;
7345
7346   if (count1 == 0 || count2 == 0 || count1 != count2)
7347     goto done;
7348
7349   for (i = 0; i < count1; i++)
7350     symtable1[i].name
7351       = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
7352                                          symtable1[i].u.isym->st_name);
7353
7354   for (i = 0; i < count2; i++)
7355     symtable2[i].name
7356       = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
7357                                          symtable2[i].u.isym->st_name);
7358
7359   /* Sort symbol by name.  */
7360   qsort (symtable1, count1, sizeof (struct elf_symbol),
7361          elf_sym_name_compare);
7362   qsort (symtable2, count1, sizeof (struct elf_symbol),
7363          elf_sym_name_compare);
7364
7365   for (i = 0; i < count1; i++)
7366     /* Two symbols must have the same binding, type and name.  */
7367     if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
7368         || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
7369         || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
7370       goto done;
7371
7372   result = TRUE;
7373
7374 done:
7375   if (symtable1)
7376     free (symtable1);
7377   if (symtable2)
7378     free (symtable2);
7379   if (isymbuf1)
7380     free (isymbuf1);
7381   if (isymbuf2)
7382     free (isymbuf2);
7383
7384   return result;
7385 }
7386
7387 /* Return TRUE if 2 section types are compatible.  */
7388
7389 bfd_boolean
7390 _bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
7391                                  bfd *bbfd, const asection *bsec)
7392 {
7393   if (asec == NULL
7394       || bsec == NULL
7395       || abfd->xvec->flavour != bfd_target_elf_flavour
7396       || bbfd->xvec->flavour != bfd_target_elf_flavour)
7397     return TRUE;
7398
7399   return elf_section_type (asec) == elf_section_type (bsec);
7400 }
7401 \f
7402 /* Final phase of ELF linker.  */
7403
7404 /* A structure we use to avoid passing large numbers of arguments.  */
7405
7406 struct elf_final_link_info
7407 {
7408   /* General link information.  */
7409   struct bfd_link_info *info;
7410   /* Output BFD.  */
7411   bfd *output_bfd;
7412   /* Symbol string table.  */
7413   struct bfd_strtab_hash *symstrtab;
7414   /* .dynsym section.  */
7415   asection *dynsym_sec;
7416   /* .hash section.  */
7417   asection *hash_sec;
7418   /* symbol version section (.gnu.version).  */
7419   asection *symver_sec;
7420   /* Buffer large enough to hold contents of any section.  */
7421   bfd_byte *contents;
7422   /* Buffer large enough to hold external relocs of any section.  */
7423   void *external_relocs;
7424   /* Buffer large enough to hold internal relocs of any section.  */
7425   Elf_Internal_Rela *internal_relocs;
7426   /* Buffer large enough to hold external local symbols of any input
7427      BFD.  */
7428   bfd_byte *external_syms;
7429   /* And a buffer for symbol section indices.  */
7430   Elf_External_Sym_Shndx *locsym_shndx;
7431   /* Buffer large enough to hold internal local symbols of any input
7432      BFD.  */
7433   Elf_Internal_Sym *internal_syms;
7434   /* Array large enough to hold a symbol index for each local symbol
7435      of any input BFD.  */
7436   long *indices;
7437   /* Array large enough to hold a section pointer for each local
7438      symbol of any input BFD.  */
7439   asection **sections;
7440   /* Buffer to hold swapped out symbols.  */
7441   bfd_byte *symbuf;
7442   /* And one for symbol section indices.  */
7443   Elf_External_Sym_Shndx *symshndxbuf;
7444   /* Number of swapped out symbols in buffer.  */
7445   size_t symbuf_count;
7446   /* Number of symbols which fit in symbuf.  */
7447   size_t symbuf_size;
7448   /* And same for symshndxbuf.  */
7449   size_t shndxbuf_size;
7450   /* Number of STT_FILE syms seen.  */
7451   size_t filesym_count;
7452 };
7453
7454 /* This struct is used to pass information to elf_link_output_extsym.  */
7455
7456 struct elf_outext_info
7457 {
7458   bfd_boolean failed;
7459   bfd_boolean localsyms;
7460   bfd_boolean need_second_pass;
7461   bfd_boolean second_pass;
7462   bfd_boolean file_sym_done;
7463   struct elf_final_link_info *flinfo;
7464 };
7465
7466
7467 /* Support for evaluating a complex relocation.
7468
7469    Complex relocations are generalized, self-describing relocations.  The
7470    implementation of them consists of two parts: complex symbols, and the
7471    relocations themselves.
7472
7473    The relocations are use a reserved elf-wide relocation type code (R_RELC
7474    external / BFD_RELOC_RELC internal) and an encoding of relocation field
7475    information (start bit, end bit, word width, etc) into the addend.  This
7476    information is extracted from CGEN-generated operand tables within gas.
7477
7478    Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
7479    internal) representing prefix-notation expressions, including but not
7480    limited to those sorts of expressions normally encoded as addends in the
7481    addend field.  The symbol mangling format is:
7482
7483    <node> := <literal>
7484           |  <unary-operator> ':' <node>
7485           |  <binary-operator> ':' <node> ':' <node>
7486           ;
7487
7488    <literal> := 's' <digits=N> ':' <N character symbol name>
7489              |  'S' <digits=N> ':' <N character section name>
7490              |  '#' <hexdigits>
7491              ;
7492
7493    <binary-operator> := as in C
7494    <unary-operator> := as in C, plus "0-" for unambiguous negation.  */
7495
7496 static void
7497 set_symbol_value (bfd *bfd_with_globals,
7498                   Elf_Internal_Sym *isymbuf,
7499                   size_t locsymcount,
7500                   size_t symidx,
7501                   bfd_vma val)
7502 {
7503   struct elf_link_hash_entry **sym_hashes;
7504   struct elf_link_hash_entry *h;
7505   size_t extsymoff = locsymcount;
7506
7507   if (symidx < locsymcount)
7508     {
7509       Elf_Internal_Sym *sym;
7510
7511       sym = isymbuf + symidx;
7512       if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
7513         {
7514           /* It is a local symbol: move it to the
7515              "absolute" section and give it a value.  */
7516           sym->st_shndx = SHN_ABS;
7517           sym->st_value = val;
7518           return;
7519         }
7520       BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
7521       extsymoff = 0;
7522     }
7523
7524   /* It is a global symbol: set its link type
7525      to "defined" and give it a value.  */
7526
7527   sym_hashes = elf_sym_hashes (bfd_with_globals);
7528   h = sym_hashes [symidx - extsymoff];
7529   while (h->root.type == bfd_link_hash_indirect
7530          || h->root.type == bfd_link_hash_warning)
7531     h = (struct elf_link_hash_entry *) h->root.u.i.link;
7532   h->root.type = bfd_link_hash_defined;
7533   h->root.u.def.value = val;
7534   h->root.u.def.section = bfd_abs_section_ptr;
7535 }
7536
7537 static bfd_boolean
7538 resolve_symbol (const char *name,
7539                 bfd *input_bfd,
7540                 struct elf_final_link_info *flinfo,
7541                 bfd_vma *result,
7542                 Elf_Internal_Sym *isymbuf,
7543                 size_t locsymcount)
7544 {
7545   Elf_Internal_Sym *sym;
7546   struct bfd_link_hash_entry *global_entry;
7547   const char *candidate = NULL;
7548   Elf_Internal_Shdr *symtab_hdr;
7549   size_t i;
7550
7551   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
7552
7553   for (i = 0; i < locsymcount; ++ i)
7554     {
7555       sym = isymbuf + i;
7556
7557       if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
7558         continue;
7559
7560       candidate = bfd_elf_string_from_elf_section (input_bfd,
7561                                                    symtab_hdr->sh_link,
7562                                                    sym->st_name);
7563 #ifdef DEBUG
7564       printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
7565               name, candidate, (unsigned long) sym->st_value);
7566 #endif
7567       if (candidate && strcmp (candidate, name) == 0)
7568         {
7569           asection *sec = flinfo->sections [i];
7570
7571           *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
7572           *result += sec->output_offset + sec->output_section->vma;
7573 #ifdef DEBUG
7574           printf ("Found symbol with value %8.8lx\n",
7575                   (unsigned long) *result);
7576 #endif
7577           return TRUE;
7578         }
7579     }
7580
7581   /* Hmm, haven't found it yet. perhaps it is a global.  */
7582   global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
7583                                        FALSE, FALSE, TRUE);
7584   if (!global_entry)
7585     return FALSE;
7586
7587   if (global_entry->type == bfd_link_hash_defined
7588       || global_entry->type == bfd_link_hash_defweak)
7589     {
7590       *result = (global_entry->u.def.value
7591                  + global_entry->u.def.section->output_section->vma
7592                  + global_entry->u.def.section->output_offset);
7593 #ifdef DEBUG
7594       printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
7595               global_entry->root.string, (unsigned long) *result);
7596 #endif
7597       return TRUE;
7598     }
7599
7600   return FALSE;
7601 }
7602
7603 static bfd_boolean
7604 resolve_section (const char *name,
7605                  asection *sections,
7606                  bfd_vma *result)
7607 {
7608   asection *curr;
7609   unsigned int len;
7610
7611   for (curr = sections; curr; curr = curr->next)
7612     if (strcmp (curr->name, name) == 0)
7613       {
7614         *result = curr->vma;
7615         return TRUE;
7616       }
7617
7618   /* Hmm. still haven't found it. try pseudo-section names.  */
7619   for (curr = sections; curr; curr = curr->next)
7620     {
7621       len = strlen (curr->name);
7622       if (len > strlen (name))
7623         continue;
7624
7625       if (strncmp (curr->name, name, len) == 0)
7626         {
7627           if (strncmp (".end", name + len, 4) == 0)
7628             {
7629               *result = curr->vma + curr->size;
7630               return TRUE;
7631             }
7632
7633           /* Insert more pseudo-section names here, if you like.  */
7634         }
7635     }
7636
7637   return FALSE;
7638 }
7639
7640 static void
7641 undefined_reference (const char *reftype, const char *name)
7642 {
7643   _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
7644                       reftype, name);
7645 }
7646
7647 static bfd_boolean
7648 eval_symbol (bfd_vma *result,
7649              const char **symp,
7650              bfd *input_bfd,
7651              struct elf_final_link_info *flinfo,
7652              bfd_vma dot,
7653              Elf_Internal_Sym *isymbuf,
7654              size_t locsymcount,
7655              int signed_p)
7656 {
7657   size_t len;
7658   size_t symlen;
7659   bfd_vma a;
7660   bfd_vma b;
7661   char symbuf[4096];
7662   const char *sym = *symp;
7663   const char *symend;
7664   bfd_boolean symbol_is_section = FALSE;
7665
7666   len = strlen (sym);
7667   symend = sym + len;
7668
7669   if (len < 1 || len > sizeof (symbuf))
7670     {
7671       bfd_set_error (bfd_error_invalid_operation);
7672       return FALSE;
7673     }
7674
7675   switch (* sym)
7676     {
7677     case '.':
7678       *result = dot;
7679       *symp = sym + 1;
7680       return TRUE;
7681
7682     case '#':
7683       ++sym;
7684       *result = strtoul (sym, (char **) symp, 16);
7685       return TRUE;
7686
7687     case 'S':
7688       symbol_is_section = TRUE;
7689     case 's':
7690       ++sym;
7691       symlen = strtol (sym, (char **) symp, 10);
7692       sym = *symp + 1; /* Skip the trailing ':'.  */
7693
7694       if (symend < sym || symlen + 1 > sizeof (symbuf))
7695         {
7696           bfd_set_error (bfd_error_invalid_operation);
7697           return FALSE;
7698         }
7699
7700       memcpy (symbuf, sym, symlen);
7701       symbuf[symlen] = '\0';
7702       *symp = sym + symlen;
7703
7704       /* Is it always possible, with complex symbols, that gas "mis-guessed"
7705          the symbol as a section, or vice-versa. so we're pretty liberal in our
7706          interpretation here; section means "try section first", not "must be a
7707          section", and likewise with symbol.  */
7708
7709       if (symbol_is_section)
7710         {
7711           if (!resolve_section (symbuf, flinfo->output_bfd->sections, result)
7712               && !resolve_symbol (symbuf, input_bfd, flinfo, result,
7713                                   isymbuf, locsymcount))
7714             {
7715               undefined_reference ("section", symbuf);
7716               return FALSE;
7717             }
7718         }
7719       else
7720         {
7721           if (!resolve_symbol (symbuf, input_bfd, flinfo, result,
7722                                isymbuf, locsymcount)
7723               && !resolve_section (symbuf, flinfo->output_bfd->sections,
7724                                    result))
7725             {
7726               undefined_reference ("symbol", symbuf);
7727               return FALSE;
7728             }
7729         }
7730
7731       return TRUE;
7732
7733       /* All that remains are operators.  */
7734
7735 #define UNARY_OP(op)                                            \
7736   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7737     {                                                           \
7738       sym += strlen (#op);                                      \
7739       if (*sym == ':')                                          \
7740         ++sym;                                                  \
7741       *symp = sym;                                              \
7742       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
7743                         isymbuf, locsymcount, signed_p))        \
7744         return FALSE;                                           \
7745       if (signed_p)                                             \
7746         *result = op ((bfd_signed_vma) a);                      \
7747       else                                                      \
7748         *result = op a;                                         \
7749       return TRUE;                                              \
7750     }
7751
7752 #define BINARY_OP(op)                                           \
7753   if (strncmp (sym, #op, strlen (#op)) == 0)                    \
7754     {                                                           \
7755       sym += strlen (#op);                                      \
7756       if (*sym == ':')                                          \
7757         ++sym;                                                  \
7758       *symp = sym;                                              \
7759       if (!eval_symbol (&a, symp, input_bfd, flinfo, dot,       \
7760                         isymbuf, locsymcount, signed_p))        \
7761         return FALSE;                                           \
7762       ++*symp;                                                  \
7763       if (!eval_symbol (&b, symp, input_bfd, flinfo, dot,       \
7764                         isymbuf, locsymcount, signed_p))        \
7765         return FALSE;                                           \
7766       if (signed_p)                                             \
7767         *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
7768       else                                                      \
7769         *result = a op b;                                       \
7770       return TRUE;                                              \
7771     }
7772
7773     default:
7774       UNARY_OP  (0-);
7775       BINARY_OP (<<);
7776       BINARY_OP (>>);
7777       BINARY_OP (==);
7778       BINARY_OP (!=);
7779       BINARY_OP (<=);
7780       BINARY_OP (>=);
7781       BINARY_OP (&&);
7782       BINARY_OP (||);
7783       UNARY_OP  (~);
7784       UNARY_OP  (!);
7785       BINARY_OP (*);
7786       BINARY_OP (/);
7787       BINARY_OP (%);
7788       BINARY_OP (^);
7789       BINARY_OP (|);
7790       BINARY_OP (&);
7791       BINARY_OP (+);
7792       BINARY_OP (-);
7793       BINARY_OP (<);
7794       BINARY_OP (>);
7795 #undef UNARY_OP
7796 #undef BINARY_OP
7797       _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
7798       bfd_set_error (bfd_error_invalid_operation);
7799       return FALSE;
7800     }
7801 }
7802
7803 static void
7804 put_value (bfd_vma size,
7805            unsigned long chunksz,
7806            bfd *input_bfd,
7807            bfd_vma x,
7808            bfd_byte *location)
7809 {
7810   location += (size - chunksz);
7811
7812   for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8))
7813     {
7814       switch (chunksz)
7815         {
7816         default:
7817         case 0:
7818           abort ();
7819         case 1:
7820           bfd_put_8 (input_bfd, x, location);
7821           break;
7822         case 2:
7823           bfd_put_16 (input_bfd, x, location);
7824           break;
7825         case 4:
7826           bfd_put_32 (input_bfd, x, location);
7827           break;
7828         case 8:
7829 #ifdef BFD64
7830           bfd_put_64 (input_bfd, x, location);
7831 #else
7832           abort ();
7833 #endif
7834           break;
7835         }
7836     }
7837 }
7838
7839 static bfd_vma
7840 get_value (bfd_vma size,
7841            unsigned long chunksz,
7842            bfd *input_bfd,
7843            bfd_byte *location)
7844 {
7845   int shift;
7846   bfd_vma x = 0;
7847
7848   /* Sanity checks.  */
7849   BFD_ASSERT (chunksz <= sizeof (x)
7850               && size >= chunksz
7851               && chunksz != 0
7852               && (size % chunksz) == 0
7853               && input_bfd != NULL
7854               && location != NULL);
7855
7856   if (chunksz == sizeof (x))
7857     {
7858       BFD_ASSERT (size == chunksz);
7859
7860       /* Make sure that we do not perform an undefined shift operation.
7861          We know that size == chunksz so there will only be one iteration
7862          of the loop below.  */
7863       shift = 0;
7864     }
7865   else
7866     shift = 8 * chunksz;
7867
7868   for (; size; size -= chunksz, location += chunksz)
7869     {
7870       switch (chunksz)
7871         {
7872         case 1:
7873           x = (x << shift) | bfd_get_8 (input_bfd, location);
7874           break;
7875         case 2:
7876           x = (x << shift) | bfd_get_16 (input_bfd, location);
7877           break;
7878         case 4:
7879           x = (x << shift) | bfd_get_32 (input_bfd, location);
7880           break;
7881 #ifdef BFD64
7882         case 8:
7883           x = (x << shift) | bfd_get_64 (input_bfd, location);
7884           break;
7885 #endif
7886         default:
7887           abort ();
7888         }
7889     }
7890   return x;
7891 }
7892
7893 static void
7894 decode_complex_addend (unsigned long *start,   /* in bits */
7895                        unsigned long *oplen,   /* in bits */
7896                        unsigned long *len,     /* in bits */
7897                        unsigned long *wordsz,  /* in bytes */
7898                        unsigned long *chunksz, /* in bytes */
7899                        unsigned long *lsb0_p,
7900                        unsigned long *signed_p,
7901                        unsigned long *trunc_p,
7902                        unsigned long encoded)
7903 {
7904   * start     =  encoded        & 0x3F;
7905   * len       = (encoded >>  6) & 0x3F;
7906   * oplen     = (encoded >> 12) & 0x3F;
7907   * wordsz    = (encoded >> 18) & 0xF;
7908   * chunksz   = (encoded >> 22) & 0xF;
7909   * lsb0_p    = (encoded >> 27) & 1;
7910   * signed_p  = (encoded >> 28) & 1;
7911   * trunc_p   = (encoded >> 29) & 1;
7912 }
7913
7914 bfd_reloc_status_type
7915 bfd_elf_perform_complex_relocation (bfd *input_bfd,
7916                                     asection *input_section ATTRIBUTE_UNUSED,
7917                                     bfd_byte *contents,
7918                                     Elf_Internal_Rela *rel,
7919                                     bfd_vma relocation)
7920 {
7921   bfd_vma shift, x, mask;
7922   unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
7923   bfd_reloc_status_type r;
7924
7925   /*  Perform this reloc, since it is complex.
7926       (this is not to say that it necessarily refers to a complex
7927       symbol; merely that it is a self-describing CGEN based reloc.
7928       i.e. the addend has the complete reloc information (bit start, end,
7929       word size, etc) encoded within it.).  */
7930
7931   decode_complex_addend (&start, &oplen, &len, &wordsz,
7932                          &chunksz, &lsb0_p, &signed_p,
7933                          &trunc_p, rel->r_addend);
7934
7935   mask = (((1L << (len - 1)) - 1) << 1) | 1;
7936
7937   if (lsb0_p)
7938     shift = (start + 1) - len;
7939   else
7940     shift = (8 * wordsz) - (start + len);
7941
7942   /* FIXME: octets_per_byte.  */
7943   x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset);
7944
7945 #ifdef DEBUG
7946   printf ("Doing complex reloc: "
7947           "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
7948           "chunksz %ld, start %ld, len %ld, oplen %ld\n"
7949           "    dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
7950           lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
7951           oplen, (unsigned long) x, (unsigned long) mask,
7952           (unsigned long) relocation);
7953 #endif
7954
7955   r = bfd_reloc_ok;
7956   if (! trunc_p)
7957     /* Now do an overflow check.  */
7958     r = bfd_check_overflow ((signed_p
7959                              ? complain_overflow_signed
7960                              : complain_overflow_unsigned),
7961                             len, 0, (8 * wordsz),
7962                             relocation);
7963
7964   /* Do the deed.  */
7965   x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
7966
7967 #ifdef DEBUG
7968   printf ("           relocation: %8.8lx\n"
7969           "         shifted mask: %8.8lx\n"
7970           " shifted/masked reloc: %8.8lx\n"
7971           "               result: %8.8lx\n",
7972           (unsigned long) relocation, (unsigned long) (mask << shift),
7973           (unsigned long) ((relocation & mask) << shift), (unsigned long) x);
7974 #endif
7975   /* FIXME: octets_per_byte.  */
7976   put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset);
7977   return r;
7978 }
7979
7980 /* qsort comparison functions sorting external relocs by r_offset.  */
7981
7982 static int
7983 cmp_ext32l_r_offset (const void *p, const void *q)
7984 {
7985   union aligned32
7986   {
7987     uint32_t v;
7988     unsigned char c[4];
7989   };
7990   const union aligned32 *a
7991     = (const union aligned32 *) ((const Elf32_External_Rel *) p)->r_offset;
7992   const union aligned32 *b
7993     = (const union aligned32 *) ((const Elf32_External_Rel *) q)->r_offset;
7994
7995   uint32_t aval = (  (uint32_t) a->c[0]
7996                    | (uint32_t) a->c[1] << 8
7997                    | (uint32_t) a->c[2] << 16
7998                    | (uint32_t) a->c[3] << 24);
7999   uint32_t bval = (  (uint32_t) b->c[0]
8000                    | (uint32_t) b->c[1] << 8
8001                    | (uint32_t) b->c[2] << 16
8002                    | (uint32_t) b->c[3] << 24);
8003   if (aval < bval)
8004     return -1;
8005   else if (aval > bval)
8006     return 1;
8007   return 0;
8008 }
8009
8010 static int
8011 cmp_ext32b_r_offset (const void *p, const void *q)
8012 {
8013   union aligned32
8014   {
8015     uint32_t v;
8016     unsigned char c[4];
8017   };
8018   const union aligned32 *a
8019     = (const union aligned32 *) ((const Elf32_External_Rel *) p)->r_offset;
8020   const union aligned32 *b
8021     = (const union aligned32 *) ((const Elf32_External_Rel *) q)->r_offset;
8022
8023   uint32_t aval = (  (uint32_t) a->c[0] << 24
8024                    | (uint32_t) a->c[1] << 16
8025                    | (uint32_t) a->c[2] << 8
8026                    | (uint32_t) a->c[3]);
8027   uint32_t bval = (  (uint32_t) b->c[0] << 24
8028                    | (uint32_t) b->c[1] << 16
8029                    | (uint32_t) b->c[2] << 8
8030                    | (uint32_t) b->c[3]);
8031   if (aval < bval)
8032     return -1;
8033   else if (aval > bval)
8034     return 1;
8035   return 0;
8036 }
8037
8038 #ifdef BFD_HOST_64_BIT
8039 static int
8040 cmp_ext64l_r_offset (const void *p, const void *q)
8041 {
8042   union aligned64
8043   {
8044     uint64_t v;
8045     unsigned char c[8];
8046   };
8047   const union aligned64 *a
8048     = (const union aligned64 *) ((const Elf64_External_Rel *) p)->r_offset;
8049   const union aligned64 *b
8050     = (const union aligned64 *) ((const Elf64_External_Rel *) q)->r_offset;
8051
8052   uint64_t aval = (  (uint64_t) a->c[0]
8053                    | (uint64_t) a->c[1] << 8
8054                    | (uint64_t) a->c[2] << 16
8055                    | (uint64_t) a->c[3] << 24
8056                    | (uint64_t) a->c[4] << 32
8057                    | (uint64_t) a->c[5] << 40
8058                    | (uint64_t) a->c[6] << 48
8059                    | (uint64_t) a->c[7] << 56);
8060   uint64_t bval = (  (uint64_t) b->c[0]
8061                    | (uint64_t) b->c[1] << 8
8062                    | (uint64_t) b->c[2] << 16
8063                    | (uint64_t) b->c[3] << 24
8064                    | (uint64_t) b->c[4] << 32
8065                    | (uint64_t) b->c[5] << 40
8066                    | (uint64_t) b->c[6] << 48
8067                    | (uint64_t) b->c[7] << 56);
8068   if (aval < bval)
8069     return -1;
8070   else if (aval > bval)
8071     return 1;
8072   return 0;
8073 }
8074
8075 static int
8076 cmp_ext64b_r_offset (const void *p, const void *q)
8077 {
8078   union aligned64
8079   {
8080     uint64_t v;
8081     unsigned char c[8];
8082   };
8083   const union aligned64 *a
8084     = (const union aligned64 *) ((const Elf64_External_Rel *) p)->r_offset;
8085   const union aligned64 *b
8086     = (const union aligned64 *) ((const Elf64_External_Rel *) q)->r_offset;
8087
8088   uint64_t aval = (  (uint64_t) a->c[0] << 56
8089                    | (uint64_t) a->c[1] << 48
8090                    | (uint64_t) a->c[2] << 40
8091                    | (uint64_t) a->c[3] << 32
8092                    | (uint64_t) a->c[4] << 24
8093                    | (uint64_t) a->c[5] << 16
8094                    | (uint64_t) a->c[6] << 8
8095                    | (uint64_t) a->c[7]);
8096   uint64_t bval = (  (uint64_t) b->c[0] << 56
8097                    | (uint64_t) b->c[1] << 48
8098                    | (uint64_t) b->c[2] << 40
8099                    | (uint64_t) b->c[3] << 32
8100                    | (uint64_t) b->c[4] << 24
8101                    | (uint64_t) b->c[5] << 16
8102                    | (uint64_t) b->c[6] << 8
8103                    | (uint64_t) b->c[7]);
8104   if (aval < bval)
8105     return -1;
8106   else if (aval > bval)
8107     return 1;
8108   return 0;
8109 }
8110 #endif
8111
8112 /* When performing a relocatable link, the input relocations are
8113    preserved.  But, if they reference global symbols, the indices
8114    referenced must be updated.  Update all the relocations found in
8115    RELDATA.  */
8116
8117 static void
8118 elf_link_adjust_relocs (bfd *abfd,
8119                         struct bfd_elf_section_reloc_data *reldata,
8120                         bfd_boolean sort)
8121 {
8122   unsigned int i;
8123   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8124   bfd_byte *erela;
8125   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8126   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8127   bfd_vma r_type_mask;
8128   int r_sym_shift;
8129   unsigned int count = reldata->count;
8130   struct elf_link_hash_entry **rel_hash = reldata->hashes;
8131
8132   if (reldata->hdr->sh_entsize == bed->s->sizeof_rel)
8133     {
8134       swap_in = bed->s->swap_reloc_in;
8135       swap_out = bed->s->swap_reloc_out;
8136     }
8137   else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela)
8138     {
8139       swap_in = bed->s->swap_reloca_in;
8140       swap_out = bed->s->swap_reloca_out;
8141     }
8142   else
8143     abort ();
8144
8145   if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
8146     abort ();
8147
8148   if (bed->s->arch_size == 32)
8149     {
8150       r_type_mask = 0xff;
8151       r_sym_shift = 8;
8152     }
8153   else
8154     {
8155       r_type_mask = 0xffffffff;
8156       r_sym_shift = 32;
8157     }
8158
8159   erela = reldata->hdr->contents;
8160   for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize)
8161     {
8162       Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
8163       unsigned int j;
8164
8165       if (*rel_hash == NULL)
8166         continue;
8167
8168       BFD_ASSERT ((*rel_hash)->indx >= 0);
8169
8170       (*swap_in) (abfd, erela, irela);
8171       for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
8172         irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
8173                            | (irela[j].r_info & r_type_mask));
8174       (*swap_out) (abfd, irela, erela);
8175     }
8176
8177   if (sort)
8178     {
8179       int (*compare) (const void *, const void *);
8180
8181       if (bed->s->arch_size == 32)
8182         {
8183           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8184             compare = cmp_ext32l_r_offset;
8185           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8186             compare = cmp_ext32b_r_offset;
8187           else
8188             abort ();
8189         }
8190       else
8191         {
8192 #ifdef BFD_HOST_64_BIT
8193           if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8194             compare = cmp_ext64l_r_offset;
8195           else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8196             compare = cmp_ext64b_r_offset;
8197           else
8198 #endif
8199             abort ();
8200         }
8201       qsort (reldata->hdr->contents, count, reldata->hdr->sh_entsize, compare);
8202       free (reldata->hashes);
8203       reldata->hashes = NULL;
8204     }
8205 }
8206
8207 struct elf_link_sort_rela
8208 {
8209   union {
8210     bfd_vma offset;
8211     bfd_vma sym_mask;
8212   } u;
8213   enum elf_reloc_type_class type;
8214   /* We use this as an array of size int_rels_per_ext_rel.  */
8215   Elf_Internal_Rela rela[1];
8216 };
8217
8218 static int
8219 elf_link_sort_cmp1 (const void *A, const void *B)
8220 {
8221   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8222   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8223   int relativea, relativeb;
8224
8225   relativea = a->type == reloc_class_relative;
8226   relativeb = b->type == reloc_class_relative;
8227
8228   if (relativea < relativeb)
8229     return 1;
8230   if (relativea > relativeb)
8231     return -1;
8232   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8233     return -1;
8234   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8235     return 1;
8236   if (a->rela->r_offset < b->rela->r_offset)
8237     return -1;
8238   if (a->rela->r_offset > b->rela->r_offset)
8239     return 1;
8240   return 0;
8241 }
8242
8243 static int
8244 elf_link_sort_cmp2 (const void *A, const void *B)
8245 {
8246   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8247   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8248
8249   if (a->type < b->type)
8250     return -1;
8251   if (a->type > b->type)
8252     return 1;
8253   if (a->u.offset < b->u.offset)
8254     return -1;
8255   if (a->u.offset > b->u.offset)
8256     return 1;
8257   if (a->rela->r_offset < b->rela->r_offset)
8258     return -1;
8259   if (a->rela->r_offset > b->rela->r_offset)
8260     return 1;
8261   return 0;
8262 }
8263
8264 static size_t
8265 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8266 {
8267   asection *dynamic_relocs;
8268   asection *rela_dyn;
8269   asection *rel_dyn;
8270   bfd_size_type count, size;
8271   size_t i, ret, sort_elt, ext_size;
8272   bfd_byte *sort, *s_non_relative, *p;
8273   struct elf_link_sort_rela *sq;
8274   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8275   int i2e = bed->s->int_rels_per_ext_rel;
8276   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8277   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8278   struct bfd_link_order *lo;
8279   bfd_vma r_sym_mask;
8280   bfd_boolean use_rela;
8281
8282   /* Find a dynamic reloc section.  */
8283   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8284   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8285   if (rela_dyn != NULL && rela_dyn->size > 0
8286       && rel_dyn != NULL && rel_dyn->size > 0)
8287     {
8288       bfd_boolean use_rela_initialised = FALSE;
8289
8290       /* This is just here to stop gcc from complaining.
8291          It's initialization checking code is not perfect.  */
8292       use_rela = TRUE;
8293
8294       /* Both sections are present.  Examine the sizes
8295          of the indirect sections to help us choose.  */
8296       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8297         if (lo->type == bfd_indirect_link_order)
8298           {
8299             asection *o = lo->u.indirect.section;
8300
8301             if ((o->size % bed->s->sizeof_rela) == 0)
8302               {
8303                 if ((o->size % bed->s->sizeof_rel) == 0)
8304                   /* Section size is divisible by both rel and rela sizes.
8305                      It is of no help to us.  */
8306                   ;
8307                 else
8308                   {
8309                     /* Section size is only divisible by rela.  */
8310                     if (use_rela_initialised && (use_rela == FALSE))
8311                       {
8312                         _bfd_error_handler
8313                           (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8314                         bfd_set_error (bfd_error_invalid_operation);
8315                         return 0;
8316                       }
8317                     else
8318                       {
8319                         use_rela = TRUE;
8320                         use_rela_initialised = TRUE;
8321                       }
8322                   }
8323               }
8324             else if ((o->size % bed->s->sizeof_rel) == 0)
8325               {
8326                 /* Section size is only divisible by rel.  */
8327                 if (use_rela_initialised && (use_rela == TRUE))
8328                   {
8329                     _bfd_error_handler
8330                       (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8331                     bfd_set_error (bfd_error_invalid_operation);
8332                     return 0;
8333                   }
8334                 else
8335                   {
8336                     use_rela = FALSE;
8337                     use_rela_initialised = TRUE;
8338                   }
8339               }
8340             else
8341               {
8342                 /* The section size is not divisible by either - something is wrong.  */
8343                 _bfd_error_handler
8344                   (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8345                 bfd_set_error (bfd_error_invalid_operation);
8346                 return 0;
8347               }
8348           }
8349
8350       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8351         if (lo->type == bfd_indirect_link_order)
8352           {
8353             asection *o = lo->u.indirect.section;
8354
8355             if ((o->size % bed->s->sizeof_rela) == 0)
8356               {
8357                 if ((o->size % bed->s->sizeof_rel) == 0)
8358                   /* Section size is divisible by both rel and rela sizes.
8359                      It is of no help to us.  */
8360                   ;
8361                 else
8362                   {
8363                     /* Section size is only divisible by rela.  */
8364                     if (use_rela_initialised && (use_rela == FALSE))
8365                       {
8366                         _bfd_error_handler
8367                           (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8368                         bfd_set_error (bfd_error_invalid_operation);
8369                         return 0;
8370                       }
8371                     else
8372                       {
8373                         use_rela = TRUE;
8374                         use_rela_initialised = TRUE;
8375                       }
8376                   }
8377               }
8378             else if ((o->size % bed->s->sizeof_rel) == 0)
8379               {
8380                 /* Section size is only divisible by rel.  */
8381                 if (use_rela_initialised && (use_rela == TRUE))
8382                   {
8383                     _bfd_error_handler
8384                       (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8385                     bfd_set_error (bfd_error_invalid_operation);
8386                     return 0;
8387                   }
8388                 else
8389                   {
8390                     use_rela = FALSE;
8391                     use_rela_initialised = TRUE;
8392                   }
8393               }
8394             else
8395               {
8396                 /* The section size is not divisible by either - something is wrong.  */
8397                 _bfd_error_handler
8398                   (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8399                 bfd_set_error (bfd_error_invalid_operation);
8400                 return 0;
8401               }
8402           }
8403
8404       if (! use_rela_initialised)
8405         /* Make a guess.  */
8406         use_rela = TRUE;
8407     }
8408   else if (rela_dyn != NULL && rela_dyn->size > 0)
8409     use_rela = TRUE;
8410   else if (rel_dyn != NULL && rel_dyn->size > 0)
8411     use_rela = FALSE;
8412   else
8413     return 0;
8414
8415   if (use_rela)
8416     {
8417       dynamic_relocs = rela_dyn;
8418       ext_size = bed->s->sizeof_rela;
8419       swap_in = bed->s->swap_reloca_in;
8420       swap_out = bed->s->swap_reloca_out;
8421     }
8422   else
8423     {
8424       dynamic_relocs = rel_dyn;
8425       ext_size = bed->s->sizeof_rel;
8426       swap_in = bed->s->swap_reloc_in;
8427       swap_out = bed->s->swap_reloc_out;
8428     }
8429
8430   size = 0;
8431   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8432     if (lo->type == bfd_indirect_link_order)
8433       size += lo->u.indirect.section->size;
8434
8435   if (size != dynamic_relocs->size)
8436     return 0;
8437
8438   sort_elt = (sizeof (struct elf_link_sort_rela)
8439               + (i2e - 1) * sizeof (Elf_Internal_Rela));
8440
8441   count = dynamic_relocs->size / ext_size;
8442   if (count == 0)
8443     return 0;
8444   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8445
8446   if (sort == NULL)
8447     {
8448       (*info->callbacks->warning)
8449         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8450       return 0;
8451     }
8452
8453   if (bed->s->arch_size == 32)
8454     r_sym_mask = ~(bfd_vma) 0xff;
8455   else
8456     r_sym_mask = ~(bfd_vma) 0xffffffff;
8457
8458   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8459     if (lo->type == bfd_indirect_link_order)
8460       {
8461         bfd_byte *erel, *erelend;
8462         asection *o = lo->u.indirect.section;
8463
8464         if (o->contents == NULL && o->size != 0)
8465           {
8466             /* This is a reloc section that is being handled as a normal
8467                section.  See bfd_section_from_shdr.  We can't combine
8468                relocs in this case.  */
8469             free (sort);
8470             return 0;
8471           }
8472         erel = o->contents;
8473         erelend = o->contents + o->size;
8474         /* FIXME: octets_per_byte.  */
8475         p = sort + o->output_offset / ext_size * sort_elt;
8476
8477         while (erel < erelend)
8478           {
8479             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8480
8481             (*swap_in) (abfd, erel, s->rela);
8482             s->type = (*bed->elf_backend_reloc_type_class) (info, o, s->rela);
8483             s->u.sym_mask = r_sym_mask;
8484             p += sort_elt;
8485             erel += ext_size;
8486           }
8487       }
8488
8489   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
8490
8491   for (i = 0, p = sort; i < count; i++, p += sort_elt)
8492     {
8493       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8494       if (s->type != reloc_class_relative)
8495         break;
8496     }
8497   ret = i;
8498   s_non_relative = p;
8499
8500   sq = (struct elf_link_sort_rela *) s_non_relative;
8501   for (; i < count; i++, p += sort_elt)
8502     {
8503       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
8504       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
8505         sq = sp;
8506       sp->u.offset = sq->rela->r_offset;
8507     }
8508
8509   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
8510
8511   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8512     if (lo->type == bfd_indirect_link_order)
8513       {
8514         bfd_byte *erel, *erelend;
8515         asection *o = lo->u.indirect.section;
8516
8517         erel = o->contents;
8518         erelend = o->contents + o->size;
8519         /* FIXME: octets_per_byte.  */
8520         p = sort + o->output_offset / ext_size * sort_elt;
8521         while (erel < erelend)
8522           {
8523             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8524             (*swap_out) (abfd, s->rela, erel);
8525             p += sort_elt;
8526             erel += ext_size;
8527           }
8528       }
8529
8530   free (sort);
8531   *psec = dynamic_relocs;
8532   return ret;
8533 }
8534
8535 /* Flush the output symbols to the file.  */
8536
8537 static bfd_boolean
8538 elf_link_flush_output_syms (struct elf_final_link_info *flinfo,
8539                             const struct elf_backend_data *bed)
8540 {
8541   if (flinfo->symbuf_count > 0)
8542     {
8543       Elf_Internal_Shdr *hdr;
8544       file_ptr pos;
8545       bfd_size_type amt;
8546
8547       hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
8548       pos = hdr->sh_offset + hdr->sh_size;
8549       amt = flinfo->symbuf_count * bed->s->sizeof_sym;
8550       if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) != 0
8551           || bfd_bwrite (flinfo->symbuf, amt, flinfo->output_bfd) != amt)
8552         return FALSE;
8553
8554       hdr->sh_size += amt;
8555       flinfo->symbuf_count = 0;
8556     }
8557
8558   return TRUE;
8559 }
8560
8561 /* Add a symbol to the output symbol table.  */
8562
8563 static int
8564 elf_link_output_sym (struct elf_final_link_info *flinfo,
8565                      const char *name,
8566                      Elf_Internal_Sym *elfsym,
8567                      asection *input_sec,
8568                      struct elf_link_hash_entry *h)
8569 {
8570   bfd_byte *dest;
8571   Elf_External_Sym_Shndx *destshndx;
8572   int (*output_symbol_hook)
8573     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
8574      struct elf_link_hash_entry *);
8575   const struct elf_backend_data *bed;
8576
8577   BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
8578
8579   bed = get_elf_backend_data (flinfo->output_bfd);
8580   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
8581   if (output_symbol_hook != NULL)
8582     {
8583       int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
8584       if (ret != 1)
8585         return ret;
8586     }
8587
8588   if (name == NULL || *name == '\0')
8589     elfsym->st_name = 0;
8590   else if (input_sec->flags & SEC_EXCLUDE)
8591     elfsym->st_name = 0;
8592   else
8593     {
8594       elfsym->st_name = (unsigned long) _bfd_stringtab_add (flinfo->symstrtab,
8595                                                             name, TRUE, FALSE);
8596       if (elfsym->st_name == (unsigned long) -1)
8597         return 0;
8598     }
8599
8600   if (flinfo->symbuf_count >= flinfo->symbuf_size)
8601     {
8602       if (! elf_link_flush_output_syms (flinfo, bed))
8603         return 0;
8604     }
8605
8606   dest = flinfo->symbuf + flinfo->symbuf_count * bed->s->sizeof_sym;
8607   destshndx = flinfo->symshndxbuf;
8608   if (destshndx != NULL)
8609     {
8610       if (bfd_get_symcount (flinfo->output_bfd) >= flinfo->shndxbuf_size)
8611         {
8612           bfd_size_type amt;
8613
8614           amt = flinfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
8615           destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx,
8616                                                               amt * 2);
8617           if (destshndx == NULL)
8618             return 0;
8619           flinfo->symshndxbuf = destshndx;
8620           memset ((char *) destshndx + amt, 0, amt);
8621           flinfo->shndxbuf_size *= 2;
8622         }
8623       destshndx += bfd_get_symcount (flinfo->output_bfd);
8624     }
8625
8626   bed->s->swap_symbol_out (flinfo->output_bfd, elfsym, dest, destshndx);
8627   flinfo->symbuf_count += 1;
8628   bfd_get_symcount (flinfo->output_bfd) += 1;
8629
8630   return 1;
8631 }
8632
8633 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
8634
8635 static bfd_boolean
8636 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
8637 {
8638   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
8639       && sym->st_shndx < SHN_LORESERVE)
8640     {
8641       /* The gABI doesn't support dynamic symbols in output sections
8642          beyond 64k.  */
8643       (*_bfd_error_handler)
8644         (_("%B: Too many sections: %d (>= %d)"),
8645          abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
8646       bfd_set_error (bfd_error_nonrepresentable_section);
8647       return FALSE;
8648     }
8649   return TRUE;
8650 }
8651
8652 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
8653    allowing an unsatisfied unversioned symbol in the DSO to match a
8654    versioned symbol that would normally require an explicit version.
8655    We also handle the case that a DSO references a hidden symbol
8656    which may be satisfied by a versioned symbol in another DSO.  */
8657
8658 static bfd_boolean
8659 elf_link_check_versioned_symbol (struct bfd_link_info *info,
8660                                  const struct elf_backend_data *bed,
8661                                  struct elf_link_hash_entry *h)
8662 {
8663   bfd *abfd;
8664   struct elf_link_loaded_list *loaded;
8665
8666   if (!is_elf_hash_table (info->hash))
8667     return FALSE;
8668
8669   /* Check indirect symbol.  */
8670   while (h->root.type == bfd_link_hash_indirect)
8671     h = (struct elf_link_hash_entry *) h->root.u.i.link;
8672
8673   switch (h->root.type)
8674     {
8675     default:
8676       abfd = NULL;
8677       break;
8678
8679     case bfd_link_hash_undefined:
8680     case bfd_link_hash_undefweak:
8681       abfd = h->root.u.undef.abfd;
8682       if ((abfd->flags & DYNAMIC) == 0
8683           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
8684         return FALSE;
8685       break;
8686
8687     case bfd_link_hash_defined:
8688     case bfd_link_hash_defweak:
8689       abfd = h->root.u.def.section->owner;
8690       break;
8691
8692     case bfd_link_hash_common:
8693       abfd = h->root.u.c.p->section->owner;
8694       break;
8695     }
8696   BFD_ASSERT (abfd != NULL);
8697
8698   for (loaded = elf_hash_table (info)->loaded;
8699        loaded != NULL;
8700        loaded = loaded->next)
8701     {
8702       bfd *input;
8703       Elf_Internal_Shdr *hdr;
8704       bfd_size_type symcount;
8705       bfd_size_type extsymcount;
8706       bfd_size_type extsymoff;
8707       Elf_Internal_Shdr *versymhdr;
8708       Elf_Internal_Sym *isym;
8709       Elf_Internal_Sym *isymend;
8710       Elf_Internal_Sym *isymbuf;
8711       Elf_External_Versym *ever;
8712       Elf_External_Versym *extversym;
8713
8714       input = loaded->abfd;
8715
8716       /* We check each DSO for a possible hidden versioned definition.  */
8717       if (input == abfd
8718           || (input->flags & DYNAMIC) == 0
8719           || elf_dynversym (input) == 0)
8720         continue;
8721
8722       hdr = &elf_tdata (input)->dynsymtab_hdr;
8723
8724       symcount = hdr->sh_size / bed->s->sizeof_sym;
8725       if (elf_bad_symtab (input))
8726         {
8727           extsymcount = symcount;
8728           extsymoff = 0;
8729         }
8730       else
8731         {
8732           extsymcount = symcount - hdr->sh_info;
8733           extsymoff = hdr->sh_info;
8734         }
8735
8736       if (extsymcount == 0)
8737         continue;
8738
8739       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
8740                                       NULL, NULL, NULL);
8741       if (isymbuf == NULL)
8742         return FALSE;
8743
8744       /* Read in any version definitions.  */
8745       versymhdr = &elf_tdata (input)->dynversym_hdr;
8746       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
8747       if (extversym == NULL)
8748         goto error_ret;
8749
8750       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
8751           || (bfd_bread (extversym, versymhdr->sh_size, input)
8752               != versymhdr->sh_size))
8753         {
8754           free (extversym);
8755         error_ret:
8756           free (isymbuf);
8757           return FALSE;
8758         }
8759
8760       ever = extversym + extsymoff;
8761       isymend = isymbuf + extsymcount;
8762       for (isym = isymbuf; isym < isymend; isym++, ever++)
8763         {
8764           const char *name;
8765           Elf_Internal_Versym iver;
8766           unsigned short version_index;
8767
8768           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
8769               || isym->st_shndx == SHN_UNDEF)
8770             continue;
8771
8772           name = bfd_elf_string_from_elf_section (input,
8773                                                   hdr->sh_link,
8774                                                   isym->st_name);
8775           if (strcmp (name, h->root.root.string) != 0)
8776             continue;
8777
8778           _bfd_elf_swap_versym_in (input, ever, &iver);
8779
8780           if ((iver.vs_vers & VERSYM_HIDDEN) == 0
8781               && !(h->def_regular
8782                    && h->forced_local))
8783             {
8784               /* If we have a non-hidden versioned sym, then it should
8785                  have provided a definition for the undefined sym unless
8786                  it is defined in a non-shared object and forced local.
8787                */
8788               abort ();
8789             }
8790
8791           version_index = iver.vs_vers & VERSYM_VERSION;
8792           if (version_index == 1 || version_index == 2)
8793             {
8794               /* This is the base or first version.  We can use it.  */
8795               free (extversym);
8796               free (isymbuf);
8797               return TRUE;
8798             }
8799         }
8800
8801       free (extversym);
8802       free (isymbuf);
8803     }
8804
8805   return FALSE;
8806 }
8807
8808 /* Add an external symbol to the symbol table.  This is called from
8809    the hash table traversal routine.  When generating a shared object,
8810    we go through the symbol table twice.  The first time we output
8811    anything that might have been forced to local scope in a version
8812    script.  The second time we output the symbols that are still
8813    global symbols.  */
8814
8815 static bfd_boolean
8816 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
8817 {
8818   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
8819   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
8820   struct elf_final_link_info *flinfo = eoinfo->flinfo;
8821   bfd_boolean strip;
8822   Elf_Internal_Sym sym;
8823   asection *input_sec;
8824   const struct elf_backend_data *bed;
8825   long indx;
8826   int ret;
8827
8828   if (h->root.type == bfd_link_hash_warning)
8829     {
8830       h = (struct elf_link_hash_entry *) h->root.u.i.link;
8831       if (h->root.type == bfd_link_hash_new)
8832         return TRUE;
8833     }
8834
8835   /* Decide whether to output this symbol in this pass.  */
8836   if (eoinfo->localsyms)
8837     {
8838       if (!h->forced_local)
8839         return TRUE;
8840       if (eoinfo->second_pass
8841           && !((h->root.type == bfd_link_hash_defined
8842                 || h->root.type == bfd_link_hash_defweak)
8843                && h->root.u.def.section->output_section != NULL))
8844         return TRUE;
8845
8846       if (!eoinfo->file_sym_done
8847           && (eoinfo->second_pass ? eoinfo->flinfo->filesym_count == 1
8848                                   : eoinfo->flinfo->filesym_count > 1))
8849         {
8850           /* Output a FILE symbol so that following locals are not associated
8851              with the wrong input file.  */
8852           memset (&sym, 0, sizeof (sym));
8853           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8854           sym.st_shndx = SHN_ABS;
8855           if (!elf_link_output_sym (eoinfo->flinfo, NULL, &sym,
8856                                     bfd_und_section_ptr, NULL))
8857             return FALSE;
8858
8859           eoinfo->file_sym_done = TRUE;
8860         }
8861     }
8862   else
8863     {
8864       if (h->forced_local)
8865         return TRUE;
8866     }
8867
8868   bed = get_elf_backend_data (flinfo->output_bfd);
8869
8870   if (h->root.type == bfd_link_hash_undefined)
8871     {
8872       /* If we have an undefined symbol reference here then it must have
8873          come from a shared library that is being linked in.  (Undefined
8874          references in regular files have already been handled unless
8875          they are in unreferenced sections which are removed by garbage
8876          collection).  */
8877       bfd_boolean ignore_undef = FALSE;
8878
8879       /* Some symbols may be special in that the fact that they're
8880          undefined can be safely ignored - let backend determine that.  */
8881       if (bed->elf_backend_ignore_undef_symbol)
8882         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
8883
8884       /* If we are reporting errors for this situation then do so now.  */
8885       if (!ignore_undef
8886           && h->ref_dynamic
8887           && (!h->ref_regular || flinfo->info->gc_sections)
8888           && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
8889           && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
8890         {
8891           if (!(flinfo->info->callbacks->undefined_symbol
8892                 (flinfo->info, h->root.root.string,
8893                  h->ref_regular ? NULL : h->root.u.undef.abfd,
8894                  NULL, 0,
8895                  (flinfo->info->unresolved_syms_in_shared_libs
8896                   == RM_GENERATE_ERROR))))
8897             {
8898               bfd_set_error (bfd_error_bad_value);
8899               eoinfo->failed = TRUE;
8900               return FALSE;
8901             }
8902         }
8903     }
8904
8905   /* We should also warn if a forced local symbol is referenced from
8906      shared libraries.  */
8907   if (!flinfo->info->relocatable
8908       && flinfo->info->executable
8909       && h->forced_local
8910       && h->ref_dynamic
8911       && h->def_regular
8912       && !h->dynamic_def
8913       && h->ref_dynamic_nonweak
8914       && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
8915     {
8916       bfd *def_bfd;
8917       const char *msg;
8918       struct elf_link_hash_entry *hi = h;
8919
8920       /* Check indirect symbol.  */
8921       while (hi->root.type == bfd_link_hash_indirect)
8922         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
8923
8924       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
8925         msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
8926       else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
8927         msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
8928       else
8929         msg = _("%B: local symbol `%s' in %B is referenced by DSO");
8930       def_bfd = flinfo->output_bfd;
8931       if (hi->root.u.def.section != bfd_abs_section_ptr)
8932         def_bfd = hi->root.u.def.section->owner;
8933       (*_bfd_error_handler) (msg, flinfo->output_bfd, def_bfd,
8934                              h->root.root.string);
8935       bfd_set_error (bfd_error_bad_value);
8936       eoinfo->failed = TRUE;
8937       return FALSE;
8938     }
8939
8940   /* We don't want to output symbols that have never been mentioned by
8941      a regular file, or that we have been told to strip.  However, if
8942      h->indx is set to -2, the symbol is used by a reloc and we must
8943      output it.  */
8944   if (h->indx == -2)
8945     strip = FALSE;
8946   else if ((h->def_dynamic
8947             || h->ref_dynamic
8948             || h->root.type == bfd_link_hash_new)
8949            && !h->def_regular
8950            && !h->ref_regular)
8951     strip = TRUE;
8952   else if (flinfo->info->strip == strip_all)
8953     strip = TRUE;
8954   else if (flinfo->info->strip == strip_some
8955            && bfd_hash_lookup (flinfo->info->keep_hash,
8956                                h->root.root.string, FALSE, FALSE) == NULL)
8957     strip = TRUE;
8958   else if ((h->root.type == bfd_link_hash_defined
8959             || h->root.type == bfd_link_hash_defweak)
8960            && ((flinfo->info->strip_discarded
8961                 && discarded_section (h->root.u.def.section))
8962                || (h->root.u.def.section->owner != NULL
8963                    && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
8964     strip = TRUE;
8965   else if ((h->root.type == bfd_link_hash_undefined
8966             || h->root.type == bfd_link_hash_undefweak)
8967            && h->root.u.undef.abfd != NULL
8968            && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
8969     strip = TRUE;
8970   else
8971     strip = FALSE;
8972
8973   /* If we're stripping it, and it's not a dynamic symbol, there's
8974      nothing else to do unless it is a forced local symbol or a
8975      STT_GNU_IFUNC symbol.  */
8976   if (strip
8977       && h->dynindx == -1
8978       && h->type != STT_GNU_IFUNC
8979       && !h->forced_local)
8980     return TRUE;
8981
8982   sym.st_value = 0;
8983   sym.st_size = h->size;
8984   sym.st_other = h->other;
8985   if (h->forced_local)
8986     {
8987       sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
8988       /* Turn off visibility on local symbol.  */
8989       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
8990     }
8991   /* Set STB_GNU_UNIQUE only if symbol is defined in regular object.  */
8992   else if (h->unique_global && h->def_regular)
8993     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type);
8994   else if (h->root.type == bfd_link_hash_undefweak
8995            || h->root.type == bfd_link_hash_defweak)
8996     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
8997   else
8998     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
8999   sym.st_target_internal = h->target_internal;
9000
9001   switch (h->root.type)
9002     {
9003     default:
9004     case bfd_link_hash_new:
9005     case bfd_link_hash_warning:
9006       abort ();
9007       return FALSE;
9008
9009     case bfd_link_hash_undefined:
9010     case bfd_link_hash_undefweak:
9011       input_sec = bfd_und_section_ptr;
9012       sym.st_shndx = SHN_UNDEF;
9013       break;
9014
9015     case bfd_link_hash_defined:
9016     case bfd_link_hash_defweak:
9017       {
9018         input_sec = h->root.u.def.section;
9019         if (input_sec->output_section != NULL)
9020           {
9021             if (eoinfo->localsyms && flinfo->filesym_count == 1)
9022               {
9023                 bfd_boolean second_pass_sym
9024                   = (input_sec->owner == flinfo->output_bfd
9025                      || input_sec->owner == NULL
9026                      || (input_sec->flags & SEC_LINKER_CREATED) != 0
9027                      || (input_sec->owner->flags & BFD_LINKER_CREATED) != 0);
9028
9029                 eoinfo->need_second_pass |= second_pass_sym;
9030                 if (eoinfo->second_pass != second_pass_sym)
9031                   return TRUE;
9032               }
9033
9034             sym.st_shndx =
9035               _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
9036                                                  input_sec->output_section);
9037             if (sym.st_shndx == SHN_BAD)
9038               {
9039                 (*_bfd_error_handler)
9040                   (_("%B: could not find output section %A for input section %A"),
9041                    flinfo->output_bfd, input_sec->output_section, input_sec);
9042                 bfd_set_error (bfd_error_nonrepresentable_section);
9043                 eoinfo->failed = TRUE;
9044                 return FALSE;
9045               }
9046
9047             /* ELF symbols in relocatable files are section relative,
9048                but in nonrelocatable files they are virtual
9049                addresses.  */
9050             sym.st_value = h->root.u.def.value + input_sec->output_offset;
9051             if (!flinfo->info->relocatable)
9052               {
9053                 sym.st_value += input_sec->output_section->vma;
9054                 if (h->type == STT_TLS)
9055                   {
9056                     asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
9057                     if (tls_sec != NULL)
9058                       sym.st_value -= tls_sec->vma;
9059                     else
9060                       {
9061                         /* The TLS section may have been garbage collected.  */
9062                         BFD_ASSERT (flinfo->info->gc_sections
9063                                     && !input_sec->gc_mark);
9064                       }
9065                   }
9066               }
9067           }
9068         else
9069           {
9070             BFD_ASSERT (input_sec->owner == NULL
9071                         || (input_sec->owner->flags & DYNAMIC) != 0);
9072             sym.st_shndx = SHN_UNDEF;
9073             input_sec = bfd_und_section_ptr;
9074           }
9075       }
9076       break;
9077
9078     case bfd_link_hash_common:
9079       input_sec = h->root.u.c.p->section;
9080       sym.st_shndx = bed->common_section_index (input_sec);
9081       sym.st_value = 1 << h->root.u.c.p->alignment_power;
9082       break;
9083
9084     case bfd_link_hash_indirect:
9085       /* These symbols are created by symbol versioning.  They point
9086          to the decorated version of the name.  For example, if the
9087          symbol foo@@GNU_1.2 is the default, which should be used when
9088          foo is used with no version, then we add an indirect symbol
9089          foo which points to foo@@GNU_1.2.  We ignore these symbols,
9090          since the indirected symbol is already in the hash table.  */
9091       return TRUE;
9092     }
9093
9094   /* Give the processor backend a chance to tweak the symbol value,
9095      and also to finish up anything that needs to be done for this
9096      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
9097      forced local syms when non-shared is due to a historical quirk.
9098      STT_GNU_IFUNC symbol must go through PLT.  */
9099   if ((h->type == STT_GNU_IFUNC
9100        && h->def_regular
9101        && !flinfo->info->relocatable)
9102       || ((h->dynindx != -1
9103            || h->forced_local)
9104           && ((flinfo->info->shared
9105                && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
9106                    || h->root.type != bfd_link_hash_undefweak))
9107               || !h->forced_local)
9108           && elf_hash_table (flinfo->info)->dynamic_sections_created))
9109     {
9110       if (! ((*bed->elf_backend_finish_dynamic_symbol)
9111              (flinfo->output_bfd, flinfo->info, h, &sym)))
9112         {
9113           eoinfo->failed = TRUE;
9114           return FALSE;
9115         }
9116     }
9117
9118   /* If we are marking the symbol as undefined, and there are no
9119      non-weak references to this symbol from a regular object, then
9120      mark the symbol as weak undefined; if there are non-weak
9121      references, mark the symbol as strong.  We can't do this earlier,
9122      because it might not be marked as undefined until the
9123      finish_dynamic_symbol routine gets through with it.  */
9124   if (sym.st_shndx == SHN_UNDEF
9125       && h->ref_regular
9126       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
9127           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
9128     {
9129       int bindtype;
9130       unsigned int type = ELF_ST_TYPE (sym.st_info);
9131
9132       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
9133       if (type == STT_GNU_IFUNC)
9134         type = STT_FUNC;
9135
9136       if (h->ref_regular_nonweak)
9137         bindtype = STB_GLOBAL;
9138       else
9139         bindtype = STB_WEAK;
9140       sym.st_info = ELF_ST_INFO (bindtype, type);
9141     }
9142
9143   /* If this is a symbol defined in a dynamic library, don't use the
9144      symbol size from the dynamic library.  Relinking an executable
9145      against a new library may introduce gratuitous changes in the
9146      executable's symbols if we keep the size.  */
9147   if (sym.st_shndx == SHN_UNDEF
9148       && !h->def_regular
9149       && h->def_dynamic)
9150     sym.st_size = 0;
9151
9152   /* If a non-weak symbol with non-default visibility is not defined
9153      locally, it is a fatal error.  */
9154   if (!flinfo->info->relocatable
9155       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
9156       && ELF_ST_BIND (sym.st_info) != STB_WEAK
9157       && h->root.type == bfd_link_hash_undefined
9158       && !h->def_regular)
9159     {
9160       const char *msg;
9161
9162       if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
9163         msg = _("%B: protected symbol `%s' isn't defined");
9164       else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
9165         msg = _("%B: internal symbol `%s' isn't defined");
9166       else
9167         msg = _("%B: hidden symbol `%s' isn't defined");
9168       (*_bfd_error_handler) (msg, flinfo->output_bfd, h->root.root.string);
9169       bfd_set_error (bfd_error_bad_value);
9170       eoinfo->failed = TRUE;
9171       return FALSE;
9172     }
9173
9174   /* If this symbol should be put in the .dynsym section, then put it
9175      there now.  We already know the symbol index.  We also fill in
9176      the entry in the .hash section.  */
9177   if (flinfo->dynsym_sec != NULL
9178       && h->dynindx != -1
9179       && elf_hash_table (flinfo->info)->dynamic_sections_created)
9180     {
9181       bfd_byte *esym;
9182
9183       /* Since there is no version information in the dynamic string,
9184          if there is no version info in symbol version section, we will
9185          have a run-time problem.  */
9186       if (h->verinfo.verdef == NULL)
9187         {
9188           char *p = strrchr (h->root.root.string, ELF_VER_CHR);
9189
9190           if (p && p [1] != '\0')
9191             {
9192               (*_bfd_error_handler)
9193                 (_("%B: No symbol version section for versioned symbol `%s'"),
9194                  flinfo->output_bfd, h->root.root.string);
9195               eoinfo->failed = TRUE;
9196               return FALSE;
9197             }
9198         }
9199
9200       sym.st_name = h->dynstr_index;
9201       esym = flinfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
9202       if (!check_dynsym (flinfo->output_bfd, &sym))
9203         {
9204           eoinfo->failed = TRUE;
9205           return FALSE;
9206         }
9207       bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
9208
9209       if (flinfo->hash_sec != NULL)
9210         {
9211           size_t hash_entry_size;
9212           bfd_byte *bucketpos;
9213           bfd_vma chain;
9214           size_t bucketcount;
9215           size_t bucket;
9216
9217           bucketcount = elf_hash_table (flinfo->info)->bucketcount;
9218           bucket = h->u.elf_hash_value % bucketcount;
9219
9220           hash_entry_size
9221             = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
9222           bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
9223                        + (bucket + 2) * hash_entry_size);
9224           chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
9225           bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
9226                    bucketpos);
9227           bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
9228                    ((bfd_byte *) flinfo->hash_sec->contents
9229                     + (bucketcount + 2 + h->dynindx) * hash_entry_size));
9230         }
9231
9232       if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
9233         {
9234           Elf_Internal_Versym iversym;
9235           Elf_External_Versym *eversym;
9236
9237           if (!h->def_regular)
9238             {
9239               if (h->verinfo.verdef == NULL
9240                   || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
9241                       & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
9242                 iversym.vs_vers = 0;
9243               else
9244                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
9245             }
9246           else
9247             {
9248               if (h->verinfo.vertree == NULL)
9249                 iversym.vs_vers = 1;
9250               else
9251                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
9252               if (flinfo->info->create_default_symver)
9253                 iversym.vs_vers++;
9254             }
9255
9256           if (h->hidden)
9257             iversym.vs_vers |= VERSYM_HIDDEN;
9258
9259           eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
9260           eversym += h->dynindx;
9261           _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
9262         }
9263     }
9264
9265   /* If we're stripping it, then it was just a dynamic symbol, and
9266      there's nothing else to do.  */
9267   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
9268     return TRUE;
9269
9270   indx = bfd_get_symcount (flinfo->output_bfd);
9271   ret = elf_link_output_sym (flinfo, h->root.root.string, &sym, input_sec, h);
9272   if (ret == 0)
9273     {
9274       eoinfo->failed = TRUE;
9275       return FALSE;
9276     }
9277   else if (ret == 1)
9278     h->indx = indx;
9279   else if (h->indx == -2)
9280     abort();
9281
9282   return TRUE;
9283 }
9284
9285 /* Return TRUE if special handling is done for relocs in SEC against
9286    symbols defined in discarded sections.  */
9287
9288 static bfd_boolean
9289 elf_section_ignore_discarded_relocs (asection *sec)
9290 {
9291   const struct elf_backend_data *bed;
9292
9293   switch (sec->sec_info_type)
9294     {
9295     case SEC_INFO_TYPE_STABS:
9296     case SEC_INFO_TYPE_EH_FRAME:
9297       return TRUE;
9298     default:
9299       break;
9300     }
9301
9302   bed = get_elf_backend_data (sec->owner);
9303   if (bed->elf_backend_ignore_discarded_relocs != NULL
9304       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
9305     return TRUE;
9306
9307   return FALSE;
9308 }
9309
9310 /* Return a mask saying how ld should treat relocations in SEC against
9311    symbols defined in discarded sections.  If this function returns
9312    COMPLAIN set, ld will issue a warning message.  If this function
9313    returns PRETEND set, and the discarded section was link-once and the
9314    same size as the kept link-once section, ld will pretend that the
9315    symbol was actually defined in the kept section.  Otherwise ld will
9316    zero the reloc (at least that is the intent, but some cooperation by
9317    the target dependent code is needed, particularly for REL targets).  */
9318
9319 unsigned int
9320 _bfd_elf_default_action_discarded (asection *sec)
9321 {
9322   if (sec->flags & SEC_DEBUGGING)
9323     return PRETEND;
9324
9325   if (strcmp (".eh_frame", sec->name) == 0)
9326     return 0;
9327
9328   if (strcmp (".gcc_except_table", sec->name) == 0)
9329     return 0;
9330
9331   return COMPLAIN | PRETEND;
9332 }
9333
9334 /* Find a match between a section and a member of a section group.  */
9335
9336 static asection *
9337 match_group_member (asection *sec, asection *group,
9338                     struct bfd_link_info *info)
9339 {
9340   asection *first = elf_next_in_group (group);
9341   asection *s = first;
9342
9343   while (s != NULL)
9344     {
9345       if (bfd_elf_match_symbols_in_sections (s, sec, info))
9346         return s;
9347
9348       s = elf_next_in_group (s);
9349       if (s == first)
9350         break;
9351     }
9352
9353   return NULL;
9354 }
9355
9356 /* Check if the kept section of a discarded section SEC can be used
9357    to replace it.  Return the replacement if it is OK.  Otherwise return
9358    NULL.  */
9359
9360 asection *
9361 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
9362 {
9363   asection *kept;
9364
9365   kept = sec->kept_section;
9366   if (kept != NULL)
9367     {
9368       if ((kept->flags & SEC_GROUP) != 0)
9369         kept = match_group_member (sec, kept, info);
9370       if (kept != NULL
9371           && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
9372               != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
9373         kept = NULL;
9374       sec->kept_section = kept;
9375     }
9376   return kept;
9377 }
9378
9379 /* Link an input file into the linker output file.  This function
9380    handles all the sections and relocations of the input file at once.
9381    This is so that we only have to read the local symbols once, and
9382    don't have to keep them in memory.  */
9383
9384 static bfd_boolean
9385 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
9386 {
9387   int (*relocate_section)
9388     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
9389      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
9390   bfd *output_bfd;
9391   Elf_Internal_Shdr *symtab_hdr;
9392   size_t locsymcount;
9393   size_t extsymoff;
9394   Elf_Internal_Sym *isymbuf;
9395   Elf_Internal_Sym *isym;
9396   Elf_Internal_Sym *isymend;
9397   long *pindex;
9398   asection **ppsection;
9399   asection *o;
9400   const struct elf_backend_data *bed;
9401   struct elf_link_hash_entry **sym_hashes;
9402   bfd_size_type address_size;
9403   bfd_vma r_type_mask;
9404   int r_sym_shift;
9405   bfd_boolean have_file_sym = FALSE;
9406
9407   output_bfd = flinfo->output_bfd;
9408   bed = get_elf_backend_data (output_bfd);
9409   relocate_section = bed->elf_backend_relocate_section;
9410
9411   /* If this is a dynamic object, we don't want to do anything here:
9412      we don't want the local symbols, and we don't want the section
9413      contents.  */
9414   if ((input_bfd->flags & DYNAMIC) != 0)
9415     return TRUE;
9416
9417   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9418   if (elf_bad_symtab (input_bfd))
9419     {
9420       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9421       extsymoff = 0;
9422     }
9423   else
9424     {
9425       locsymcount = symtab_hdr->sh_info;
9426       extsymoff = symtab_hdr->sh_info;
9427     }
9428
9429   /* Read the local symbols.  */
9430   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
9431   if (isymbuf == NULL && locsymcount != 0)
9432     {
9433       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
9434                                       flinfo->internal_syms,
9435                                       flinfo->external_syms,
9436                                       flinfo->locsym_shndx);
9437       if (isymbuf == NULL)
9438         return FALSE;
9439     }
9440
9441   /* Find local symbol sections and adjust values of symbols in
9442      SEC_MERGE sections.  Write out those local symbols we know are
9443      going into the output file.  */
9444   isymend = isymbuf + locsymcount;
9445   for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
9446        isym < isymend;
9447        isym++, pindex++, ppsection++)
9448     {
9449       asection *isec;
9450       const char *name;
9451       Elf_Internal_Sym osym;
9452       long indx;
9453       int ret;
9454
9455       *pindex = -1;
9456
9457       if (elf_bad_symtab (input_bfd))
9458         {
9459           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
9460             {
9461               *ppsection = NULL;
9462               continue;
9463             }
9464         }
9465
9466       if (isym->st_shndx == SHN_UNDEF)
9467         isec = bfd_und_section_ptr;
9468       else if (isym->st_shndx == SHN_ABS)
9469         isec = bfd_abs_section_ptr;
9470       else if (isym->st_shndx == SHN_COMMON)
9471         isec = bfd_com_section_ptr;
9472       else
9473         {
9474           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
9475           if (isec == NULL)
9476             {
9477               /* Don't attempt to output symbols with st_shnx in the
9478                  reserved range other than SHN_ABS and SHN_COMMON.  */
9479               *ppsection = NULL;
9480               continue;
9481             }
9482           else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
9483                    && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
9484             isym->st_value =
9485               _bfd_merged_section_offset (output_bfd, &isec,
9486                                           elf_section_data (isec)->sec_info,
9487                                           isym->st_value);
9488         }
9489
9490       *ppsection = isec;
9491
9492       /* Don't output the first, undefined, symbol.  */
9493       if (ppsection == flinfo->sections)
9494         continue;
9495
9496       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
9497         {
9498           /* We never output section symbols.  Instead, we use the
9499              section symbol of the corresponding section in the output
9500              file.  */
9501           continue;
9502         }
9503
9504       /* If we are stripping all symbols, we don't want to output this
9505          one.  */
9506       if (flinfo->info->strip == strip_all)
9507         continue;
9508
9509       /* If we are discarding all local symbols, we don't want to
9510          output this one.  If we are generating a relocatable output
9511          file, then some of the local symbols may be required by
9512          relocs; we output them below as we discover that they are
9513          needed.  */
9514       if (flinfo->info->discard == discard_all)
9515         continue;
9516
9517       /* If this symbol is defined in a section which we are
9518          discarding, we don't need to keep it.  */
9519       if (isym->st_shndx != SHN_UNDEF
9520           && isym->st_shndx < SHN_LORESERVE
9521           && bfd_section_removed_from_list (output_bfd,
9522                                             isec->output_section))
9523         continue;
9524
9525       /* Get the name of the symbol.  */
9526       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
9527                                               isym->st_name);
9528       if (name == NULL)
9529         return FALSE;
9530
9531       /* See if we are discarding symbols with this name.  */
9532       if ((flinfo->info->strip == strip_some
9533            && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
9534                == NULL))
9535           || (((flinfo->info->discard == discard_sec_merge
9536                 && (isec->flags & SEC_MERGE) && !flinfo->info->relocatable)
9537                || flinfo->info->discard == discard_l)
9538               && bfd_is_local_label_name (input_bfd, name)))
9539         continue;
9540
9541       if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
9542         {
9543           have_file_sym = TRUE;
9544           flinfo->filesym_count += 1;
9545         }
9546       if (!have_file_sym)
9547         {
9548           /* In the absence of debug info, bfd_find_nearest_line uses
9549              FILE symbols to determine the source file for local
9550              function symbols.  Provide a FILE symbol here if input
9551              files lack such, so that their symbols won't be
9552              associated with a previous input file.  It's not the
9553              source file, but the best we can do.  */
9554           have_file_sym = TRUE;
9555           flinfo->filesym_count += 1;
9556           memset (&osym, 0, sizeof (osym));
9557           osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
9558           osym.st_shndx = SHN_ABS;
9559           if (!elf_link_output_sym (flinfo, input_bfd->filename, &osym,
9560                                     bfd_abs_section_ptr, NULL))
9561             return FALSE;
9562         }
9563
9564       osym = *isym;
9565
9566       /* Adjust the section index for the output file.  */
9567       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9568                                                          isec->output_section);
9569       if (osym.st_shndx == SHN_BAD)
9570         return FALSE;
9571
9572       /* ELF symbols in relocatable files are section relative, but
9573          in executable files they are virtual addresses.  Note that
9574          this code assumes that all ELF sections have an associated
9575          BFD section with a reasonable value for output_offset; below
9576          we assume that they also have a reasonable value for
9577          output_section.  Any special sections must be set up to meet
9578          these requirements.  */
9579       osym.st_value += isec->output_offset;
9580       if (!flinfo->info->relocatable)
9581         {
9582           osym.st_value += isec->output_section->vma;
9583           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
9584             {
9585               /* STT_TLS symbols are relative to PT_TLS segment base.  */
9586               BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL);
9587               osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
9588             }
9589         }
9590
9591       indx = bfd_get_symcount (output_bfd);
9592       ret = elf_link_output_sym (flinfo, name, &osym, isec, NULL);
9593       if (ret == 0)
9594         return FALSE;
9595       else if (ret == 1)
9596         *pindex = indx;
9597     }
9598
9599   if (bed->s->arch_size == 32)
9600     {
9601       r_type_mask = 0xff;
9602       r_sym_shift = 8;
9603       address_size = 4;
9604     }
9605   else
9606     {
9607       r_type_mask = 0xffffffff;
9608       r_sym_shift = 32;
9609       address_size = 8;
9610     }
9611
9612   /* Relocate the contents of each section.  */
9613   sym_hashes = elf_sym_hashes (input_bfd);
9614   for (o = input_bfd->sections; o != NULL; o = o->next)
9615     {
9616       bfd_byte *contents;
9617
9618       if (! o->linker_mark)
9619         {
9620           /* This section was omitted from the link.  */
9621           continue;
9622         }
9623
9624       if (flinfo->info->relocatable
9625           && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
9626         {
9627           /* Deal with the group signature symbol.  */
9628           struct bfd_elf_section_data *sec_data = elf_section_data (o);
9629           unsigned long symndx = sec_data->this_hdr.sh_info;
9630           asection *osec = o->output_section;
9631
9632           if (symndx >= locsymcount
9633               || (elf_bad_symtab (input_bfd)
9634                   && flinfo->sections[symndx] == NULL))
9635             {
9636               struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
9637               while (h->root.type == bfd_link_hash_indirect
9638                      || h->root.type == bfd_link_hash_warning)
9639                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
9640               /* Arrange for symbol to be output.  */
9641               h->indx = -2;
9642               elf_section_data (osec)->this_hdr.sh_info = -2;
9643             }
9644           else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
9645             {
9646               /* We'll use the output section target_index.  */
9647               asection *sec = flinfo->sections[symndx]->output_section;
9648               elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
9649             }
9650           else
9651             {
9652               if (flinfo->indices[symndx] == -1)
9653                 {
9654                   /* Otherwise output the local symbol now.  */
9655                   Elf_Internal_Sym sym = isymbuf[symndx];
9656                   asection *sec = flinfo->sections[symndx]->output_section;
9657                   const char *name;
9658                   long indx;
9659                   int ret;
9660
9661                   name = bfd_elf_string_from_elf_section (input_bfd,
9662                                                           symtab_hdr->sh_link,
9663                                                           sym.st_name);
9664                   if (name == NULL)
9665                     return FALSE;
9666
9667                   sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9668                                                                     sec);
9669                   if (sym.st_shndx == SHN_BAD)
9670                     return FALSE;
9671
9672                   sym.st_value += o->output_offset;
9673
9674                   indx = bfd_get_symcount (output_bfd);
9675                   ret = elf_link_output_sym (flinfo, name, &sym, o, NULL);
9676                   if (ret == 0)
9677                     return FALSE;
9678                   else if (ret == 1)
9679                     flinfo->indices[symndx] = indx;
9680                   else
9681                     abort ();
9682                 }
9683               elf_section_data (osec)->this_hdr.sh_info
9684                 = flinfo->indices[symndx];
9685             }
9686         }
9687
9688       if ((o->flags & SEC_HAS_CONTENTS) == 0
9689           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
9690         continue;
9691
9692       if ((o->flags & SEC_LINKER_CREATED) != 0)
9693         {
9694           /* Section was created by _bfd_elf_link_create_dynamic_sections
9695              or somesuch.  */
9696           continue;
9697         }
9698
9699       /* Get the contents of the section.  They have been cached by a
9700          relaxation routine.  Note that o is a section in an input
9701          file, so the contents field will not have been set by any of
9702          the routines which work on output files.  */
9703       if (elf_section_data (o)->this_hdr.contents != NULL)
9704         {
9705           contents = elf_section_data (o)->this_hdr.contents;
9706           if (bed->caches_rawsize
9707               && o->rawsize != 0
9708               && o->rawsize < o->size)
9709             {
9710               memcpy (flinfo->contents, contents, o->rawsize);
9711               contents = flinfo->contents;
9712             }
9713         }
9714       else
9715         {
9716           contents = flinfo->contents;
9717           if (! bfd_get_full_section_contents (input_bfd, o, &contents))
9718             return FALSE;
9719         }
9720
9721       if ((o->flags & SEC_RELOC) != 0)
9722         {
9723           Elf_Internal_Rela *internal_relocs;
9724           Elf_Internal_Rela *rel, *relend;
9725           int action_discarded;
9726           int ret;
9727
9728           /* Get the swapped relocs.  */
9729           internal_relocs
9730             = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
9731                                          flinfo->internal_relocs, FALSE);
9732           if (internal_relocs == NULL
9733               && o->reloc_count > 0)
9734             return FALSE;
9735
9736           /* We need to reverse-copy input .ctors/.dtors sections if
9737              they are placed in .init_array/.finit_array for output.  */
9738           if (o->size > address_size
9739               && ((strncmp (o->name, ".ctors", 6) == 0
9740                    && strcmp (o->output_section->name,
9741                               ".init_array") == 0)
9742                   || (strncmp (o->name, ".dtors", 6) == 0
9743                       && strcmp (o->output_section->name,
9744                                  ".fini_array") == 0))
9745               && (o->name[6] == 0 || o->name[6] == '.'))
9746             {
9747               if (o->size != o->reloc_count * address_size)
9748                 {
9749                   (*_bfd_error_handler)
9750                     (_("error: %B: size of section %A is not "
9751                        "multiple of address size"),
9752                      input_bfd, o);
9753                   bfd_set_error (bfd_error_on_input);
9754                   return FALSE;
9755                 }
9756               o->flags |= SEC_ELF_REVERSE_COPY;
9757             }
9758
9759           action_discarded = -1;
9760           if (!elf_section_ignore_discarded_relocs (o))
9761             action_discarded = (*bed->action_discarded) (o);
9762
9763           /* Run through the relocs evaluating complex reloc symbols and
9764              looking for relocs against symbols from discarded sections
9765              or section symbols from removed link-once sections.
9766              Complain about relocs against discarded sections.  Zero
9767              relocs against removed link-once sections.  */
9768
9769           rel = internal_relocs;
9770           relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
9771           for ( ; rel < relend; rel++)
9772             {
9773               unsigned long r_symndx = rel->r_info >> r_sym_shift;
9774               unsigned int s_type;
9775               asection **ps, *sec;
9776               struct elf_link_hash_entry *h = NULL;
9777               const char *sym_name;
9778
9779               if (r_symndx == STN_UNDEF)
9780                 continue;
9781
9782               if (r_symndx >= locsymcount
9783                   || (elf_bad_symtab (input_bfd)
9784                       && flinfo->sections[r_symndx] == NULL))
9785                 {
9786                   h = sym_hashes[r_symndx - extsymoff];
9787
9788                   /* Badly formatted input files can contain relocs that
9789                      reference non-existant symbols.  Check here so that
9790                      we do not seg fault.  */
9791                   if (h == NULL)
9792                     {
9793                       char buffer [32];
9794
9795                       sprintf_vma (buffer, rel->r_info);
9796                       (*_bfd_error_handler)
9797                         (_("error: %B contains a reloc (0x%s) for section %A "
9798                            "that references a non-existent global symbol"),
9799                          input_bfd, o, buffer);
9800                       bfd_set_error (bfd_error_bad_value);
9801                       return FALSE;
9802                     }
9803
9804                   while (h->root.type == bfd_link_hash_indirect
9805                          || h->root.type == bfd_link_hash_warning)
9806                     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9807
9808                   s_type = h->type;
9809
9810                   ps = NULL;
9811                   if (h->root.type == bfd_link_hash_defined
9812                       || h->root.type == bfd_link_hash_defweak)
9813                     ps = &h->root.u.def.section;
9814
9815                   sym_name = h->root.root.string;
9816                 }
9817               else
9818                 {
9819                   Elf_Internal_Sym *sym = isymbuf + r_symndx;
9820
9821                   s_type = ELF_ST_TYPE (sym->st_info);
9822                   ps = &flinfo->sections[r_symndx];
9823                   sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9824                                                sym, *ps);
9825                 }
9826
9827               if ((s_type == STT_RELC || s_type == STT_SRELC)
9828                   && !flinfo->info->relocatable)
9829                 {
9830                   bfd_vma val;
9831                   bfd_vma dot = (rel->r_offset
9832                                  + o->output_offset + o->output_section->vma);
9833 #ifdef DEBUG
9834                   printf ("Encountered a complex symbol!");
9835                   printf (" (input_bfd %s, section %s, reloc %ld\n",
9836                           input_bfd->filename, o->name,
9837                           (long) (rel - internal_relocs));
9838                   printf (" symbol: idx  %8.8lx, name %s\n",
9839                           r_symndx, sym_name);
9840                   printf (" reloc : info %8.8lx, addr %8.8lx\n",
9841                           (unsigned long) rel->r_info,
9842                           (unsigned long) rel->r_offset);
9843 #endif
9844                   if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
9845                                     isymbuf, locsymcount, s_type == STT_SRELC))
9846                     return FALSE;
9847
9848                   /* Symbol evaluated OK.  Update to absolute value.  */
9849                   set_symbol_value (input_bfd, isymbuf, locsymcount,
9850                                     r_symndx, val);
9851                   continue;
9852                 }
9853
9854               if (action_discarded != -1 && ps != NULL)
9855                 {
9856                   /* Complain if the definition comes from a
9857                      discarded section.  */
9858                   if ((sec = *ps) != NULL && discarded_section (sec))
9859                     {
9860                       BFD_ASSERT (r_symndx != STN_UNDEF);
9861                       if (action_discarded & COMPLAIN)
9862                         (*flinfo->info->callbacks->einfo)
9863                           (_("%X`%s' referenced in section `%A' of %B: "
9864                              "defined in discarded section `%A' of %B\n"),
9865                            sym_name, o, input_bfd, sec, sec->owner);
9866
9867                       /* Try to do the best we can to support buggy old
9868                          versions of gcc.  Pretend that the symbol is
9869                          really defined in the kept linkonce section.
9870                          FIXME: This is quite broken.  Modifying the
9871                          symbol here means we will be changing all later
9872                          uses of the symbol, not just in this section.  */
9873                       if (action_discarded & PRETEND)
9874                         {
9875                           asection *kept;
9876
9877                           kept = _bfd_elf_check_kept_section (sec,
9878                                                               flinfo->info);
9879                           if (kept != NULL)
9880                             {
9881                               *ps = kept;
9882                               continue;
9883                             }
9884                         }
9885                     }
9886                 }
9887             }
9888
9889           /* Relocate the section by invoking a back end routine.
9890
9891              The back end routine is responsible for adjusting the
9892              section contents as necessary, and (if using Rela relocs
9893              and generating a relocatable output file) adjusting the
9894              reloc addend as necessary.
9895
9896              The back end routine does not have to worry about setting
9897              the reloc address or the reloc symbol index.
9898
9899              The back end routine is given a pointer to the swapped in
9900              internal symbols, and can access the hash table entries
9901              for the external symbols via elf_sym_hashes (input_bfd).
9902
9903              When generating relocatable output, the back end routine
9904              must handle STB_LOCAL/STT_SECTION symbols specially.  The
9905              output symbol is going to be a section symbol
9906              corresponding to the output section, which will require
9907              the addend to be adjusted.  */
9908
9909           ret = (*relocate_section) (output_bfd, flinfo->info,
9910                                      input_bfd, o, contents,
9911                                      internal_relocs,
9912                                      isymbuf,
9913                                      flinfo->sections);
9914           if (!ret)
9915             return FALSE;
9916
9917           if (ret == 2
9918               || flinfo->info->relocatable
9919               || flinfo->info->emitrelocations)
9920             {
9921               Elf_Internal_Rela *irela;
9922               Elf_Internal_Rela *irelaend, *irelamid;
9923               bfd_vma last_offset;
9924               struct elf_link_hash_entry **rel_hash;
9925               struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
9926               Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
9927               unsigned int next_erel;
9928               bfd_boolean rela_normal;
9929               struct bfd_elf_section_data *esdi, *esdo;
9930
9931               esdi = elf_section_data (o);
9932               esdo = elf_section_data (o->output_section);
9933               rela_normal = FALSE;
9934
9935               /* Adjust the reloc addresses and symbol indices.  */
9936
9937               irela = internal_relocs;
9938               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
9939               rel_hash = esdo->rel.hashes + esdo->rel.count;
9940               /* We start processing the REL relocs, if any.  When we reach
9941                  IRELAMID in the loop, we switch to the RELA relocs.  */
9942               irelamid = irela;
9943               if (esdi->rel.hdr != NULL)
9944                 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
9945                              * bed->s->int_rels_per_ext_rel);
9946               rel_hash_list = rel_hash;
9947               rela_hash_list = NULL;
9948               last_offset = o->output_offset;
9949               if (!flinfo->info->relocatable)
9950                 last_offset += o->output_section->vma;
9951               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
9952                 {
9953                   unsigned long r_symndx;
9954                   asection *sec;
9955                   Elf_Internal_Sym sym;
9956
9957                   if (next_erel == bed->s->int_rels_per_ext_rel)
9958                     {
9959                       rel_hash++;
9960                       next_erel = 0;
9961                     }
9962
9963                   if (irela == irelamid)
9964                     {
9965                       rel_hash = esdo->rela.hashes + esdo->rela.count;
9966                       rela_hash_list = rel_hash;
9967                       rela_normal = bed->rela_normal;
9968                     }
9969
9970                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
9971                                                              flinfo->info, o,
9972                                                              irela->r_offset);
9973                   if (irela->r_offset >= (bfd_vma) -2)
9974                     {
9975                       /* This is a reloc for a deleted entry or somesuch.
9976                          Turn it into an R_*_NONE reloc, at the same
9977                          offset as the last reloc.  elf_eh_frame.c and
9978                          bfd_elf_discard_info rely on reloc offsets
9979                          being ordered.  */
9980                       irela->r_offset = last_offset;
9981                       irela->r_info = 0;
9982                       irela->r_addend = 0;
9983                       continue;
9984                     }
9985
9986                   irela->r_offset += o->output_offset;
9987
9988                   /* Relocs in an executable have to be virtual addresses.  */
9989                   if (!flinfo->info->relocatable)
9990                     irela->r_offset += o->output_section->vma;
9991
9992                   last_offset = irela->r_offset;
9993
9994                   r_symndx = irela->r_info >> r_sym_shift;
9995                   if (r_symndx == STN_UNDEF)
9996                     continue;
9997
9998                   if (r_symndx >= locsymcount
9999                       || (elf_bad_symtab (input_bfd)
10000                           && flinfo->sections[r_symndx] == NULL))
10001                     {
10002                       struct elf_link_hash_entry *rh;
10003                       unsigned long indx;
10004
10005                       /* This is a reloc against a global symbol.  We
10006                          have not yet output all the local symbols, so
10007                          we do not know the symbol index of any global
10008                          symbol.  We set the rel_hash entry for this
10009                          reloc to point to the global hash table entry
10010                          for this symbol.  The symbol index is then
10011                          set at the end of bfd_elf_final_link.  */
10012                       indx = r_symndx - extsymoff;
10013                       rh = elf_sym_hashes (input_bfd)[indx];
10014                       while (rh->root.type == bfd_link_hash_indirect
10015                              || rh->root.type == bfd_link_hash_warning)
10016                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
10017
10018                       /* Setting the index to -2 tells
10019                          elf_link_output_extsym that this symbol is
10020                          used by a reloc.  */
10021                       BFD_ASSERT (rh->indx < 0);
10022                       rh->indx = -2;
10023
10024                       *rel_hash = rh;
10025
10026                       continue;
10027                     }
10028
10029                   /* This is a reloc against a local symbol.  */
10030
10031                   *rel_hash = NULL;
10032                   sym = isymbuf[r_symndx];
10033                   sec = flinfo->sections[r_symndx];
10034                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
10035                     {
10036                       /* I suppose the backend ought to fill in the
10037                          section of any STT_SECTION symbol against a
10038                          processor specific section.  */
10039                       r_symndx = STN_UNDEF;
10040                       if (bfd_is_abs_section (sec))
10041                         ;
10042                       else if (sec == NULL || sec->owner == NULL)
10043                         {
10044                           bfd_set_error (bfd_error_bad_value);
10045                           return FALSE;
10046                         }
10047                       else
10048                         {
10049                           asection *osec = sec->output_section;
10050
10051                           /* If we have discarded a section, the output
10052                              section will be the absolute section.  In
10053                              case of discarded SEC_MERGE sections, use
10054                              the kept section.  relocate_section should
10055                              have already handled discarded linkonce
10056                              sections.  */
10057                           if (bfd_is_abs_section (osec)
10058                               && sec->kept_section != NULL
10059                               && sec->kept_section->output_section != NULL)
10060                             {
10061                               osec = sec->kept_section->output_section;
10062                               irela->r_addend -= osec->vma;
10063                             }
10064
10065                           if (!bfd_is_abs_section (osec))
10066                             {
10067                               r_symndx = osec->target_index;
10068                               if (r_symndx == STN_UNDEF)
10069                                 {
10070                                   irela->r_addend += osec->vma;
10071                                   osec = _bfd_nearby_section (output_bfd, osec,
10072                                                               osec->vma);
10073                                   irela->r_addend -= osec->vma;
10074                                   r_symndx = osec->target_index;
10075                                 }
10076                             }
10077                         }
10078
10079                       /* Adjust the addend according to where the
10080                          section winds up in the output section.  */
10081                       if (rela_normal)
10082                         irela->r_addend += sec->output_offset;
10083                     }
10084                   else
10085                     {
10086                       if (flinfo->indices[r_symndx] == -1)
10087                         {
10088                           unsigned long shlink;
10089                           const char *name;
10090                           asection *osec;
10091                           long indx;
10092
10093                           if (flinfo->info->strip == strip_all)
10094                             {
10095                               /* You can't do ld -r -s.  */
10096                               bfd_set_error (bfd_error_invalid_operation);
10097                               return FALSE;
10098                             }
10099
10100                           /* This symbol was skipped earlier, but
10101                              since it is needed by a reloc, we
10102                              must output it now.  */
10103                           shlink = symtab_hdr->sh_link;
10104                           name = (bfd_elf_string_from_elf_section
10105                                   (input_bfd, shlink, sym.st_name));
10106                           if (name == NULL)
10107                             return FALSE;
10108
10109                           osec = sec->output_section;
10110                           sym.st_shndx =
10111                             _bfd_elf_section_from_bfd_section (output_bfd,
10112                                                                osec);
10113                           if (sym.st_shndx == SHN_BAD)
10114                             return FALSE;
10115
10116                           sym.st_value += sec->output_offset;
10117                           if (!flinfo->info->relocatable)
10118                             {
10119                               sym.st_value += osec->vma;
10120                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
10121                                 {
10122                                   /* STT_TLS symbols are relative to PT_TLS
10123                                      segment base.  */
10124                                   BFD_ASSERT (elf_hash_table (flinfo->info)
10125                                               ->tls_sec != NULL);
10126                                   sym.st_value -= (elf_hash_table (flinfo->info)
10127                                                    ->tls_sec->vma);
10128                                 }
10129                             }
10130
10131                           indx = bfd_get_symcount (output_bfd);
10132                           ret = elf_link_output_sym (flinfo, name, &sym, sec,
10133                                                      NULL);
10134                           if (ret == 0)
10135                             return FALSE;
10136                           else if (ret == 1)
10137                             flinfo->indices[r_symndx] = indx;
10138                           else
10139                             abort ();
10140                         }
10141
10142                       r_symndx = flinfo->indices[r_symndx];
10143                     }
10144
10145                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
10146                                    | (irela->r_info & r_type_mask));
10147                 }
10148
10149               /* Swap out the relocs.  */
10150               input_rel_hdr = esdi->rel.hdr;
10151               if (input_rel_hdr && input_rel_hdr->sh_size != 0)
10152                 {
10153                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10154                                                      input_rel_hdr,
10155                                                      internal_relocs,
10156                                                      rel_hash_list))
10157                     return FALSE;
10158                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
10159                                       * bed->s->int_rels_per_ext_rel);
10160                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
10161                 }
10162
10163               input_rela_hdr = esdi->rela.hdr;
10164               if (input_rela_hdr && input_rela_hdr->sh_size != 0)
10165                 {
10166                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10167                                                      input_rela_hdr,
10168                                                      internal_relocs,
10169                                                      rela_hash_list))
10170                     return FALSE;
10171                 }
10172             }
10173         }
10174
10175       /* Write out the modified section contents.  */
10176       if (bed->elf_backend_write_section
10177           && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
10178                                                 contents))
10179         {
10180           /* Section written out.  */
10181         }
10182       else switch (o->sec_info_type)
10183         {
10184         case SEC_INFO_TYPE_STABS:
10185           if (! (_bfd_write_section_stabs
10186                  (output_bfd,
10187                   &elf_hash_table (flinfo->info)->stab_info,
10188                   o, &elf_section_data (o)->sec_info, contents)))
10189             return FALSE;
10190           break;
10191         case SEC_INFO_TYPE_MERGE:
10192           if (! _bfd_write_merged_section (output_bfd, o,
10193                                            elf_section_data (o)->sec_info))
10194             return FALSE;
10195           break;
10196         case SEC_INFO_TYPE_EH_FRAME:
10197           {
10198             if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
10199                                                    o, contents))
10200               return FALSE;
10201           }
10202           break;
10203         default:
10204           {
10205             /* FIXME: octets_per_byte.  */
10206             if (! (o->flags & SEC_EXCLUDE))
10207               {
10208                 file_ptr offset = (file_ptr) o->output_offset;
10209                 bfd_size_type todo = o->size;
10210                 if ((o->flags & SEC_ELF_REVERSE_COPY))
10211                   {
10212                     /* Reverse-copy input section to output.  */
10213                     do
10214                       {
10215                         todo -= address_size;
10216                         if (! bfd_set_section_contents (output_bfd,
10217                                                         o->output_section,
10218                                                         contents + todo,
10219                                                         offset,
10220                                                         address_size))
10221                           return FALSE;
10222                         if (todo == 0)
10223                           break;
10224                         offset += address_size;
10225                       }
10226                     while (1);
10227                   }
10228                 else if (! bfd_set_section_contents (output_bfd,
10229                                                      o->output_section,
10230                                                      contents,
10231                                                      offset, todo))
10232                   return FALSE;
10233               }
10234           }
10235           break;
10236         }
10237     }
10238
10239   return TRUE;
10240 }
10241
10242 /* Generate a reloc when linking an ELF file.  This is a reloc
10243    requested by the linker, and does not come from any input file.  This
10244    is used to build constructor and destructor tables when linking
10245    with -Ur.  */
10246
10247 static bfd_boolean
10248 elf_reloc_link_order (bfd *output_bfd,
10249                       struct bfd_link_info *info,
10250                       asection *output_section,
10251                       struct bfd_link_order *link_order)
10252 {
10253   reloc_howto_type *howto;
10254   long indx;
10255   bfd_vma offset;
10256   bfd_vma addend;
10257   struct bfd_elf_section_reloc_data *reldata;
10258   struct elf_link_hash_entry **rel_hash_ptr;
10259   Elf_Internal_Shdr *rel_hdr;
10260   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10261   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
10262   bfd_byte *erel;
10263   unsigned int i;
10264   struct bfd_elf_section_data *esdo = elf_section_data (output_section);
10265
10266   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
10267   if (howto == NULL)
10268     {
10269       bfd_set_error (bfd_error_bad_value);
10270       return FALSE;
10271     }
10272
10273   addend = link_order->u.reloc.p->addend;
10274
10275   if (esdo->rel.hdr)
10276     reldata = &esdo->rel;
10277   else if (esdo->rela.hdr)
10278     reldata = &esdo->rela;
10279   else
10280     {
10281       reldata = NULL;
10282       BFD_ASSERT (0);
10283     }
10284
10285   /* Figure out the symbol index.  */
10286   rel_hash_ptr = reldata->hashes + reldata->count;
10287   if (link_order->type == bfd_section_reloc_link_order)
10288     {
10289       indx = link_order->u.reloc.p->u.section->target_index;
10290       BFD_ASSERT (indx != 0);
10291       *rel_hash_ptr = NULL;
10292     }
10293   else
10294     {
10295       struct elf_link_hash_entry *h;
10296
10297       /* Treat a reloc against a defined symbol as though it were
10298          actually against the section.  */
10299       h = ((struct elf_link_hash_entry *)
10300            bfd_wrapped_link_hash_lookup (output_bfd, info,
10301                                          link_order->u.reloc.p->u.name,
10302                                          FALSE, FALSE, TRUE));
10303       if (h != NULL
10304           && (h->root.type == bfd_link_hash_defined
10305               || h->root.type == bfd_link_hash_defweak))
10306         {
10307           asection *section;
10308
10309           section = h->root.u.def.section;
10310           indx = section->output_section->target_index;
10311           *rel_hash_ptr = NULL;
10312           /* It seems that we ought to add the symbol value to the
10313              addend here, but in practice it has already been added
10314              because it was passed to constructor_callback.  */
10315           addend += section->output_section->vma + section->output_offset;
10316         }
10317       else if (h != NULL)
10318         {
10319           /* Setting the index to -2 tells elf_link_output_extsym that
10320              this symbol is used by a reloc.  */
10321           h->indx = -2;
10322           *rel_hash_ptr = h;
10323           indx = 0;
10324         }
10325       else
10326         {
10327           if (! ((*info->callbacks->unattached_reloc)
10328                  (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
10329             return FALSE;
10330           indx = 0;
10331         }
10332     }
10333
10334   /* If this is an inplace reloc, we must write the addend into the
10335      object file.  */
10336   if (howto->partial_inplace && addend != 0)
10337     {
10338       bfd_size_type size;
10339       bfd_reloc_status_type rstat;
10340       bfd_byte *buf;
10341       bfd_boolean ok;
10342       const char *sym_name;
10343
10344       size = (bfd_size_type) bfd_get_reloc_size (howto);
10345       buf = (bfd_byte *) bfd_zmalloc (size);
10346       if (buf == NULL && size != 0)
10347         return FALSE;
10348       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
10349       switch (rstat)
10350         {
10351         case bfd_reloc_ok:
10352           break;
10353
10354         default:
10355         case bfd_reloc_outofrange:
10356           abort ();
10357
10358         case bfd_reloc_overflow:
10359           if (link_order->type == bfd_section_reloc_link_order)
10360             sym_name = bfd_section_name (output_bfd,
10361                                          link_order->u.reloc.p->u.section);
10362           else
10363             sym_name = link_order->u.reloc.p->u.name;
10364           if (! ((*info->callbacks->reloc_overflow)
10365                  (info, NULL, sym_name, howto->name, addend, NULL,
10366                   NULL, (bfd_vma) 0)))
10367             {
10368               free (buf);
10369               return FALSE;
10370             }
10371           break;
10372         }
10373       ok = bfd_set_section_contents (output_bfd, output_section, buf,
10374                                      link_order->offset, size);
10375       free (buf);
10376       if (! ok)
10377         return FALSE;
10378     }
10379
10380   /* The address of a reloc is relative to the section in a
10381      relocatable file, and is a virtual address in an executable
10382      file.  */
10383   offset = link_order->offset;
10384   if (! info->relocatable)
10385     offset += output_section->vma;
10386
10387   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
10388     {
10389       irel[i].r_offset = offset;
10390       irel[i].r_info = 0;
10391       irel[i].r_addend = 0;
10392     }
10393   if (bed->s->arch_size == 32)
10394     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
10395   else
10396     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
10397
10398   rel_hdr = reldata->hdr;
10399   erel = rel_hdr->contents;
10400   if (rel_hdr->sh_type == SHT_REL)
10401     {
10402       erel += reldata->count * bed->s->sizeof_rel;
10403       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
10404     }
10405   else
10406     {
10407       irel[0].r_addend = addend;
10408       erel += reldata->count * bed->s->sizeof_rela;
10409       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
10410     }
10411
10412   ++reldata->count;
10413
10414   return TRUE;
10415 }
10416
10417
10418 /* Get the output vma of the section pointed to by the sh_link field.  */
10419
10420 static bfd_vma
10421 elf_get_linked_section_vma (struct bfd_link_order *p)
10422 {
10423   Elf_Internal_Shdr **elf_shdrp;
10424   asection *s;
10425   int elfsec;
10426
10427   s = p->u.indirect.section;
10428   elf_shdrp = elf_elfsections (s->owner);
10429   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
10430   elfsec = elf_shdrp[elfsec]->sh_link;
10431   /* PR 290:
10432      The Intel C compiler generates SHT_IA_64_UNWIND with
10433      SHF_LINK_ORDER.  But it doesn't set the sh_link or
10434      sh_info fields.  Hence we could get the situation
10435      where elfsec is 0.  */
10436   if (elfsec == 0)
10437     {
10438       const struct elf_backend_data *bed
10439         = get_elf_backend_data (s->owner);
10440       if (bed->link_order_error_handler)
10441         bed->link_order_error_handler
10442           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
10443       return 0;
10444     }
10445   else
10446     {
10447       s = elf_shdrp[elfsec]->bfd_section;
10448       return s->output_section->vma + s->output_offset;
10449     }
10450 }
10451
10452
10453 /* Compare two sections based on the locations of the sections they are
10454    linked to.  Used by elf_fixup_link_order.  */
10455
10456 static int
10457 compare_link_order (const void * a, const void * b)
10458 {
10459   bfd_vma apos;
10460   bfd_vma bpos;
10461
10462   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
10463   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
10464   if (apos < bpos)
10465     return -1;
10466   return apos > bpos;
10467 }
10468
10469
10470 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
10471    order as their linked sections.  Returns false if this could not be done
10472    because an output section includes both ordered and unordered
10473    sections.  Ideally we'd do this in the linker proper.  */
10474
10475 static bfd_boolean
10476 elf_fixup_link_order (bfd *abfd, asection *o)
10477 {
10478   int seen_linkorder;
10479   int seen_other;
10480   int n;
10481   struct bfd_link_order *p;
10482   bfd *sub;
10483   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10484   unsigned elfsec;
10485   struct bfd_link_order **sections;
10486   asection *s, *other_sec, *linkorder_sec;
10487   bfd_vma offset;
10488
10489   other_sec = NULL;
10490   linkorder_sec = NULL;
10491   seen_other = 0;
10492   seen_linkorder = 0;
10493   for (p = o->map_head.link_order; p != NULL; p = p->next)
10494     {
10495       if (p->type == bfd_indirect_link_order)
10496         {
10497           s = p->u.indirect.section;
10498           sub = s->owner;
10499           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10500               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
10501               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
10502               && elfsec < elf_numsections (sub)
10503               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
10504               && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
10505             {
10506               seen_linkorder++;
10507               linkorder_sec = s;
10508             }
10509           else
10510             {
10511               seen_other++;
10512               other_sec = s;
10513             }
10514         }
10515       else
10516         seen_other++;
10517
10518       if (seen_other && seen_linkorder)
10519         {
10520           if (other_sec && linkorder_sec)
10521             (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
10522                                    o, linkorder_sec,
10523                                    linkorder_sec->owner, other_sec,
10524                                    other_sec->owner);
10525           else
10526             (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
10527                                    o);
10528           bfd_set_error (bfd_error_bad_value);
10529           return FALSE;
10530         }
10531     }
10532
10533   if (!seen_linkorder)
10534     return TRUE;
10535
10536   sections = (struct bfd_link_order **)
10537     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
10538   if (sections == NULL)
10539     return FALSE;
10540   seen_linkorder = 0;
10541
10542   for (p = o->map_head.link_order; p != NULL; p = p->next)
10543     {
10544       sections[seen_linkorder++] = p;
10545     }
10546   /* Sort the input sections in the order of their linked section.  */
10547   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
10548          compare_link_order);
10549
10550   /* Change the offsets of the sections.  */
10551   offset = 0;
10552   for (n = 0; n < seen_linkorder; n++)
10553     {
10554       s = sections[n]->u.indirect.section;
10555       offset &= ~(bfd_vma) 0 << s->alignment_power;
10556       s->output_offset = offset;
10557       sections[n]->offset = offset;
10558       /* FIXME: octets_per_byte.  */
10559       offset += sections[n]->size;
10560     }
10561
10562   free (sections);
10563   return TRUE;
10564 }
10565
10566 static void
10567 elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo)
10568 {
10569   asection *o;
10570
10571   if (flinfo->symstrtab != NULL)
10572     _bfd_stringtab_free (flinfo->symstrtab);
10573   if (flinfo->contents != NULL)
10574     free (flinfo->contents);
10575   if (flinfo->external_relocs != NULL)
10576     free (flinfo->external_relocs);
10577   if (flinfo->internal_relocs != NULL)
10578     free (flinfo->internal_relocs);
10579   if (flinfo->external_syms != NULL)
10580     free (flinfo->external_syms);
10581   if (flinfo->locsym_shndx != NULL)
10582     free (flinfo->locsym_shndx);
10583   if (flinfo->internal_syms != NULL)
10584     free (flinfo->internal_syms);
10585   if (flinfo->indices != NULL)
10586     free (flinfo->indices);
10587   if (flinfo->sections != NULL)
10588     free (flinfo->sections);
10589   if (flinfo->symbuf != NULL)
10590     free (flinfo->symbuf);
10591   if (flinfo->symshndxbuf != NULL)
10592     free (flinfo->symshndxbuf);
10593   for (o = obfd->sections; o != NULL; o = o->next)
10594     {
10595       struct bfd_elf_section_data *esdo = elf_section_data (o);
10596       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
10597         free (esdo->rel.hashes);
10598       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
10599         free (esdo->rela.hashes);
10600     }
10601 }
10602
10603 /* Do the final step of an ELF link.  */
10604
10605 bfd_boolean
10606 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10607 {
10608   bfd_boolean dynamic;
10609   bfd_boolean emit_relocs;
10610   bfd *dynobj;
10611   struct elf_final_link_info flinfo;
10612   asection *o;
10613   struct bfd_link_order *p;
10614   bfd *sub;
10615   bfd_size_type max_contents_size;
10616   bfd_size_type max_external_reloc_size;
10617   bfd_size_type max_internal_reloc_count;
10618   bfd_size_type max_sym_count;
10619   bfd_size_type max_sym_shndx_count;
10620   Elf_Internal_Sym elfsym;
10621   unsigned int i;
10622   Elf_Internal_Shdr *symtab_hdr;
10623   Elf_Internal_Shdr *symtab_shndx_hdr;
10624   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10625   struct elf_outext_info eoinfo;
10626   bfd_boolean merged;
10627   size_t relativecount = 0;
10628   asection *reldyn = 0;
10629   bfd_size_type amt;
10630   asection *attr_section = NULL;
10631   bfd_vma attr_size = 0;
10632   const char *std_attrs_section;
10633
10634   if (! is_elf_hash_table (info->hash))
10635     return FALSE;
10636
10637   if (info->shared)
10638     abfd->flags |= DYNAMIC;
10639
10640   dynamic = elf_hash_table (info)->dynamic_sections_created;
10641   dynobj = elf_hash_table (info)->dynobj;
10642
10643   emit_relocs = (info->relocatable
10644                  || info->emitrelocations);
10645
10646   flinfo.info = info;
10647   flinfo.output_bfd = abfd;
10648   flinfo.symstrtab = _bfd_elf_stringtab_init ();
10649   if (flinfo.symstrtab == NULL)
10650     return FALSE;
10651
10652   if (! dynamic)
10653     {
10654       flinfo.dynsym_sec = NULL;
10655       flinfo.hash_sec = NULL;
10656       flinfo.symver_sec = NULL;
10657     }
10658   else
10659     {
10660       flinfo.dynsym_sec = bfd_get_linker_section (dynobj, ".dynsym");
10661       flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
10662       /* Note that dynsym_sec can be NULL (on VMS).  */
10663       flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
10664       /* Note that it is OK if symver_sec is NULL.  */
10665     }
10666
10667   flinfo.contents = NULL;
10668   flinfo.external_relocs = NULL;
10669   flinfo.internal_relocs = NULL;
10670   flinfo.external_syms = NULL;
10671   flinfo.locsym_shndx = NULL;
10672   flinfo.internal_syms = NULL;
10673   flinfo.indices = NULL;
10674   flinfo.sections = NULL;
10675   flinfo.symbuf = NULL;
10676   flinfo.symshndxbuf = NULL;
10677   flinfo.symbuf_count = 0;
10678   flinfo.shndxbuf_size = 0;
10679   flinfo.filesym_count = 0;
10680
10681   /* The object attributes have been merged.  Remove the input
10682      sections from the link, and set the contents of the output
10683      secton.  */
10684   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
10685   for (o = abfd->sections; o != NULL; o = o->next)
10686     {
10687       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
10688           || strcmp (o->name, ".gnu.attributes") == 0)
10689         {
10690           for (p = o->map_head.link_order; p != NULL; p = p->next)
10691             {
10692               asection *input_section;
10693
10694               if (p->type != bfd_indirect_link_order)
10695                 continue;
10696               input_section = p->u.indirect.section;
10697               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10698                  elf_link_input_bfd ignores this section.  */
10699               input_section->flags &= ~SEC_HAS_CONTENTS;
10700             }
10701
10702           attr_size = bfd_elf_obj_attr_size (abfd);
10703           if (attr_size)
10704             {
10705               bfd_set_section_size (abfd, o, attr_size);
10706               attr_section = o;
10707               /* Skip this section later on.  */
10708               o->map_head.link_order = NULL;
10709             }
10710           else
10711             o->flags |= SEC_EXCLUDE;
10712         }
10713     }
10714
10715   /* Count up the number of relocations we will output for each output
10716      section, so that we know the sizes of the reloc sections.  We
10717      also figure out some maximum sizes.  */
10718   max_contents_size = 0;
10719   max_external_reloc_size = 0;
10720   max_internal_reloc_count = 0;
10721   max_sym_count = 0;
10722   max_sym_shndx_count = 0;
10723   merged = FALSE;
10724   for (o = abfd->sections; o != NULL; o = o->next)
10725     {
10726       struct bfd_elf_section_data *esdo = elf_section_data (o);
10727       o->reloc_count = 0;
10728
10729       for (p = o->map_head.link_order; p != NULL; p = p->next)
10730         {
10731           unsigned int reloc_count = 0;
10732           struct bfd_elf_section_data *esdi = NULL;
10733
10734           if (p->type == bfd_section_reloc_link_order
10735               || p->type == bfd_symbol_reloc_link_order)
10736             reloc_count = 1;
10737           else if (p->type == bfd_indirect_link_order)
10738             {
10739               asection *sec;
10740
10741               sec = p->u.indirect.section;
10742               esdi = elf_section_data (sec);
10743
10744               /* Mark all sections which are to be included in the
10745                  link.  This will normally be every section.  We need
10746                  to do this so that we can identify any sections which
10747                  the linker has decided to not include.  */
10748               sec->linker_mark = TRUE;
10749
10750               if (sec->flags & SEC_MERGE)
10751                 merged = TRUE;
10752
10753               if (esdo->this_hdr.sh_type == SHT_REL
10754                   || esdo->this_hdr.sh_type == SHT_RELA)
10755                 /* Some backends use reloc_count in relocation sections
10756                    to count particular types of relocs.  Of course,
10757                    reloc sections themselves can't have relocations.  */
10758                 reloc_count = 0;
10759               else if (info->relocatable || info->emitrelocations)
10760                 reloc_count = sec->reloc_count;
10761               else if (bed->elf_backend_count_relocs)
10762                 reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
10763
10764               if (sec->rawsize > max_contents_size)
10765                 max_contents_size = sec->rawsize;
10766               if (sec->size > max_contents_size)
10767                 max_contents_size = sec->size;
10768
10769               /* We are interested in just local symbols, not all
10770                  symbols.  */
10771               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
10772                   && (sec->owner->flags & DYNAMIC) == 0)
10773                 {
10774                   size_t sym_count;
10775
10776                   if (elf_bad_symtab (sec->owner))
10777                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
10778                                  / bed->s->sizeof_sym);
10779                   else
10780                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
10781
10782                   if (sym_count > max_sym_count)
10783                     max_sym_count = sym_count;
10784
10785                   if (sym_count > max_sym_shndx_count
10786                       && elf_symtab_shndx (sec->owner) != 0)
10787                     max_sym_shndx_count = sym_count;
10788
10789                   if ((sec->flags & SEC_RELOC) != 0)
10790                     {
10791                       size_t ext_size = 0;
10792
10793                       if (esdi->rel.hdr != NULL)
10794                         ext_size = esdi->rel.hdr->sh_size;
10795                       if (esdi->rela.hdr != NULL)
10796                         ext_size += esdi->rela.hdr->sh_size;
10797
10798                       if (ext_size > max_external_reloc_size)
10799                         max_external_reloc_size = ext_size;
10800                       if (sec->reloc_count > max_internal_reloc_count)
10801                         max_internal_reloc_count = sec->reloc_count;
10802                     }
10803                 }
10804             }
10805
10806           if (reloc_count == 0)
10807             continue;
10808
10809           o->reloc_count += reloc_count;
10810
10811           if (p->type == bfd_indirect_link_order
10812               && (info->relocatable || info->emitrelocations))
10813             {
10814               if (esdi->rel.hdr)
10815                 esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
10816               if (esdi->rela.hdr)
10817                 esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
10818             }
10819           else
10820             {
10821               if (o->use_rela_p)
10822                 esdo->rela.count += reloc_count;
10823               else
10824                 esdo->rel.count += reloc_count;
10825             }
10826         }
10827
10828       if (o->reloc_count > 0)
10829         o->flags |= SEC_RELOC;
10830       else
10831         {
10832           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
10833              set it (this is probably a bug) and if it is set
10834              assign_section_numbers will create a reloc section.  */
10835           o->flags &=~ SEC_RELOC;
10836         }
10837
10838       /* If the SEC_ALLOC flag is not set, force the section VMA to
10839          zero.  This is done in elf_fake_sections as well, but forcing
10840          the VMA to 0 here will ensure that relocs against these
10841          sections are handled correctly.  */
10842       if ((o->flags & SEC_ALLOC) == 0
10843           && ! o->user_set_vma)
10844         o->vma = 0;
10845     }
10846
10847   if (! info->relocatable && merged)
10848     elf_link_hash_traverse (elf_hash_table (info),
10849                             _bfd_elf_link_sec_merge_syms, abfd);
10850
10851   /* Figure out the file positions for everything but the symbol table
10852      and the relocs.  We set symcount to force assign_section_numbers
10853      to create a symbol table.  */
10854   bfd_get_symcount (abfd) = info->strip != strip_all || emit_relocs;
10855   BFD_ASSERT (! abfd->output_has_begun);
10856   if (! _bfd_elf_compute_section_file_positions (abfd, info))
10857     goto error_return;
10858
10859   /* Set sizes, and assign file positions for reloc sections.  */
10860   for (o = abfd->sections; o != NULL; o = o->next)
10861     {
10862       struct bfd_elf_section_data *esdo = elf_section_data (o);
10863       if ((o->flags & SEC_RELOC) != 0)
10864         {
10865           if (esdo->rel.hdr
10866               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
10867             goto error_return;
10868
10869           if (esdo->rela.hdr
10870               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
10871             goto error_return;
10872         }
10873
10874       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
10875          to count upwards while actually outputting the relocations.  */
10876       esdo->rel.count = 0;
10877       esdo->rela.count = 0;
10878     }
10879
10880   /* We have now assigned file positions for all the sections except
10881      .symtab, .strtab, and non-loaded reloc sections.  We start the
10882      .symtab section at the current file position, and write directly
10883      to it.  We build the .strtab section in memory.  */
10884   bfd_get_symcount (abfd) = 0;
10885   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
10886   /* sh_name is set in prep_headers.  */
10887   symtab_hdr->sh_type = SHT_SYMTAB;
10888   /* sh_flags, sh_addr and sh_size all start off zero.  */
10889   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
10890   /* sh_link is set in assign_section_numbers.  */
10891   /* sh_info is set below.  */
10892   /* sh_offset is set just below.  */
10893   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
10894
10895   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
10896      continuously seeking to the right position in the file.  */
10897   if (! info->keep_memory || max_sym_count < 20)
10898     flinfo.symbuf_size = 20;
10899   else
10900     flinfo.symbuf_size = max_sym_count;
10901   amt = flinfo.symbuf_size;
10902   amt *= bed->s->sizeof_sym;
10903   flinfo.symbuf = (bfd_byte *) bfd_malloc (amt);
10904   if (flinfo.symbuf == NULL)
10905     goto error_return;
10906   if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
10907     {
10908       /* Wild guess at number of output symbols.  realloc'd as needed.  */
10909       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
10910       flinfo.shndxbuf_size = amt;
10911       amt *= sizeof (Elf_External_Sym_Shndx);
10912       flinfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
10913       if (flinfo.symshndxbuf == NULL)
10914         goto error_return;
10915     }
10916
10917   if (info->strip != strip_all || emit_relocs)
10918     {
10919       file_ptr off = elf_next_file_pos (abfd);
10920
10921       _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
10922
10923       /* Note that at this point elf_next_file_pos (abfd) is
10924          incorrect.  We do not yet know the size of the .symtab section.
10925          We correct next_file_pos below, after we do know the size.  */
10926
10927       /* Start writing out the symbol table.  The first symbol is always a
10928          dummy symbol.  */
10929       elfsym.st_value = 0;
10930       elfsym.st_size = 0;
10931       elfsym.st_info = 0;
10932       elfsym.st_other = 0;
10933       elfsym.st_shndx = SHN_UNDEF;
10934       elfsym.st_target_internal = 0;
10935       if (elf_link_output_sym (&flinfo, NULL, &elfsym, bfd_und_section_ptr,
10936                                NULL) != 1)
10937         goto error_return;
10938
10939       /* Output a symbol for each section.  We output these even if we are
10940          discarding local symbols, since they are used for relocs.  These
10941          symbols have no names.  We store the index of each one in the
10942          index field of the section, so that we can find it again when
10943          outputting relocs.  */
10944
10945       elfsym.st_size = 0;
10946       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10947       elfsym.st_other = 0;
10948       elfsym.st_value = 0;
10949       elfsym.st_target_internal = 0;
10950       for (i = 1; i < elf_numsections (abfd); i++)
10951         {
10952           o = bfd_section_from_elf_index (abfd, i);
10953           if (o != NULL)
10954             {
10955               o->target_index = bfd_get_symcount (abfd);
10956               elfsym.st_shndx = i;
10957               if (!info->relocatable)
10958                 elfsym.st_value = o->vma;
10959               if (elf_link_output_sym (&flinfo, NULL, &elfsym, o, NULL) != 1)
10960                 goto error_return;
10961             }
10962         }
10963     }
10964
10965   /* Allocate some memory to hold information read in from the input
10966      files.  */
10967   if (max_contents_size != 0)
10968     {
10969       flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
10970       if (flinfo.contents == NULL)
10971         goto error_return;
10972     }
10973
10974   if (max_external_reloc_size != 0)
10975     {
10976       flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
10977       if (flinfo.external_relocs == NULL)
10978         goto error_return;
10979     }
10980
10981   if (max_internal_reloc_count != 0)
10982     {
10983       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
10984       amt *= sizeof (Elf_Internal_Rela);
10985       flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
10986       if (flinfo.internal_relocs == NULL)
10987         goto error_return;
10988     }
10989
10990   if (max_sym_count != 0)
10991     {
10992       amt = max_sym_count * bed->s->sizeof_sym;
10993       flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
10994       if (flinfo.external_syms == NULL)
10995         goto error_return;
10996
10997       amt = max_sym_count * sizeof (Elf_Internal_Sym);
10998       flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
10999       if (flinfo.internal_syms == NULL)
11000         goto error_return;
11001
11002       amt = max_sym_count * sizeof (long);
11003       flinfo.indices = (long int *) bfd_malloc (amt);
11004       if (flinfo.indices == NULL)
11005         goto error_return;
11006
11007       amt = max_sym_count * sizeof (asection *);
11008       flinfo.sections = (asection **) bfd_malloc (amt);
11009       if (flinfo.sections == NULL)
11010         goto error_return;
11011     }
11012
11013   if (max_sym_shndx_count != 0)
11014     {
11015       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
11016       flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
11017       if (flinfo.locsym_shndx == NULL)
11018         goto error_return;
11019     }
11020
11021   if (elf_hash_table (info)->tls_sec)
11022     {
11023       bfd_vma base, end = 0;
11024       asection *sec;
11025
11026       for (sec = elf_hash_table (info)->tls_sec;
11027            sec && (sec->flags & SEC_THREAD_LOCAL);
11028            sec = sec->next)
11029         {
11030           bfd_size_type size = sec->size;
11031
11032           if (size == 0
11033               && (sec->flags & SEC_HAS_CONTENTS) == 0)
11034             {
11035               struct bfd_link_order *ord = sec->map_tail.link_order;
11036
11037               if (ord != NULL)
11038                 size = ord->offset + ord->size;
11039             }
11040           end = sec->vma + size;
11041         }
11042       base = elf_hash_table (info)->tls_sec->vma;
11043       /* Only align end of TLS section if static TLS doesn't have special
11044          alignment requirements.  */
11045       if (bed->static_tls_alignment == 1)
11046         end = align_power (end,
11047                            elf_hash_table (info)->tls_sec->alignment_power);
11048       elf_hash_table (info)->tls_size = end - base;
11049     }
11050
11051   /* Reorder SHF_LINK_ORDER sections.  */
11052   for (o = abfd->sections; o != NULL; o = o->next)
11053     {
11054       if (!elf_fixup_link_order (abfd, o))
11055         return FALSE;
11056     }
11057
11058   /* Since ELF permits relocations to be against local symbols, we
11059      must have the local symbols available when we do the relocations.
11060      Since we would rather only read the local symbols once, and we
11061      would rather not keep them in memory, we handle all the
11062      relocations for a single input file at the same time.
11063
11064      Unfortunately, there is no way to know the total number of local
11065      symbols until we have seen all of them, and the local symbol
11066      indices precede the global symbol indices.  This means that when
11067      we are generating relocatable output, and we see a reloc against
11068      a global symbol, we can not know the symbol index until we have
11069      finished examining all the local symbols to see which ones we are
11070      going to output.  To deal with this, we keep the relocations in
11071      memory, and don't output them until the end of the link.  This is
11072      an unfortunate waste of memory, but I don't see a good way around
11073      it.  Fortunately, it only happens when performing a relocatable
11074      link, which is not the common case.  FIXME: If keep_memory is set
11075      we could write the relocs out and then read them again; I don't
11076      know how bad the memory loss will be.  */
11077
11078   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11079     sub->output_has_begun = FALSE;
11080   for (o = abfd->sections; o != NULL; o = o->next)
11081     {
11082       for (p = o->map_head.link_order; p != NULL; p = p->next)
11083         {
11084           if (p->type == bfd_indirect_link_order
11085               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
11086                   == bfd_target_elf_flavour)
11087               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
11088             {
11089               if (! sub->output_has_begun)
11090                 {
11091                   if (! elf_link_input_bfd (&flinfo, sub))
11092                     goto error_return;
11093                   sub->output_has_begun = TRUE;
11094                 }
11095             }
11096           else if (p->type == bfd_section_reloc_link_order
11097                    || p->type == bfd_symbol_reloc_link_order)
11098             {
11099               if (! elf_reloc_link_order (abfd, info, o, p))
11100                 goto error_return;
11101             }
11102           else
11103             {
11104               if (! _bfd_default_link_order (abfd, info, o, p))
11105                 {
11106                   if (p->type == bfd_indirect_link_order
11107                       && (bfd_get_flavour (sub)
11108                           == bfd_target_elf_flavour)
11109                       && (elf_elfheader (sub)->e_ident[EI_CLASS]
11110                           != bed->s->elfclass))
11111                     {
11112                       const char *iclass, *oclass;
11113
11114                       if (bed->s->elfclass == ELFCLASS64)
11115                         {
11116                           iclass = "ELFCLASS32";
11117                           oclass = "ELFCLASS64";
11118                         }
11119                       else
11120                         {
11121                           iclass = "ELFCLASS64";
11122                           oclass = "ELFCLASS32";
11123                         }
11124
11125                       bfd_set_error (bfd_error_wrong_format);
11126                       (*_bfd_error_handler)
11127                         (_("%B: file class %s incompatible with %s"),
11128                          sub, iclass, oclass);
11129                     }
11130
11131                   goto error_return;
11132                 }
11133             }
11134         }
11135     }
11136
11137   /* Free symbol buffer if needed.  */
11138   if (!info->reduce_memory_overheads)
11139     {
11140       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11141         if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11142             && elf_tdata (sub)->symbuf)
11143           {
11144             free (elf_tdata (sub)->symbuf);
11145             elf_tdata (sub)->symbuf = NULL;
11146           }
11147     }
11148
11149   /* Output any global symbols that got converted to local in a
11150      version script or due to symbol visibility.  We do this in a
11151      separate step since ELF requires all local symbols to appear
11152      prior to any global symbols.  FIXME: We should only do this if
11153      some global symbols were, in fact, converted to become local.
11154      FIXME: Will this work correctly with the Irix 5 linker?  */
11155   eoinfo.failed = FALSE;
11156   eoinfo.flinfo = &flinfo;
11157   eoinfo.localsyms = TRUE;
11158   eoinfo.need_second_pass = FALSE;
11159   eoinfo.second_pass = FALSE;
11160   eoinfo.file_sym_done = FALSE;
11161   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11162   if (eoinfo.failed)
11163     return FALSE;
11164
11165   if (eoinfo.need_second_pass)
11166     {
11167       eoinfo.second_pass = TRUE;
11168       bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11169       if (eoinfo.failed)
11170         return FALSE;
11171     }
11172
11173   /* If backend needs to output some local symbols not present in the hash
11174      table, do it now.  */
11175   if (bed->elf_backend_output_arch_local_syms
11176       && (info->strip != strip_all || emit_relocs))
11177     {
11178       typedef int (*out_sym_func)
11179         (void *, const char *, Elf_Internal_Sym *, asection *,
11180          struct elf_link_hash_entry *);
11181
11182       if (! ((*bed->elf_backend_output_arch_local_syms)
11183              (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym)))
11184         return FALSE;
11185     }
11186
11187   /* That wrote out all the local symbols.  Finish up the symbol table
11188      with the global symbols. Even if we want to strip everything we
11189      can, we still need to deal with those global symbols that got
11190      converted to local in a version script.  */
11191
11192   /* The sh_info field records the index of the first non local symbol.  */
11193   symtab_hdr->sh_info = bfd_get_symcount (abfd);
11194
11195   if (dynamic
11196       && flinfo.dynsym_sec != NULL
11197       && flinfo.dynsym_sec->output_section != bfd_abs_section_ptr)
11198     {
11199       Elf_Internal_Sym sym;
11200       bfd_byte *dynsym = flinfo.dynsym_sec->contents;
11201       long last_local = 0;
11202
11203       /* Write out the section symbols for the output sections.  */
11204       if (info->shared || elf_hash_table (info)->is_relocatable_executable)
11205         {
11206           asection *s;
11207
11208           sym.st_size = 0;
11209           sym.st_name = 0;
11210           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
11211           sym.st_other = 0;
11212           sym.st_target_internal = 0;
11213
11214           for (s = abfd->sections; s != NULL; s = s->next)
11215             {
11216               int indx;
11217               bfd_byte *dest;
11218               long dynindx;
11219
11220               dynindx = elf_section_data (s)->dynindx;
11221               if (dynindx <= 0)
11222                 continue;
11223               indx = elf_section_data (s)->this_idx;
11224               BFD_ASSERT (indx > 0);
11225               sym.st_shndx = indx;
11226               if (! check_dynsym (abfd, &sym))
11227                 return FALSE;
11228               sym.st_value = s->vma;
11229               dest = dynsym + dynindx * bed->s->sizeof_sym;
11230               if (last_local < dynindx)
11231                 last_local = dynindx;
11232               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
11233             }
11234         }
11235
11236       /* Write out the local dynsyms.  */
11237       if (elf_hash_table (info)->dynlocal)
11238         {
11239           struct elf_link_local_dynamic_entry *e;
11240           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
11241             {
11242               asection *s;
11243               bfd_byte *dest;
11244
11245               /* Copy the internal symbol and turn off visibility.
11246                  Note that we saved a word of storage and overwrote
11247                  the original st_name with the dynstr_index.  */
11248               sym = e->isym;
11249               sym.st_other &= ~ELF_ST_VISIBILITY (-1);
11250
11251               s = bfd_section_from_elf_index (e->input_bfd,
11252                                               e->isym.st_shndx);
11253               if (s != NULL)
11254                 {
11255                   sym.st_shndx =
11256                     elf_section_data (s->output_section)->this_idx;
11257                   if (! check_dynsym (abfd, &sym))
11258                     return FALSE;
11259                   sym.st_value = (s->output_section->vma
11260                                   + s->output_offset
11261                                   + e->isym.st_value);
11262                 }
11263
11264               if (last_local < e->dynindx)
11265                 last_local = e->dynindx;
11266
11267               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
11268               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
11269             }
11270         }
11271
11272       elf_section_data (flinfo.dynsym_sec->output_section)->this_hdr.sh_info =
11273         last_local + 1;
11274     }
11275
11276   /* We get the global symbols from the hash table.  */
11277   eoinfo.failed = FALSE;
11278   eoinfo.localsyms = FALSE;
11279   eoinfo.flinfo = &flinfo;
11280   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11281   if (eoinfo.failed)
11282     return FALSE;
11283
11284   /* If backend needs to output some symbols not present in the hash
11285      table, do it now.  */
11286   if (bed->elf_backend_output_arch_syms
11287       && (info->strip != strip_all || emit_relocs))
11288     {
11289       typedef int (*out_sym_func)
11290         (void *, const char *, Elf_Internal_Sym *, asection *,
11291          struct elf_link_hash_entry *);
11292
11293       if (! ((*bed->elf_backend_output_arch_syms)
11294              (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym)))
11295         return FALSE;
11296     }
11297
11298   /* Flush all symbols to the file.  */
11299   if (! elf_link_flush_output_syms (&flinfo, bed))
11300     return FALSE;
11301
11302   /* Now we know the size of the symtab section.  */
11303   if (bfd_get_symcount (abfd) > 0)
11304     {
11305       /* Finish up and write out the symbol string table (.strtab)
11306          section.  */
11307       Elf_Internal_Shdr *symstrtab_hdr;
11308       file_ptr off = symtab_hdr->sh_offset + symtab_hdr->sh_size;
11309
11310       symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
11311       if (symtab_shndx_hdr->sh_name != 0)
11312         {
11313           symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
11314           symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
11315           symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
11316           amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
11317           symtab_shndx_hdr->sh_size = amt;
11318
11319           off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
11320                                                            off, TRUE);
11321
11322           if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
11323               || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
11324             return FALSE;
11325         }
11326
11327       symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
11328       /* sh_name was set in prep_headers.  */
11329       symstrtab_hdr->sh_type = SHT_STRTAB;
11330       symstrtab_hdr->sh_flags = 0;
11331       symstrtab_hdr->sh_addr = 0;
11332       symstrtab_hdr->sh_size = _bfd_stringtab_size (flinfo.symstrtab);
11333       symstrtab_hdr->sh_entsize = 0;
11334       symstrtab_hdr->sh_link = 0;
11335       symstrtab_hdr->sh_info = 0;
11336       /* sh_offset is set just below.  */
11337       symstrtab_hdr->sh_addralign = 1;
11338
11339       off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr,
11340                                                        off, TRUE);
11341       elf_next_file_pos (abfd) = off;
11342
11343       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
11344           || ! _bfd_stringtab_emit (abfd, flinfo.symstrtab))
11345         return FALSE;
11346     }
11347
11348   /* Adjust the relocs to have the correct symbol indices.  */
11349   for (o = abfd->sections; o != NULL; o = o->next)
11350     {
11351       struct bfd_elf_section_data *esdo = elf_section_data (o);
11352       bfd_boolean sort;
11353       if ((o->flags & SEC_RELOC) == 0)
11354         continue;
11355
11356       sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
11357       if (esdo->rel.hdr != NULL)
11358         elf_link_adjust_relocs (abfd, &esdo->rel, sort);
11359       if (esdo->rela.hdr != NULL)
11360         elf_link_adjust_relocs (abfd, &esdo->rela, sort);
11361
11362       /* Set the reloc_count field to 0 to prevent write_relocs from
11363          trying to swap the relocs out itself.  */
11364       o->reloc_count = 0;
11365     }
11366
11367   if (dynamic && info->combreloc && dynobj != NULL)
11368     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
11369
11370   /* If we are linking against a dynamic object, or generating a
11371      shared library, finish up the dynamic linking information.  */
11372   if (dynamic)
11373     {
11374       bfd_byte *dyncon, *dynconend;
11375
11376       /* Fix up .dynamic entries.  */
11377       o = bfd_get_linker_section (dynobj, ".dynamic");
11378       BFD_ASSERT (o != NULL);
11379
11380       dyncon = o->contents;
11381       dynconend = o->contents + o->size;
11382       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11383         {
11384           Elf_Internal_Dyn dyn;
11385           const char *name;
11386           unsigned int type;
11387
11388           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11389
11390           switch (dyn.d_tag)
11391             {
11392             default:
11393               continue;
11394             case DT_NULL:
11395               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
11396                 {
11397                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
11398                     {
11399                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
11400                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
11401                     default: continue;
11402                     }
11403                   dyn.d_un.d_val = relativecount;
11404                   relativecount = 0;
11405                   break;
11406                 }
11407               continue;
11408
11409             case DT_INIT:
11410               name = info->init_function;
11411               goto get_sym;
11412             case DT_FINI:
11413               name = info->fini_function;
11414             get_sym:
11415               {
11416                 struct elf_link_hash_entry *h;
11417
11418                 h = elf_link_hash_lookup (elf_hash_table (info), name,
11419                                           FALSE, FALSE, TRUE);
11420                 if (h != NULL
11421                     && (h->root.type == bfd_link_hash_defined
11422                         || h->root.type == bfd_link_hash_defweak))
11423                   {
11424                     dyn.d_un.d_ptr = h->root.u.def.value;
11425                     o = h->root.u.def.section;
11426                     if (o->output_section != NULL)
11427                       dyn.d_un.d_ptr += (o->output_section->vma
11428                                          + o->output_offset);
11429                     else
11430                       {
11431                         /* The symbol is imported from another shared
11432                            library and does not apply to this one.  */
11433                         dyn.d_un.d_ptr = 0;
11434                       }
11435                     break;
11436                   }
11437               }
11438               continue;
11439
11440             case DT_PREINIT_ARRAYSZ:
11441               name = ".preinit_array";
11442               goto get_size;
11443             case DT_INIT_ARRAYSZ:
11444               name = ".init_array";
11445               goto get_size;
11446             case DT_FINI_ARRAYSZ:
11447               name = ".fini_array";
11448             get_size:
11449               o = bfd_get_section_by_name (abfd, name);
11450               if (o == NULL)
11451                 {
11452                   (*_bfd_error_handler)
11453                     (_("%B: could not find output section %s"), abfd, name);
11454                   goto error_return;
11455                 }
11456               if (o->size == 0)
11457                 (*_bfd_error_handler)
11458                   (_("warning: %s section has zero size"), name);
11459               dyn.d_un.d_val = o->size;
11460               break;
11461
11462             case DT_PREINIT_ARRAY:
11463               name = ".preinit_array";
11464               goto get_vma;
11465             case DT_INIT_ARRAY:
11466               name = ".init_array";
11467               goto get_vma;
11468             case DT_FINI_ARRAY:
11469               name = ".fini_array";
11470               goto get_vma;
11471
11472             case DT_HASH:
11473               name = ".hash";
11474               goto get_vma;
11475             case DT_GNU_HASH:
11476               name = ".gnu.hash";
11477               goto get_vma;
11478             case DT_STRTAB:
11479               name = ".dynstr";
11480               goto get_vma;
11481             case DT_SYMTAB:
11482               name = ".dynsym";
11483               goto get_vma;
11484             case DT_VERDEF:
11485               name = ".gnu.version_d";
11486               goto get_vma;
11487             case DT_VERNEED:
11488               name = ".gnu.version_r";
11489               goto get_vma;
11490             case DT_VERSYM:
11491               name = ".gnu.version";
11492             get_vma:
11493               o = bfd_get_section_by_name (abfd, name);
11494               if (o == NULL)
11495                 {
11496                   (*_bfd_error_handler)
11497                     (_("%B: could not find output section %s"), abfd, name);
11498                   goto error_return;
11499                 }
11500               if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE)
11501                 {
11502                   (*_bfd_error_handler)
11503                     (_("warning: section '%s' is being made into a note"), name);
11504                   bfd_set_error (bfd_error_nonrepresentable_section);
11505                   goto error_return;
11506                 }
11507               dyn.d_un.d_ptr = o->vma;
11508               break;
11509
11510             case DT_REL:
11511             case DT_RELA:
11512             case DT_RELSZ:
11513             case DT_RELASZ:
11514               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
11515                 type = SHT_REL;
11516               else
11517                 type = SHT_RELA;
11518               dyn.d_un.d_val = 0;
11519               dyn.d_un.d_ptr = 0;
11520               for (i = 1; i < elf_numsections (abfd); i++)
11521                 {
11522                   Elf_Internal_Shdr *hdr;
11523
11524                   hdr = elf_elfsections (abfd)[i];
11525                   if (hdr->sh_type == type
11526                       && (hdr->sh_flags & SHF_ALLOC) != 0)
11527                     {
11528                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
11529                         dyn.d_un.d_val += hdr->sh_size;
11530                       else
11531                         {
11532                           if (dyn.d_un.d_ptr == 0
11533                               || hdr->sh_addr < dyn.d_un.d_ptr)
11534                             dyn.d_un.d_ptr = hdr->sh_addr;
11535                         }
11536                     }
11537                 }
11538               break;
11539             }
11540           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
11541         }
11542     }
11543
11544   /* If we have created any dynamic sections, then output them.  */
11545   if (dynobj != NULL)
11546     {
11547       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
11548         goto error_return;
11549
11550       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
11551       if (((info->warn_shared_textrel && info->shared)
11552            || info->error_textrel)
11553           && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
11554         {
11555           bfd_byte *dyncon, *dynconend;
11556
11557           dyncon = o->contents;
11558           dynconend = o->contents + o->size;
11559           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11560             {
11561               Elf_Internal_Dyn dyn;
11562
11563               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11564
11565               if (dyn.d_tag == DT_TEXTREL)
11566                 {
11567                   if (info->error_textrel)
11568                     info->callbacks->einfo
11569                       (_("%P%X: read-only segment has dynamic relocations.\n"));
11570                   else
11571                     info->callbacks->einfo
11572                       (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
11573                   break;
11574                 }
11575             }
11576         }
11577
11578       for (o = dynobj->sections; o != NULL; o = o->next)
11579         {
11580           if ((o->flags & SEC_HAS_CONTENTS) == 0
11581               || o->size == 0
11582               || o->output_section == bfd_abs_section_ptr)
11583             continue;
11584           if ((o->flags & SEC_LINKER_CREATED) == 0)
11585             {
11586               /* At this point, we are only interested in sections
11587                  created by _bfd_elf_link_create_dynamic_sections.  */
11588               continue;
11589             }
11590           if (elf_hash_table (info)->stab_info.stabstr == o)
11591             continue;
11592           if (elf_hash_table (info)->eh_info.hdr_sec == o)
11593             continue;
11594           if (strcmp (o->name, ".dynstr") != 0)
11595             {
11596               /* FIXME: octets_per_byte.  */
11597               if (! bfd_set_section_contents (abfd, o->output_section,
11598                                               o->contents,
11599                                               (file_ptr) o->output_offset,
11600                                               o->size))
11601                 goto error_return;
11602             }
11603           else
11604             {
11605               /* The contents of the .dynstr section are actually in a
11606                  stringtab.  */
11607               file_ptr off;
11608
11609               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
11610               if (bfd_seek (abfd, off, SEEK_SET) != 0
11611                   || ! _bfd_elf_strtab_emit (abfd,
11612                                              elf_hash_table (info)->dynstr))
11613                 goto error_return;
11614             }
11615         }
11616     }
11617
11618   if (info->relocatable)
11619     {
11620       bfd_boolean failed = FALSE;
11621
11622       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
11623       if (failed)
11624         goto error_return;
11625     }
11626
11627   /* If we have optimized stabs strings, output them.  */
11628   if (elf_hash_table (info)->stab_info.stabstr != NULL)
11629     {
11630       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
11631         goto error_return;
11632     }
11633
11634   if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
11635     goto error_return;
11636
11637   elf_final_link_free (abfd, &flinfo);
11638
11639   elf_linker (abfd) = TRUE;
11640
11641   if (attr_section)
11642     {
11643       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
11644       if (contents == NULL)
11645         return FALSE;   /* Bail out and fail.  */
11646       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
11647       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
11648       free (contents);
11649     }
11650
11651   return TRUE;
11652
11653  error_return:
11654   elf_final_link_free (abfd, &flinfo);
11655   return FALSE;
11656 }
11657 \f
11658 /* Initialize COOKIE for input bfd ABFD.  */
11659
11660 static bfd_boolean
11661 init_reloc_cookie (struct elf_reloc_cookie *cookie,
11662                    struct bfd_link_info *info, bfd *abfd)
11663 {
11664   Elf_Internal_Shdr *symtab_hdr;
11665   const struct elf_backend_data *bed;
11666
11667   bed = get_elf_backend_data (abfd);
11668   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11669
11670   cookie->abfd = abfd;
11671   cookie->sym_hashes = elf_sym_hashes (abfd);
11672   cookie->bad_symtab = elf_bad_symtab (abfd);
11673   if (cookie->bad_symtab)
11674     {
11675       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
11676       cookie->extsymoff = 0;
11677     }
11678   else
11679     {
11680       cookie->locsymcount = symtab_hdr->sh_info;
11681       cookie->extsymoff = symtab_hdr->sh_info;
11682     }
11683
11684   if (bed->s->arch_size == 32)
11685     cookie->r_sym_shift = 8;
11686   else
11687     cookie->r_sym_shift = 32;
11688
11689   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
11690   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
11691     {
11692       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
11693                                               cookie->locsymcount, 0,
11694                                               NULL, NULL, NULL);
11695       if (cookie->locsyms == NULL)
11696         {
11697           info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
11698           return FALSE;
11699         }
11700       if (info->keep_memory)
11701         symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
11702     }
11703   return TRUE;
11704 }
11705
11706 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
11707
11708 static void
11709 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
11710 {
11711   Elf_Internal_Shdr *symtab_hdr;
11712
11713   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11714   if (cookie->locsyms != NULL
11715       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
11716     free (cookie->locsyms);
11717 }
11718
11719 /* Initialize the relocation information in COOKIE for input section SEC
11720    of input bfd ABFD.  */
11721
11722 static bfd_boolean
11723 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11724                         struct bfd_link_info *info, bfd *abfd,
11725                         asection *sec)
11726 {
11727   const struct elf_backend_data *bed;
11728
11729   if (sec->reloc_count == 0)
11730     {
11731       cookie->rels = NULL;
11732       cookie->relend = NULL;
11733     }
11734   else
11735     {
11736       bed = get_elf_backend_data (abfd);
11737
11738       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
11739                                                 info->keep_memory);
11740       if (cookie->rels == NULL)
11741         return FALSE;
11742       cookie->rel = cookie->rels;
11743       cookie->relend = (cookie->rels
11744                         + sec->reloc_count * bed->s->int_rels_per_ext_rel);
11745     }
11746   cookie->rel = cookie->rels;
11747   return TRUE;
11748 }
11749
11750 /* Free the memory allocated by init_reloc_cookie_rels,
11751    if appropriate.  */
11752
11753 static void
11754 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11755                         asection *sec)
11756 {
11757   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
11758     free (cookie->rels);
11759 }
11760
11761 /* Initialize the whole of COOKIE for input section SEC.  */
11762
11763 static bfd_boolean
11764 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11765                                struct bfd_link_info *info,
11766                                asection *sec)
11767 {
11768   if (!init_reloc_cookie (cookie, info, sec->owner))
11769     goto error1;
11770   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
11771     goto error2;
11772   return TRUE;
11773
11774  error2:
11775   fini_reloc_cookie (cookie, sec->owner);
11776  error1:
11777   return FALSE;
11778 }
11779
11780 /* Free the memory allocated by init_reloc_cookie_for_section,
11781    if appropriate.  */
11782
11783 static void
11784 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11785                                asection *sec)
11786 {
11787   fini_reloc_cookie_rels (cookie, sec);
11788   fini_reloc_cookie (cookie, sec->owner);
11789 }
11790 \f
11791 /* Garbage collect unused sections.  */
11792
11793 /* Default gc_mark_hook.  */
11794
11795 asection *
11796 _bfd_elf_gc_mark_hook (asection *sec,
11797                        struct bfd_link_info *info ATTRIBUTE_UNUSED,
11798                        Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
11799                        struct elf_link_hash_entry *h,
11800                        Elf_Internal_Sym *sym)
11801 {
11802   const char *sec_name;
11803
11804   if (h != NULL)
11805     {
11806       switch (h->root.type)
11807         {
11808         case bfd_link_hash_defined:
11809         case bfd_link_hash_defweak:
11810           return h->root.u.def.section;
11811
11812         case bfd_link_hash_common:
11813           return h->root.u.c.p->section;
11814
11815         case bfd_link_hash_undefined:
11816         case bfd_link_hash_undefweak:
11817           /* To work around a glibc bug, keep all XXX input sections
11818              when there is an as yet undefined reference to __start_XXX
11819              or __stop_XXX symbols.  The linker will later define such
11820              symbols for orphan input sections that have a name
11821              representable as a C identifier.  */
11822           if (strncmp (h->root.root.string, "__start_", 8) == 0)
11823             sec_name = h->root.root.string + 8;
11824           else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
11825             sec_name = h->root.root.string + 7;
11826           else
11827             sec_name = NULL;
11828
11829           if (sec_name && *sec_name != '\0')
11830             {
11831               bfd *i;
11832
11833               for (i = info->input_bfds; i; i = i->link.next)
11834                 {
11835                   sec = bfd_get_section_by_name (i, sec_name);
11836                   if (sec)
11837                     sec->flags |= SEC_KEEP;
11838                 }
11839             }
11840           break;
11841
11842         default:
11843           break;
11844         }
11845     }
11846   else
11847     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
11848
11849   return NULL;
11850 }
11851
11852 /* COOKIE->rel describes a relocation against section SEC, which is
11853    a section we've decided to keep.  Return the section that contains
11854    the relocation symbol, or NULL if no section contains it.  */
11855
11856 asection *
11857 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
11858                        elf_gc_mark_hook_fn gc_mark_hook,
11859                        struct elf_reloc_cookie *cookie)
11860 {
11861   unsigned long r_symndx;
11862   struct elf_link_hash_entry *h;
11863
11864   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
11865   if (r_symndx == STN_UNDEF)
11866     return NULL;
11867
11868   if (r_symndx >= cookie->locsymcount
11869       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
11870     {
11871       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
11872       if (h == NULL)
11873         {
11874           info->callbacks->einfo (_("%F%P: corrupt input: %B\n"),
11875                                   sec->owner);
11876           return NULL;
11877         }
11878       while (h->root.type == bfd_link_hash_indirect
11879              || h->root.type == bfd_link_hash_warning)
11880         h = (struct elf_link_hash_entry *) h->root.u.i.link;
11881       h->mark = 1;
11882       /* If this symbol is weak and there is a non-weak definition, we
11883          keep the non-weak definition because many backends put
11884          dynamic reloc info on the non-weak definition for code
11885          handling copy relocs.  */
11886       if (h->u.weakdef != NULL)
11887         h->u.weakdef->mark = 1;
11888       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
11889     }
11890
11891   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
11892                           &cookie->locsyms[r_symndx]);
11893 }
11894
11895 /* COOKIE->rel describes a relocation against section SEC, which is
11896    a section we've decided to keep.  Mark the section that contains
11897    the relocation symbol.  */
11898
11899 bfd_boolean
11900 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
11901                         asection *sec,
11902                         elf_gc_mark_hook_fn gc_mark_hook,
11903                         struct elf_reloc_cookie *cookie)
11904 {
11905   asection *rsec;
11906
11907   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
11908   if (rsec && !rsec->gc_mark)
11909     {
11910       if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
11911           || (rsec->owner->flags & DYNAMIC) != 0)
11912         rsec->gc_mark = 1;
11913       else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
11914         return FALSE;
11915     }
11916   return TRUE;
11917 }
11918
11919 /* The mark phase of garbage collection.  For a given section, mark
11920    it and any sections in this section's group, and all the sections
11921    which define symbols to which it refers.  */
11922
11923 bfd_boolean
11924 _bfd_elf_gc_mark (struct bfd_link_info *info,
11925                   asection *sec,
11926                   elf_gc_mark_hook_fn gc_mark_hook)
11927 {
11928   bfd_boolean ret;
11929   asection *group_sec, *eh_frame;
11930
11931   sec->gc_mark = 1;
11932
11933   /* Mark all the sections in the group.  */
11934   group_sec = elf_section_data (sec)->next_in_group;
11935   if (group_sec && !group_sec->gc_mark)
11936     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
11937       return FALSE;
11938
11939   /* Look through the section relocs.  */
11940   ret = TRUE;
11941   eh_frame = elf_eh_frame_section (sec->owner);
11942   if ((sec->flags & SEC_RELOC) != 0
11943       && sec->reloc_count > 0
11944       && sec != eh_frame)
11945     {
11946       struct elf_reloc_cookie cookie;
11947
11948       if (!init_reloc_cookie_for_section (&cookie, info, sec))
11949         ret = FALSE;
11950       else
11951         {
11952           for (; cookie.rel < cookie.relend; cookie.rel++)
11953             if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
11954               {
11955                 ret = FALSE;
11956                 break;
11957               }
11958           fini_reloc_cookie_for_section (&cookie, sec);
11959         }
11960     }
11961
11962   if (ret && eh_frame && elf_fde_list (sec))
11963     {
11964       struct elf_reloc_cookie cookie;
11965
11966       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
11967         ret = FALSE;
11968       else
11969         {
11970           if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
11971                                       gc_mark_hook, &cookie))
11972             ret = FALSE;
11973           fini_reloc_cookie_for_section (&cookie, eh_frame);
11974         }
11975     }
11976
11977   return ret;
11978 }
11979
11980 /* Scan and mark sections in a special or debug section group.  */
11981
11982 static void
11983 _bfd_elf_gc_mark_debug_special_section_group (asection *grp)
11984 {
11985   /* Point to first section of section group.  */
11986   asection *ssec;
11987   /* Used to iterate the section group.  */
11988   asection *msec;
11989
11990   bfd_boolean is_special_grp = TRUE;
11991   bfd_boolean is_debug_grp = TRUE;
11992
11993   /* First scan to see if group contains any section other than debug
11994      and special section.  */
11995   ssec = msec = elf_next_in_group (grp);
11996   do
11997     {
11998       if ((msec->flags & SEC_DEBUGGING) == 0)
11999         is_debug_grp = FALSE;
12000
12001       if ((msec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) != 0)
12002         is_special_grp = FALSE;
12003
12004       msec = elf_next_in_group (msec);
12005     }
12006   while (msec != ssec);
12007
12008   /* If this is a pure debug section group or pure special section group,
12009      keep all sections in this group.  */
12010   if (is_debug_grp || is_special_grp)
12011     {
12012       do
12013         {
12014           msec->gc_mark = 1;
12015           msec = elf_next_in_group (msec);
12016         }
12017       while (msec != ssec);
12018     }
12019 }
12020
12021 /* Keep debug and special sections.  */
12022
12023 bfd_boolean
12024 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12025                                  elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
12026 {
12027   bfd *ibfd;
12028
12029   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
12030     {
12031       asection *isec;
12032       bfd_boolean some_kept;
12033       bfd_boolean debug_frag_seen;
12034
12035       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
12036         continue;
12037
12038       /* Ensure all linker created sections are kept,
12039          see if any other section is already marked,
12040          and note if we have any fragmented debug sections.  */
12041       debug_frag_seen = some_kept = FALSE;
12042       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12043         {
12044           if ((isec->flags & SEC_LINKER_CREATED) != 0)
12045             isec->gc_mark = 1;
12046           else if (isec->gc_mark)
12047             some_kept = TRUE;
12048
12049           if (debug_frag_seen == FALSE
12050               && (isec->flags & SEC_DEBUGGING)
12051               && CONST_STRNEQ (isec->name, ".debug_line."))
12052             debug_frag_seen = TRUE;
12053         }
12054
12055       /* If no section in this file will be kept, then we can
12056          toss out the debug and special sections.  */
12057       if (!some_kept)
12058         continue;
12059
12060       /* Keep debug and special sections like .comment when they are
12061          not part of a group.  Also keep section groups that contain
12062          just debug sections or special sections.  */
12063       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12064         {
12065           if ((isec->flags & SEC_GROUP) != 0)
12066             _bfd_elf_gc_mark_debug_special_section_group (isec);
12067           else if (((isec->flags & SEC_DEBUGGING) != 0
12068                     || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
12069                    && elf_next_in_group (isec) == NULL)
12070             isec->gc_mark = 1;
12071         }
12072
12073       if (! debug_frag_seen)
12074         continue;
12075
12076       /* Look for CODE sections which are going to be discarded,
12077          and find and discard any fragmented debug sections which
12078          are associated with that code section.  */
12079       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12080         if ((isec->flags & SEC_CODE) != 0
12081             && isec->gc_mark == 0)
12082           {
12083             unsigned int ilen;
12084             asection *dsec;
12085
12086             ilen = strlen (isec->name);
12087
12088             /* Association is determined by the name of the debug section
12089                containing the name of the code section as a suffix.  For
12090                example .debug_line.text.foo is a debug section associated
12091                with .text.foo.  */
12092             for (dsec = ibfd->sections; dsec != NULL; dsec = dsec->next)
12093               {
12094                 unsigned int dlen;
12095
12096                 if (dsec->gc_mark == 0
12097                     || (dsec->flags & SEC_DEBUGGING) == 0)
12098                   continue;
12099
12100                 dlen = strlen (dsec->name);
12101
12102                 if (dlen > ilen
12103                     && strncmp (dsec->name + (dlen - ilen),
12104                                 isec->name, ilen) == 0)
12105                   {
12106                     dsec->gc_mark = 0;
12107                     break;
12108                   }
12109               }
12110           }
12111     }
12112   return TRUE;
12113 }
12114
12115 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
12116
12117 struct elf_gc_sweep_symbol_info
12118 {
12119   struct bfd_link_info *info;
12120   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
12121                        bfd_boolean);
12122 };
12123
12124 static bfd_boolean
12125 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
12126 {
12127   if (!h->mark
12128       && (((h->root.type == bfd_link_hash_defined
12129             || h->root.type == bfd_link_hash_defweak)
12130            && !((h->def_regular || ELF_COMMON_DEF_P (h))
12131                 && h->root.u.def.section->gc_mark))
12132           || h->root.type == bfd_link_hash_undefined
12133           || h->root.type == bfd_link_hash_undefweak))
12134     {
12135       struct elf_gc_sweep_symbol_info *inf;
12136
12137       inf = (struct elf_gc_sweep_symbol_info *) data;
12138       (*inf->hide_symbol) (inf->info, h, TRUE);
12139       h->def_regular = 0;
12140       h->ref_regular = 0;
12141       h->ref_regular_nonweak = 0;
12142     }
12143
12144   return TRUE;
12145 }
12146
12147 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
12148
12149 typedef bfd_boolean (*gc_sweep_hook_fn)
12150   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
12151
12152 static bfd_boolean
12153 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
12154 {
12155   bfd *sub;
12156   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12157   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
12158   unsigned long section_sym_count;
12159   struct elf_gc_sweep_symbol_info sweep_info;
12160
12161   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12162     {
12163       asection *o;
12164
12165       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
12166         continue;
12167
12168       for (o = sub->sections; o != NULL; o = o->next)
12169         {
12170           /* When any section in a section group is kept, we keep all
12171              sections in the section group.  If the first member of
12172              the section group is excluded, we will also exclude the
12173              group section.  */
12174           if (o->flags & SEC_GROUP)
12175             {
12176               asection *first = elf_next_in_group (o);
12177               o->gc_mark = first->gc_mark;
12178             }
12179
12180           if (o->gc_mark)
12181             continue;
12182
12183           /* Skip sweeping sections already excluded.  */
12184           if (o->flags & SEC_EXCLUDE)
12185             continue;
12186
12187           /* Since this is early in the link process, it is simple
12188              to remove a section from the output.  */
12189           o->flags |= SEC_EXCLUDE;
12190
12191           if (info->print_gc_sections && o->size != 0)
12192             _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
12193
12194           /* But we also have to update some of the relocation
12195              info we collected before.  */
12196           if (gc_sweep_hook
12197               && (o->flags & SEC_RELOC) != 0
12198               && o->reloc_count != 0
12199               && !((info->strip == strip_all || info->strip == strip_debugger)
12200                    && (o->flags & SEC_DEBUGGING) != 0)
12201               && !bfd_is_abs_section (o->output_section))
12202             {
12203               Elf_Internal_Rela *internal_relocs;
12204               bfd_boolean r;
12205
12206               internal_relocs
12207                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
12208                                              info->keep_memory);
12209               if (internal_relocs == NULL)
12210                 return FALSE;
12211
12212               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
12213
12214               if (elf_section_data (o)->relocs != internal_relocs)
12215                 free (internal_relocs);
12216
12217               if (!r)
12218                 return FALSE;
12219             }
12220         }
12221     }
12222
12223   /* Remove the symbols that were in the swept sections from the dynamic
12224      symbol table.  GCFIXME: Anyone know how to get them out of the
12225      static symbol table as well?  */
12226   sweep_info.info = info;
12227   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
12228   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
12229                           &sweep_info);
12230
12231   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
12232   return TRUE;
12233 }
12234
12235 /* Propagate collected vtable information.  This is called through
12236    elf_link_hash_traverse.  */
12237
12238 static bfd_boolean
12239 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
12240 {
12241   /* Those that are not vtables.  */
12242   if (h->vtable == NULL || h->vtable->parent == NULL)
12243     return TRUE;
12244
12245   /* Those vtables that do not have parents, we cannot merge.  */
12246   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
12247     return TRUE;
12248
12249   /* If we've already been done, exit.  */
12250   if (h->vtable->used && h->vtable->used[-1])
12251     return TRUE;
12252
12253   /* Make sure the parent's table is up to date.  */
12254   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
12255
12256   if (h->vtable->used == NULL)
12257     {
12258       /* None of this table's entries were referenced.  Re-use the
12259          parent's table.  */
12260       h->vtable->used = h->vtable->parent->vtable->used;
12261       h->vtable->size = h->vtable->parent->vtable->size;
12262     }
12263   else
12264     {
12265       size_t n;
12266       bfd_boolean *cu, *pu;
12267
12268       /* Or the parent's entries into ours.  */
12269       cu = h->vtable->used;
12270       cu[-1] = TRUE;
12271       pu = h->vtable->parent->vtable->used;
12272       if (pu != NULL)
12273         {
12274           const struct elf_backend_data *bed;
12275           unsigned int log_file_align;
12276
12277           bed = get_elf_backend_data (h->root.u.def.section->owner);
12278           log_file_align = bed->s->log_file_align;
12279           n = h->vtable->parent->vtable->size >> log_file_align;
12280           while (n--)
12281             {
12282               if (*pu)
12283                 *cu = TRUE;
12284               pu++;
12285               cu++;
12286             }
12287         }
12288     }
12289
12290   return TRUE;
12291 }
12292
12293 static bfd_boolean
12294 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
12295 {
12296   asection *sec;
12297   bfd_vma hstart, hend;
12298   Elf_Internal_Rela *relstart, *relend, *rel;
12299   const struct elf_backend_data *bed;
12300   unsigned int log_file_align;
12301
12302   /* Take care of both those symbols that do not describe vtables as
12303      well as those that are not loaded.  */
12304   if (h->vtable == NULL || h->vtable->parent == NULL)
12305     return TRUE;
12306
12307   BFD_ASSERT (h->root.type == bfd_link_hash_defined
12308               || h->root.type == bfd_link_hash_defweak);
12309
12310   sec = h->root.u.def.section;
12311   hstart = h->root.u.def.value;
12312   hend = hstart + h->size;
12313
12314   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
12315   if (!relstart)
12316     return *(bfd_boolean *) okp = FALSE;
12317   bed = get_elf_backend_data (sec->owner);
12318   log_file_align = bed->s->log_file_align;
12319
12320   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
12321
12322   for (rel = relstart; rel < relend; ++rel)
12323     if (rel->r_offset >= hstart && rel->r_offset < hend)
12324       {
12325         /* If the entry is in use, do nothing.  */
12326         if (h->vtable->used
12327             && (rel->r_offset - hstart) < h->vtable->size)
12328           {
12329             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
12330             if (h->vtable->used[entry])
12331               continue;
12332           }
12333         /* Otherwise, kill it.  */
12334         rel->r_offset = rel->r_info = rel->r_addend = 0;
12335       }
12336
12337   return TRUE;
12338 }
12339
12340 /* Mark sections containing dynamically referenced symbols.  When
12341    building shared libraries, we must assume that any visible symbol is
12342    referenced.  */
12343
12344 bfd_boolean
12345 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
12346 {
12347   struct bfd_link_info *info = (struct bfd_link_info *) inf;
12348   struct bfd_elf_dynamic_list *d = info->dynamic_list;
12349
12350   if ((h->root.type == bfd_link_hash_defined
12351        || h->root.type == bfd_link_hash_defweak)
12352       && (h->ref_dynamic
12353           || ((h->def_regular || ELF_COMMON_DEF_P (h))
12354               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
12355               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
12356               && (!info->executable
12357                   || info->export_dynamic
12358                   || (h->dynamic
12359                       && d != NULL
12360                       && (*d->match) (&d->head, NULL, h->root.root.string)))
12361               && (strchr (h->root.root.string, ELF_VER_CHR) != NULL
12362                   || !bfd_hide_sym_by_version (info->version_info,
12363                                                h->root.root.string)))))
12364     h->root.u.def.section->flags |= SEC_KEEP;
12365
12366   return TRUE;
12367 }
12368
12369 /* Keep all sections containing symbols undefined on the command-line,
12370    and the section containing the entry symbol.  */
12371
12372 void
12373 _bfd_elf_gc_keep (struct bfd_link_info *info)
12374 {
12375   struct bfd_sym_chain *sym;
12376
12377   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
12378     {
12379       struct elf_link_hash_entry *h;
12380
12381       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
12382                                 FALSE, FALSE, FALSE);
12383
12384       if (h != NULL
12385           && (h->root.type == bfd_link_hash_defined
12386               || h->root.type == bfd_link_hash_defweak)
12387           && !bfd_is_abs_section (h->root.u.def.section))
12388         h->root.u.def.section->flags |= SEC_KEEP;
12389     }
12390 }
12391
12392 /* Do mark and sweep of unused sections.  */
12393
12394 bfd_boolean
12395 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
12396 {
12397   bfd_boolean ok = TRUE;
12398   bfd *sub;
12399   elf_gc_mark_hook_fn gc_mark_hook;
12400   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12401   struct elf_link_hash_table *htab;
12402
12403   if (!bed->can_gc_sections
12404       || !is_elf_hash_table (info->hash))
12405     {
12406       (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
12407       return TRUE;
12408     }
12409
12410   bed->gc_keep (info);
12411   htab = elf_hash_table (info);
12412
12413   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
12414      at the .eh_frame section if we can mark the FDEs individually.  */
12415   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12416     {
12417       asection *sec;
12418       struct elf_reloc_cookie cookie;
12419
12420       sec = bfd_get_section_by_name (sub, ".eh_frame");
12421       while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
12422         {
12423           _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
12424           if (elf_section_data (sec)->sec_info
12425               && (sec->flags & SEC_LINKER_CREATED) == 0)
12426             elf_eh_frame_section (sub) = sec;
12427           fini_reloc_cookie_for_section (&cookie, sec);
12428           sec = bfd_get_next_section_by_name (sec);
12429         }
12430     }
12431
12432   /* Apply transitive closure to the vtable entry usage info.  */
12433   elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
12434   if (!ok)
12435     return FALSE;
12436
12437   /* Kill the vtable relocations that were not used.  */
12438   elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
12439   if (!ok)
12440     return FALSE;
12441
12442   /* Mark dynamically referenced symbols.  */
12443   if (htab->dynamic_sections_created)
12444     elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
12445
12446   /* Grovel through relocs to find out who stays ...  */
12447   gc_mark_hook = bed->gc_mark_hook;
12448   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12449     {
12450       asection *o;
12451
12452       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
12453         continue;
12454
12455       /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep).
12456          Also treat note sections as a root, if the section is not part
12457          of a group.  */
12458       for (o = sub->sections; o != NULL; o = o->next)
12459         if (!o->gc_mark
12460             && (o->flags & SEC_EXCLUDE) == 0
12461             && ((o->flags & SEC_KEEP) != 0
12462                 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
12463                     && elf_next_in_group (o) == NULL )))
12464           {
12465             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12466               return FALSE;
12467           }
12468     }
12469
12470   /* Allow the backend to mark additional target specific sections.  */
12471   bed->gc_mark_extra_sections (info, gc_mark_hook);
12472
12473   /* ... and mark SEC_EXCLUDE for those that go.  */
12474   return elf_gc_sweep (abfd, info);
12475 }
12476 \f
12477 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
12478
12479 bfd_boolean
12480 bfd_elf_gc_record_vtinherit (bfd *abfd,
12481                              asection *sec,
12482                              struct elf_link_hash_entry *h,
12483                              bfd_vma offset)
12484 {
12485   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
12486   struct elf_link_hash_entry **search, *child;
12487   bfd_size_type extsymcount;
12488   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12489
12490   /* The sh_info field of the symtab header tells us where the
12491      external symbols start.  We don't care about the local symbols at
12492      this point.  */
12493   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
12494   if (!elf_bad_symtab (abfd))
12495     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
12496
12497   sym_hashes = elf_sym_hashes (abfd);
12498   sym_hashes_end = sym_hashes + extsymcount;
12499
12500   /* Hunt down the child symbol, which is in this section at the same
12501      offset as the relocation.  */
12502   for (search = sym_hashes; search != sym_hashes_end; ++search)
12503     {
12504       if ((child = *search) != NULL
12505           && (child->root.type == bfd_link_hash_defined
12506               || child->root.type == bfd_link_hash_defweak)
12507           && child->root.u.def.section == sec
12508           && child->root.u.def.value == offset)
12509         goto win;
12510     }
12511
12512   (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
12513                          abfd, sec, (unsigned long) offset);
12514   bfd_set_error (bfd_error_invalid_operation);
12515   return FALSE;
12516
12517  win:
12518   if (!child->vtable)
12519     {
12520       child->vtable = (struct elf_link_virtual_table_entry *)
12521           bfd_zalloc (abfd, sizeof (*child->vtable));
12522       if (!child->vtable)
12523         return FALSE;
12524     }
12525   if (!h)
12526     {
12527       /* This *should* only be the absolute section.  It could potentially
12528          be that someone has defined a non-global vtable though, which
12529          would be bad.  It isn't worth paging in the local symbols to be
12530          sure though; that case should simply be handled by the assembler.  */
12531
12532       child->vtable->parent = (struct elf_link_hash_entry *) -1;
12533     }
12534   else
12535     child->vtable->parent = h;
12536
12537   return TRUE;
12538 }
12539
12540 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
12541
12542 bfd_boolean
12543 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
12544                            asection *sec ATTRIBUTE_UNUSED,
12545                            struct elf_link_hash_entry *h,
12546                            bfd_vma addend)
12547 {
12548   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12549   unsigned int log_file_align = bed->s->log_file_align;
12550
12551   if (!h->vtable)
12552     {
12553       h->vtable = (struct elf_link_virtual_table_entry *)
12554           bfd_zalloc (abfd, sizeof (*h->vtable));
12555       if (!h->vtable)
12556         return FALSE;
12557     }
12558
12559   if (addend >= h->vtable->size)
12560     {
12561       size_t size, bytes, file_align;
12562       bfd_boolean *ptr = h->vtable->used;
12563
12564       /* While the symbol is undefined, we have to be prepared to handle
12565          a zero size.  */
12566       file_align = 1 << log_file_align;
12567       if (h->root.type == bfd_link_hash_undefined)
12568         size = addend + file_align;
12569       else
12570         {
12571           size = h->size;
12572           if (addend >= size)
12573             {
12574               /* Oops!  We've got a reference past the defined end of
12575                  the table.  This is probably a bug -- shall we warn?  */
12576               size = addend + file_align;
12577             }
12578         }
12579       size = (size + file_align - 1) & -file_align;
12580
12581       /* Allocate one extra entry for use as a "done" flag for the
12582          consolidation pass.  */
12583       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
12584
12585       if (ptr)
12586         {
12587           ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
12588
12589           if (ptr != NULL)
12590             {
12591               size_t oldbytes;
12592
12593               oldbytes = (((h->vtable->size >> log_file_align) + 1)
12594                           * sizeof (bfd_boolean));
12595               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
12596             }
12597         }
12598       else
12599         ptr = (bfd_boolean *) bfd_zmalloc (bytes);
12600
12601       if (ptr == NULL)
12602         return FALSE;
12603
12604       /* And arrange for that done flag to be at index -1.  */
12605       h->vtable->used = ptr + 1;
12606       h->vtable->size = size;
12607     }
12608
12609   h->vtable->used[addend >> log_file_align] = TRUE;
12610
12611   return TRUE;
12612 }
12613
12614 /* Map an ELF section header flag to its corresponding string.  */
12615 typedef struct
12616 {
12617   char *flag_name;
12618   flagword flag_value;
12619 } elf_flags_to_name_table;
12620
12621 static elf_flags_to_name_table elf_flags_to_names [] =
12622 {
12623   { "SHF_WRITE", SHF_WRITE },
12624   { "SHF_ALLOC", SHF_ALLOC },
12625   { "SHF_EXECINSTR", SHF_EXECINSTR },
12626   { "SHF_MERGE", SHF_MERGE },
12627   { "SHF_STRINGS", SHF_STRINGS },
12628   { "SHF_INFO_LINK", SHF_INFO_LINK},
12629   { "SHF_LINK_ORDER", SHF_LINK_ORDER},
12630   { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
12631   { "SHF_GROUP", SHF_GROUP },
12632   { "SHF_TLS", SHF_TLS },
12633   { "SHF_MASKOS", SHF_MASKOS },
12634   { "SHF_EXCLUDE", SHF_EXCLUDE },
12635 };
12636
12637 /* Returns TRUE if the section is to be included, otherwise FALSE.  */
12638 bfd_boolean
12639 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
12640                               struct flag_info *flaginfo,
12641                               asection *section)
12642 {
12643   const bfd_vma sh_flags = elf_section_flags (section);
12644
12645   if (!flaginfo->flags_initialized)
12646     {
12647       bfd *obfd = info->output_bfd;
12648       const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12649       struct flag_info_list *tf = flaginfo->flag_list;
12650       int with_hex = 0;
12651       int without_hex = 0;
12652
12653       for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
12654         {
12655           unsigned i;
12656           flagword (*lookup) (char *);
12657
12658           lookup = bed->elf_backend_lookup_section_flags_hook;
12659           if (lookup != NULL)
12660             {
12661               flagword hexval = (*lookup) ((char *) tf->name);
12662
12663               if (hexval != 0)
12664                 {
12665                   if (tf->with == with_flags)
12666                     with_hex |= hexval;
12667                   else if (tf->with == without_flags)
12668                     without_hex |= hexval;
12669                   tf->valid = TRUE;
12670                   continue;
12671                 }
12672             }
12673           for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
12674             {
12675               if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
12676                 {
12677                   if (tf->with == with_flags)
12678                     with_hex |= elf_flags_to_names[i].flag_value;
12679                   else if (tf->with == without_flags)
12680                     without_hex |= elf_flags_to_names[i].flag_value;
12681                   tf->valid = TRUE;
12682                   break;
12683                 }
12684             }
12685           if (!tf->valid)
12686             {
12687               info->callbacks->einfo
12688                 (_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
12689               return FALSE;
12690             }
12691         }
12692       flaginfo->flags_initialized = TRUE;
12693       flaginfo->only_with_flags |= with_hex;
12694       flaginfo->not_with_flags |= without_hex;
12695     }
12696
12697   if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
12698     return FALSE;
12699
12700   if ((flaginfo->not_with_flags & sh_flags) != 0)
12701     return FALSE;
12702
12703   return TRUE;
12704 }
12705
12706 struct alloc_got_off_arg {
12707   bfd_vma gotoff;
12708   struct bfd_link_info *info;
12709 };
12710
12711 /* We need a special top-level link routine to convert got reference counts
12712    to real got offsets.  */
12713
12714 static bfd_boolean
12715 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
12716 {
12717   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
12718   bfd *obfd = gofarg->info->output_bfd;
12719   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12720
12721   if (h->got.refcount > 0)
12722     {
12723       h->got.offset = gofarg->gotoff;
12724       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
12725     }
12726   else
12727     h->got.offset = (bfd_vma) -1;
12728
12729   return TRUE;
12730 }
12731
12732 /* And an accompanying bit to work out final got entry offsets once
12733    we're done.  Should be called from final_link.  */
12734
12735 bfd_boolean
12736 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
12737                                         struct bfd_link_info *info)
12738 {
12739   bfd *i;
12740   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12741   bfd_vma gotoff;
12742   struct alloc_got_off_arg gofarg;
12743
12744   BFD_ASSERT (abfd == info->output_bfd);
12745
12746   if (! is_elf_hash_table (info->hash))
12747     return FALSE;
12748
12749   /* The GOT offset is relative to the .got section, but the GOT header is
12750      put into the .got.plt section, if the backend uses it.  */
12751   if (bed->want_got_plt)
12752     gotoff = 0;
12753   else
12754     gotoff = bed->got_header_size;
12755
12756   /* Do the local .got entries first.  */
12757   for (i = info->input_bfds; i; i = i->link.next)
12758     {
12759       bfd_signed_vma *local_got;
12760       bfd_size_type j, locsymcount;
12761       Elf_Internal_Shdr *symtab_hdr;
12762
12763       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
12764         continue;
12765
12766       local_got = elf_local_got_refcounts (i);
12767       if (!local_got)
12768         continue;
12769
12770       symtab_hdr = &elf_tdata (i)->symtab_hdr;
12771       if (elf_bad_symtab (i))
12772         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12773       else
12774         locsymcount = symtab_hdr->sh_info;
12775
12776       for (j = 0; j < locsymcount; ++j)
12777         {
12778           if (local_got[j] > 0)
12779             {
12780               local_got[j] = gotoff;
12781               gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
12782             }
12783           else
12784             local_got[j] = (bfd_vma) -1;
12785         }
12786     }
12787
12788   /* Then the global .got entries.  .plt refcounts are handled by
12789      adjust_dynamic_symbol  */
12790   gofarg.gotoff = gotoff;
12791   gofarg.info = info;
12792   elf_link_hash_traverse (elf_hash_table (info),
12793                           elf_gc_allocate_got_offsets,
12794                           &gofarg);
12795   return TRUE;
12796 }
12797
12798 /* Many folk need no more in the way of final link than this, once
12799    got entry reference counting is enabled.  */
12800
12801 bfd_boolean
12802 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
12803 {
12804   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
12805     return FALSE;
12806
12807   /* Invoke the regular ELF backend linker to do all the work.  */
12808   return bfd_elf_final_link (abfd, info);
12809 }
12810
12811 bfd_boolean
12812 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
12813 {
12814   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
12815
12816   if (rcookie->bad_symtab)
12817     rcookie->rel = rcookie->rels;
12818
12819   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
12820     {
12821       unsigned long r_symndx;
12822
12823       if (! rcookie->bad_symtab)
12824         if (rcookie->rel->r_offset > offset)
12825           return FALSE;
12826       if (rcookie->rel->r_offset != offset)
12827         continue;
12828
12829       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
12830       if (r_symndx == STN_UNDEF)
12831         return TRUE;
12832
12833       if (r_symndx >= rcookie->locsymcount
12834           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12835         {
12836           struct elf_link_hash_entry *h;
12837
12838           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
12839
12840           while (h->root.type == bfd_link_hash_indirect
12841                  || h->root.type == bfd_link_hash_warning)
12842             h = (struct elf_link_hash_entry *) h->root.u.i.link;
12843
12844           if ((h->root.type == bfd_link_hash_defined
12845                || h->root.type == bfd_link_hash_defweak)
12846               && (h->root.u.def.section->owner != rcookie->abfd
12847                   || h->root.u.def.section->kept_section != NULL
12848                   || discarded_section (h->root.u.def.section)))
12849             return TRUE;
12850         }
12851       else
12852         {
12853           /* It's not a relocation against a global symbol,
12854              but it could be a relocation against a local
12855              symbol for a discarded section.  */
12856           asection *isec;
12857           Elf_Internal_Sym *isym;
12858
12859           /* Need to: get the symbol; get the section.  */
12860           isym = &rcookie->locsyms[r_symndx];
12861           isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
12862           if (isec != NULL
12863               && (isec->kept_section != NULL
12864                   || discarded_section (isec)))
12865             return TRUE;
12866         }
12867       return FALSE;
12868     }
12869   return FALSE;
12870 }
12871
12872 /* Discard unneeded references to discarded sections.
12873    Returns -1 on error, 1 if any section's size was changed, 0 if
12874    nothing changed.  This function assumes that the relocations are in
12875    sorted order, which is true for all known assemblers.  */
12876
12877 int
12878 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
12879 {
12880   struct elf_reloc_cookie cookie;
12881   asection *o;
12882   bfd *abfd;
12883   int changed = 0;
12884
12885   if (info->traditional_format
12886       || !is_elf_hash_table (info->hash))
12887     return 0;
12888
12889   o = bfd_get_section_by_name (output_bfd, ".stab");
12890   if (o != NULL)
12891     {
12892       asection *i;
12893
12894       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12895         {
12896           if (i->size == 0
12897               || i->reloc_count == 0
12898               || i->sec_info_type != SEC_INFO_TYPE_STABS)
12899             continue;
12900
12901           abfd = i->owner;
12902           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12903             continue;
12904
12905           if (!init_reloc_cookie_for_section (&cookie, info, i))
12906             return -1;
12907
12908           if (_bfd_discard_section_stabs (abfd, i,
12909                                           elf_section_data (i)->sec_info,
12910                                           bfd_elf_reloc_symbol_deleted_p,
12911                                           &cookie))
12912             changed = 1;
12913
12914           fini_reloc_cookie_for_section (&cookie, i);
12915         }
12916     }
12917
12918   o = bfd_get_section_by_name (output_bfd, ".eh_frame");
12919   if (o != NULL)
12920     {
12921       asection *i;
12922
12923       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12924         {
12925           if (i->size == 0)
12926             continue;
12927
12928           abfd = i->owner;
12929           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12930             continue;
12931
12932           if (!init_reloc_cookie_for_section (&cookie, info, i))
12933             return -1;
12934
12935           _bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
12936           if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
12937                                                  bfd_elf_reloc_symbol_deleted_p,
12938                                                  &cookie))
12939             changed = 1;
12940
12941           fini_reloc_cookie_for_section (&cookie, i);
12942         }
12943     }
12944
12945   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
12946     {
12947       const struct elf_backend_data *bed;
12948
12949       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12950         continue;
12951
12952       bed = get_elf_backend_data (abfd);
12953
12954       if (bed->elf_backend_discard_info != NULL)
12955         {
12956           if (!init_reloc_cookie (&cookie, info, abfd))
12957             return -1;
12958
12959           if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
12960             changed = 1;
12961
12962           fini_reloc_cookie (&cookie, abfd);
12963         }
12964     }
12965
12966   if (info->eh_frame_hdr
12967       && !info->relocatable
12968       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
12969     changed = 1;
12970
12971   return changed;
12972 }
12973
12974 bfd_boolean
12975 _bfd_elf_section_already_linked (bfd *abfd,
12976                                  asection *sec,
12977                                  struct bfd_link_info *info)
12978 {
12979   flagword flags;
12980   const char *name, *key;
12981   struct bfd_section_already_linked *l;
12982   struct bfd_section_already_linked_hash_entry *already_linked_list;
12983
12984   if (sec->output_section == bfd_abs_section_ptr)
12985     return FALSE;
12986
12987   flags = sec->flags;
12988
12989   /* Return if it isn't a linkonce section.  A comdat group section
12990      also has SEC_LINK_ONCE set.  */
12991   if ((flags & SEC_LINK_ONCE) == 0)
12992     return FALSE;
12993
12994   /* Don't put group member sections on our list of already linked
12995      sections.  They are handled as a group via their group section.  */
12996   if (elf_sec_group (sec) != NULL)
12997     return FALSE;
12998
12999   /* For a SHT_GROUP section, use the group signature as the key.  */
13000   name = sec->name;
13001   if ((flags & SEC_GROUP) != 0
13002       && elf_next_in_group (sec) != NULL
13003       && elf_group_name (elf_next_in_group (sec)) != NULL)
13004     key = elf_group_name (elf_next_in_group (sec));
13005   else
13006     {
13007       /* Otherwise we should have a .gnu.linkonce.<type>.<key> section.  */
13008       if (CONST_STRNEQ (name, ".gnu.linkonce.")
13009           && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
13010         key++;
13011       else
13012         /* Must be a user linkonce section that doesn't follow gcc's
13013            naming convention.  In this case we won't be matching
13014            single member groups.  */
13015         key = name;
13016     }
13017
13018   already_linked_list = bfd_section_already_linked_table_lookup (key);
13019
13020   for (l = already_linked_list->entry; l != NULL; l = l->next)
13021     {
13022       /* We may have 2 different types of sections on the list: group
13023          sections with a signature of <key> (<key> is some string),
13024          and linkonce sections named .gnu.linkonce.<type>.<key>.
13025          Match like sections.  LTO plugin sections are an exception.
13026          They are always named .gnu.linkonce.t.<key> and match either
13027          type of section.  */
13028       if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
13029            && ((flags & SEC_GROUP) != 0
13030                || strcmp (name, l->sec->name) == 0))
13031           || (l->sec->owner->flags & BFD_PLUGIN) != 0)
13032         {
13033           /* The section has already been linked.  See if we should
13034              issue a warning.  */
13035           if (!_bfd_handle_already_linked (sec, l, info))
13036             return FALSE;
13037
13038           if (flags & SEC_GROUP)
13039             {
13040               asection *first = elf_next_in_group (sec);
13041               asection *s = first;
13042
13043               while (s != NULL)
13044                 {
13045                   s->output_section = bfd_abs_section_ptr;
13046                   /* Record which group discards it.  */
13047                   s->kept_section = l->sec;
13048                   s = elf_next_in_group (s);
13049                   /* These lists are circular.  */
13050                   if (s == first)
13051                     break;
13052                 }
13053             }
13054
13055           return TRUE;
13056         }
13057     }
13058
13059   /* A single member comdat group section may be discarded by a
13060      linkonce section and vice versa.  */
13061   if ((flags & SEC_GROUP) != 0)
13062     {
13063       asection *first = elf_next_in_group (sec);
13064
13065       if (first != NULL && elf_next_in_group (first) == first)
13066         /* Check this single member group against linkonce sections.  */
13067         for (l = already_linked_list->entry; l != NULL; l = l->next)
13068           if ((l->sec->flags & SEC_GROUP) == 0
13069               && bfd_elf_match_symbols_in_sections (l->sec, first, info))
13070             {
13071               first->output_section = bfd_abs_section_ptr;
13072               first->kept_section = l->sec;
13073               sec->output_section = bfd_abs_section_ptr;
13074               break;
13075             }
13076     }
13077   else
13078     /* Check this linkonce section against single member groups.  */
13079     for (l = already_linked_list->entry; l != NULL; l = l->next)
13080       if (l->sec->flags & SEC_GROUP)
13081         {
13082           asection *first = elf_next_in_group (l->sec);
13083
13084           if (first != NULL
13085               && elf_next_in_group (first) == first
13086               && bfd_elf_match_symbols_in_sections (first, sec, info))
13087             {
13088               sec->output_section = bfd_abs_section_ptr;
13089               sec->kept_section = first;
13090               break;
13091             }
13092         }
13093
13094   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
13095      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
13096      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
13097      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
13098      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
13099      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
13100      `.gnu.linkonce.t.F' section from a different bfd not requiring any
13101      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
13102      The reverse order cannot happen as there is never a bfd with only the
13103      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
13104      matter as here were are looking only for cross-bfd sections.  */
13105
13106   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
13107     for (l = already_linked_list->entry; l != NULL; l = l->next)
13108       if ((l->sec->flags & SEC_GROUP) == 0
13109           && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
13110         {
13111           if (abfd != l->sec->owner)
13112             sec->output_section = bfd_abs_section_ptr;
13113           break;
13114         }
13115
13116   /* This is the first section with this name.  Record it.  */
13117   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
13118     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
13119   return sec->output_section == bfd_abs_section_ptr;
13120 }
13121
13122 bfd_boolean
13123 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
13124 {
13125   return sym->st_shndx == SHN_COMMON;
13126 }
13127
13128 unsigned int
13129 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
13130 {
13131   return SHN_COMMON;
13132 }
13133
13134 asection *
13135 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
13136 {
13137   return bfd_com_section_ptr;
13138 }
13139
13140 bfd_vma
13141 _bfd_elf_default_got_elt_size (bfd *abfd,
13142                                struct bfd_link_info *info ATTRIBUTE_UNUSED,
13143                                struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
13144                                bfd *ibfd ATTRIBUTE_UNUSED,
13145                                unsigned long symndx ATTRIBUTE_UNUSED)
13146 {
13147   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13148   return bed->s->arch_size / 8;
13149 }
13150
13151 /* Routines to support the creation of dynamic relocs.  */
13152
13153 /* Returns the name of the dynamic reloc section associated with SEC.  */
13154
13155 static const char *
13156 get_dynamic_reloc_section_name (bfd *       abfd,
13157                                 asection *  sec,
13158                                 bfd_boolean is_rela)
13159 {
13160   char *name;
13161   const char *old_name = bfd_get_section_name (NULL, sec);
13162   const char *prefix = is_rela ? ".rela" : ".rel";
13163
13164   if (old_name == NULL)
13165     return NULL;
13166
13167   name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
13168   sprintf (name, "%s%s", prefix, old_name);
13169
13170   return name;
13171 }
13172
13173 /* Returns the dynamic reloc section associated with SEC.
13174    If necessary compute the name of the dynamic reloc section based
13175    on SEC's name (looked up in ABFD's string table) and the setting
13176    of IS_RELA.  */
13177
13178 asection *
13179 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
13180                                     asection *  sec,
13181                                     bfd_boolean is_rela)
13182 {
13183   asection * reloc_sec = elf_section_data (sec)->sreloc;
13184
13185   if (reloc_sec == NULL)
13186     {
13187       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
13188
13189       if (name != NULL)
13190         {
13191           reloc_sec = bfd_get_linker_section (abfd, name);
13192
13193           if (reloc_sec != NULL)
13194             elf_section_data (sec)->sreloc = reloc_sec;
13195         }
13196     }
13197
13198   return reloc_sec;
13199 }
13200
13201 /* Returns the dynamic reloc section associated with SEC.  If the
13202    section does not exist it is created and attached to the DYNOBJ
13203    bfd and stored in the SRELOC field of SEC's elf_section_data
13204    structure.
13205
13206    ALIGNMENT is the alignment for the newly created section and
13207    IS_RELA defines whether the name should be .rela.<SEC's name>
13208    or .rel.<SEC's name>.  The section name is looked up in the
13209    string table associated with ABFD.  */
13210
13211 asection *
13212 _bfd_elf_make_dynamic_reloc_section (asection *         sec,
13213                                      bfd *              dynobj,
13214                                      unsigned int       alignment,
13215                                      bfd *              abfd,
13216                                      bfd_boolean        is_rela)
13217 {
13218   asection * reloc_sec = elf_section_data (sec)->sreloc;
13219
13220   if (reloc_sec == NULL)
13221     {
13222       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
13223
13224       if (name == NULL)
13225         return NULL;
13226
13227       reloc_sec = bfd_get_linker_section (dynobj, name);
13228
13229       if (reloc_sec == NULL)
13230         {
13231           flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
13232                             | SEC_IN_MEMORY | SEC_LINKER_CREATED);
13233           if ((sec->flags & SEC_ALLOC) != 0)
13234             flags |= SEC_ALLOC | SEC_LOAD;
13235
13236           reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
13237           if (reloc_sec != NULL)
13238             {
13239               /* _bfd_elf_get_sec_type_attr chooses a section type by
13240                  name.  Override as it may be wrong, eg. for a user
13241                  section named "auto" we'll get ".relauto" which is
13242                  seen to be a .rela section.  */
13243               elf_section_type (reloc_sec) = is_rela ? SHT_RELA : SHT_REL;
13244               if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
13245                 reloc_sec = NULL;
13246             }
13247         }
13248
13249       elf_section_data (sec)->sreloc = reloc_sec;
13250     }
13251
13252   return reloc_sec;
13253 }
13254
13255 /* Copy the ELF symbol type and other attributes for a linker script
13256    assignment from HSRC to HDEST.  Generally this should be treated as
13257    if we found a strong non-dynamic definition for HDEST (except that
13258    ld ignores multiple definition errors).  */
13259 void
13260 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
13261                                      struct bfd_link_hash_entry *hdest,
13262                                      struct bfd_link_hash_entry *hsrc)
13263 {
13264   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
13265   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
13266   Elf_Internal_Sym isym;
13267
13268   ehdest->type = ehsrc->type;
13269   ehdest->target_internal = ehsrc->target_internal;
13270
13271   isym.st_other = ehsrc->other;
13272   elf_merge_st_other (abfd, ehdest, &isym, TRUE, FALSE);
13273 }
13274
13275 /* Append a RELA relocation REL to section S in BFD.  */
13276
13277 void
13278 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
13279 {
13280   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13281   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
13282   BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
13283   bed->s->swap_reloca_out (abfd, rel, loc);
13284 }
13285
13286 /* Append a REL relocation REL to section S in BFD.  */
13287
13288 void
13289 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
13290 {
13291   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13292   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
13293   BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
13294   bed->s->swap_reloc_out (abfd, rel, loc);
13295 }