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