Sort relocs output by ld -r
[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 {
8102   unsigned int i;
8103   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8104   bfd_byte *erela;
8105   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8106   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8107   bfd_vma r_type_mask;
8108   int r_sym_shift;
8109   unsigned int count = reldata->count;
8110   struct elf_link_hash_entry **rel_hash = reldata->hashes;
8111   int (*compare) (const void *, const void *);
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 (bed->s->arch_size == 32)
8159     {
8160       if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8161         compare = cmp_ext32l_r_offset;
8162       else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8163         compare = cmp_ext32b_r_offset;
8164       else
8165         abort ();
8166     }
8167   else
8168     {
8169 #ifdef BFD_HOST_64_BIT
8170       if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
8171         compare = cmp_ext64l_r_offset;
8172       else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
8173         compare = cmp_ext64b_r_offset;
8174       else
8175 #endif
8176         abort ();
8177     }
8178   qsort (reldata->hdr->contents, count, reldata->hdr->sh_entsize, compare);
8179   free (reldata->hashes);
8180   reldata->hashes = NULL;
8181 }
8182
8183 struct elf_link_sort_rela
8184 {
8185   union {
8186     bfd_vma offset;
8187     bfd_vma sym_mask;
8188   } u;
8189   enum elf_reloc_type_class type;
8190   /* We use this as an array of size int_rels_per_ext_rel.  */
8191   Elf_Internal_Rela rela[1];
8192 };
8193
8194 static int
8195 elf_link_sort_cmp1 (const void *A, const void *B)
8196 {
8197   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8198   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8199   int relativea, relativeb;
8200
8201   relativea = a->type == reloc_class_relative;
8202   relativeb = b->type == reloc_class_relative;
8203
8204   if (relativea < relativeb)
8205     return 1;
8206   if (relativea > relativeb)
8207     return -1;
8208   if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
8209     return -1;
8210   if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
8211     return 1;
8212   if (a->rela->r_offset < b->rela->r_offset)
8213     return -1;
8214   if (a->rela->r_offset > b->rela->r_offset)
8215     return 1;
8216   return 0;
8217 }
8218
8219 static int
8220 elf_link_sort_cmp2 (const void *A, const void *B)
8221 {
8222   const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
8223   const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
8224
8225   if (a->type < b->type)
8226     return -1;
8227   if (a->type > b->type)
8228     return 1;
8229   if (a->u.offset < b->u.offset)
8230     return -1;
8231   if (a->u.offset > b->u.offset)
8232     return 1;
8233   if (a->rela->r_offset < b->rela->r_offset)
8234     return -1;
8235   if (a->rela->r_offset > b->rela->r_offset)
8236     return 1;
8237   return 0;
8238 }
8239
8240 static size_t
8241 elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
8242 {
8243   asection *dynamic_relocs;
8244   asection *rela_dyn;
8245   asection *rel_dyn;
8246   bfd_size_type count, size;
8247   size_t i, ret, sort_elt, ext_size;
8248   bfd_byte *sort, *s_non_relative, *p;
8249   struct elf_link_sort_rela *sq;
8250   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8251   int i2e = bed->s->int_rels_per_ext_rel;
8252   void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8253   void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8254   struct bfd_link_order *lo;
8255   bfd_vma r_sym_mask;
8256   bfd_boolean use_rela;
8257
8258   /* Find a dynamic reloc section.  */
8259   rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
8260   rel_dyn  = bfd_get_section_by_name (abfd, ".rel.dyn");
8261   if (rela_dyn != NULL && rela_dyn->size > 0
8262       && rel_dyn != NULL && rel_dyn->size > 0)
8263     {
8264       bfd_boolean use_rela_initialised = FALSE;
8265
8266       /* This is just here to stop gcc from complaining.
8267          It's initialization checking code is not perfect.  */
8268       use_rela = TRUE;
8269
8270       /* Both sections are present.  Examine the sizes
8271          of the indirect sections to help us choose.  */
8272       for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8273         if (lo->type == bfd_indirect_link_order)
8274           {
8275             asection *o = lo->u.indirect.section;
8276
8277             if ((o->size % bed->s->sizeof_rela) == 0)
8278               {
8279                 if ((o->size % bed->s->sizeof_rel) == 0)
8280                   /* Section size is divisible by both rel and rela sizes.
8281                      It is of no help to us.  */
8282                   ;
8283                 else
8284                   {
8285                     /* Section size is only divisible by rela.  */
8286                     if (use_rela_initialised && (use_rela == FALSE))
8287                       {
8288                         _bfd_error_handler
8289                           (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8290                         bfd_set_error (bfd_error_invalid_operation);
8291                         return 0;
8292                       }
8293                     else
8294                       {
8295                         use_rela = TRUE;
8296                         use_rela_initialised = TRUE;
8297                       }
8298                   }
8299               }
8300             else if ((o->size % bed->s->sizeof_rel) == 0)
8301               {
8302                 /* Section size is only divisible by rel.  */
8303                 if (use_rela_initialised && (use_rela == TRUE))
8304                   {
8305                     _bfd_error_handler
8306                       (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8307                     bfd_set_error (bfd_error_invalid_operation);
8308                     return 0;
8309                   }
8310                 else
8311                   {
8312                     use_rela = FALSE;
8313                     use_rela_initialised = TRUE;
8314                   }
8315               }
8316             else
8317               {
8318                 /* The section size is not divisible by either - something is wrong.  */
8319                 _bfd_error_handler
8320                   (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8321                 bfd_set_error (bfd_error_invalid_operation);
8322                 return 0;
8323               }
8324           }
8325
8326       for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
8327         if (lo->type == bfd_indirect_link_order)
8328           {
8329             asection *o = lo->u.indirect.section;
8330
8331             if ((o->size % bed->s->sizeof_rela) == 0)
8332               {
8333                 if ((o->size % bed->s->sizeof_rel) == 0)
8334                   /* Section size is divisible by both rel and rela sizes.
8335                      It is of no help to us.  */
8336                   ;
8337                 else
8338                   {
8339                     /* Section size is only divisible by rela.  */
8340                     if (use_rela_initialised && (use_rela == FALSE))
8341                       {
8342                         _bfd_error_handler
8343                           (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8344                         bfd_set_error (bfd_error_invalid_operation);
8345                         return 0;
8346                       }
8347                     else
8348                       {
8349                         use_rela = TRUE;
8350                         use_rela_initialised = TRUE;
8351                       }
8352                   }
8353               }
8354             else if ((o->size % bed->s->sizeof_rel) == 0)
8355               {
8356                 /* Section size is only divisible by rel.  */
8357                 if (use_rela_initialised && (use_rela == TRUE))
8358                   {
8359                     _bfd_error_handler
8360                       (_("%B: Unable to sort relocs - they are in more than one size"), abfd);
8361                     bfd_set_error (bfd_error_invalid_operation);
8362                     return 0;
8363                   }
8364                 else
8365                   {
8366                     use_rela = FALSE;
8367                     use_rela_initialised = TRUE;
8368                   }
8369               }
8370             else
8371               {
8372                 /* The section size is not divisible by either - something is wrong.  */
8373                 _bfd_error_handler
8374                   (_("%B: Unable to sort relocs - they are of an unknown size"), abfd);
8375                 bfd_set_error (bfd_error_invalid_operation);
8376                 return 0;
8377               }
8378           }
8379
8380       if (! use_rela_initialised)
8381         /* Make a guess.  */
8382         use_rela = TRUE;
8383     }
8384   else if (rela_dyn != NULL && rela_dyn->size > 0)
8385     use_rela = TRUE;
8386   else if (rel_dyn != NULL && rel_dyn->size > 0)
8387     use_rela = FALSE;
8388   else
8389     return 0;
8390
8391   if (use_rela)
8392     {
8393       dynamic_relocs = rela_dyn;
8394       ext_size = bed->s->sizeof_rela;
8395       swap_in = bed->s->swap_reloca_in;
8396       swap_out = bed->s->swap_reloca_out;
8397     }
8398   else
8399     {
8400       dynamic_relocs = rel_dyn;
8401       ext_size = bed->s->sizeof_rel;
8402       swap_in = bed->s->swap_reloc_in;
8403       swap_out = bed->s->swap_reloc_out;
8404     }
8405
8406   size = 0;
8407   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8408     if (lo->type == bfd_indirect_link_order)
8409       size += lo->u.indirect.section->size;
8410
8411   if (size != dynamic_relocs->size)
8412     return 0;
8413
8414   sort_elt = (sizeof (struct elf_link_sort_rela)
8415               + (i2e - 1) * sizeof (Elf_Internal_Rela));
8416
8417   count = dynamic_relocs->size / ext_size;
8418   if (count == 0)
8419     return 0;
8420   sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
8421
8422   if (sort == NULL)
8423     {
8424       (*info->callbacks->warning)
8425         (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
8426       return 0;
8427     }
8428
8429   if (bed->s->arch_size == 32)
8430     r_sym_mask = ~(bfd_vma) 0xff;
8431   else
8432     r_sym_mask = ~(bfd_vma) 0xffffffff;
8433
8434   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8435     if (lo->type == bfd_indirect_link_order)
8436       {
8437         bfd_byte *erel, *erelend;
8438         asection *o = lo->u.indirect.section;
8439
8440         if (o->contents == NULL && o->size != 0)
8441           {
8442             /* This is a reloc section that is being handled as a normal
8443                section.  See bfd_section_from_shdr.  We can't combine
8444                relocs in this case.  */
8445             free (sort);
8446             return 0;
8447           }
8448         erel = o->contents;
8449         erelend = o->contents + o->size;
8450         /* FIXME: octets_per_byte.  */
8451         p = sort + o->output_offset / ext_size * sort_elt;
8452
8453         while (erel < erelend)
8454           {
8455             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8456
8457             (*swap_in) (abfd, erel, s->rela);
8458             s->type = (*bed->elf_backend_reloc_type_class) (info, o, s->rela);
8459             s->u.sym_mask = r_sym_mask;
8460             p += sort_elt;
8461             erel += ext_size;
8462           }
8463       }
8464
8465   qsort (sort, count, sort_elt, elf_link_sort_cmp1);
8466
8467   for (i = 0, p = sort; i < count; i++, p += sort_elt)
8468     {
8469       struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8470       if (s->type != reloc_class_relative)
8471         break;
8472     }
8473   ret = i;
8474   s_non_relative = p;
8475
8476   sq = (struct elf_link_sort_rela *) s_non_relative;
8477   for (; i < count; i++, p += sort_elt)
8478     {
8479       struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
8480       if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
8481         sq = sp;
8482       sp->u.offset = sq->rela->r_offset;
8483     }
8484
8485   qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
8486
8487   for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
8488     if (lo->type == bfd_indirect_link_order)
8489       {
8490         bfd_byte *erel, *erelend;
8491         asection *o = lo->u.indirect.section;
8492
8493         erel = o->contents;
8494         erelend = o->contents + o->size;
8495         /* FIXME: octets_per_byte.  */
8496         p = sort + o->output_offset / ext_size * sort_elt;
8497         while (erel < erelend)
8498           {
8499             struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
8500             (*swap_out) (abfd, s->rela, erel);
8501             p += sort_elt;
8502             erel += ext_size;
8503           }
8504       }
8505
8506   free (sort);
8507   *psec = dynamic_relocs;
8508   return ret;
8509 }
8510
8511 /* Flush the output symbols to the file.  */
8512
8513 static bfd_boolean
8514 elf_link_flush_output_syms (struct elf_final_link_info *flinfo,
8515                             const struct elf_backend_data *bed)
8516 {
8517   if (flinfo->symbuf_count > 0)
8518     {
8519       Elf_Internal_Shdr *hdr;
8520       file_ptr pos;
8521       bfd_size_type amt;
8522
8523       hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
8524       pos = hdr->sh_offset + hdr->sh_size;
8525       amt = flinfo->symbuf_count * bed->s->sizeof_sym;
8526       if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) != 0
8527           || bfd_bwrite (flinfo->symbuf, amt, flinfo->output_bfd) != amt)
8528         return FALSE;
8529
8530       hdr->sh_size += amt;
8531       flinfo->symbuf_count = 0;
8532     }
8533
8534   return TRUE;
8535 }
8536
8537 /* Add a symbol to the output symbol table.  */
8538
8539 static int
8540 elf_link_output_sym (struct elf_final_link_info *flinfo,
8541                      const char *name,
8542                      Elf_Internal_Sym *elfsym,
8543                      asection *input_sec,
8544                      struct elf_link_hash_entry *h)
8545 {
8546   bfd_byte *dest;
8547   Elf_External_Sym_Shndx *destshndx;
8548   int (*output_symbol_hook)
8549     (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
8550      struct elf_link_hash_entry *);
8551   const struct elf_backend_data *bed;
8552
8553   bed = get_elf_backend_data (flinfo->output_bfd);
8554   output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
8555   if (output_symbol_hook != NULL)
8556     {
8557       int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
8558       if (ret != 1)
8559         return ret;
8560     }
8561
8562   if (name == NULL || *name == '\0')
8563     elfsym->st_name = 0;
8564   else if (input_sec->flags & SEC_EXCLUDE)
8565     elfsym->st_name = 0;
8566   else
8567     {
8568       elfsym->st_name = (unsigned long) _bfd_stringtab_add (flinfo->symstrtab,
8569                                                             name, TRUE, FALSE);
8570       if (elfsym->st_name == (unsigned long) -1)
8571         return 0;
8572     }
8573
8574   if (flinfo->symbuf_count >= flinfo->symbuf_size)
8575     {
8576       if (! elf_link_flush_output_syms (flinfo, bed))
8577         return 0;
8578     }
8579
8580   dest = flinfo->symbuf + flinfo->symbuf_count * bed->s->sizeof_sym;
8581   destshndx = flinfo->symshndxbuf;
8582   if (destshndx != NULL)
8583     {
8584       if (bfd_get_symcount (flinfo->output_bfd) >= flinfo->shndxbuf_size)
8585         {
8586           bfd_size_type amt;
8587
8588           amt = flinfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx);
8589           destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx,
8590                                                               amt * 2);
8591           if (destshndx == NULL)
8592             return 0;
8593           flinfo->symshndxbuf = destshndx;
8594           memset ((char *) destshndx + amt, 0, amt);
8595           flinfo->shndxbuf_size *= 2;
8596         }
8597       destshndx += bfd_get_symcount (flinfo->output_bfd);
8598     }
8599
8600   bed->s->swap_symbol_out (flinfo->output_bfd, elfsym, dest, destshndx);
8601   flinfo->symbuf_count += 1;
8602   bfd_get_symcount (flinfo->output_bfd) += 1;
8603
8604   return 1;
8605 }
8606
8607 /* Return TRUE if the dynamic symbol SYM in ABFD is supported.  */
8608
8609 static bfd_boolean
8610 check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
8611 {
8612   if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
8613       && sym->st_shndx < SHN_LORESERVE)
8614     {
8615       /* The gABI doesn't support dynamic symbols in output sections
8616          beyond 64k.  */
8617       (*_bfd_error_handler)
8618         (_("%B: Too many sections: %d (>= %d)"),
8619          abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
8620       bfd_set_error (bfd_error_nonrepresentable_section);
8621       return FALSE;
8622     }
8623   return TRUE;
8624 }
8625
8626 /* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
8627    allowing an unsatisfied unversioned symbol in the DSO to match a
8628    versioned symbol that would normally require an explicit version.
8629    We also handle the case that a DSO references a hidden symbol
8630    which may be satisfied by a versioned symbol in another DSO.  */
8631
8632 static bfd_boolean
8633 elf_link_check_versioned_symbol (struct bfd_link_info *info,
8634                                  const struct elf_backend_data *bed,
8635                                  struct elf_link_hash_entry *h)
8636 {
8637   bfd *abfd;
8638   struct elf_link_loaded_list *loaded;
8639
8640   if (!is_elf_hash_table (info->hash))
8641     return FALSE;
8642
8643   /* Check indirect symbol.  */
8644   while (h->root.type == bfd_link_hash_indirect)
8645     h = (struct elf_link_hash_entry *) h->root.u.i.link;
8646
8647   switch (h->root.type)
8648     {
8649     default:
8650       abfd = NULL;
8651       break;
8652
8653     case bfd_link_hash_undefined:
8654     case bfd_link_hash_undefweak:
8655       abfd = h->root.u.undef.abfd;
8656       if ((abfd->flags & DYNAMIC) == 0
8657           || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
8658         return FALSE;
8659       break;
8660
8661     case bfd_link_hash_defined:
8662     case bfd_link_hash_defweak:
8663       abfd = h->root.u.def.section->owner;
8664       break;
8665
8666     case bfd_link_hash_common:
8667       abfd = h->root.u.c.p->section->owner;
8668       break;
8669     }
8670   BFD_ASSERT (abfd != NULL);
8671
8672   for (loaded = elf_hash_table (info)->loaded;
8673        loaded != NULL;
8674        loaded = loaded->next)
8675     {
8676       bfd *input;
8677       Elf_Internal_Shdr *hdr;
8678       bfd_size_type symcount;
8679       bfd_size_type extsymcount;
8680       bfd_size_type extsymoff;
8681       Elf_Internal_Shdr *versymhdr;
8682       Elf_Internal_Sym *isym;
8683       Elf_Internal_Sym *isymend;
8684       Elf_Internal_Sym *isymbuf;
8685       Elf_External_Versym *ever;
8686       Elf_External_Versym *extversym;
8687
8688       input = loaded->abfd;
8689
8690       /* We check each DSO for a possible hidden versioned definition.  */
8691       if (input == abfd
8692           || (input->flags & DYNAMIC) == 0
8693           || elf_dynversym (input) == 0)
8694         continue;
8695
8696       hdr = &elf_tdata (input)->dynsymtab_hdr;
8697
8698       symcount = hdr->sh_size / bed->s->sizeof_sym;
8699       if (elf_bad_symtab (input))
8700         {
8701           extsymcount = symcount;
8702           extsymoff = 0;
8703         }
8704       else
8705         {
8706           extsymcount = symcount - hdr->sh_info;
8707           extsymoff = hdr->sh_info;
8708         }
8709
8710       if (extsymcount == 0)
8711         continue;
8712
8713       isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
8714                                       NULL, NULL, NULL);
8715       if (isymbuf == NULL)
8716         return FALSE;
8717
8718       /* Read in any version definitions.  */
8719       versymhdr = &elf_tdata (input)->dynversym_hdr;
8720       extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
8721       if (extversym == NULL)
8722         goto error_ret;
8723
8724       if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
8725           || (bfd_bread (extversym, versymhdr->sh_size, input)
8726               != versymhdr->sh_size))
8727         {
8728           free (extversym);
8729         error_ret:
8730           free (isymbuf);
8731           return FALSE;
8732         }
8733
8734       ever = extversym + extsymoff;
8735       isymend = isymbuf + extsymcount;
8736       for (isym = isymbuf; isym < isymend; isym++, ever++)
8737         {
8738           const char *name;
8739           Elf_Internal_Versym iver;
8740           unsigned short version_index;
8741
8742           if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
8743               || isym->st_shndx == SHN_UNDEF)
8744             continue;
8745
8746           name = bfd_elf_string_from_elf_section (input,
8747                                                   hdr->sh_link,
8748                                                   isym->st_name);
8749           if (strcmp (name, h->root.root.string) != 0)
8750             continue;
8751
8752           _bfd_elf_swap_versym_in (input, ever, &iver);
8753
8754           if ((iver.vs_vers & VERSYM_HIDDEN) == 0
8755               && !(h->def_regular
8756                    && h->forced_local))
8757             {
8758               /* If we have a non-hidden versioned sym, then it should
8759                  have provided a definition for the undefined sym unless
8760                  it is defined in a non-shared object and forced local.
8761                */
8762               abort ();
8763             }
8764
8765           version_index = iver.vs_vers & VERSYM_VERSION;
8766           if (version_index == 1 || version_index == 2)
8767             {
8768               /* This is the base or first version.  We can use it.  */
8769               free (extversym);
8770               free (isymbuf);
8771               return TRUE;
8772             }
8773         }
8774
8775       free (extversym);
8776       free (isymbuf);
8777     }
8778
8779   return FALSE;
8780 }
8781
8782 /* Add an external symbol to the symbol table.  This is called from
8783    the hash table traversal routine.  When generating a shared object,
8784    we go through the symbol table twice.  The first time we output
8785    anything that might have been forced to local scope in a version
8786    script.  The second time we output the symbols that are still
8787    global symbols.  */
8788
8789 static bfd_boolean
8790 elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
8791 {
8792   struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
8793   struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
8794   struct elf_final_link_info *flinfo = eoinfo->flinfo;
8795   bfd_boolean strip;
8796   Elf_Internal_Sym sym;
8797   asection *input_sec;
8798   const struct elf_backend_data *bed;
8799   long indx;
8800   int ret;
8801
8802   if (h->root.type == bfd_link_hash_warning)
8803     {
8804       h = (struct elf_link_hash_entry *) h->root.u.i.link;
8805       if (h->root.type == bfd_link_hash_new)
8806         return TRUE;
8807     }
8808
8809   /* Decide whether to output this symbol in this pass.  */
8810   if (eoinfo->localsyms)
8811     {
8812       if (!h->forced_local)
8813         return TRUE;
8814       if (eoinfo->second_pass
8815           && !((h->root.type == bfd_link_hash_defined
8816                 || h->root.type == bfd_link_hash_defweak)
8817                && h->root.u.def.section->output_section != NULL))
8818         return TRUE;
8819
8820       if (!eoinfo->file_sym_done
8821           && (eoinfo->second_pass ? eoinfo->flinfo->filesym_count == 1
8822                                   : eoinfo->flinfo->filesym_count > 1))
8823         {
8824           /* Output a FILE symbol so that following locals are not associated
8825              with the wrong input file.  */
8826           memset (&sym, 0, sizeof (sym));
8827           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8828           sym.st_shndx = SHN_ABS;
8829           if (!elf_link_output_sym (eoinfo->flinfo, NULL, &sym,
8830                                     bfd_und_section_ptr, NULL))
8831             return FALSE;
8832
8833           eoinfo->file_sym_done = TRUE;
8834         }
8835     }
8836   else
8837     {
8838       if (h->forced_local)
8839         return TRUE;
8840     }
8841
8842   bed = get_elf_backend_data (flinfo->output_bfd);
8843
8844   if (h->root.type == bfd_link_hash_undefined)
8845     {
8846       /* If we have an undefined symbol reference here then it must have
8847          come from a shared library that is being linked in.  (Undefined
8848          references in regular files have already been handled unless
8849          they are in unreferenced sections which are removed by garbage
8850          collection).  */
8851       bfd_boolean ignore_undef = FALSE;
8852
8853       /* Some symbols may be special in that the fact that they're
8854          undefined can be safely ignored - let backend determine that.  */
8855       if (bed->elf_backend_ignore_undef_symbol)
8856         ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
8857
8858       /* If we are reporting errors for this situation then do so now.  */
8859       if (!ignore_undef
8860           && h->ref_dynamic
8861           && (!h->ref_regular || flinfo->info->gc_sections)
8862           && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
8863           && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
8864         {
8865           if (!(flinfo->info->callbacks->undefined_symbol
8866                 (flinfo->info, h->root.root.string,
8867                  h->ref_regular ? NULL : h->root.u.undef.abfd,
8868                  NULL, 0,
8869                  (flinfo->info->unresolved_syms_in_shared_libs
8870                   == RM_GENERATE_ERROR))))
8871             {
8872               bfd_set_error (bfd_error_bad_value);
8873               eoinfo->failed = TRUE;
8874               return FALSE;
8875             }
8876         }
8877     }
8878
8879   /* We should also warn if a forced local symbol is referenced from
8880      shared libraries.  */
8881   if (!flinfo->info->relocatable
8882       && flinfo->info->executable
8883       && h->forced_local
8884       && h->ref_dynamic
8885       && h->def_regular
8886       && !h->dynamic_def
8887       && h->ref_dynamic_nonweak
8888       && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
8889     {
8890       bfd *def_bfd;
8891       const char *msg;
8892       struct elf_link_hash_entry *hi = h;
8893
8894       /* Check indirect symbol.  */
8895       while (hi->root.type == bfd_link_hash_indirect)
8896         hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
8897
8898       if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
8899         msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
8900       else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
8901         msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
8902       else
8903         msg = _("%B: local symbol `%s' in %B is referenced by DSO");
8904       def_bfd = flinfo->output_bfd;
8905       if (hi->root.u.def.section != bfd_abs_section_ptr)
8906         def_bfd = hi->root.u.def.section->owner;
8907       (*_bfd_error_handler) (msg, flinfo->output_bfd, def_bfd,
8908                              h->root.root.string);
8909       bfd_set_error (bfd_error_bad_value);
8910       eoinfo->failed = TRUE;
8911       return FALSE;
8912     }
8913
8914   /* We don't want to output symbols that have never been mentioned by
8915      a regular file, or that we have been told to strip.  However, if
8916      h->indx is set to -2, the symbol is used by a reloc and we must
8917      output it.  */
8918   if (h->indx == -2)
8919     strip = FALSE;
8920   else if ((h->def_dynamic
8921             || h->ref_dynamic
8922             || h->root.type == bfd_link_hash_new)
8923            && !h->def_regular
8924            && !h->ref_regular)
8925     strip = TRUE;
8926   else if (flinfo->info->strip == strip_all)
8927     strip = TRUE;
8928   else if (flinfo->info->strip == strip_some
8929            && bfd_hash_lookup (flinfo->info->keep_hash,
8930                                h->root.root.string, FALSE, FALSE) == NULL)
8931     strip = TRUE;
8932   else if ((h->root.type == bfd_link_hash_defined
8933             || h->root.type == bfd_link_hash_defweak)
8934            && ((flinfo->info->strip_discarded
8935                 && discarded_section (h->root.u.def.section))
8936                || (h->root.u.def.section->owner != NULL
8937                    && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
8938     strip = TRUE;
8939   else if ((h->root.type == bfd_link_hash_undefined
8940             || h->root.type == bfd_link_hash_undefweak)
8941            && h->root.u.undef.abfd != NULL
8942            && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
8943     strip = TRUE;
8944   else
8945     strip = FALSE;
8946
8947   /* If we're stripping it, and it's not a dynamic symbol, there's
8948      nothing else to do unless it is a forced local symbol or a
8949      STT_GNU_IFUNC symbol.  */
8950   if (strip
8951       && h->dynindx == -1
8952       && h->type != STT_GNU_IFUNC
8953       && !h->forced_local)
8954     return TRUE;
8955
8956   sym.st_value = 0;
8957   sym.st_size = h->size;
8958   sym.st_other = h->other;
8959   if (h->forced_local)
8960     {
8961       sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type);
8962       /* Turn off visibility on local symbol.  */
8963       sym.st_other &= ~ELF_ST_VISIBILITY (-1);
8964     }
8965   /* Set STB_GNU_UNIQUE only if symbol is defined in regular object.  */
8966   else if (h->unique_global && h->def_regular)
8967     sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type);
8968   else if (h->root.type == bfd_link_hash_undefweak
8969            || h->root.type == bfd_link_hash_defweak)
8970     sym.st_info = ELF_ST_INFO (STB_WEAK, h->type);
8971   else
8972     sym.st_info = ELF_ST_INFO (STB_GLOBAL, h->type);
8973   sym.st_target_internal = h->target_internal;
8974
8975   switch (h->root.type)
8976     {
8977     default:
8978     case bfd_link_hash_new:
8979     case bfd_link_hash_warning:
8980       abort ();
8981       return FALSE;
8982
8983     case bfd_link_hash_undefined:
8984     case bfd_link_hash_undefweak:
8985       input_sec = bfd_und_section_ptr;
8986       sym.st_shndx = SHN_UNDEF;
8987       break;
8988
8989     case bfd_link_hash_defined:
8990     case bfd_link_hash_defweak:
8991       {
8992         input_sec = h->root.u.def.section;
8993         if (input_sec->output_section != NULL)
8994           {
8995             if (eoinfo->localsyms && flinfo->filesym_count == 1)
8996               {
8997                 bfd_boolean second_pass_sym
8998                   = (input_sec->owner == flinfo->output_bfd
8999                      || input_sec->owner == NULL
9000                      || (input_sec->flags & SEC_LINKER_CREATED) != 0
9001                      || (input_sec->owner->flags & BFD_LINKER_CREATED) != 0);
9002
9003                 eoinfo->need_second_pass |= second_pass_sym;
9004                 if (eoinfo->second_pass != second_pass_sym)
9005                   return TRUE;
9006               }
9007
9008             sym.st_shndx =
9009               _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
9010                                                  input_sec->output_section);
9011             if (sym.st_shndx == SHN_BAD)
9012               {
9013                 (*_bfd_error_handler)
9014                   (_("%B: could not find output section %A for input section %A"),
9015                    flinfo->output_bfd, input_sec->output_section, input_sec);
9016                 bfd_set_error (bfd_error_nonrepresentable_section);
9017                 eoinfo->failed = TRUE;
9018                 return FALSE;
9019               }
9020
9021             /* ELF symbols in relocatable files are section relative,
9022                but in nonrelocatable files they are virtual
9023                addresses.  */
9024             sym.st_value = h->root.u.def.value + input_sec->output_offset;
9025             if (!flinfo->info->relocatable)
9026               {
9027                 sym.st_value += input_sec->output_section->vma;
9028                 if (h->type == STT_TLS)
9029                   {
9030                     asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
9031                     if (tls_sec != NULL)
9032                       sym.st_value -= tls_sec->vma;
9033                     else
9034                       {
9035                         /* The TLS section may have been garbage collected.  */
9036                         BFD_ASSERT (flinfo->info->gc_sections
9037                                     && !input_sec->gc_mark);
9038                       }
9039                   }
9040               }
9041           }
9042         else
9043           {
9044             BFD_ASSERT (input_sec->owner == NULL
9045                         || (input_sec->owner->flags & DYNAMIC) != 0);
9046             sym.st_shndx = SHN_UNDEF;
9047             input_sec = bfd_und_section_ptr;
9048           }
9049       }
9050       break;
9051
9052     case bfd_link_hash_common:
9053       input_sec = h->root.u.c.p->section;
9054       sym.st_shndx = bed->common_section_index (input_sec);
9055       sym.st_value = 1 << h->root.u.c.p->alignment_power;
9056       break;
9057
9058     case bfd_link_hash_indirect:
9059       /* These symbols are created by symbol versioning.  They point
9060          to the decorated version of the name.  For example, if the
9061          symbol foo@@GNU_1.2 is the default, which should be used when
9062          foo is used with no version, then we add an indirect symbol
9063          foo which points to foo@@GNU_1.2.  We ignore these symbols,
9064          since the indirected symbol is already in the hash table.  */
9065       return TRUE;
9066     }
9067
9068   /* Give the processor backend a chance to tweak the symbol value,
9069      and also to finish up anything that needs to be done for this
9070      symbol.  FIXME: Not calling elf_backend_finish_dynamic_symbol for
9071      forced local syms when non-shared is due to a historical quirk.
9072      STT_GNU_IFUNC symbol must go through PLT.  */
9073   if ((h->type == STT_GNU_IFUNC
9074        && h->def_regular
9075        && !flinfo->info->relocatable)
9076       || ((h->dynindx != -1
9077            || h->forced_local)
9078           && ((flinfo->info->shared
9079                && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
9080                    || h->root.type != bfd_link_hash_undefweak))
9081               || !h->forced_local)
9082           && elf_hash_table (flinfo->info)->dynamic_sections_created))
9083     {
9084       if (! ((*bed->elf_backend_finish_dynamic_symbol)
9085              (flinfo->output_bfd, flinfo->info, h, &sym)))
9086         {
9087           eoinfo->failed = TRUE;
9088           return FALSE;
9089         }
9090     }
9091
9092   /* If we are marking the symbol as undefined, and there are no
9093      non-weak references to this symbol from a regular object, then
9094      mark the symbol as weak undefined; if there are non-weak
9095      references, mark the symbol as strong.  We can't do this earlier,
9096      because it might not be marked as undefined until the
9097      finish_dynamic_symbol routine gets through with it.  */
9098   if (sym.st_shndx == SHN_UNDEF
9099       && h->ref_regular
9100       && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
9101           || ELF_ST_BIND (sym.st_info) == STB_WEAK))
9102     {
9103       int bindtype;
9104       unsigned int type = ELF_ST_TYPE (sym.st_info);
9105
9106       /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
9107       if (type == STT_GNU_IFUNC)
9108         type = STT_FUNC;
9109
9110       if (h->ref_regular_nonweak)
9111         bindtype = STB_GLOBAL;
9112       else
9113         bindtype = STB_WEAK;
9114       sym.st_info = ELF_ST_INFO (bindtype, type);
9115     }
9116
9117   /* If this is a symbol defined in a dynamic library, don't use the
9118      symbol size from the dynamic library.  Relinking an executable
9119      against a new library may introduce gratuitous changes in the
9120      executable's symbols if we keep the size.  */
9121   if (sym.st_shndx == SHN_UNDEF
9122       && !h->def_regular
9123       && h->def_dynamic)
9124     sym.st_size = 0;
9125
9126   /* If a non-weak symbol with non-default visibility is not defined
9127      locally, it is a fatal error.  */
9128   if (!flinfo->info->relocatable
9129       && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
9130       && ELF_ST_BIND (sym.st_info) != STB_WEAK
9131       && h->root.type == bfd_link_hash_undefined
9132       && !h->def_regular)
9133     {
9134       const char *msg;
9135
9136       if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
9137         msg = _("%B: protected symbol `%s' isn't defined");
9138       else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
9139         msg = _("%B: internal symbol `%s' isn't defined");
9140       else
9141         msg = _("%B: hidden symbol `%s' isn't defined");
9142       (*_bfd_error_handler) (msg, flinfo->output_bfd, h->root.root.string);
9143       bfd_set_error (bfd_error_bad_value);
9144       eoinfo->failed = TRUE;
9145       return FALSE;
9146     }
9147
9148   /* If this symbol should be put in the .dynsym section, then put it
9149      there now.  We already know the symbol index.  We also fill in
9150      the entry in the .hash section.  */
9151   if (flinfo->dynsym_sec != NULL
9152       && h->dynindx != -1
9153       && elf_hash_table (flinfo->info)->dynamic_sections_created)
9154     {
9155       bfd_byte *esym;
9156
9157       /* Since there is no version information in the dynamic string,
9158          if there is no version info in symbol version section, we will
9159          have a run-time problem.  */
9160       if (h->verinfo.verdef == NULL)
9161         {
9162           char *p = strrchr (h->root.root.string, ELF_VER_CHR);
9163
9164           if (p && p [1] != '\0')
9165             {
9166               (*_bfd_error_handler)
9167                 (_("%B: No symbol version section for versioned symbol `%s'"),
9168                  flinfo->output_bfd, h->root.root.string);
9169               eoinfo->failed = TRUE;
9170               return FALSE;
9171             }
9172         }
9173
9174       sym.st_name = h->dynstr_index;
9175       esym = flinfo->dynsym_sec->contents + h->dynindx * bed->s->sizeof_sym;
9176       if (!check_dynsym (flinfo->output_bfd, &sym))
9177         {
9178           eoinfo->failed = TRUE;
9179           return FALSE;
9180         }
9181       bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
9182
9183       if (flinfo->hash_sec != NULL)
9184         {
9185           size_t hash_entry_size;
9186           bfd_byte *bucketpos;
9187           bfd_vma chain;
9188           size_t bucketcount;
9189           size_t bucket;
9190
9191           bucketcount = elf_hash_table (flinfo->info)->bucketcount;
9192           bucket = h->u.elf_hash_value % bucketcount;
9193
9194           hash_entry_size
9195             = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
9196           bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
9197                        + (bucket + 2) * hash_entry_size);
9198           chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
9199           bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
9200                    bucketpos);
9201           bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
9202                    ((bfd_byte *) flinfo->hash_sec->contents
9203                     + (bucketcount + 2 + h->dynindx) * hash_entry_size));
9204         }
9205
9206       if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
9207         {
9208           Elf_Internal_Versym iversym;
9209           Elf_External_Versym *eversym;
9210
9211           if (!h->def_regular)
9212             {
9213               if (h->verinfo.verdef == NULL
9214                   || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
9215                       & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
9216                 iversym.vs_vers = 0;
9217               else
9218                 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
9219             }
9220           else
9221             {
9222               if (h->verinfo.vertree == NULL)
9223                 iversym.vs_vers = 1;
9224               else
9225                 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
9226               if (flinfo->info->create_default_symver)
9227                 iversym.vs_vers++;
9228             }
9229
9230           if (h->hidden)
9231             iversym.vs_vers |= VERSYM_HIDDEN;
9232
9233           eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
9234           eversym += h->dynindx;
9235           _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
9236         }
9237     }
9238
9239   /* If we're stripping it, then it was just a dynamic symbol, and
9240      there's nothing else to do.  */
9241   if (strip || (input_sec->flags & SEC_EXCLUDE) != 0)
9242     return TRUE;
9243
9244   indx = bfd_get_symcount (flinfo->output_bfd);
9245   ret = elf_link_output_sym (flinfo, h->root.root.string, &sym, input_sec, h);
9246   if (ret == 0)
9247     {
9248       eoinfo->failed = TRUE;
9249       return FALSE;
9250     }
9251   else if (ret == 1)
9252     h->indx = indx;
9253   else if (h->indx == -2)
9254     abort();
9255
9256   return TRUE;
9257 }
9258
9259 /* Return TRUE if special handling is done for relocs in SEC against
9260    symbols defined in discarded sections.  */
9261
9262 static bfd_boolean
9263 elf_section_ignore_discarded_relocs (asection *sec)
9264 {
9265   const struct elf_backend_data *bed;
9266
9267   switch (sec->sec_info_type)
9268     {
9269     case SEC_INFO_TYPE_STABS:
9270     case SEC_INFO_TYPE_EH_FRAME:
9271       return TRUE;
9272     default:
9273       break;
9274     }
9275
9276   bed = get_elf_backend_data (sec->owner);
9277   if (bed->elf_backend_ignore_discarded_relocs != NULL
9278       && (*bed->elf_backend_ignore_discarded_relocs) (sec))
9279     return TRUE;
9280
9281   return FALSE;
9282 }
9283
9284 /* Return a mask saying how ld should treat relocations in SEC against
9285    symbols defined in discarded sections.  If this function returns
9286    COMPLAIN set, ld will issue a warning message.  If this function
9287    returns PRETEND set, and the discarded section was link-once and the
9288    same size as the kept link-once section, ld will pretend that the
9289    symbol was actually defined in the kept section.  Otherwise ld will
9290    zero the reloc (at least that is the intent, but some cooperation by
9291    the target dependent code is needed, particularly for REL targets).  */
9292
9293 unsigned int
9294 _bfd_elf_default_action_discarded (asection *sec)
9295 {
9296   if (sec->flags & SEC_DEBUGGING)
9297     return PRETEND;
9298
9299   if (strcmp (".eh_frame", sec->name) == 0)
9300     return 0;
9301
9302   if (strcmp (".gcc_except_table", sec->name) == 0)
9303     return 0;
9304
9305   return COMPLAIN | PRETEND;
9306 }
9307
9308 /* Find a match between a section and a member of a section group.  */
9309
9310 static asection *
9311 match_group_member (asection *sec, asection *group,
9312                     struct bfd_link_info *info)
9313 {
9314   asection *first = elf_next_in_group (group);
9315   asection *s = first;
9316
9317   while (s != NULL)
9318     {
9319       if (bfd_elf_match_symbols_in_sections (s, sec, info))
9320         return s;
9321
9322       s = elf_next_in_group (s);
9323       if (s == first)
9324         break;
9325     }
9326
9327   return NULL;
9328 }
9329
9330 /* Check if the kept section of a discarded section SEC can be used
9331    to replace it.  Return the replacement if it is OK.  Otherwise return
9332    NULL.  */
9333
9334 asection *
9335 _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
9336 {
9337   asection *kept;
9338
9339   kept = sec->kept_section;
9340   if (kept != NULL)
9341     {
9342       if ((kept->flags & SEC_GROUP) != 0)
9343         kept = match_group_member (sec, kept, info);
9344       if (kept != NULL
9345           && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
9346               != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
9347         kept = NULL;
9348       sec->kept_section = kept;
9349     }
9350   return kept;
9351 }
9352
9353 /* Link an input file into the linker output file.  This function
9354    handles all the sections and relocations of the input file at once.
9355    This is so that we only have to read the local symbols once, and
9356    don't have to keep them in memory.  */
9357
9358 static bfd_boolean
9359 elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
9360 {
9361   int (*relocate_section)
9362     (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
9363      Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
9364   bfd *output_bfd;
9365   Elf_Internal_Shdr *symtab_hdr;
9366   size_t locsymcount;
9367   size_t extsymoff;
9368   Elf_Internal_Sym *isymbuf;
9369   Elf_Internal_Sym *isym;
9370   Elf_Internal_Sym *isymend;
9371   long *pindex;
9372   asection **ppsection;
9373   asection *o;
9374   const struct elf_backend_data *bed;
9375   struct elf_link_hash_entry **sym_hashes;
9376   bfd_size_type address_size;
9377   bfd_vma r_type_mask;
9378   int r_sym_shift;
9379   bfd_boolean have_file_sym = FALSE;
9380
9381   output_bfd = flinfo->output_bfd;
9382   bed = get_elf_backend_data (output_bfd);
9383   relocate_section = bed->elf_backend_relocate_section;
9384
9385   /* If this is a dynamic object, we don't want to do anything here:
9386      we don't want the local symbols, and we don't want the section
9387      contents.  */
9388   if ((input_bfd->flags & DYNAMIC) != 0)
9389     return TRUE;
9390
9391   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9392   if (elf_bad_symtab (input_bfd))
9393     {
9394       locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
9395       extsymoff = 0;
9396     }
9397   else
9398     {
9399       locsymcount = symtab_hdr->sh_info;
9400       extsymoff = symtab_hdr->sh_info;
9401     }
9402
9403   /* Read the local symbols.  */
9404   isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
9405   if (isymbuf == NULL && locsymcount != 0)
9406     {
9407       isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
9408                                       flinfo->internal_syms,
9409                                       flinfo->external_syms,
9410                                       flinfo->locsym_shndx);
9411       if (isymbuf == NULL)
9412         return FALSE;
9413     }
9414
9415   /* Find local symbol sections and adjust values of symbols in
9416      SEC_MERGE sections.  Write out those local symbols we know are
9417      going into the output file.  */
9418   isymend = isymbuf + locsymcount;
9419   for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
9420        isym < isymend;
9421        isym++, pindex++, ppsection++)
9422     {
9423       asection *isec;
9424       const char *name;
9425       Elf_Internal_Sym osym;
9426       long indx;
9427       int ret;
9428
9429       *pindex = -1;
9430
9431       if (elf_bad_symtab (input_bfd))
9432         {
9433           if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
9434             {
9435               *ppsection = NULL;
9436               continue;
9437             }
9438         }
9439
9440       if (isym->st_shndx == SHN_UNDEF)
9441         isec = bfd_und_section_ptr;
9442       else if (isym->st_shndx == SHN_ABS)
9443         isec = bfd_abs_section_ptr;
9444       else if (isym->st_shndx == SHN_COMMON)
9445         isec = bfd_com_section_ptr;
9446       else
9447         {
9448           isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
9449           if (isec == NULL)
9450             {
9451               /* Don't attempt to output symbols with st_shnx in the
9452                  reserved range other than SHN_ABS and SHN_COMMON.  */
9453               *ppsection = NULL;
9454               continue;
9455             }
9456           else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
9457                    && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
9458             isym->st_value =
9459               _bfd_merged_section_offset (output_bfd, &isec,
9460                                           elf_section_data (isec)->sec_info,
9461                                           isym->st_value);
9462         }
9463
9464       *ppsection = isec;
9465
9466       /* Don't output the first, undefined, symbol.  */
9467       if (ppsection == flinfo->sections)
9468         continue;
9469
9470       if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
9471         {
9472           /* We never output section symbols.  Instead, we use the
9473              section symbol of the corresponding section in the output
9474              file.  */
9475           continue;
9476         }
9477
9478       /* If we are stripping all symbols, we don't want to output this
9479          one.  */
9480       if (flinfo->info->strip == strip_all)
9481         continue;
9482
9483       /* If we are discarding all local symbols, we don't want to
9484          output this one.  If we are generating a relocatable output
9485          file, then some of the local symbols may be required by
9486          relocs; we output them below as we discover that they are
9487          needed.  */
9488       if (flinfo->info->discard == discard_all)
9489         continue;
9490
9491       /* If this symbol is defined in a section which we are
9492          discarding, we don't need to keep it.  */
9493       if (isym->st_shndx != SHN_UNDEF
9494           && isym->st_shndx < SHN_LORESERVE
9495           && bfd_section_removed_from_list (output_bfd,
9496                                             isec->output_section))
9497         continue;
9498
9499       /* Get the name of the symbol.  */
9500       name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
9501                                               isym->st_name);
9502       if (name == NULL)
9503         return FALSE;
9504
9505       /* See if we are discarding symbols with this name.  */
9506       if ((flinfo->info->strip == strip_some
9507            && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
9508                == NULL))
9509           || (((flinfo->info->discard == discard_sec_merge
9510                 && (isec->flags & SEC_MERGE) && !flinfo->info->relocatable)
9511                || flinfo->info->discard == discard_l)
9512               && bfd_is_local_label_name (input_bfd, name)))
9513         continue;
9514
9515       if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
9516         {
9517           have_file_sym = TRUE;
9518           flinfo->filesym_count += 1;
9519         }
9520       if (!have_file_sym)
9521         {
9522           /* In the absence of debug info, bfd_find_nearest_line uses
9523              FILE symbols to determine the source file for local
9524              function symbols.  Provide a FILE symbol here if input
9525              files lack such, so that their symbols won't be
9526              associated with a previous input file.  It's not the
9527              source file, but the best we can do.  */
9528           have_file_sym = TRUE;
9529           flinfo->filesym_count += 1;
9530           memset (&osym, 0, sizeof (osym));
9531           osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
9532           osym.st_shndx = SHN_ABS;
9533           if (!elf_link_output_sym (flinfo, input_bfd->filename, &osym,
9534                                     bfd_abs_section_ptr, NULL))
9535             return FALSE;
9536         }
9537
9538       osym = *isym;
9539
9540       /* Adjust the section index for the output file.  */
9541       osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9542                                                          isec->output_section);
9543       if (osym.st_shndx == SHN_BAD)
9544         return FALSE;
9545
9546       /* ELF symbols in relocatable files are section relative, but
9547          in executable files they are virtual addresses.  Note that
9548          this code assumes that all ELF sections have an associated
9549          BFD section with a reasonable value for output_offset; below
9550          we assume that they also have a reasonable value for
9551          output_section.  Any special sections must be set up to meet
9552          these requirements.  */
9553       osym.st_value += isec->output_offset;
9554       if (!flinfo->info->relocatable)
9555         {
9556           osym.st_value += isec->output_section->vma;
9557           if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
9558             {
9559               /* STT_TLS symbols are relative to PT_TLS segment base.  */
9560               BFD_ASSERT (elf_hash_table (flinfo->info)->tls_sec != NULL);
9561               osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
9562             }
9563         }
9564
9565       indx = bfd_get_symcount (output_bfd);
9566       ret = elf_link_output_sym (flinfo, name, &osym, isec, NULL);
9567       if (ret == 0)
9568         return FALSE;
9569       else if (ret == 1)
9570         *pindex = indx;
9571     }
9572
9573   if (bed->s->arch_size == 32)
9574     {
9575       r_type_mask = 0xff;
9576       r_sym_shift = 8;
9577       address_size = 4;
9578     }
9579   else
9580     {
9581       r_type_mask = 0xffffffff;
9582       r_sym_shift = 32;
9583       address_size = 8;
9584     }
9585
9586   /* Relocate the contents of each section.  */
9587   sym_hashes = elf_sym_hashes (input_bfd);
9588   for (o = input_bfd->sections; o != NULL; o = o->next)
9589     {
9590       bfd_byte *contents;
9591
9592       if (! o->linker_mark)
9593         {
9594           /* This section was omitted from the link.  */
9595           continue;
9596         }
9597
9598       if (flinfo->info->relocatable
9599           && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
9600         {
9601           /* Deal with the group signature symbol.  */
9602           struct bfd_elf_section_data *sec_data = elf_section_data (o);
9603           unsigned long symndx = sec_data->this_hdr.sh_info;
9604           asection *osec = o->output_section;
9605
9606           if (symndx >= locsymcount
9607               || (elf_bad_symtab (input_bfd)
9608                   && flinfo->sections[symndx] == NULL))
9609             {
9610               struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
9611               while (h->root.type == bfd_link_hash_indirect
9612                      || h->root.type == bfd_link_hash_warning)
9613                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
9614               /* Arrange for symbol to be output.  */
9615               h->indx = -2;
9616               elf_section_data (osec)->this_hdr.sh_info = -2;
9617             }
9618           else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
9619             {
9620               /* We'll use the output section target_index.  */
9621               asection *sec = flinfo->sections[symndx]->output_section;
9622               elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
9623             }
9624           else
9625             {
9626               if (flinfo->indices[symndx] == -1)
9627                 {
9628                   /* Otherwise output the local symbol now.  */
9629                   Elf_Internal_Sym sym = isymbuf[symndx];
9630                   asection *sec = flinfo->sections[symndx]->output_section;
9631                   const char *name;
9632                   long indx;
9633                   int ret;
9634
9635                   name = bfd_elf_string_from_elf_section (input_bfd,
9636                                                           symtab_hdr->sh_link,
9637                                                           sym.st_name);
9638                   if (name == NULL)
9639                     return FALSE;
9640
9641                   sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
9642                                                                     sec);
9643                   if (sym.st_shndx == SHN_BAD)
9644                     return FALSE;
9645
9646                   sym.st_value += o->output_offset;
9647
9648                   indx = bfd_get_symcount (output_bfd);
9649                   ret = elf_link_output_sym (flinfo, name, &sym, o, NULL);
9650                   if (ret == 0)
9651                     return FALSE;
9652                   else if (ret == 1)
9653                     flinfo->indices[symndx] = indx;
9654                   else
9655                     abort ();
9656                 }
9657               elf_section_data (osec)->this_hdr.sh_info
9658                 = flinfo->indices[symndx];
9659             }
9660         }
9661
9662       if ((o->flags & SEC_HAS_CONTENTS) == 0
9663           || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
9664         continue;
9665
9666       if ((o->flags & SEC_LINKER_CREATED) != 0)
9667         {
9668           /* Section was created by _bfd_elf_link_create_dynamic_sections
9669              or somesuch.  */
9670           continue;
9671         }
9672
9673       /* Get the contents of the section.  They have been cached by a
9674          relaxation routine.  Note that o is a section in an input
9675          file, so the contents field will not have been set by any of
9676          the routines which work on output files.  */
9677       if (elf_section_data (o)->this_hdr.contents != NULL)
9678         {
9679           contents = elf_section_data (o)->this_hdr.contents;
9680           if (bed->caches_rawsize
9681               && o->rawsize != 0
9682               && o->rawsize < o->size)
9683             {
9684               memcpy (flinfo->contents, contents, o->rawsize);
9685               contents = flinfo->contents;
9686             }
9687         }
9688       else
9689         {
9690           contents = flinfo->contents;
9691           if (! bfd_get_full_section_contents (input_bfd, o, &contents))
9692             return FALSE;
9693         }
9694
9695       if ((o->flags & SEC_RELOC) != 0)
9696         {
9697           Elf_Internal_Rela *internal_relocs;
9698           Elf_Internal_Rela *rel, *relend;
9699           int action_discarded;
9700           int ret;
9701
9702           /* Get the swapped relocs.  */
9703           internal_relocs
9704             = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
9705                                          flinfo->internal_relocs, FALSE);
9706           if (internal_relocs == NULL
9707               && o->reloc_count > 0)
9708             return FALSE;
9709
9710           /* We need to reverse-copy input .ctors/.dtors sections if
9711              they are placed in .init_array/.finit_array for output.  */
9712           if (o->size > address_size
9713               && ((strncmp (o->name, ".ctors", 6) == 0
9714                    && strcmp (o->output_section->name,
9715                               ".init_array") == 0)
9716                   || (strncmp (o->name, ".dtors", 6) == 0
9717                       && strcmp (o->output_section->name,
9718                                  ".fini_array") == 0))
9719               && (o->name[6] == 0 || o->name[6] == '.'))
9720             {
9721               if (o->size != o->reloc_count * address_size)
9722                 {
9723                   (*_bfd_error_handler)
9724                     (_("error: %B: size of section %A is not "
9725                        "multiple of address size"),
9726                      input_bfd, o);
9727                   bfd_set_error (bfd_error_on_input);
9728                   return FALSE;
9729                 }
9730               o->flags |= SEC_ELF_REVERSE_COPY;
9731             }
9732
9733           action_discarded = -1;
9734           if (!elf_section_ignore_discarded_relocs (o))
9735             action_discarded = (*bed->action_discarded) (o);
9736
9737           /* Run through the relocs evaluating complex reloc symbols and
9738              looking for relocs against symbols from discarded sections
9739              or section symbols from removed link-once sections.
9740              Complain about relocs against discarded sections.  Zero
9741              relocs against removed link-once sections.  */
9742
9743           rel = internal_relocs;
9744           relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
9745           for ( ; rel < relend; rel++)
9746             {
9747               unsigned long r_symndx = rel->r_info >> r_sym_shift;
9748               unsigned int s_type;
9749               asection **ps, *sec;
9750               struct elf_link_hash_entry *h = NULL;
9751               const char *sym_name;
9752
9753               if (r_symndx == STN_UNDEF)
9754                 continue;
9755
9756               if (r_symndx >= locsymcount
9757                   || (elf_bad_symtab (input_bfd)
9758                       && flinfo->sections[r_symndx] == NULL))
9759                 {
9760                   h = sym_hashes[r_symndx - extsymoff];
9761
9762                   /* Badly formatted input files can contain relocs that
9763                      reference non-existant symbols.  Check here so that
9764                      we do not seg fault.  */
9765                   if (h == NULL)
9766                     {
9767                       char buffer [32];
9768
9769                       sprintf_vma (buffer, rel->r_info);
9770                       (*_bfd_error_handler)
9771                         (_("error: %B contains a reloc (0x%s) for section %A "
9772                            "that references a non-existent global symbol"),
9773                          input_bfd, o, buffer);
9774                       bfd_set_error (bfd_error_bad_value);
9775                       return FALSE;
9776                     }
9777
9778                   while (h->root.type == bfd_link_hash_indirect
9779                          || h->root.type == bfd_link_hash_warning)
9780                     h = (struct elf_link_hash_entry *) h->root.u.i.link;
9781
9782                   s_type = h->type;
9783
9784                   ps = NULL;
9785                   if (h->root.type == bfd_link_hash_defined
9786                       || h->root.type == bfd_link_hash_defweak)
9787                     ps = &h->root.u.def.section;
9788
9789                   sym_name = h->root.root.string;
9790                 }
9791               else
9792                 {
9793                   Elf_Internal_Sym *sym = isymbuf + r_symndx;
9794
9795                   s_type = ELF_ST_TYPE (sym->st_info);
9796                   ps = &flinfo->sections[r_symndx];
9797                   sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9798                                                sym, *ps);
9799                 }
9800
9801               if ((s_type == STT_RELC || s_type == STT_SRELC)
9802                   && !flinfo->info->relocatable)
9803                 {
9804                   bfd_vma val;
9805                   bfd_vma dot = (rel->r_offset
9806                                  + o->output_offset + o->output_section->vma);
9807 #ifdef DEBUG
9808                   printf ("Encountered a complex symbol!");
9809                   printf (" (input_bfd %s, section %s, reloc %ld\n",
9810                           input_bfd->filename, o->name,
9811                           (long) (rel - internal_relocs));
9812                   printf (" symbol: idx  %8.8lx, name %s\n",
9813                           r_symndx, sym_name);
9814                   printf (" reloc : info %8.8lx, addr %8.8lx\n",
9815                           (unsigned long) rel->r_info,
9816                           (unsigned long) rel->r_offset);
9817 #endif
9818                   if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
9819                                     isymbuf, locsymcount, s_type == STT_SRELC))
9820                     return FALSE;
9821
9822                   /* Symbol evaluated OK.  Update to absolute value.  */
9823                   set_symbol_value (input_bfd, isymbuf, locsymcount,
9824                                     r_symndx, val);
9825                   continue;
9826                 }
9827
9828               if (action_discarded != -1 && ps != NULL)
9829                 {
9830                   /* Complain if the definition comes from a
9831                      discarded section.  */
9832                   if ((sec = *ps) != NULL && discarded_section (sec))
9833                     {
9834                       BFD_ASSERT (r_symndx != STN_UNDEF);
9835                       if (action_discarded & COMPLAIN)
9836                         (*flinfo->info->callbacks->einfo)
9837                           (_("%X`%s' referenced in section `%A' of %B: "
9838                              "defined in discarded section `%A' of %B\n"),
9839                            sym_name, o, input_bfd, sec, sec->owner);
9840
9841                       /* Try to do the best we can to support buggy old
9842                          versions of gcc.  Pretend that the symbol is
9843                          really defined in the kept linkonce section.
9844                          FIXME: This is quite broken.  Modifying the
9845                          symbol here means we will be changing all later
9846                          uses of the symbol, not just in this section.  */
9847                       if (action_discarded & PRETEND)
9848                         {
9849                           asection *kept;
9850
9851                           kept = _bfd_elf_check_kept_section (sec,
9852                                                               flinfo->info);
9853                           if (kept != NULL)
9854                             {
9855                               *ps = kept;
9856                               continue;
9857                             }
9858                         }
9859                     }
9860                 }
9861             }
9862
9863           /* Relocate the section by invoking a back end routine.
9864
9865              The back end routine is responsible for adjusting the
9866              section contents as necessary, and (if using Rela relocs
9867              and generating a relocatable output file) adjusting the
9868              reloc addend as necessary.
9869
9870              The back end routine does not have to worry about setting
9871              the reloc address or the reloc symbol index.
9872
9873              The back end routine is given a pointer to the swapped in
9874              internal symbols, and can access the hash table entries
9875              for the external symbols via elf_sym_hashes (input_bfd).
9876
9877              When generating relocatable output, the back end routine
9878              must handle STB_LOCAL/STT_SECTION symbols specially.  The
9879              output symbol is going to be a section symbol
9880              corresponding to the output section, which will require
9881              the addend to be adjusted.  */
9882
9883           ret = (*relocate_section) (output_bfd, flinfo->info,
9884                                      input_bfd, o, contents,
9885                                      internal_relocs,
9886                                      isymbuf,
9887                                      flinfo->sections);
9888           if (!ret)
9889             return FALSE;
9890
9891           if (ret == 2
9892               || flinfo->info->relocatable
9893               || flinfo->info->emitrelocations)
9894             {
9895               Elf_Internal_Rela *irela;
9896               Elf_Internal_Rela *irelaend, *irelamid;
9897               bfd_vma last_offset;
9898               struct elf_link_hash_entry **rel_hash;
9899               struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
9900               Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
9901               unsigned int next_erel;
9902               bfd_boolean rela_normal;
9903               struct bfd_elf_section_data *esdi, *esdo;
9904
9905               esdi = elf_section_data (o);
9906               esdo = elf_section_data (o->output_section);
9907               rela_normal = FALSE;
9908
9909               /* Adjust the reloc addresses and symbol indices.  */
9910
9911               irela = internal_relocs;
9912               irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
9913               rel_hash = esdo->rel.hashes + esdo->rel.count;
9914               /* We start processing the REL relocs, if any.  When we reach
9915                  IRELAMID in the loop, we switch to the RELA relocs.  */
9916               irelamid = irela;
9917               if (esdi->rel.hdr != NULL)
9918                 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
9919                              * bed->s->int_rels_per_ext_rel);
9920               rel_hash_list = rel_hash;
9921               rela_hash_list = NULL;
9922               last_offset = o->output_offset;
9923               if (!flinfo->info->relocatable)
9924                 last_offset += o->output_section->vma;
9925               for (next_erel = 0; irela < irelaend; irela++, next_erel++)
9926                 {
9927                   unsigned long r_symndx;
9928                   asection *sec;
9929                   Elf_Internal_Sym sym;
9930
9931                   if (next_erel == bed->s->int_rels_per_ext_rel)
9932                     {
9933                       rel_hash++;
9934                       next_erel = 0;
9935                     }
9936
9937                   if (irela == irelamid)
9938                     {
9939                       rel_hash = esdo->rela.hashes + esdo->rela.count;
9940                       rela_hash_list = rel_hash;
9941                       rela_normal = bed->rela_normal;
9942                     }
9943
9944                   irela->r_offset = _bfd_elf_section_offset (output_bfd,
9945                                                              flinfo->info, o,
9946                                                              irela->r_offset);
9947                   if (irela->r_offset >= (bfd_vma) -2)
9948                     {
9949                       /* This is a reloc for a deleted entry or somesuch.
9950                          Turn it into an R_*_NONE reloc, at the same
9951                          offset as the last reloc.  elf_eh_frame.c and
9952                          bfd_elf_discard_info rely on reloc offsets
9953                          being ordered.  */
9954                       irela->r_offset = last_offset;
9955                       irela->r_info = 0;
9956                       irela->r_addend = 0;
9957                       continue;
9958                     }
9959
9960                   irela->r_offset += o->output_offset;
9961
9962                   /* Relocs in an executable have to be virtual addresses.  */
9963                   if (!flinfo->info->relocatable)
9964                     irela->r_offset += o->output_section->vma;
9965
9966                   last_offset = irela->r_offset;
9967
9968                   r_symndx = irela->r_info >> r_sym_shift;
9969                   if (r_symndx == STN_UNDEF)
9970                     continue;
9971
9972                   if (r_symndx >= locsymcount
9973                       || (elf_bad_symtab (input_bfd)
9974                           && flinfo->sections[r_symndx] == NULL))
9975                     {
9976                       struct elf_link_hash_entry *rh;
9977                       unsigned long indx;
9978
9979                       /* This is a reloc against a global symbol.  We
9980                          have not yet output all the local symbols, so
9981                          we do not know the symbol index of any global
9982                          symbol.  We set the rel_hash entry for this
9983                          reloc to point to the global hash table entry
9984                          for this symbol.  The symbol index is then
9985                          set at the end of bfd_elf_final_link.  */
9986                       indx = r_symndx - extsymoff;
9987                       rh = elf_sym_hashes (input_bfd)[indx];
9988                       while (rh->root.type == bfd_link_hash_indirect
9989                              || rh->root.type == bfd_link_hash_warning)
9990                         rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
9991
9992                       /* Setting the index to -2 tells
9993                          elf_link_output_extsym that this symbol is
9994                          used by a reloc.  */
9995                       BFD_ASSERT (rh->indx < 0);
9996                       rh->indx = -2;
9997
9998                       *rel_hash = rh;
9999
10000                       continue;
10001                     }
10002
10003                   /* This is a reloc against a local symbol.  */
10004
10005                   *rel_hash = NULL;
10006                   sym = isymbuf[r_symndx];
10007                   sec = flinfo->sections[r_symndx];
10008                   if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
10009                     {
10010                       /* I suppose the backend ought to fill in the
10011                          section of any STT_SECTION symbol against a
10012                          processor specific section.  */
10013                       r_symndx = STN_UNDEF;
10014                       if (bfd_is_abs_section (sec))
10015                         ;
10016                       else if (sec == NULL || sec->owner == NULL)
10017                         {
10018                           bfd_set_error (bfd_error_bad_value);
10019                           return FALSE;
10020                         }
10021                       else
10022                         {
10023                           asection *osec = sec->output_section;
10024
10025                           /* If we have discarded a section, the output
10026                              section will be the absolute section.  In
10027                              case of discarded SEC_MERGE sections, use
10028                              the kept section.  relocate_section should
10029                              have already handled discarded linkonce
10030                              sections.  */
10031                           if (bfd_is_abs_section (osec)
10032                               && sec->kept_section != NULL
10033                               && sec->kept_section->output_section != NULL)
10034                             {
10035                               osec = sec->kept_section->output_section;
10036                               irela->r_addend -= osec->vma;
10037                             }
10038
10039                           if (!bfd_is_abs_section (osec))
10040                             {
10041                               r_symndx = osec->target_index;
10042                               if (r_symndx == STN_UNDEF)
10043                                 {
10044                                   irela->r_addend += osec->vma;
10045                                   osec = _bfd_nearby_section (output_bfd, osec,
10046                                                               osec->vma);
10047                                   irela->r_addend -= osec->vma;
10048                                   r_symndx = osec->target_index;
10049                                 }
10050                             }
10051                         }
10052
10053                       /* Adjust the addend according to where the
10054                          section winds up in the output section.  */
10055                       if (rela_normal)
10056                         irela->r_addend += sec->output_offset;
10057                     }
10058                   else
10059                     {
10060                       if (flinfo->indices[r_symndx] == -1)
10061                         {
10062                           unsigned long shlink;
10063                           const char *name;
10064                           asection *osec;
10065                           long indx;
10066
10067                           if (flinfo->info->strip == strip_all)
10068                             {
10069                               /* You can't do ld -r -s.  */
10070                               bfd_set_error (bfd_error_invalid_operation);
10071                               return FALSE;
10072                             }
10073
10074                           /* This symbol was skipped earlier, but
10075                              since it is needed by a reloc, we
10076                              must output it now.  */
10077                           shlink = symtab_hdr->sh_link;
10078                           name = (bfd_elf_string_from_elf_section
10079                                   (input_bfd, shlink, sym.st_name));
10080                           if (name == NULL)
10081                             return FALSE;
10082
10083                           osec = sec->output_section;
10084                           sym.st_shndx =
10085                             _bfd_elf_section_from_bfd_section (output_bfd,
10086                                                                osec);
10087                           if (sym.st_shndx == SHN_BAD)
10088                             return FALSE;
10089
10090                           sym.st_value += sec->output_offset;
10091                           if (!flinfo->info->relocatable)
10092                             {
10093                               sym.st_value += osec->vma;
10094                               if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
10095                                 {
10096                                   /* STT_TLS symbols are relative to PT_TLS
10097                                      segment base.  */
10098                                   BFD_ASSERT (elf_hash_table (flinfo->info)
10099                                               ->tls_sec != NULL);
10100                                   sym.st_value -= (elf_hash_table (flinfo->info)
10101                                                    ->tls_sec->vma);
10102                                 }
10103                             }
10104
10105                           indx = bfd_get_symcount (output_bfd);
10106                           ret = elf_link_output_sym (flinfo, name, &sym, sec,
10107                                                      NULL);
10108                           if (ret == 0)
10109                             return FALSE;
10110                           else if (ret == 1)
10111                             flinfo->indices[r_symndx] = indx;
10112                           else
10113                             abort ();
10114                         }
10115
10116                       r_symndx = flinfo->indices[r_symndx];
10117                     }
10118
10119                   irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
10120                                    | (irela->r_info & r_type_mask));
10121                 }
10122
10123               /* Swap out the relocs.  */
10124               input_rel_hdr = esdi->rel.hdr;
10125               if (input_rel_hdr && input_rel_hdr->sh_size != 0)
10126                 {
10127                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10128                                                      input_rel_hdr,
10129                                                      internal_relocs,
10130                                                      rel_hash_list))
10131                     return FALSE;
10132                   internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
10133                                       * bed->s->int_rels_per_ext_rel);
10134                   rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
10135                 }
10136
10137               input_rela_hdr = esdi->rela.hdr;
10138               if (input_rela_hdr && input_rela_hdr->sh_size != 0)
10139                 {
10140                   if (!bed->elf_backend_emit_relocs (output_bfd, o,
10141                                                      input_rela_hdr,
10142                                                      internal_relocs,
10143                                                      rela_hash_list))
10144                     return FALSE;
10145                 }
10146             }
10147         }
10148
10149       /* Write out the modified section contents.  */
10150       if (bed->elf_backend_write_section
10151           && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
10152                                                 contents))
10153         {
10154           /* Section written out.  */
10155         }
10156       else switch (o->sec_info_type)
10157         {
10158         case SEC_INFO_TYPE_STABS:
10159           if (! (_bfd_write_section_stabs
10160                  (output_bfd,
10161                   &elf_hash_table (flinfo->info)->stab_info,
10162                   o, &elf_section_data (o)->sec_info, contents)))
10163             return FALSE;
10164           break;
10165         case SEC_INFO_TYPE_MERGE:
10166           if (! _bfd_write_merged_section (output_bfd, o,
10167                                            elf_section_data (o)->sec_info))
10168             return FALSE;
10169           break;
10170         case SEC_INFO_TYPE_EH_FRAME:
10171           {
10172             if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
10173                                                    o, contents))
10174               return FALSE;
10175           }
10176           break;
10177         default:
10178           {
10179             /* FIXME: octets_per_byte.  */
10180             if (! (o->flags & SEC_EXCLUDE))
10181               {
10182                 file_ptr offset = (file_ptr) o->output_offset;
10183                 bfd_size_type todo = o->size;
10184                 if ((o->flags & SEC_ELF_REVERSE_COPY))
10185                   {
10186                     /* Reverse-copy input section to output.  */
10187                     do
10188                       {
10189                         todo -= address_size;
10190                         if (! bfd_set_section_contents (output_bfd,
10191                                                         o->output_section,
10192                                                         contents + todo,
10193                                                         offset,
10194                                                         address_size))
10195                           return FALSE;
10196                         if (todo == 0)
10197                           break;
10198                         offset += address_size;
10199                       }
10200                     while (1);
10201                   }
10202                 else if (! bfd_set_section_contents (output_bfd,
10203                                                      o->output_section,
10204                                                      contents,
10205                                                      offset, todo))
10206                   return FALSE;
10207               }
10208           }
10209           break;
10210         }
10211     }
10212
10213   return TRUE;
10214 }
10215
10216 /* Generate a reloc when linking an ELF file.  This is a reloc
10217    requested by the linker, and does not come from any input file.  This
10218    is used to build constructor and destructor tables when linking
10219    with -Ur.  */
10220
10221 static bfd_boolean
10222 elf_reloc_link_order (bfd *output_bfd,
10223                       struct bfd_link_info *info,
10224                       asection *output_section,
10225                       struct bfd_link_order *link_order)
10226 {
10227   reloc_howto_type *howto;
10228   long indx;
10229   bfd_vma offset;
10230   bfd_vma addend;
10231   struct bfd_elf_section_reloc_data *reldata;
10232   struct elf_link_hash_entry **rel_hash_ptr;
10233   Elf_Internal_Shdr *rel_hdr;
10234   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10235   Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
10236   bfd_byte *erel;
10237   unsigned int i;
10238   struct bfd_elf_section_data *esdo = elf_section_data (output_section);
10239
10240   howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
10241   if (howto == NULL)
10242     {
10243       bfd_set_error (bfd_error_bad_value);
10244       return FALSE;
10245     }
10246
10247   addend = link_order->u.reloc.p->addend;
10248
10249   if (esdo->rel.hdr)
10250     reldata = &esdo->rel;
10251   else if (esdo->rela.hdr)
10252     reldata = &esdo->rela;
10253   else
10254     {
10255       reldata = NULL;
10256       BFD_ASSERT (0);
10257     }
10258
10259   /* Figure out the symbol index.  */
10260   rel_hash_ptr = reldata->hashes + reldata->count;
10261   if (link_order->type == bfd_section_reloc_link_order)
10262     {
10263       indx = link_order->u.reloc.p->u.section->target_index;
10264       BFD_ASSERT (indx != 0);
10265       *rel_hash_ptr = NULL;
10266     }
10267   else
10268     {
10269       struct elf_link_hash_entry *h;
10270
10271       /* Treat a reloc against a defined symbol as though it were
10272          actually against the section.  */
10273       h = ((struct elf_link_hash_entry *)
10274            bfd_wrapped_link_hash_lookup (output_bfd, info,
10275                                          link_order->u.reloc.p->u.name,
10276                                          FALSE, FALSE, TRUE));
10277       if (h != NULL
10278           && (h->root.type == bfd_link_hash_defined
10279               || h->root.type == bfd_link_hash_defweak))
10280         {
10281           asection *section;
10282
10283           section = h->root.u.def.section;
10284           indx = section->output_section->target_index;
10285           *rel_hash_ptr = NULL;
10286           /* It seems that we ought to add the symbol value to the
10287              addend here, but in practice it has already been added
10288              because it was passed to constructor_callback.  */
10289           addend += section->output_section->vma + section->output_offset;
10290         }
10291       else if (h != NULL)
10292         {
10293           /* Setting the index to -2 tells elf_link_output_extsym that
10294              this symbol is used by a reloc.  */
10295           h->indx = -2;
10296           *rel_hash_ptr = h;
10297           indx = 0;
10298         }
10299       else
10300         {
10301           if (! ((*info->callbacks->unattached_reloc)
10302                  (info, link_order->u.reloc.p->u.name, NULL, NULL, 0)))
10303             return FALSE;
10304           indx = 0;
10305         }
10306     }
10307
10308   /* If this is an inplace reloc, we must write the addend into the
10309      object file.  */
10310   if (howto->partial_inplace && addend != 0)
10311     {
10312       bfd_size_type size;
10313       bfd_reloc_status_type rstat;
10314       bfd_byte *buf;
10315       bfd_boolean ok;
10316       const char *sym_name;
10317
10318       size = (bfd_size_type) bfd_get_reloc_size (howto);
10319       buf = (bfd_byte *) bfd_zmalloc (size);
10320       if (buf == NULL)
10321         return FALSE;
10322       rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
10323       switch (rstat)
10324         {
10325         case bfd_reloc_ok:
10326           break;
10327
10328         default:
10329         case bfd_reloc_outofrange:
10330           abort ();
10331
10332         case bfd_reloc_overflow:
10333           if (link_order->type == bfd_section_reloc_link_order)
10334             sym_name = bfd_section_name (output_bfd,
10335                                          link_order->u.reloc.p->u.section);
10336           else
10337             sym_name = link_order->u.reloc.p->u.name;
10338           if (! ((*info->callbacks->reloc_overflow)
10339                  (info, NULL, sym_name, howto->name, addend, NULL,
10340                   NULL, (bfd_vma) 0)))
10341             {
10342               free (buf);
10343               return FALSE;
10344             }
10345           break;
10346         }
10347       ok = bfd_set_section_contents (output_bfd, output_section, buf,
10348                                      link_order->offset, size);
10349       free (buf);
10350       if (! ok)
10351         return FALSE;
10352     }
10353
10354   /* The address of a reloc is relative to the section in a
10355      relocatable file, and is a virtual address in an executable
10356      file.  */
10357   offset = link_order->offset;
10358   if (! info->relocatable)
10359     offset += output_section->vma;
10360
10361   for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
10362     {
10363       irel[i].r_offset = offset;
10364       irel[i].r_info = 0;
10365       irel[i].r_addend = 0;
10366     }
10367   if (bed->s->arch_size == 32)
10368     irel[0].r_info = ELF32_R_INFO (indx, howto->type);
10369   else
10370     irel[0].r_info = ELF64_R_INFO (indx, howto->type);
10371
10372   rel_hdr = reldata->hdr;
10373   erel = rel_hdr->contents;
10374   if (rel_hdr->sh_type == SHT_REL)
10375     {
10376       erel += reldata->count * bed->s->sizeof_rel;
10377       (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
10378     }
10379   else
10380     {
10381       irel[0].r_addend = addend;
10382       erel += reldata->count * bed->s->sizeof_rela;
10383       (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
10384     }
10385
10386   ++reldata->count;
10387
10388   return TRUE;
10389 }
10390
10391
10392 /* Get the output vma of the section pointed to by the sh_link field.  */
10393
10394 static bfd_vma
10395 elf_get_linked_section_vma (struct bfd_link_order *p)
10396 {
10397   Elf_Internal_Shdr **elf_shdrp;
10398   asection *s;
10399   int elfsec;
10400
10401   s = p->u.indirect.section;
10402   elf_shdrp = elf_elfsections (s->owner);
10403   elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
10404   elfsec = elf_shdrp[elfsec]->sh_link;
10405   /* PR 290:
10406      The Intel C compiler generates SHT_IA_64_UNWIND with
10407      SHF_LINK_ORDER.  But it doesn't set the sh_link or
10408      sh_info fields.  Hence we could get the situation
10409      where elfsec is 0.  */
10410   if (elfsec == 0)
10411     {
10412       const struct elf_backend_data *bed
10413         = get_elf_backend_data (s->owner);
10414       if (bed->link_order_error_handler)
10415         bed->link_order_error_handler
10416           (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
10417       return 0;
10418     }
10419   else
10420     {
10421       s = elf_shdrp[elfsec]->bfd_section;
10422       return s->output_section->vma + s->output_offset;
10423     }
10424 }
10425
10426
10427 /* Compare two sections based on the locations of the sections they are
10428    linked to.  Used by elf_fixup_link_order.  */
10429
10430 static int
10431 compare_link_order (const void * a, const void * b)
10432 {
10433   bfd_vma apos;
10434   bfd_vma bpos;
10435
10436   apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
10437   bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
10438   if (apos < bpos)
10439     return -1;
10440   return apos > bpos;
10441 }
10442
10443
10444 /* Looks for sections with SHF_LINK_ORDER set.  Rearranges them into the same
10445    order as their linked sections.  Returns false if this could not be done
10446    because an output section includes both ordered and unordered
10447    sections.  Ideally we'd do this in the linker proper.  */
10448
10449 static bfd_boolean
10450 elf_fixup_link_order (bfd *abfd, asection *o)
10451 {
10452   int seen_linkorder;
10453   int seen_other;
10454   int n;
10455   struct bfd_link_order *p;
10456   bfd *sub;
10457   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10458   unsigned elfsec;
10459   struct bfd_link_order **sections;
10460   asection *s, *other_sec, *linkorder_sec;
10461   bfd_vma offset;
10462
10463   other_sec = NULL;
10464   linkorder_sec = NULL;
10465   seen_other = 0;
10466   seen_linkorder = 0;
10467   for (p = o->map_head.link_order; p != NULL; p = p->next)
10468     {
10469       if (p->type == bfd_indirect_link_order)
10470         {
10471           s = p->u.indirect.section;
10472           sub = s->owner;
10473           if (bfd_get_flavour (sub) == bfd_target_elf_flavour
10474               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
10475               && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
10476               && elfsec < elf_numsections (sub)
10477               && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
10478               && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
10479             {
10480               seen_linkorder++;
10481               linkorder_sec = s;
10482             }
10483           else
10484             {
10485               seen_other++;
10486               other_sec = s;
10487             }
10488         }
10489       else
10490         seen_other++;
10491
10492       if (seen_other && seen_linkorder)
10493         {
10494           if (other_sec && linkorder_sec)
10495             (*_bfd_error_handler) (_("%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections"),
10496                                    o, linkorder_sec,
10497                                    linkorder_sec->owner, other_sec,
10498                                    other_sec->owner);
10499           else
10500             (*_bfd_error_handler) (_("%A has both ordered and unordered sections"),
10501                                    o);
10502           bfd_set_error (bfd_error_bad_value);
10503           return FALSE;
10504         }
10505     }
10506
10507   if (!seen_linkorder)
10508     return TRUE;
10509
10510   sections = (struct bfd_link_order **)
10511     bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
10512   if (sections == NULL)
10513     return FALSE;
10514   seen_linkorder = 0;
10515
10516   for (p = o->map_head.link_order; p != NULL; p = p->next)
10517     {
10518       sections[seen_linkorder++] = p;
10519     }
10520   /* Sort the input sections in the order of their linked section.  */
10521   qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
10522          compare_link_order);
10523
10524   /* Change the offsets of the sections.  */
10525   offset = 0;
10526   for (n = 0; n < seen_linkorder; n++)
10527     {
10528       s = sections[n]->u.indirect.section;
10529       offset &= ~(bfd_vma) 0 << s->alignment_power;
10530       s->output_offset = offset;
10531       sections[n]->offset = offset;
10532       /* FIXME: octets_per_byte.  */
10533       offset += sections[n]->size;
10534     }
10535
10536   free (sections);
10537   return TRUE;
10538 }
10539
10540 static void
10541 elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo)
10542 {
10543   asection *o;
10544
10545   if (flinfo->symstrtab != NULL)
10546     _bfd_stringtab_free (flinfo->symstrtab);
10547   if (flinfo->contents != NULL)
10548     free (flinfo->contents);
10549   if (flinfo->external_relocs != NULL)
10550     free (flinfo->external_relocs);
10551   if (flinfo->internal_relocs != NULL)
10552     free (flinfo->internal_relocs);
10553   if (flinfo->external_syms != NULL)
10554     free (flinfo->external_syms);
10555   if (flinfo->locsym_shndx != NULL)
10556     free (flinfo->locsym_shndx);
10557   if (flinfo->internal_syms != NULL)
10558     free (flinfo->internal_syms);
10559   if (flinfo->indices != NULL)
10560     free (flinfo->indices);
10561   if (flinfo->sections != NULL)
10562     free (flinfo->sections);
10563   if (flinfo->symbuf != NULL)
10564     free (flinfo->symbuf);
10565   if (flinfo->symshndxbuf != NULL)
10566     free (flinfo->symshndxbuf);
10567   for (o = obfd->sections; o != NULL; o = o->next)
10568     {
10569       struct bfd_elf_section_data *esdo = elf_section_data (o);
10570       if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
10571         free (esdo->rel.hashes);
10572       if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
10573         free (esdo->rela.hashes);
10574     }
10575 }
10576
10577 /* Do the final step of an ELF link.  */
10578
10579 bfd_boolean
10580 bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
10581 {
10582   bfd_boolean dynamic;
10583   bfd_boolean emit_relocs;
10584   bfd *dynobj;
10585   struct elf_final_link_info flinfo;
10586   asection *o;
10587   struct bfd_link_order *p;
10588   bfd *sub;
10589   bfd_size_type max_contents_size;
10590   bfd_size_type max_external_reloc_size;
10591   bfd_size_type max_internal_reloc_count;
10592   bfd_size_type max_sym_count;
10593   bfd_size_type max_sym_shndx_count;
10594   file_ptr off;
10595   Elf_Internal_Sym elfsym;
10596   unsigned int i;
10597   Elf_Internal_Shdr *symtab_hdr;
10598   Elf_Internal_Shdr *symtab_shndx_hdr;
10599   Elf_Internal_Shdr *symstrtab_hdr;
10600   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10601   struct elf_outext_info eoinfo;
10602   bfd_boolean merged;
10603   size_t relativecount = 0;
10604   asection *reldyn = 0;
10605   bfd_size_type amt;
10606   asection *attr_section = NULL;
10607   bfd_vma attr_size = 0;
10608   const char *std_attrs_section;
10609
10610   if (! is_elf_hash_table (info->hash))
10611     return FALSE;
10612
10613   if (info->shared)
10614     abfd->flags |= DYNAMIC;
10615
10616   dynamic = elf_hash_table (info)->dynamic_sections_created;
10617   dynobj = elf_hash_table (info)->dynobj;
10618
10619   emit_relocs = (info->relocatable
10620                  || info->emitrelocations);
10621
10622   flinfo.info = info;
10623   flinfo.output_bfd = abfd;
10624   flinfo.symstrtab = _bfd_elf_stringtab_init ();
10625   if (flinfo.symstrtab == NULL)
10626     return FALSE;
10627
10628   if (! dynamic)
10629     {
10630       flinfo.dynsym_sec = NULL;
10631       flinfo.hash_sec = NULL;
10632       flinfo.symver_sec = NULL;
10633     }
10634   else
10635     {
10636       flinfo.dynsym_sec = bfd_get_linker_section (dynobj, ".dynsym");
10637       flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
10638       /* Note that dynsym_sec can be NULL (on VMS).  */
10639       flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
10640       /* Note that it is OK if symver_sec is NULL.  */
10641     }
10642
10643   flinfo.contents = NULL;
10644   flinfo.external_relocs = NULL;
10645   flinfo.internal_relocs = NULL;
10646   flinfo.external_syms = NULL;
10647   flinfo.locsym_shndx = NULL;
10648   flinfo.internal_syms = NULL;
10649   flinfo.indices = NULL;
10650   flinfo.sections = NULL;
10651   flinfo.symbuf = NULL;
10652   flinfo.symshndxbuf = NULL;
10653   flinfo.symbuf_count = 0;
10654   flinfo.shndxbuf_size = 0;
10655   flinfo.filesym_count = 0;
10656
10657   /* The object attributes have been merged.  Remove the input
10658      sections from the link, and set the contents of the output
10659      secton.  */
10660   std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
10661   for (o = abfd->sections; o != NULL; o = o->next)
10662     {
10663       if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
10664           || strcmp (o->name, ".gnu.attributes") == 0)
10665         {
10666           for (p = o->map_head.link_order; p != NULL; p = p->next)
10667             {
10668               asection *input_section;
10669
10670               if (p->type != bfd_indirect_link_order)
10671                 continue;
10672               input_section = p->u.indirect.section;
10673               /* Hack: reset the SEC_HAS_CONTENTS flag so that
10674                  elf_link_input_bfd ignores this section.  */
10675               input_section->flags &= ~SEC_HAS_CONTENTS;
10676             }
10677
10678           attr_size = bfd_elf_obj_attr_size (abfd);
10679           if (attr_size)
10680             {
10681               bfd_set_section_size (abfd, o, attr_size);
10682               attr_section = o;
10683               /* Skip this section later on.  */
10684               o->map_head.link_order = NULL;
10685             }
10686           else
10687             o->flags |= SEC_EXCLUDE;
10688         }
10689     }
10690
10691   /* Count up the number of relocations we will output for each output
10692      section, so that we know the sizes of the reloc sections.  We
10693      also figure out some maximum sizes.  */
10694   max_contents_size = 0;
10695   max_external_reloc_size = 0;
10696   max_internal_reloc_count = 0;
10697   max_sym_count = 0;
10698   max_sym_shndx_count = 0;
10699   merged = FALSE;
10700   for (o = abfd->sections; o != NULL; o = o->next)
10701     {
10702       struct bfd_elf_section_data *esdo = elf_section_data (o);
10703       o->reloc_count = 0;
10704
10705       for (p = o->map_head.link_order; p != NULL; p = p->next)
10706         {
10707           unsigned int reloc_count = 0;
10708           struct bfd_elf_section_data *esdi = NULL;
10709
10710           if (p->type == bfd_section_reloc_link_order
10711               || p->type == bfd_symbol_reloc_link_order)
10712             reloc_count = 1;
10713           else if (p->type == bfd_indirect_link_order)
10714             {
10715               asection *sec;
10716
10717               sec = p->u.indirect.section;
10718               esdi = elf_section_data (sec);
10719
10720               /* Mark all sections which are to be included in the
10721                  link.  This will normally be every section.  We need
10722                  to do this so that we can identify any sections which
10723                  the linker has decided to not include.  */
10724               sec->linker_mark = TRUE;
10725
10726               if (sec->flags & SEC_MERGE)
10727                 merged = TRUE;
10728
10729               if (esdo->this_hdr.sh_type == SHT_REL
10730                   || esdo->this_hdr.sh_type == SHT_RELA)
10731                 /* Some backends use reloc_count in relocation sections
10732                    to count particular types of relocs.  Of course,
10733                    reloc sections themselves can't have relocations.  */
10734                 reloc_count = 0;
10735               else if (info->relocatable || info->emitrelocations)
10736                 reloc_count = sec->reloc_count;
10737               else if (bed->elf_backend_count_relocs)
10738                 reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
10739
10740               if (sec->rawsize > max_contents_size)
10741                 max_contents_size = sec->rawsize;
10742               if (sec->size > max_contents_size)
10743                 max_contents_size = sec->size;
10744
10745               /* We are interested in just local symbols, not all
10746                  symbols.  */
10747               if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
10748                   && (sec->owner->flags & DYNAMIC) == 0)
10749                 {
10750                   size_t sym_count;
10751
10752                   if (elf_bad_symtab (sec->owner))
10753                     sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
10754                                  / bed->s->sizeof_sym);
10755                   else
10756                     sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
10757
10758                   if (sym_count > max_sym_count)
10759                     max_sym_count = sym_count;
10760
10761                   if (sym_count > max_sym_shndx_count
10762                       && elf_symtab_shndx (sec->owner) != 0)
10763                     max_sym_shndx_count = sym_count;
10764
10765                   if ((sec->flags & SEC_RELOC) != 0)
10766                     {
10767                       size_t ext_size = 0;
10768
10769                       if (esdi->rel.hdr != NULL)
10770                         ext_size = esdi->rel.hdr->sh_size;
10771                       if (esdi->rela.hdr != NULL)
10772                         ext_size += esdi->rela.hdr->sh_size;
10773
10774                       if (ext_size > max_external_reloc_size)
10775                         max_external_reloc_size = ext_size;
10776                       if (sec->reloc_count > max_internal_reloc_count)
10777                         max_internal_reloc_count = sec->reloc_count;
10778                     }
10779                 }
10780             }
10781
10782           if (reloc_count == 0)
10783             continue;
10784
10785           o->reloc_count += reloc_count;
10786
10787           if (p->type == bfd_indirect_link_order
10788               && (info->relocatable || info->emitrelocations))
10789             {
10790               if (esdi->rel.hdr)
10791                 esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
10792               if (esdi->rela.hdr)
10793                 esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
10794             }
10795           else
10796             {
10797               if (o->use_rela_p)
10798                 esdo->rela.count += reloc_count;
10799               else
10800                 esdo->rel.count += reloc_count;
10801             }
10802         }
10803
10804       if (o->reloc_count > 0)
10805         o->flags |= SEC_RELOC;
10806       else
10807         {
10808           /* Explicitly clear the SEC_RELOC flag.  The linker tends to
10809              set it (this is probably a bug) and if it is set
10810              assign_section_numbers will create a reloc section.  */
10811           o->flags &=~ SEC_RELOC;
10812         }
10813
10814       /* If the SEC_ALLOC flag is not set, force the section VMA to
10815          zero.  This is done in elf_fake_sections as well, but forcing
10816          the VMA to 0 here will ensure that relocs against these
10817          sections are handled correctly.  */
10818       if ((o->flags & SEC_ALLOC) == 0
10819           && ! o->user_set_vma)
10820         o->vma = 0;
10821     }
10822
10823   if (! info->relocatable && merged)
10824     elf_link_hash_traverse (elf_hash_table (info),
10825                             _bfd_elf_link_sec_merge_syms, abfd);
10826
10827   /* Figure out the file positions for everything but the symbol table
10828      and the relocs.  We set symcount to force assign_section_numbers
10829      to create a symbol table.  */
10830   bfd_get_symcount (abfd) = info->strip == strip_all ? 0 : 1;
10831   BFD_ASSERT (! abfd->output_has_begun);
10832   if (! _bfd_elf_compute_section_file_positions (abfd, info))
10833     goto error_return;
10834
10835   /* Set sizes, and assign file positions for reloc sections.  */
10836   for (o = abfd->sections; o != NULL; o = o->next)
10837     {
10838       struct bfd_elf_section_data *esdo = elf_section_data (o);
10839       if ((o->flags & SEC_RELOC) != 0)
10840         {
10841           if (esdo->rel.hdr
10842               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
10843             goto error_return;
10844
10845           if (esdo->rela.hdr
10846               && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
10847             goto error_return;
10848         }
10849
10850       /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
10851          to count upwards while actually outputting the relocations.  */
10852       esdo->rel.count = 0;
10853       esdo->rela.count = 0;
10854     }
10855
10856   /* We have now assigned file positions for all the sections except
10857      .symtab, .strtab, and non-loaded reloc sections.  We start the
10858      .symtab section at the current file position, and write directly
10859      to it.  We build the .strtab section in memory.  */
10860   bfd_get_symcount (abfd) = 0;
10861   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
10862   /* sh_name is set in prep_headers.  */
10863   symtab_hdr->sh_type = SHT_SYMTAB;
10864   /* sh_flags, sh_addr and sh_size all start off zero.  */
10865   symtab_hdr->sh_entsize = bed->s->sizeof_sym;
10866   /* sh_link is set in assign_section_numbers.  */
10867   /* sh_info is set below.  */
10868   /* sh_offset is set just below.  */
10869   symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
10870
10871   off = elf_next_file_pos (abfd);
10872   off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
10873
10874   /* Note that at this point elf_next_file_pos (abfd) is
10875      incorrect.  We do not yet know the size of the .symtab section.
10876      We correct next_file_pos below, after we do know the size.  */
10877
10878   /* Allocate a buffer to hold swapped out symbols.  This is to avoid
10879      continuously seeking to the right position in the file.  */
10880   if (! info->keep_memory || max_sym_count < 20)
10881     flinfo.symbuf_size = 20;
10882   else
10883     flinfo.symbuf_size = max_sym_count;
10884   amt = flinfo.symbuf_size;
10885   amt *= bed->s->sizeof_sym;
10886   flinfo.symbuf = (bfd_byte *) bfd_malloc (amt);
10887   if (flinfo.symbuf == NULL)
10888     goto error_return;
10889   if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
10890     {
10891       /* Wild guess at number of output symbols.  realloc'd as needed.  */
10892       amt = 2 * max_sym_count + elf_numsections (abfd) + 1000;
10893       flinfo.shndxbuf_size = amt;
10894       amt *= sizeof (Elf_External_Sym_Shndx);
10895       flinfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
10896       if (flinfo.symshndxbuf == NULL)
10897         goto error_return;
10898     }
10899
10900   /* Start writing out the symbol table.  The first symbol is always a
10901      dummy symbol.  */
10902   if (info->strip != strip_all
10903       || emit_relocs)
10904     {
10905       elfsym.st_value = 0;
10906       elfsym.st_size = 0;
10907       elfsym.st_info = 0;
10908       elfsym.st_other = 0;
10909       elfsym.st_shndx = SHN_UNDEF;
10910       elfsym.st_target_internal = 0;
10911       if (elf_link_output_sym (&flinfo, NULL, &elfsym, bfd_und_section_ptr,
10912                                NULL) != 1)
10913         goto error_return;
10914     }
10915
10916   /* Output a symbol for each section.  We output these even if we are
10917      discarding local symbols, since they are used for relocs.  These
10918      symbols have no names.  We store the index of each one in the
10919      index field of the section, so that we can find it again when
10920      outputting relocs.  */
10921   if (info->strip != strip_all
10922       || emit_relocs)
10923     {
10924       elfsym.st_size = 0;
10925       elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
10926       elfsym.st_other = 0;
10927       elfsym.st_value = 0;
10928       elfsym.st_target_internal = 0;
10929       for (i = 1; i < elf_numsections (abfd); i++)
10930         {
10931           o = bfd_section_from_elf_index (abfd, i);
10932           if (o != NULL)
10933             {
10934               o->target_index = bfd_get_symcount (abfd);
10935               elfsym.st_shndx = i;
10936               if (!info->relocatable)
10937                 elfsym.st_value = o->vma;
10938               if (elf_link_output_sym (&flinfo, NULL, &elfsym, o, NULL) != 1)
10939                 goto error_return;
10940             }
10941         }
10942     }
10943
10944   /* Allocate some memory to hold information read in from the input
10945      files.  */
10946   if (max_contents_size != 0)
10947     {
10948       flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
10949       if (flinfo.contents == NULL)
10950         goto error_return;
10951     }
10952
10953   if (max_external_reloc_size != 0)
10954     {
10955       flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
10956       if (flinfo.external_relocs == NULL)
10957         goto error_return;
10958     }
10959
10960   if (max_internal_reloc_count != 0)
10961     {
10962       amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel;
10963       amt *= sizeof (Elf_Internal_Rela);
10964       flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
10965       if (flinfo.internal_relocs == NULL)
10966         goto error_return;
10967     }
10968
10969   if (max_sym_count != 0)
10970     {
10971       amt = max_sym_count * bed->s->sizeof_sym;
10972       flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
10973       if (flinfo.external_syms == NULL)
10974         goto error_return;
10975
10976       amt = max_sym_count * sizeof (Elf_Internal_Sym);
10977       flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
10978       if (flinfo.internal_syms == NULL)
10979         goto error_return;
10980
10981       amt = max_sym_count * sizeof (long);
10982       flinfo.indices = (long int *) bfd_malloc (amt);
10983       if (flinfo.indices == NULL)
10984         goto error_return;
10985
10986       amt = max_sym_count * sizeof (asection *);
10987       flinfo.sections = (asection **) bfd_malloc (amt);
10988       if (flinfo.sections == NULL)
10989         goto error_return;
10990     }
10991
10992   if (max_sym_shndx_count != 0)
10993     {
10994       amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
10995       flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
10996       if (flinfo.locsym_shndx == NULL)
10997         goto error_return;
10998     }
10999
11000   if (elf_hash_table (info)->tls_sec)
11001     {
11002       bfd_vma base, end = 0;
11003       asection *sec;
11004
11005       for (sec = elf_hash_table (info)->tls_sec;
11006            sec && (sec->flags & SEC_THREAD_LOCAL);
11007            sec = sec->next)
11008         {
11009           bfd_size_type size = sec->size;
11010
11011           if (size == 0
11012               && (sec->flags & SEC_HAS_CONTENTS) == 0)
11013             {
11014               struct bfd_link_order *ord = sec->map_tail.link_order;
11015
11016               if (ord != NULL)
11017                 size = ord->offset + ord->size;
11018             }
11019           end = sec->vma + size;
11020         }
11021       base = elf_hash_table (info)->tls_sec->vma;
11022       /* Only align end of TLS section if static TLS doesn't have special
11023          alignment requirements.  */
11024       if (bed->static_tls_alignment == 1)
11025         end = align_power (end,
11026                            elf_hash_table (info)->tls_sec->alignment_power);
11027       elf_hash_table (info)->tls_size = end - base;
11028     }
11029
11030   /* Reorder SHF_LINK_ORDER sections.  */
11031   for (o = abfd->sections; o != NULL; o = o->next)
11032     {
11033       if (!elf_fixup_link_order (abfd, o))
11034         return FALSE;
11035     }
11036
11037   /* Since ELF permits relocations to be against local symbols, we
11038      must have the local symbols available when we do the relocations.
11039      Since we would rather only read the local symbols once, and we
11040      would rather not keep them in memory, we handle all the
11041      relocations for a single input file at the same time.
11042
11043      Unfortunately, there is no way to know the total number of local
11044      symbols until we have seen all of them, and the local symbol
11045      indices precede the global symbol indices.  This means that when
11046      we are generating relocatable output, and we see a reloc against
11047      a global symbol, we can not know the symbol index until we have
11048      finished examining all the local symbols to see which ones we are
11049      going to output.  To deal with this, we keep the relocations in
11050      memory, and don't output them until the end of the link.  This is
11051      an unfortunate waste of memory, but I don't see a good way around
11052      it.  Fortunately, it only happens when performing a relocatable
11053      link, which is not the common case.  FIXME: If keep_memory is set
11054      we could write the relocs out and then read them again; I don't
11055      know how bad the memory loss will be.  */
11056
11057   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11058     sub->output_has_begun = FALSE;
11059   for (o = abfd->sections; o != NULL; o = o->next)
11060     {
11061       for (p = o->map_head.link_order; p != NULL; p = p->next)
11062         {
11063           if (p->type == bfd_indirect_link_order
11064               && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
11065                   == bfd_target_elf_flavour)
11066               && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
11067             {
11068               if (! sub->output_has_begun)
11069                 {
11070                   if (! elf_link_input_bfd (&flinfo, sub))
11071                     goto error_return;
11072                   sub->output_has_begun = TRUE;
11073                 }
11074             }
11075           else if (p->type == bfd_section_reloc_link_order
11076                    || p->type == bfd_symbol_reloc_link_order)
11077             {
11078               if (! elf_reloc_link_order (abfd, info, o, p))
11079                 goto error_return;
11080             }
11081           else
11082             {
11083               if (! _bfd_default_link_order (abfd, info, o, p))
11084                 {
11085                   if (p->type == bfd_indirect_link_order
11086                       && (bfd_get_flavour (sub)
11087                           == bfd_target_elf_flavour)
11088                       && (elf_elfheader (sub)->e_ident[EI_CLASS]
11089                           != bed->s->elfclass))
11090                     {
11091                       const char *iclass, *oclass;
11092
11093                       if (bed->s->elfclass == ELFCLASS64)
11094                         {
11095                           iclass = "ELFCLASS32";
11096                           oclass = "ELFCLASS64";
11097                         }
11098                       else
11099                         {
11100                           iclass = "ELFCLASS64";
11101                           oclass = "ELFCLASS32";
11102                         }
11103
11104                       bfd_set_error (bfd_error_wrong_format);
11105                       (*_bfd_error_handler)
11106                         (_("%B: file class %s incompatible with %s"),
11107                          sub, iclass, oclass);
11108                     }
11109
11110                   goto error_return;
11111                 }
11112             }
11113         }
11114     }
11115
11116   /* Free symbol buffer if needed.  */
11117   if (!info->reduce_memory_overheads)
11118     {
11119       for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
11120         if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11121             && elf_tdata (sub)->symbuf)
11122           {
11123             free (elf_tdata (sub)->symbuf);
11124             elf_tdata (sub)->symbuf = NULL;
11125           }
11126     }
11127
11128   /* Output any global symbols that got converted to local in a
11129      version script or due to symbol visibility.  We do this in a
11130      separate step since ELF requires all local symbols to appear
11131      prior to any global symbols.  FIXME: We should only do this if
11132      some global symbols were, in fact, converted to become local.
11133      FIXME: Will this work correctly with the Irix 5 linker?  */
11134   eoinfo.failed = FALSE;
11135   eoinfo.flinfo = &flinfo;
11136   eoinfo.localsyms = TRUE;
11137   eoinfo.need_second_pass = FALSE;
11138   eoinfo.second_pass = FALSE;
11139   eoinfo.file_sym_done = FALSE;
11140   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11141   if (eoinfo.failed)
11142     return FALSE;
11143
11144   if (eoinfo.need_second_pass)
11145     {
11146       eoinfo.second_pass = TRUE;
11147       bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11148       if (eoinfo.failed)
11149         return FALSE;
11150     }
11151
11152   /* If backend needs to output some local symbols not present in the hash
11153      table, do it now.  */
11154   if (bed->elf_backend_output_arch_local_syms)
11155     {
11156       typedef int (*out_sym_func)
11157         (void *, const char *, Elf_Internal_Sym *, asection *,
11158          struct elf_link_hash_entry *);
11159
11160       if (! ((*bed->elf_backend_output_arch_local_syms)
11161              (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym)))
11162         return FALSE;
11163     }
11164
11165   /* That wrote out all the local symbols.  Finish up the symbol table
11166      with the global symbols. Even if we want to strip everything we
11167      can, we still need to deal with those global symbols that got
11168      converted to local in a version script.  */
11169
11170   /* The sh_info field records the index of the first non local symbol.  */
11171   symtab_hdr->sh_info = bfd_get_symcount (abfd);
11172
11173   if (dynamic
11174       && flinfo.dynsym_sec != NULL
11175       && flinfo.dynsym_sec->output_section != bfd_abs_section_ptr)
11176     {
11177       Elf_Internal_Sym sym;
11178       bfd_byte *dynsym = flinfo.dynsym_sec->contents;
11179       long last_local = 0;
11180
11181       /* Write out the section symbols for the output sections.  */
11182       if (info->shared || elf_hash_table (info)->is_relocatable_executable)
11183         {
11184           asection *s;
11185
11186           sym.st_size = 0;
11187           sym.st_name = 0;
11188           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
11189           sym.st_other = 0;
11190           sym.st_target_internal = 0;
11191
11192           for (s = abfd->sections; s != NULL; s = s->next)
11193             {
11194               int indx;
11195               bfd_byte *dest;
11196               long dynindx;
11197
11198               dynindx = elf_section_data (s)->dynindx;
11199               if (dynindx <= 0)
11200                 continue;
11201               indx = elf_section_data (s)->this_idx;
11202               BFD_ASSERT (indx > 0);
11203               sym.st_shndx = indx;
11204               if (! check_dynsym (abfd, &sym))
11205                 return FALSE;
11206               sym.st_value = s->vma;
11207               dest = dynsym + dynindx * bed->s->sizeof_sym;
11208               if (last_local < dynindx)
11209                 last_local = dynindx;
11210               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
11211             }
11212         }
11213
11214       /* Write out the local dynsyms.  */
11215       if (elf_hash_table (info)->dynlocal)
11216         {
11217           struct elf_link_local_dynamic_entry *e;
11218           for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
11219             {
11220               asection *s;
11221               bfd_byte *dest;
11222
11223               /* Copy the internal symbol and turn off visibility.
11224                  Note that we saved a word of storage and overwrote
11225                  the original st_name with the dynstr_index.  */
11226               sym = e->isym;
11227               sym.st_other &= ~ELF_ST_VISIBILITY (-1);
11228
11229               s = bfd_section_from_elf_index (e->input_bfd,
11230                                               e->isym.st_shndx);
11231               if (s != NULL)
11232                 {
11233                   sym.st_shndx =
11234                     elf_section_data (s->output_section)->this_idx;
11235                   if (! check_dynsym (abfd, &sym))
11236                     return FALSE;
11237                   sym.st_value = (s->output_section->vma
11238                                   + s->output_offset
11239                                   + e->isym.st_value);
11240                 }
11241
11242               if (last_local < e->dynindx)
11243                 last_local = e->dynindx;
11244
11245               dest = dynsym + e->dynindx * bed->s->sizeof_sym;
11246               bed->s->swap_symbol_out (abfd, &sym, dest, 0);
11247             }
11248         }
11249
11250       elf_section_data (flinfo.dynsym_sec->output_section)->this_hdr.sh_info =
11251         last_local + 1;
11252     }
11253
11254   /* We get the global symbols from the hash table.  */
11255   eoinfo.failed = FALSE;
11256   eoinfo.localsyms = FALSE;
11257   eoinfo.flinfo = &flinfo;
11258   bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
11259   if (eoinfo.failed)
11260     return FALSE;
11261
11262   /* If backend needs to output some symbols not present in the hash
11263      table, do it now.  */
11264   if (bed->elf_backend_output_arch_syms)
11265     {
11266       typedef int (*out_sym_func)
11267         (void *, const char *, Elf_Internal_Sym *, asection *,
11268          struct elf_link_hash_entry *);
11269
11270       if (! ((*bed->elf_backend_output_arch_syms)
11271              (abfd, info, &flinfo, (out_sym_func) elf_link_output_sym)))
11272         return FALSE;
11273     }
11274
11275   /* Flush all symbols to the file.  */
11276   if (! elf_link_flush_output_syms (&flinfo, bed))
11277     return FALSE;
11278
11279   /* Now we know the size of the symtab section.  */
11280   off += symtab_hdr->sh_size;
11281
11282   symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
11283   if (symtab_shndx_hdr->sh_name != 0)
11284     {
11285       symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
11286       symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
11287       symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
11288       amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
11289       symtab_shndx_hdr->sh_size = amt;
11290
11291       off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
11292                                                        off, TRUE);
11293
11294       if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
11295           || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
11296         return FALSE;
11297     }
11298
11299
11300   /* Finish up and write out the symbol string table (.strtab)
11301      section.  */
11302   symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
11303   /* sh_name was set in prep_headers.  */
11304   symstrtab_hdr->sh_type = SHT_STRTAB;
11305   symstrtab_hdr->sh_flags = 0;
11306   symstrtab_hdr->sh_addr = 0;
11307   symstrtab_hdr->sh_size = _bfd_stringtab_size (flinfo.symstrtab);
11308   symstrtab_hdr->sh_entsize = 0;
11309   symstrtab_hdr->sh_link = 0;
11310   symstrtab_hdr->sh_info = 0;
11311   /* sh_offset is set just below.  */
11312   symstrtab_hdr->sh_addralign = 1;
11313
11314   off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, TRUE);
11315   elf_next_file_pos (abfd) = off;
11316
11317   if (bfd_get_symcount (abfd) > 0)
11318     {
11319       if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
11320           || ! _bfd_stringtab_emit (abfd, flinfo.symstrtab))
11321         return FALSE;
11322     }
11323
11324   /* Adjust the relocs to have the correct symbol indices.  */
11325   for (o = abfd->sections; o != NULL; o = o->next)
11326     {
11327       struct bfd_elf_section_data *esdo = elf_section_data (o);
11328       if ((o->flags & SEC_RELOC) == 0)
11329         continue;
11330
11331       if (esdo->rel.hdr != NULL)
11332         elf_link_adjust_relocs (abfd, &esdo->rel);
11333       if (esdo->rela.hdr != NULL)
11334         elf_link_adjust_relocs (abfd, &esdo->rela);
11335
11336       /* Set the reloc_count field to 0 to prevent write_relocs from
11337          trying to swap the relocs out itself.  */
11338       o->reloc_count = 0;
11339     }
11340
11341   if (dynamic && info->combreloc && dynobj != NULL)
11342     relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
11343
11344   /* If we are linking against a dynamic object, or generating a
11345      shared library, finish up the dynamic linking information.  */
11346   if (dynamic)
11347     {
11348       bfd_byte *dyncon, *dynconend;
11349
11350       /* Fix up .dynamic entries.  */
11351       o = bfd_get_linker_section (dynobj, ".dynamic");
11352       BFD_ASSERT (o != NULL);
11353
11354       dyncon = o->contents;
11355       dynconend = o->contents + o->size;
11356       for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11357         {
11358           Elf_Internal_Dyn dyn;
11359           const char *name;
11360           unsigned int type;
11361
11362           bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11363
11364           switch (dyn.d_tag)
11365             {
11366             default:
11367               continue;
11368             case DT_NULL:
11369               if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
11370                 {
11371                   switch (elf_section_data (reldyn)->this_hdr.sh_type)
11372                     {
11373                     case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
11374                     case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
11375                     default: continue;
11376                     }
11377                   dyn.d_un.d_val = relativecount;
11378                   relativecount = 0;
11379                   break;
11380                 }
11381               continue;
11382
11383             case DT_INIT:
11384               name = info->init_function;
11385               goto get_sym;
11386             case DT_FINI:
11387               name = info->fini_function;
11388             get_sym:
11389               {
11390                 struct elf_link_hash_entry *h;
11391
11392                 h = elf_link_hash_lookup (elf_hash_table (info), name,
11393                                           FALSE, FALSE, TRUE);
11394                 if (h != NULL
11395                     && (h->root.type == bfd_link_hash_defined
11396                         || h->root.type == bfd_link_hash_defweak))
11397                   {
11398                     dyn.d_un.d_ptr = h->root.u.def.value;
11399                     o = h->root.u.def.section;
11400                     if (o->output_section != NULL)
11401                       dyn.d_un.d_ptr += (o->output_section->vma
11402                                          + o->output_offset);
11403                     else
11404                       {
11405                         /* The symbol is imported from another shared
11406                            library and does not apply to this one.  */
11407                         dyn.d_un.d_ptr = 0;
11408                       }
11409                     break;
11410                   }
11411               }
11412               continue;
11413
11414             case DT_PREINIT_ARRAYSZ:
11415               name = ".preinit_array";
11416               goto get_size;
11417             case DT_INIT_ARRAYSZ:
11418               name = ".init_array";
11419               goto get_size;
11420             case DT_FINI_ARRAYSZ:
11421               name = ".fini_array";
11422             get_size:
11423               o = bfd_get_section_by_name (abfd, name);
11424               if (o == NULL)
11425                 {
11426                   (*_bfd_error_handler)
11427                     (_("%B: could not find output section %s"), abfd, name);
11428                   goto error_return;
11429                 }
11430               if (o->size == 0)
11431                 (*_bfd_error_handler)
11432                   (_("warning: %s section has zero size"), name);
11433               dyn.d_un.d_val = o->size;
11434               break;
11435
11436             case DT_PREINIT_ARRAY:
11437               name = ".preinit_array";
11438               goto get_vma;
11439             case DT_INIT_ARRAY:
11440               name = ".init_array";
11441               goto get_vma;
11442             case DT_FINI_ARRAY:
11443               name = ".fini_array";
11444               goto get_vma;
11445
11446             case DT_HASH:
11447               name = ".hash";
11448               goto get_vma;
11449             case DT_GNU_HASH:
11450               name = ".gnu.hash";
11451               goto get_vma;
11452             case DT_STRTAB:
11453               name = ".dynstr";
11454               goto get_vma;
11455             case DT_SYMTAB:
11456               name = ".dynsym";
11457               goto get_vma;
11458             case DT_VERDEF:
11459               name = ".gnu.version_d";
11460               goto get_vma;
11461             case DT_VERNEED:
11462               name = ".gnu.version_r";
11463               goto get_vma;
11464             case DT_VERSYM:
11465               name = ".gnu.version";
11466             get_vma:
11467               o = bfd_get_section_by_name (abfd, name);
11468               if (o == NULL)
11469                 {
11470                   (*_bfd_error_handler)
11471                     (_("%B: could not find output section %s"), abfd, name);
11472                   goto error_return;
11473                 }
11474               if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE)
11475                 {
11476                   (*_bfd_error_handler)
11477                     (_("warning: section '%s' is being made into a note"), name);
11478                   bfd_set_error (bfd_error_nonrepresentable_section);
11479                   goto error_return;
11480                 }
11481               dyn.d_un.d_ptr = o->vma;
11482               break;
11483
11484             case DT_REL:
11485             case DT_RELA:
11486             case DT_RELSZ:
11487             case DT_RELASZ:
11488               if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
11489                 type = SHT_REL;
11490               else
11491                 type = SHT_RELA;
11492               dyn.d_un.d_val = 0;
11493               dyn.d_un.d_ptr = 0;
11494               for (i = 1; i < elf_numsections (abfd); i++)
11495                 {
11496                   Elf_Internal_Shdr *hdr;
11497
11498                   hdr = elf_elfsections (abfd)[i];
11499                   if (hdr->sh_type == type
11500                       && (hdr->sh_flags & SHF_ALLOC) != 0)
11501                     {
11502                       if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
11503                         dyn.d_un.d_val += hdr->sh_size;
11504                       else
11505                         {
11506                           if (dyn.d_un.d_ptr == 0
11507                               || hdr->sh_addr < dyn.d_un.d_ptr)
11508                             dyn.d_un.d_ptr = hdr->sh_addr;
11509                         }
11510                     }
11511                 }
11512               break;
11513             }
11514           bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
11515         }
11516     }
11517
11518   /* If we have created any dynamic sections, then output them.  */
11519   if (dynobj != NULL)
11520     {
11521       if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
11522         goto error_return;
11523
11524       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
11525       if (((info->warn_shared_textrel && info->shared)
11526            || info->error_textrel)
11527           && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
11528         {
11529           bfd_byte *dyncon, *dynconend;
11530
11531           dyncon = o->contents;
11532           dynconend = o->contents + o->size;
11533           for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
11534             {
11535               Elf_Internal_Dyn dyn;
11536
11537               bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
11538
11539               if (dyn.d_tag == DT_TEXTREL)
11540                 {
11541                   if (info->error_textrel)
11542                     info->callbacks->einfo
11543                       (_("%P%X: read-only segment has dynamic relocations.\n"));
11544                   else
11545                     info->callbacks->einfo
11546                       (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
11547                   break;
11548                 }
11549             }
11550         }
11551
11552       for (o = dynobj->sections; o != NULL; o = o->next)
11553         {
11554           if ((o->flags & SEC_HAS_CONTENTS) == 0
11555               || o->size == 0
11556               || o->output_section == bfd_abs_section_ptr)
11557             continue;
11558           if ((o->flags & SEC_LINKER_CREATED) == 0)
11559             {
11560               /* At this point, we are only interested in sections
11561                  created by _bfd_elf_link_create_dynamic_sections.  */
11562               continue;
11563             }
11564           if (elf_hash_table (info)->stab_info.stabstr == o)
11565             continue;
11566           if (elf_hash_table (info)->eh_info.hdr_sec == o)
11567             continue;
11568           if (strcmp (o->name, ".dynstr") != 0)
11569             {
11570               /* FIXME: octets_per_byte.  */
11571               if (! bfd_set_section_contents (abfd, o->output_section,
11572                                               o->contents,
11573                                               (file_ptr) o->output_offset,
11574                                               o->size))
11575                 goto error_return;
11576             }
11577           else
11578             {
11579               /* The contents of the .dynstr section are actually in a
11580                  stringtab.  */
11581               off = elf_section_data (o->output_section)->this_hdr.sh_offset;
11582               if (bfd_seek (abfd, off, SEEK_SET) != 0
11583                   || ! _bfd_elf_strtab_emit (abfd,
11584                                              elf_hash_table (info)->dynstr))
11585                 goto error_return;
11586             }
11587         }
11588     }
11589
11590   if (info->relocatable)
11591     {
11592       bfd_boolean failed = FALSE;
11593
11594       bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
11595       if (failed)
11596         goto error_return;
11597     }
11598
11599   /* If we have optimized stabs strings, output them.  */
11600   if (elf_hash_table (info)->stab_info.stabstr != NULL)
11601     {
11602       if (! _bfd_write_stab_strings (abfd, &elf_hash_table (info)->stab_info))
11603         goto error_return;
11604     }
11605
11606   if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
11607     goto error_return;
11608
11609   elf_final_link_free (abfd, &flinfo);
11610
11611   elf_linker (abfd) = TRUE;
11612
11613   if (attr_section)
11614     {
11615       bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
11616       if (contents == NULL)
11617         return FALSE;   /* Bail out and fail.  */
11618       bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
11619       bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
11620       free (contents);
11621     }
11622
11623   return TRUE;
11624
11625  error_return:
11626   elf_final_link_free (abfd, &flinfo);
11627   return FALSE;
11628 }
11629 \f
11630 /* Initialize COOKIE for input bfd ABFD.  */
11631
11632 static bfd_boolean
11633 init_reloc_cookie (struct elf_reloc_cookie *cookie,
11634                    struct bfd_link_info *info, bfd *abfd)
11635 {
11636   Elf_Internal_Shdr *symtab_hdr;
11637   const struct elf_backend_data *bed;
11638
11639   bed = get_elf_backend_data (abfd);
11640   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11641
11642   cookie->abfd = abfd;
11643   cookie->sym_hashes = elf_sym_hashes (abfd);
11644   cookie->bad_symtab = elf_bad_symtab (abfd);
11645   if (cookie->bad_symtab)
11646     {
11647       cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
11648       cookie->extsymoff = 0;
11649     }
11650   else
11651     {
11652       cookie->locsymcount = symtab_hdr->sh_info;
11653       cookie->extsymoff = symtab_hdr->sh_info;
11654     }
11655
11656   if (bed->s->arch_size == 32)
11657     cookie->r_sym_shift = 8;
11658   else
11659     cookie->r_sym_shift = 32;
11660
11661   cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
11662   if (cookie->locsyms == NULL && cookie->locsymcount != 0)
11663     {
11664       cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
11665                                               cookie->locsymcount, 0,
11666                                               NULL, NULL, NULL);
11667       if (cookie->locsyms == NULL)
11668         {
11669           info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
11670           return FALSE;
11671         }
11672       if (info->keep_memory)
11673         symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
11674     }
11675   return TRUE;
11676 }
11677
11678 /* Free the memory allocated by init_reloc_cookie, if appropriate.  */
11679
11680 static void
11681 fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
11682 {
11683   Elf_Internal_Shdr *symtab_hdr;
11684
11685   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11686   if (cookie->locsyms != NULL
11687       && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
11688     free (cookie->locsyms);
11689 }
11690
11691 /* Initialize the relocation information in COOKIE for input section SEC
11692    of input bfd ABFD.  */
11693
11694 static bfd_boolean
11695 init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11696                         struct bfd_link_info *info, bfd *abfd,
11697                         asection *sec)
11698 {
11699   const struct elf_backend_data *bed;
11700
11701   if (sec->reloc_count == 0)
11702     {
11703       cookie->rels = NULL;
11704       cookie->relend = NULL;
11705     }
11706   else
11707     {
11708       bed = get_elf_backend_data (abfd);
11709
11710       cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
11711                                                 info->keep_memory);
11712       if (cookie->rels == NULL)
11713         return FALSE;
11714       cookie->rel = cookie->rels;
11715       cookie->relend = (cookie->rels
11716                         + sec->reloc_count * bed->s->int_rels_per_ext_rel);
11717     }
11718   cookie->rel = cookie->rels;
11719   return TRUE;
11720 }
11721
11722 /* Free the memory allocated by init_reloc_cookie_rels,
11723    if appropriate.  */
11724
11725 static void
11726 fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
11727                         asection *sec)
11728 {
11729   if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
11730     free (cookie->rels);
11731 }
11732
11733 /* Initialize the whole of COOKIE for input section SEC.  */
11734
11735 static bfd_boolean
11736 init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11737                                struct bfd_link_info *info,
11738                                asection *sec)
11739 {
11740   if (!init_reloc_cookie (cookie, info, sec->owner))
11741     goto error1;
11742   if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
11743     goto error2;
11744   return TRUE;
11745
11746  error2:
11747   fini_reloc_cookie (cookie, sec->owner);
11748  error1:
11749   return FALSE;
11750 }
11751
11752 /* Free the memory allocated by init_reloc_cookie_for_section,
11753    if appropriate.  */
11754
11755 static void
11756 fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
11757                                asection *sec)
11758 {
11759   fini_reloc_cookie_rels (cookie, sec);
11760   fini_reloc_cookie (cookie, sec->owner);
11761 }
11762 \f
11763 /* Garbage collect unused sections.  */
11764
11765 /* Default gc_mark_hook.  */
11766
11767 asection *
11768 _bfd_elf_gc_mark_hook (asection *sec,
11769                        struct bfd_link_info *info ATTRIBUTE_UNUSED,
11770                        Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
11771                        struct elf_link_hash_entry *h,
11772                        Elf_Internal_Sym *sym)
11773 {
11774   const char *sec_name;
11775
11776   if (h != NULL)
11777     {
11778       switch (h->root.type)
11779         {
11780         case bfd_link_hash_defined:
11781         case bfd_link_hash_defweak:
11782           return h->root.u.def.section;
11783
11784         case bfd_link_hash_common:
11785           return h->root.u.c.p->section;
11786
11787         case bfd_link_hash_undefined:
11788         case bfd_link_hash_undefweak:
11789           /* To work around a glibc bug, keep all XXX input sections
11790              when there is an as yet undefined reference to __start_XXX
11791              or __stop_XXX symbols.  The linker will later define such
11792              symbols for orphan input sections that have a name
11793              representable as a C identifier.  */
11794           if (strncmp (h->root.root.string, "__start_", 8) == 0)
11795             sec_name = h->root.root.string + 8;
11796           else if (strncmp (h->root.root.string, "__stop_", 7) == 0)
11797             sec_name = h->root.root.string + 7;
11798           else
11799             sec_name = NULL;
11800
11801           if (sec_name && *sec_name != '\0')
11802             {
11803               bfd *i;
11804
11805               for (i = info->input_bfds; i; i = i->link.next)
11806                 {
11807                   sec = bfd_get_section_by_name (i, sec_name);
11808                   if (sec)
11809                     sec->flags |= SEC_KEEP;
11810                 }
11811             }
11812           break;
11813
11814         default:
11815           break;
11816         }
11817     }
11818   else
11819     return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
11820
11821   return NULL;
11822 }
11823
11824 /* COOKIE->rel describes a relocation against section SEC, which is
11825    a section we've decided to keep.  Return the section that contains
11826    the relocation symbol, or NULL if no section contains it.  */
11827
11828 asection *
11829 _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
11830                        elf_gc_mark_hook_fn gc_mark_hook,
11831                        struct elf_reloc_cookie *cookie)
11832 {
11833   unsigned long r_symndx;
11834   struct elf_link_hash_entry *h;
11835
11836   r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
11837   if (r_symndx == STN_UNDEF)
11838     return NULL;
11839
11840   if (r_symndx >= cookie->locsymcount
11841       || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
11842     {
11843       h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
11844       while (h->root.type == bfd_link_hash_indirect
11845              || h->root.type == bfd_link_hash_warning)
11846         h = (struct elf_link_hash_entry *) h->root.u.i.link;
11847       h->mark = 1;
11848       /* If this symbol is weak and there is a non-weak definition, we
11849          keep the non-weak definition because many backends put
11850          dynamic reloc info on the non-weak definition for code
11851          handling copy relocs.  */
11852       if (h->u.weakdef != NULL)
11853         h->u.weakdef->mark = 1;
11854       return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
11855     }
11856
11857   return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
11858                           &cookie->locsyms[r_symndx]);
11859 }
11860
11861 /* COOKIE->rel describes a relocation against section SEC, which is
11862    a section we've decided to keep.  Mark the section that contains
11863    the relocation symbol.  */
11864
11865 bfd_boolean
11866 _bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
11867                         asection *sec,
11868                         elf_gc_mark_hook_fn gc_mark_hook,
11869                         struct elf_reloc_cookie *cookie)
11870 {
11871   asection *rsec;
11872
11873   rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
11874   if (rsec && !rsec->gc_mark)
11875     {
11876       if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
11877           || (rsec->owner->flags & DYNAMIC) != 0)
11878         rsec->gc_mark = 1;
11879       else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
11880         return FALSE;
11881     }
11882   return TRUE;
11883 }
11884
11885 /* The mark phase of garbage collection.  For a given section, mark
11886    it and any sections in this section's group, and all the sections
11887    which define symbols to which it refers.  */
11888
11889 bfd_boolean
11890 _bfd_elf_gc_mark (struct bfd_link_info *info,
11891                   asection *sec,
11892                   elf_gc_mark_hook_fn gc_mark_hook)
11893 {
11894   bfd_boolean ret;
11895   asection *group_sec, *eh_frame;
11896
11897   sec->gc_mark = 1;
11898
11899   /* Mark all the sections in the group.  */
11900   group_sec = elf_section_data (sec)->next_in_group;
11901   if (group_sec && !group_sec->gc_mark)
11902     if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
11903       return FALSE;
11904
11905   /* Look through the section relocs.  */
11906   ret = TRUE;
11907   eh_frame = elf_eh_frame_section (sec->owner);
11908   if ((sec->flags & SEC_RELOC) != 0
11909       && sec->reloc_count > 0
11910       && sec != eh_frame)
11911     {
11912       struct elf_reloc_cookie cookie;
11913
11914       if (!init_reloc_cookie_for_section (&cookie, info, sec))
11915         ret = FALSE;
11916       else
11917         {
11918           for (; cookie.rel < cookie.relend; cookie.rel++)
11919             if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
11920               {
11921                 ret = FALSE;
11922                 break;
11923               }
11924           fini_reloc_cookie_for_section (&cookie, sec);
11925         }
11926     }
11927
11928   if (ret && eh_frame && elf_fde_list (sec))
11929     {
11930       struct elf_reloc_cookie cookie;
11931
11932       if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
11933         ret = FALSE;
11934       else
11935         {
11936           if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
11937                                       gc_mark_hook, &cookie))
11938             ret = FALSE;
11939           fini_reloc_cookie_for_section (&cookie, eh_frame);
11940         }
11941     }
11942
11943   return ret;
11944 }
11945
11946 /* Keep debug and special sections.  */
11947
11948 bfd_boolean
11949 _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
11950                                  elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
11951 {
11952   bfd *ibfd;
11953
11954   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
11955     {
11956       asection *isec;
11957       bfd_boolean some_kept;
11958       bfd_boolean debug_frag_seen;
11959
11960       if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
11961         continue;
11962
11963       /* Ensure all linker created sections are kept,
11964          see if any other section is already marked,
11965          and note if we have any fragmented debug sections.  */
11966       debug_frag_seen = some_kept = FALSE;
11967       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
11968         {
11969           if ((isec->flags & SEC_LINKER_CREATED) != 0)
11970             isec->gc_mark = 1;
11971           else if (isec->gc_mark)
11972             some_kept = TRUE;
11973
11974           if (debug_frag_seen == FALSE
11975               && (isec->flags & SEC_DEBUGGING)
11976               && CONST_STRNEQ (isec->name, ".debug_line."))
11977             debug_frag_seen = TRUE;
11978         }
11979
11980       /* If no section in this file will be kept, then we can
11981          toss out the debug and special sections.  */
11982       if (!some_kept)
11983         continue;
11984
11985       /* Keep debug and special sections like .comment when they are
11986          not part of a group, or when we have single-member groups.  */
11987       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
11988         if ((elf_next_in_group (isec) == NULL
11989              || elf_next_in_group (isec) == isec)
11990             && ((isec->flags & SEC_DEBUGGING) != 0
11991                 || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0))
11992           isec->gc_mark = 1;
11993
11994       if (! debug_frag_seen)
11995         continue;
11996
11997       /* Look for CODE sections which are going to be discarded,
11998          and find and discard any fragmented debug sections which
11999          are associated with that code section.  */
12000       for (isec = ibfd->sections; isec != NULL; isec = isec->next)
12001         if ((isec->flags & SEC_CODE) != 0
12002             && isec->gc_mark == 0)
12003           {
12004             unsigned int ilen;
12005             asection *dsec;
12006
12007             ilen = strlen (isec->name);
12008
12009             /* Association is determined by the name of the debug section
12010                containing the name of the code section as a suffix.  For
12011                example .debug_line.text.foo is a debug section associated
12012                with .text.foo.  */
12013             for (dsec = ibfd->sections; dsec != NULL; dsec = dsec->next)
12014               {
12015                 unsigned int dlen;
12016
12017                 if (dsec->gc_mark == 0
12018                     || (dsec->flags & SEC_DEBUGGING) == 0)
12019                   continue;
12020
12021                 dlen = strlen (dsec->name);
12022
12023                 if (dlen > ilen
12024                     && strncmp (dsec->name + (dlen - ilen),
12025                                 isec->name, ilen) == 0)
12026                   {
12027                     dsec->gc_mark = 0;
12028                     break;
12029                   }
12030               }
12031           }
12032     }
12033   return TRUE;
12034 }
12035
12036 /* Sweep symbols in swept sections.  Called via elf_link_hash_traverse.  */
12037
12038 struct elf_gc_sweep_symbol_info
12039 {
12040   struct bfd_link_info *info;
12041   void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
12042                        bfd_boolean);
12043 };
12044
12045 static bfd_boolean
12046 elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
12047 {
12048   if (!h->mark
12049       && (((h->root.type == bfd_link_hash_defined
12050             || h->root.type == bfd_link_hash_defweak)
12051            && !(h->def_regular
12052                 && h->root.u.def.section->gc_mark))
12053           || h->root.type == bfd_link_hash_undefined
12054           || h->root.type == bfd_link_hash_undefweak))
12055     {
12056       struct elf_gc_sweep_symbol_info *inf;
12057
12058       inf = (struct elf_gc_sweep_symbol_info *) data;
12059       (*inf->hide_symbol) (inf->info, h, TRUE);
12060       h->def_regular = 0;
12061       h->ref_regular = 0;
12062       h->ref_regular_nonweak = 0;
12063     }
12064
12065   return TRUE;
12066 }
12067
12068 /* The sweep phase of garbage collection.  Remove all garbage sections.  */
12069
12070 typedef bfd_boolean (*gc_sweep_hook_fn)
12071   (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
12072
12073 static bfd_boolean
12074 elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
12075 {
12076   bfd *sub;
12077   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12078   gc_sweep_hook_fn gc_sweep_hook = bed->gc_sweep_hook;
12079   unsigned long section_sym_count;
12080   struct elf_gc_sweep_symbol_info sweep_info;
12081
12082   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12083     {
12084       asection *o;
12085
12086       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
12087         continue;
12088
12089       for (o = sub->sections; o != NULL; o = o->next)
12090         {
12091           /* When any section in a section group is kept, we keep all
12092              sections in the section group.  If the first member of
12093              the section group is excluded, we will also exclude the
12094              group section.  */
12095           if (o->flags & SEC_GROUP)
12096             {
12097               asection *first = elf_next_in_group (o);
12098               o->gc_mark = first->gc_mark;
12099             }
12100
12101           if (o->gc_mark)
12102             continue;
12103
12104           /* Skip sweeping sections already excluded.  */
12105           if (o->flags & SEC_EXCLUDE)
12106             continue;
12107
12108           /* Since this is early in the link process, it is simple
12109              to remove a section from the output.  */
12110           o->flags |= SEC_EXCLUDE;
12111
12112           if (info->print_gc_sections && o->size != 0)
12113             _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), sub, o->name);
12114
12115           /* But we also have to update some of the relocation
12116              info we collected before.  */
12117           if (gc_sweep_hook
12118               && (o->flags & SEC_RELOC) != 0
12119               && o->reloc_count != 0
12120               && !((info->strip == strip_all || info->strip == strip_debugger)
12121                    && (o->flags & SEC_DEBUGGING) != 0)
12122               && !bfd_is_abs_section (o->output_section))
12123             {
12124               Elf_Internal_Rela *internal_relocs;
12125               bfd_boolean r;
12126
12127               internal_relocs
12128                 = _bfd_elf_link_read_relocs (o->owner, o, NULL, NULL,
12129                                              info->keep_memory);
12130               if (internal_relocs == NULL)
12131                 return FALSE;
12132
12133               r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
12134
12135               if (elf_section_data (o)->relocs != internal_relocs)
12136                 free (internal_relocs);
12137
12138               if (!r)
12139                 return FALSE;
12140             }
12141         }
12142     }
12143
12144   /* Remove the symbols that were in the swept sections from the dynamic
12145      symbol table.  GCFIXME: Anyone know how to get them out of the
12146      static symbol table as well?  */
12147   sweep_info.info = info;
12148   sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
12149   elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
12150                           &sweep_info);
12151
12152   _bfd_elf_link_renumber_dynsyms (abfd, info, &section_sym_count);
12153   return TRUE;
12154 }
12155
12156 /* Propagate collected vtable information.  This is called through
12157    elf_link_hash_traverse.  */
12158
12159 static bfd_boolean
12160 elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
12161 {
12162   /* Those that are not vtables.  */
12163   if (h->vtable == NULL || h->vtable->parent == NULL)
12164     return TRUE;
12165
12166   /* Those vtables that do not have parents, we cannot merge.  */
12167   if (h->vtable->parent == (struct elf_link_hash_entry *) -1)
12168     return TRUE;
12169
12170   /* If we've already been done, exit.  */
12171   if (h->vtable->used && h->vtable->used[-1])
12172     return TRUE;
12173
12174   /* Make sure the parent's table is up to date.  */
12175   elf_gc_propagate_vtable_entries_used (h->vtable->parent, okp);
12176
12177   if (h->vtable->used == NULL)
12178     {
12179       /* None of this table's entries were referenced.  Re-use the
12180          parent's table.  */
12181       h->vtable->used = h->vtable->parent->vtable->used;
12182       h->vtable->size = h->vtable->parent->vtable->size;
12183     }
12184   else
12185     {
12186       size_t n;
12187       bfd_boolean *cu, *pu;
12188
12189       /* Or the parent's entries into ours.  */
12190       cu = h->vtable->used;
12191       cu[-1] = TRUE;
12192       pu = h->vtable->parent->vtable->used;
12193       if (pu != NULL)
12194         {
12195           const struct elf_backend_data *bed;
12196           unsigned int log_file_align;
12197
12198           bed = get_elf_backend_data (h->root.u.def.section->owner);
12199           log_file_align = bed->s->log_file_align;
12200           n = h->vtable->parent->vtable->size >> log_file_align;
12201           while (n--)
12202             {
12203               if (*pu)
12204                 *cu = TRUE;
12205               pu++;
12206               cu++;
12207             }
12208         }
12209     }
12210
12211   return TRUE;
12212 }
12213
12214 static bfd_boolean
12215 elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
12216 {
12217   asection *sec;
12218   bfd_vma hstart, hend;
12219   Elf_Internal_Rela *relstart, *relend, *rel;
12220   const struct elf_backend_data *bed;
12221   unsigned int log_file_align;
12222
12223   /* Take care of both those symbols that do not describe vtables as
12224      well as those that are not loaded.  */
12225   if (h->vtable == NULL || h->vtable->parent == NULL)
12226     return TRUE;
12227
12228   BFD_ASSERT (h->root.type == bfd_link_hash_defined
12229               || h->root.type == bfd_link_hash_defweak);
12230
12231   sec = h->root.u.def.section;
12232   hstart = h->root.u.def.value;
12233   hend = hstart + h->size;
12234
12235   relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
12236   if (!relstart)
12237     return *(bfd_boolean *) okp = FALSE;
12238   bed = get_elf_backend_data (sec->owner);
12239   log_file_align = bed->s->log_file_align;
12240
12241   relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;
12242
12243   for (rel = relstart; rel < relend; ++rel)
12244     if (rel->r_offset >= hstart && rel->r_offset < hend)
12245       {
12246         /* If the entry is in use, do nothing.  */
12247         if (h->vtable->used
12248             && (rel->r_offset - hstart) < h->vtable->size)
12249           {
12250             bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
12251             if (h->vtable->used[entry])
12252               continue;
12253           }
12254         /* Otherwise, kill it.  */
12255         rel->r_offset = rel->r_info = rel->r_addend = 0;
12256       }
12257
12258   return TRUE;
12259 }
12260
12261 /* Mark sections containing dynamically referenced symbols.  When
12262    building shared libraries, we must assume that any visible symbol is
12263    referenced.  */
12264
12265 bfd_boolean
12266 bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
12267 {
12268   struct bfd_link_info *info = (struct bfd_link_info *) inf;
12269   struct bfd_elf_dynamic_list *d = info->dynamic_list;
12270
12271   if ((h->root.type == bfd_link_hash_defined
12272        || h->root.type == bfd_link_hash_defweak)
12273       && (h->ref_dynamic
12274           || (h->def_regular
12275               && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
12276               && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
12277               && (!info->executable
12278                   || info->export_dynamic
12279                   || (h->dynamic
12280                       && d != NULL
12281                       && (*d->match) (&d->head, NULL, h->root.root.string)))
12282               && (strchr (h->root.root.string, ELF_VER_CHR) != NULL
12283                   || !bfd_hide_sym_by_version (info->version_info,
12284                                                h->root.root.string)))))
12285     h->root.u.def.section->flags |= SEC_KEEP;
12286
12287   return TRUE;
12288 }
12289
12290 /* Keep all sections containing symbols undefined on the command-line,
12291    and the section containing the entry symbol.  */
12292
12293 void
12294 _bfd_elf_gc_keep (struct bfd_link_info *info)
12295 {
12296   struct bfd_sym_chain *sym;
12297
12298   for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
12299     {
12300       struct elf_link_hash_entry *h;
12301
12302       h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
12303                                 FALSE, FALSE, FALSE);
12304
12305       if (h != NULL
12306           && (h->root.type == bfd_link_hash_defined
12307               || h->root.type == bfd_link_hash_defweak)
12308           && !bfd_is_abs_section (h->root.u.def.section))
12309         h->root.u.def.section->flags |= SEC_KEEP;
12310     }
12311 }
12312
12313 /* Do mark and sweep of unused sections.  */
12314
12315 bfd_boolean
12316 bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
12317 {
12318   bfd_boolean ok = TRUE;
12319   bfd *sub;
12320   elf_gc_mark_hook_fn gc_mark_hook;
12321   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12322   struct elf_link_hash_table *htab;
12323
12324   if (!bed->can_gc_sections
12325       || !is_elf_hash_table (info->hash))
12326     {
12327       (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
12328       return TRUE;
12329     }
12330
12331   bed->gc_keep (info);
12332   htab = elf_hash_table (info);
12333
12334   /* Try to parse each bfd's .eh_frame section.  Point elf_eh_frame_section
12335      at the .eh_frame section if we can mark the FDEs individually.  */
12336   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12337     {
12338       asection *sec;
12339       struct elf_reloc_cookie cookie;
12340
12341       sec = bfd_get_section_by_name (sub, ".eh_frame");
12342       while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
12343         {
12344           _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
12345           if (elf_section_data (sec)->sec_info
12346               && (sec->flags & SEC_LINKER_CREATED) == 0)
12347             elf_eh_frame_section (sub) = sec;
12348           fini_reloc_cookie_for_section (&cookie, sec);
12349           sec = bfd_get_next_section_by_name (sec);
12350         }
12351     }
12352
12353   /* Apply transitive closure to the vtable entry usage info.  */
12354   elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
12355   if (!ok)
12356     return FALSE;
12357
12358   /* Kill the vtable relocations that were not used.  */
12359   elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
12360   if (!ok)
12361     return FALSE;
12362
12363   /* Mark dynamically referenced symbols.  */
12364   if (htab->dynamic_sections_created)
12365     elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
12366
12367   /* Grovel through relocs to find out who stays ...  */
12368   gc_mark_hook = bed->gc_mark_hook;
12369   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12370     {
12371       asection *o;
12372
12373       if (bfd_get_flavour (sub) != bfd_target_elf_flavour)
12374         continue;
12375
12376       /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep).
12377          Also treat note sections as a root, if the section is not part
12378          of a group.  */
12379       for (o = sub->sections; o != NULL; o = o->next)
12380         if (!o->gc_mark
12381             && (o->flags & SEC_EXCLUDE) == 0
12382             && ((o->flags & SEC_KEEP) != 0
12383                 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
12384                     && elf_next_in_group (o) == NULL )))
12385           {
12386             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12387               return FALSE;
12388           }
12389     }
12390
12391   /* Allow the backend to mark additional target specific sections.  */
12392   bed->gc_mark_extra_sections (info, gc_mark_hook);
12393
12394   /* ... and mark SEC_EXCLUDE for those that go.  */
12395   return elf_gc_sweep (abfd, info);
12396 }
12397 \f
12398 /* Called from check_relocs to record the existence of a VTINHERIT reloc.  */
12399
12400 bfd_boolean
12401 bfd_elf_gc_record_vtinherit (bfd *abfd,
12402                              asection *sec,
12403                              struct elf_link_hash_entry *h,
12404                              bfd_vma offset)
12405 {
12406   struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
12407   struct elf_link_hash_entry **search, *child;
12408   bfd_size_type extsymcount;
12409   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12410
12411   /* The sh_info field of the symtab header tells us where the
12412      external symbols start.  We don't care about the local symbols at
12413      this point.  */
12414   extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
12415   if (!elf_bad_symtab (abfd))
12416     extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
12417
12418   sym_hashes = elf_sym_hashes (abfd);
12419   sym_hashes_end = sym_hashes + extsymcount;
12420
12421   /* Hunt down the child symbol, which is in this section at the same
12422      offset as the relocation.  */
12423   for (search = sym_hashes; search != sym_hashes_end; ++search)
12424     {
12425       if ((child = *search) != NULL
12426           && (child->root.type == bfd_link_hash_defined
12427               || child->root.type == bfd_link_hash_defweak)
12428           && child->root.u.def.section == sec
12429           && child->root.u.def.value == offset)
12430         goto win;
12431     }
12432
12433   (*_bfd_error_handler) ("%B: %A+%lu: No symbol found for INHERIT",
12434                          abfd, sec, (unsigned long) offset);
12435   bfd_set_error (bfd_error_invalid_operation);
12436   return FALSE;
12437
12438  win:
12439   if (!child->vtable)
12440     {
12441       child->vtable = (struct elf_link_virtual_table_entry *)
12442           bfd_zalloc (abfd, sizeof (*child->vtable));
12443       if (!child->vtable)
12444         return FALSE;
12445     }
12446   if (!h)
12447     {
12448       /* This *should* only be the absolute section.  It could potentially
12449          be that someone has defined a non-global vtable though, which
12450          would be bad.  It isn't worth paging in the local symbols to be
12451          sure though; that case should simply be handled by the assembler.  */
12452
12453       child->vtable->parent = (struct elf_link_hash_entry *) -1;
12454     }
12455   else
12456     child->vtable->parent = h;
12457
12458   return TRUE;
12459 }
12460
12461 /* Called from check_relocs to record the existence of a VTENTRY reloc.  */
12462
12463 bfd_boolean
12464 bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
12465                            asection *sec ATTRIBUTE_UNUSED,
12466                            struct elf_link_hash_entry *h,
12467                            bfd_vma addend)
12468 {
12469   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12470   unsigned int log_file_align = bed->s->log_file_align;
12471
12472   if (!h->vtable)
12473     {
12474       h->vtable = (struct elf_link_virtual_table_entry *)
12475           bfd_zalloc (abfd, sizeof (*h->vtable));
12476       if (!h->vtable)
12477         return FALSE;
12478     }
12479
12480   if (addend >= h->vtable->size)
12481     {
12482       size_t size, bytes, file_align;
12483       bfd_boolean *ptr = h->vtable->used;
12484
12485       /* While the symbol is undefined, we have to be prepared to handle
12486          a zero size.  */
12487       file_align = 1 << log_file_align;
12488       if (h->root.type == bfd_link_hash_undefined)
12489         size = addend + file_align;
12490       else
12491         {
12492           size = h->size;
12493           if (addend >= size)
12494             {
12495               /* Oops!  We've got a reference past the defined end of
12496                  the table.  This is probably a bug -- shall we warn?  */
12497               size = addend + file_align;
12498             }
12499         }
12500       size = (size + file_align - 1) & -file_align;
12501
12502       /* Allocate one extra entry for use as a "done" flag for the
12503          consolidation pass.  */
12504       bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
12505
12506       if (ptr)
12507         {
12508           ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
12509
12510           if (ptr != NULL)
12511             {
12512               size_t oldbytes;
12513
12514               oldbytes = (((h->vtable->size >> log_file_align) + 1)
12515                           * sizeof (bfd_boolean));
12516               memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
12517             }
12518         }
12519       else
12520         ptr = (bfd_boolean *) bfd_zmalloc (bytes);
12521
12522       if (ptr == NULL)
12523         return FALSE;
12524
12525       /* And arrange for that done flag to be at index -1.  */
12526       h->vtable->used = ptr + 1;
12527       h->vtable->size = size;
12528     }
12529
12530   h->vtable->used[addend >> log_file_align] = TRUE;
12531
12532   return TRUE;
12533 }
12534
12535 /* Map an ELF section header flag to its corresponding string.  */
12536 typedef struct
12537 {
12538   char *flag_name;
12539   flagword flag_value;
12540 } elf_flags_to_name_table;
12541
12542 static elf_flags_to_name_table elf_flags_to_names [] =
12543 {
12544   { "SHF_WRITE", SHF_WRITE },
12545   { "SHF_ALLOC", SHF_ALLOC },
12546   { "SHF_EXECINSTR", SHF_EXECINSTR },
12547   { "SHF_MERGE", SHF_MERGE },
12548   { "SHF_STRINGS", SHF_STRINGS },
12549   { "SHF_INFO_LINK", SHF_INFO_LINK},
12550   { "SHF_LINK_ORDER", SHF_LINK_ORDER},
12551   { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
12552   { "SHF_GROUP", SHF_GROUP },
12553   { "SHF_TLS", SHF_TLS },
12554   { "SHF_MASKOS", SHF_MASKOS },
12555   { "SHF_EXCLUDE", SHF_EXCLUDE },
12556 };
12557
12558 /* Returns TRUE if the section is to be included, otherwise FALSE.  */
12559 bfd_boolean
12560 bfd_elf_lookup_section_flags (struct bfd_link_info *info,
12561                               struct flag_info *flaginfo,
12562                               asection *section)
12563 {
12564   const bfd_vma sh_flags = elf_section_flags (section);
12565
12566   if (!flaginfo->flags_initialized)
12567     {
12568       bfd *obfd = info->output_bfd;
12569       const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12570       struct flag_info_list *tf = flaginfo->flag_list;
12571       int with_hex = 0;
12572       int without_hex = 0;
12573
12574       for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
12575         {
12576           unsigned i;
12577           flagword (*lookup) (char *);
12578
12579           lookup = bed->elf_backend_lookup_section_flags_hook;
12580           if (lookup != NULL)
12581             {
12582               flagword hexval = (*lookup) ((char *) tf->name);
12583
12584               if (hexval != 0)
12585                 {
12586                   if (tf->with == with_flags)
12587                     with_hex |= hexval;
12588                   else if (tf->with == without_flags)
12589                     without_hex |= hexval;
12590                   tf->valid = TRUE;
12591                   continue;
12592                 }
12593             }
12594           for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
12595             {
12596               if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
12597                 {
12598                   if (tf->with == with_flags)
12599                     with_hex |= elf_flags_to_names[i].flag_value;
12600                   else if (tf->with == without_flags)
12601                     without_hex |= elf_flags_to_names[i].flag_value;
12602                   tf->valid = TRUE;
12603                   break;
12604                 }
12605             }
12606           if (!tf->valid)
12607             {
12608               info->callbacks->einfo
12609                 (_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
12610               return FALSE;
12611             }
12612         }
12613       flaginfo->flags_initialized = TRUE;
12614       flaginfo->only_with_flags |= with_hex;
12615       flaginfo->not_with_flags |= without_hex;
12616     }
12617
12618   if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
12619     return FALSE;
12620
12621   if ((flaginfo->not_with_flags & sh_flags) != 0)
12622     return FALSE;
12623
12624   return TRUE;
12625 }
12626
12627 struct alloc_got_off_arg {
12628   bfd_vma gotoff;
12629   struct bfd_link_info *info;
12630 };
12631
12632 /* We need a special top-level link routine to convert got reference counts
12633    to real got offsets.  */
12634
12635 static bfd_boolean
12636 elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
12637 {
12638   struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
12639   bfd *obfd = gofarg->info->output_bfd;
12640   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
12641
12642   if (h->got.refcount > 0)
12643     {
12644       h->got.offset = gofarg->gotoff;
12645       gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
12646     }
12647   else
12648     h->got.offset = (bfd_vma) -1;
12649
12650   return TRUE;
12651 }
12652
12653 /* And an accompanying bit to work out final got entry offsets once
12654    we're done.  Should be called from final_link.  */
12655
12656 bfd_boolean
12657 bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
12658                                         struct bfd_link_info *info)
12659 {
12660   bfd *i;
12661   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12662   bfd_vma gotoff;
12663   struct alloc_got_off_arg gofarg;
12664
12665   BFD_ASSERT (abfd == info->output_bfd);
12666
12667   if (! is_elf_hash_table (info->hash))
12668     return FALSE;
12669
12670   /* The GOT offset is relative to the .got section, but the GOT header is
12671      put into the .got.plt section, if the backend uses it.  */
12672   if (bed->want_got_plt)
12673     gotoff = 0;
12674   else
12675     gotoff = bed->got_header_size;
12676
12677   /* Do the local .got entries first.  */
12678   for (i = info->input_bfds; i; i = i->link.next)
12679     {
12680       bfd_signed_vma *local_got;
12681       bfd_size_type j, locsymcount;
12682       Elf_Internal_Shdr *symtab_hdr;
12683
12684       if (bfd_get_flavour (i) != bfd_target_elf_flavour)
12685         continue;
12686
12687       local_got = elf_local_got_refcounts (i);
12688       if (!local_got)
12689         continue;
12690
12691       symtab_hdr = &elf_tdata (i)->symtab_hdr;
12692       if (elf_bad_symtab (i))
12693         locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12694       else
12695         locsymcount = symtab_hdr->sh_info;
12696
12697       for (j = 0; j < locsymcount; ++j)
12698         {
12699           if (local_got[j] > 0)
12700             {
12701               local_got[j] = gotoff;
12702               gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
12703             }
12704           else
12705             local_got[j] = (bfd_vma) -1;
12706         }
12707     }
12708
12709   /* Then the global .got entries.  .plt refcounts are handled by
12710      adjust_dynamic_symbol  */
12711   gofarg.gotoff = gotoff;
12712   gofarg.info = info;
12713   elf_link_hash_traverse (elf_hash_table (info),
12714                           elf_gc_allocate_got_offsets,
12715                           &gofarg);
12716   return TRUE;
12717 }
12718
12719 /* Many folk need no more in the way of final link than this, once
12720    got entry reference counting is enabled.  */
12721
12722 bfd_boolean
12723 bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
12724 {
12725   if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
12726     return FALSE;
12727
12728   /* Invoke the regular ELF backend linker to do all the work.  */
12729   return bfd_elf_final_link (abfd, info);
12730 }
12731
12732 bfd_boolean
12733 bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
12734 {
12735   struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
12736
12737   if (rcookie->bad_symtab)
12738     rcookie->rel = rcookie->rels;
12739
12740   for (; rcookie->rel < rcookie->relend; rcookie->rel++)
12741     {
12742       unsigned long r_symndx;
12743
12744       if (! rcookie->bad_symtab)
12745         if (rcookie->rel->r_offset > offset)
12746           return FALSE;
12747       if (rcookie->rel->r_offset != offset)
12748         continue;
12749
12750       r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
12751       if (r_symndx == STN_UNDEF)
12752         return TRUE;
12753
12754       if (r_symndx >= rcookie->locsymcount
12755           || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
12756         {
12757           struct elf_link_hash_entry *h;
12758
12759           h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
12760
12761           while (h->root.type == bfd_link_hash_indirect
12762                  || h->root.type == bfd_link_hash_warning)
12763             h = (struct elf_link_hash_entry *) h->root.u.i.link;
12764
12765           if ((h->root.type == bfd_link_hash_defined
12766                || h->root.type == bfd_link_hash_defweak)
12767               && (h->root.u.def.section->owner != rcookie->abfd
12768                   || h->root.u.def.section->kept_section != NULL
12769                   || discarded_section (h->root.u.def.section)))
12770             return TRUE;
12771         }
12772       else
12773         {
12774           /* It's not a relocation against a global symbol,
12775              but it could be a relocation against a local
12776              symbol for a discarded section.  */
12777           asection *isec;
12778           Elf_Internal_Sym *isym;
12779
12780           /* Need to: get the symbol; get the section.  */
12781           isym = &rcookie->locsyms[r_symndx];
12782           isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
12783           if (isec != NULL
12784               && (isec->kept_section != NULL
12785                   || discarded_section (isec)))
12786             return TRUE;
12787         }
12788       return FALSE;
12789     }
12790   return FALSE;
12791 }
12792
12793 /* Discard unneeded references to discarded sections.
12794    Returns -1 on error, 1 if any section's size was changed, 0 if
12795    nothing changed.  This function assumes that the relocations are in
12796    sorted order, which is true for all known assemblers.  */
12797
12798 int
12799 bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
12800 {
12801   struct elf_reloc_cookie cookie;
12802   asection *o;
12803   bfd *abfd;
12804   int changed = 0;
12805
12806   if (info->traditional_format
12807       || !is_elf_hash_table (info->hash))
12808     return 0;
12809
12810   o = bfd_get_section_by_name (output_bfd, ".stab");
12811   if (o != NULL)
12812     {
12813       asection *i;
12814
12815       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12816         {
12817           if (i->size == 0
12818               || i->reloc_count == 0
12819               || i->sec_info_type != SEC_INFO_TYPE_STABS)
12820             continue;
12821
12822           abfd = i->owner;
12823           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12824             continue;
12825
12826           if (!init_reloc_cookie_for_section (&cookie, info, i))
12827             return -1;
12828
12829           if (_bfd_discard_section_stabs (abfd, i,
12830                                           elf_section_data (i)->sec_info,
12831                                           bfd_elf_reloc_symbol_deleted_p,
12832                                           &cookie))
12833             changed = 1;
12834
12835           fini_reloc_cookie_for_section (&cookie, i);
12836         }
12837     }
12838
12839   o = bfd_get_section_by_name (output_bfd, ".eh_frame");
12840   if (o != NULL)
12841     {
12842       asection *i;
12843
12844       for (i = o->map_head.s; i != NULL; i = i->map_head.s)
12845         {
12846           if (i->size == 0)
12847             continue;
12848
12849           abfd = i->owner;
12850           if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12851             continue;
12852
12853           if (!init_reloc_cookie_for_section (&cookie, info, i))
12854             return -1;
12855
12856           _bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
12857           if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
12858                                                  bfd_elf_reloc_symbol_deleted_p,
12859                                                  &cookie))
12860             changed = 1;
12861
12862           fini_reloc_cookie_for_section (&cookie, i);
12863         }
12864     }
12865
12866   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
12867     {
12868       const struct elf_backend_data *bed;
12869
12870       if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
12871         continue;
12872
12873       bed = get_elf_backend_data (abfd);
12874
12875       if (bed->elf_backend_discard_info != NULL)
12876         {
12877           if (!init_reloc_cookie (&cookie, info, abfd))
12878             return -1;
12879
12880           if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
12881             changed = 1;
12882
12883           fini_reloc_cookie (&cookie, abfd);
12884         }
12885     }
12886
12887   if (info->eh_frame_hdr
12888       && !info->relocatable
12889       && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
12890     changed = 1;
12891
12892   return changed;
12893 }
12894
12895 bfd_boolean
12896 _bfd_elf_section_already_linked (bfd *abfd,
12897                                  asection *sec,
12898                                  struct bfd_link_info *info)
12899 {
12900   flagword flags;
12901   const char *name, *key;
12902   struct bfd_section_already_linked *l;
12903   struct bfd_section_already_linked_hash_entry *already_linked_list;
12904
12905   if (sec->output_section == bfd_abs_section_ptr)
12906     return FALSE;
12907
12908   flags = sec->flags;
12909
12910   /* Return if it isn't a linkonce section.  A comdat group section
12911      also has SEC_LINK_ONCE set.  */
12912   if ((flags & SEC_LINK_ONCE) == 0)
12913     return FALSE;
12914
12915   /* Don't put group member sections on our list of already linked
12916      sections.  They are handled as a group via their group section.  */
12917   if (elf_sec_group (sec) != NULL)
12918     return FALSE;
12919
12920   /* For a SHT_GROUP section, use the group signature as the key.  */
12921   name = sec->name;
12922   if ((flags & SEC_GROUP) != 0
12923       && elf_next_in_group (sec) != NULL
12924       && elf_group_name (elf_next_in_group (sec)) != NULL)
12925     key = elf_group_name (elf_next_in_group (sec));
12926   else
12927     {
12928       /* Otherwise we should have a .gnu.linkonce.<type>.<key> section.  */
12929       if (CONST_STRNEQ (name, ".gnu.linkonce.")
12930           && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
12931         key++;
12932       else
12933         /* Must be a user linkonce section that doesn't follow gcc's
12934            naming convention.  In this case we won't be matching
12935            single member groups.  */
12936         key = name;
12937     }
12938
12939   already_linked_list = bfd_section_already_linked_table_lookup (key);
12940
12941   for (l = already_linked_list->entry; l != NULL; l = l->next)
12942     {
12943       /* We may have 2 different types of sections on the list: group
12944          sections with a signature of <key> (<key> is some string),
12945          and linkonce sections named .gnu.linkonce.<type>.<key>.
12946          Match like sections.  LTO plugin sections are an exception.
12947          They are always named .gnu.linkonce.t.<key> and match either
12948          type of section.  */
12949       if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
12950            && ((flags & SEC_GROUP) != 0
12951                || strcmp (name, l->sec->name) == 0))
12952           || (l->sec->owner->flags & BFD_PLUGIN) != 0)
12953         {
12954           /* The section has already been linked.  See if we should
12955              issue a warning.  */
12956           if (!_bfd_handle_already_linked (sec, l, info))
12957             return FALSE;
12958
12959           if (flags & SEC_GROUP)
12960             {
12961               asection *first = elf_next_in_group (sec);
12962               asection *s = first;
12963
12964               while (s != NULL)
12965                 {
12966                   s->output_section = bfd_abs_section_ptr;
12967                   /* Record which group discards it.  */
12968                   s->kept_section = l->sec;
12969                   s = elf_next_in_group (s);
12970                   /* These lists are circular.  */
12971                   if (s == first)
12972                     break;
12973                 }
12974             }
12975
12976           return TRUE;
12977         }
12978     }
12979
12980   /* A single member comdat group section may be discarded by a
12981      linkonce section and vice versa.  */
12982   if ((flags & SEC_GROUP) != 0)
12983     {
12984       asection *first = elf_next_in_group (sec);
12985
12986       if (first != NULL && elf_next_in_group (first) == first)
12987         /* Check this single member group against linkonce sections.  */
12988         for (l = already_linked_list->entry; l != NULL; l = l->next)
12989           if ((l->sec->flags & SEC_GROUP) == 0
12990               && bfd_elf_match_symbols_in_sections (l->sec, first, info))
12991             {
12992               first->output_section = bfd_abs_section_ptr;
12993               first->kept_section = l->sec;
12994               sec->output_section = bfd_abs_section_ptr;
12995               break;
12996             }
12997     }
12998   else
12999     /* Check this linkonce section against single member groups.  */
13000     for (l = already_linked_list->entry; l != NULL; l = l->next)
13001       if (l->sec->flags & SEC_GROUP)
13002         {
13003           asection *first = elf_next_in_group (l->sec);
13004
13005           if (first != NULL
13006               && elf_next_in_group (first) == first
13007               && bfd_elf_match_symbols_in_sections (first, sec, info))
13008             {
13009               sec->output_section = bfd_abs_section_ptr;
13010               sec->kept_section = first;
13011               break;
13012             }
13013         }
13014
13015   /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
13016      referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
13017      specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
13018      prefix) instead.  `.gnu.linkonce.r.*' were the `.rodata' part of its
13019      matching `.gnu.linkonce.t.*'.  If `.gnu.linkonce.r.F' is not discarded
13020      but its `.gnu.linkonce.t.F' is discarded means we chose one-only
13021      `.gnu.linkonce.t.F' section from a different bfd not requiring any
13022      `.gnu.linkonce.r.F'.  Thus `.gnu.linkonce.r.F' should be discarded.
13023      The reverse order cannot happen as there is never a bfd with only the
13024      `.gnu.linkonce.r.F' section.  The order of sections in a bfd does not
13025      matter as here were are looking only for cross-bfd sections.  */
13026
13027   if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
13028     for (l = already_linked_list->entry; l != NULL; l = l->next)
13029       if ((l->sec->flags & SEC_GROUP) == 0
13030           && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
13031         {
13032           if (abfd != l->sec->owner)
13033             sec->output_section = bfd_abs_section_ptr;
13034           break;
13035         }
13036
13037   /* This is the first section with this name.  Record it.  */
13038   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
13039     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
13040   return sec->output_section == bfd_abs_section_ptr;
13041 }
13042
13043 bfd_boolean
13044 _bfd_elf_common_definition (Elf_Internal_Sym *sym)
13045 {
13046   return sym->st_shndx == SHN_COMMON;
13047 }
13048
13049 unsigned int
13050 _bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
13051 {
13052   return SHN_COMMON;
13053 }
13054
13055 asection *
13056 _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
13057 {
13058   return bfd_com_section_ptr;
13059 }
13060
13061 bfd_vma
13062 _bfd_elf_default_got_elt_size (bfd *abfd,
13063                                struct bfd_link_info *info ATTRIBUTE_UNUSED,
13064                                struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
13065                                bfd *ibfd ATTRIBUTE_UNUSED,
13066                                unsigned long symndx ATTRIBUTE_UNUSED)
13067 {
13068   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13069   return bed->s->arch_size / 8;
13070 }
13071
13072 /* Routines to support the creation of dynamic relocs.  */
13073
13074 /* Returns the name of the dynamic reloc section associated with SEC.  */
13075
13076 static const char *
13077 get_dynamic_reloc_section_name (bfd *       abfd,
13078                                 asection *  sec,
13079                                 bfd_boolean is_rela)
13080 {
13081   char *name;
13082   const char *old_name = bfd_get_section_name (NULL, sec);
13083   const char *prefix = is_rela ? ".rela" : ".rel";
13084
13085   if (old_name == NULL)
13086     return NULL;
13087
13088   name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
13089   sprintf (name, "%s%s", prefix, old_name);
13090
13091   return name;
13092 }
13093
13094 /* Returns the dynamic reloc section associated with SEC.
13095    If necessary compute the name of the dynamic reloc section based
13096    on SEC's name (looked up in ABFD's string table) and the setting
13097    of IS_RELA.  */
13098
13099 asection *
13100 _bfd_elf_get_dynamic_reloc_section (bfd *       abfd,
13101                                     asection *  sec,
13102                                     bfd_boolean is_rela)
13103 {
13104   asection * reloc_sec = elf_section_data (sec)->sreloc;
13105
13106   if (reloc_sec == NULL)
13107     {
13108       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
13109
13110       if (name != NULL)
13111         {
13112           reloc_sec = bfd_get_linker_section (abfd, name);
13113
13114           if (reloc_sec != NULL)
13115             elf_section_data (sec)->sreloc = reloc_sec;
13116         }
13117     }
13118
13119   return reloc_sec;
13120 }
13121
13122 /* Returns the dynamic reloc section associated with SEC.  If the
13123    section does not exist it is created and attached to the DYNOBJ
13124    bfd and stored in the SRELOC field of SEC's elf_section_data
13125    structure.
13126
13127    ALIGNMENT is the alignment for the newly created section and
13128    IS_RELA defines whether the name should be .rela.<SEC's name>
13129    or .rel.<SEC's name>.  The section name is looked up in the
13130    string table associated with ABFD.  */
13131
13132 asection *
13133 _bfd_elf_make_dynamic_reloc_section (asection *         sec,
13134                                      bfd *              dynobj,
13135                                      unsigned int       alignment,
13136                                      bfd *              abfd,
13137                                      bfd_boolean        is_rela)
13138 {
13139   asection * reloc_sec = elf_section_data (sec)->sreloc;
13140
13141   if (reloc_sec == NULL)
13142     {
13143       const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
13144
13145       if (name == NULL)
13146         return NULL;
13147
13148       reloc_sec = bfd_get_linker_section (dynobj, name);
13149
13150       if (reloc_sec == NULL)
13151         {
13152           flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
13153                             | SEC_IN_MEMORY | SEC_LINKER_CREATED);
13154           if ((sec->flags & SEC_ALLOC) != 0)
13155             flags |= SEC_ALLOC | SEC_LOAD;
13156
13157           reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
13158           if (reloc_sec != NULL)
13159             {
13160               /* _bfd_elf_get_sec_type_attr chooses a section type by
13161                  name.  Override as it may be wrong, eg. for a user
13162                  section named "auto" we'll get ".relauto" which is
13163                  seen to be a .rela section.  */
13164               elf_section_type (reloc_sec) = is_rela ? SHT_RELA : SHT_REL;
13165               if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
13166                 reloc_sec = NULL;
13167             }
13168         }
13169
13170       elf_section_data (sec)->sreloc = reloc_sec;
13171     }
13172
13173   return reloc_sec;
13174 }
13175
13176 /* Copy the ELF symbol type and other attributes for a linker script
13177    assignment from HSRC to HDEST.  Generally this should be treated as
13178    if we found a strong non-dynamic definition for HDEST (except that
13179    ld ignores multiple definition errors).  */
13180 void
13181 _bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
13182                                      struct bfd_link_hash_entry *hdest,
13183                                      struct bfd_link_hash_entry *hsrc)
13184 {
13185   struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
13186   struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
13187   Elf_Internal_Sym isym;
13188
13189   ehdest->type = ehsrc->type;
13190   ehdest->target_internal = ehsrc->target_internal;
13191
13192   isym.st_other = ehsrc->other;
13193   elf_merge_st_other (abfd, ehdest, &isym, TRUE, FALSE);
13194 }
13195
13196 /* Append a RELA relocation REL to section S in BFD.  */
13197
13198 void
13199 elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
13200 {
13201   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13202   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
13203   BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
13204   bed->s->swap_reloca_out (abfd, rel, loc);
13205 }
13206
13207 /* Append a REL relocation REL to section S in BFD.  */
13208
13209 void
13210 elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
13211 {
13212   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13213   bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
13214   BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
13215   bed->s->swap_reloc_out (abfd, rel, loc);
13216 }