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